The goal for v0.3.0 was to implement line of sight working and get replays working
To implement line of sight I started with Path Blocker, Path Blockers being an object on the Game Board that requires the player to go around it. Getting one on the Game Board was easy enough but because I implemented the Path Blocker as another Game Piece, the AI started repeatedly attacking because it spawned closer to the Blocker then to the player.
That was a fairly easy thing to fix by ensuring when the AI picked a target it didn’t pick any Path Blockers.
Path Blockers ☑
Next up was the replay system. I had to create a Game Repository that saved game data and actions. As well as a new scene with a separate game setup code that loaded the new save data. While this took longer then expected, I had to change my command objects so they would serialize correctly, the code flow shaped up as expected.
Replay System ☑
Back to line of sight. To implement light of sight I added the concept of a Visibility Map. The Visibility Map encapsulates all the logic for figuring out what tiles are visible from a given Position. Then I made the map available from the game board so that Tiles and Game Pieces could get their visibility from the Gameboard. It is up to the individual Tiles/Game Piece to decided how to render given their visibility. Their is room for improvement. I don’t like how dark the tiles become when they are not visible and sometimes a tiles should be less visible. Moving is also a problem, the Visibility Map for your destination tile becomes active as soon as you start moving. I’d like the Visibility Map to change as you move, so you
have a better sense of movement. I’ll save fixes these issues for a polish sprint.
Line of Sight ☑
The last piece of line of sight was smoke. I plan to use smoke as both an environmental hazard and as a way to let player disengage from an enemy during combat. This sprint was focused on feature development, so I didn’t add any animation to the smoke grenade throw and focused on how smoke affects line of sight. I added a Smoke list to each tile. Then because the tile is responsible for calculating its own visibility, only the Tile needed to be aware of the smoke. I made a small change to how line of sight was calculated in the visibility map, I changed the starting value from 0 to the visibility index of your tile. That way the smoke on your tile affects your line of sight.
I made sure I tested this with the replay system. Initially the smoke didn’t render because I was not updating the logical game board during the replay. So, I refactored the replay to ensure it updated the logical game board as well as the visual game board.
Smoke ☑