This is Week 6&7 of an 8 week game dev. A link to blog post covering this weeks development. Android beta at https://play.google.com/apps/testing/com.ryuuguu.FlipTileRunner . iPhone Beta is available on TestFlight at
This weeks goal was monetization code and UI, the reality was feature creep took up most of my time. Not going to make 8 weeks, more like 9 or 10.
It started with a simple change. Cross tiles would look better if one track arched up and the other arched down. That did look cool I thought, but with the straight on orthographic camera, you can only see the arch when the tile is flipping. OK, I'll just move the camera to the side a bit and turn it back towards the board. Not really working. Instead, I'll leave the camera still and angle the board. Yeah, that looks good. But now a rectangular board does not fit on the screen. So I need a new board generator that adds all tiles that are on screen and only tiles that are on screen. This broke board shifting, destroying tiles at the bottom only, and adding tiles as a row at the top. It also broke bouncing at the top. I have not fixed this yet because what is top is not clear. Instead, I made it bounce everywhere for now. I will try to find a better solution next week. It also broke empty tiles as an obstacle. I also made the board angle and size dependent on the theme of the leader. Since my little feature of arches had already taken over the week, I might as well finish it. So I made the direction of the board shifting a variable and added an indicator at the top. I also explored generating tracks at runtime using Mega-Shapes. An asset for generating tracks from splines and lots of control from code. I ran out of time before this second feature creep could get very far.
I did get some work done on a diamond currency system. You can collect diamonds and buy new random characters. A new board layout with 3 characters on screen at once for choosing a random character. I wanted to show the new character on the party selection screen. But working with setting UI controls at runtime from code is still a pain. I go it to work but needed lots workarounds for cases like objects awaking the first time and clicking on them from code in the same frame. I ended up making sure stuff had woken up before trying to click on it from code.
This needed a new messaging system to display messages to the player. The messages above are showing, gift in 4 seconds, the "Get Gift" message with button, 11 diamonds to go (until you can spend them) the "Get Character" message and button. You get free diamonds every 4 hours of real time. This means tracking real time during and between plays. C# sucks saving timestamps. If you want timestamps to always work you want them all in the same base time, say UTC. MS documents show you how to convert to and from ISO 8601 are wrong they read the ISO string for UTC and ignore the Z so treat it as local timezone. Use "r" format. it uses "GMT" in the string, not Z, and DateTime.parse handles this properly. All your DateTime objects will kinda get UTC. Lost about 5 hours because I assumed MS docs would not be buggy and almost every google search just told me to do the same thing as the MS docs.
Unity 2018.3 has nested prefabs and variants which is nice for making a skinnable flexible UI. This lets you make more component prefabs such as a TextMeshPro prefab so the sprite asset only needs to be added once. Or my green outline on buttons - so I can change all buttons at once.
I wish I had realized this week one. I was using crtl-D out habit to copy prefabs for the power cooldowns. Crtl-D does not make a variant just an unlinked copy. Variants inherit from their base prefab so it makes changing all power cooldowns much easier. So I spent time on this also.
Please try out the game on TestFlight, feedback is always welcome.