1. 27 Dec, 2016 4 commits
    • Terence Martin's avatar
      Include KenVector font · 1e2b7768
      Terence Martin authored
      This is freely available and my font of choice for nice looking
      monospace text.
      
      This font is set as the default font at a set size upon activation of
      the game scene, so that we don't have to keep swapping it into the
      context.
      1e2b7768
    • Terence Martin's avatar
      Make maze regeneration a debug key · ff660aec
      Terence Martin authored
      This should only happen while in debug mode, not during game mode. If
      you're trying to play a game to test and you press the key by mistake,
      it's the sad maker.
      ff660aec
    • Terence Martin's avatar
      Refactor final ball drop flag setting · 0d43c88a
      Terence Martin authored
      Instead of code needing to remeber to set the flag to some value, we
      now just make it a parameter to the drop function.
      0d43c88a
    • Terence Martin's avatar
      Fix drop ball bug introduced yesterday · 5e7cb088
      Terence Martin authored
      Yesterday I introduced some new code where we could detect a vanished
      ball but not trigger the notification that a ball drop was complete if
      the ball was being vanished due to it being a blocked ball.
      
      This was a bit flawed but unfortunatey I didn't notice it until it was
      too late. Basically it would not trigger for a ball that vanished
      because it got to the goal, because I used the wrong variable to track
      if the event should trigger or not (_droppedBall instead of
      _lastDroppedBall) and since _droppedBall gets cleared as soon as the
      vanish is called, such a ball is treated like a blocked ball.
      
      This has been fixed by using the correct variable.
      5e7cb088
  2. 26 Dec, 2016 6 commits
    • Terence Martin's avatar
      Add a new event for removing blocked ball · f3d4974f
      Terence Martin authored
      This adds in a new event that tells us when a blocked ball is being
      removed (happens once when the ball is told to vanish).
      
      This can be used to add blocked balls to the final score when that
      happens.
      f3d4974f
    • Terence Martin's avatar
      Tweak the ball drop event · e71e3ed4
      Terence Martin authored
      It no longer gets the boolean indication; this can be determiend by
      the caller based on the map position of the ball when it stopped.
      e71e3ed4
    • Terence Martin's avatar
      Fix bugs in blocked ball removal · b7594275
      Terence Martin authored
      This code went through several iterations, and so some things were not
      in the correct order (e.g. null test AFTER other tests).
      
      There was also an issue where a vanished ball would trigger the  ball
      drop complete method and then throw an error because there is no
      dropped ball, which I have currently patched away but this needs to be
      handled better.
      b7594275
    • Terence Martin's avatar
      Implement ball removal state · cacdab8a
      Terence Martin authored
      This hooks into the previously created method and will continuously
      try to remove blocked balls from the maze until the method tells it
      that there are no further balls to remove and all that were removed
      are now done with.
      
      We skip to this state when all plays are exhausted and then to the
      remove gray bricks state once this is completed.
      cacdab8a
    • Terence Martin's avatar
      Add a state for the new ball removal · 416c2951
      Terence Martin authored
      Adds in a new state for the purposes of handling when we are removing
      all blocked balls from the maze.
      416c2951
    • Terence Martin's avatar
      Include method to find and vanish blocked balls. · d9bc2a01
      Terence Martin authored
      This will be used during end game, just prior to vanishing all of the
      gray bricks and dropping the final balls.
      
      We want to be able to find all balls that have no chance of moving
      because they are either stopped on an arrow, or stopped on top of a
      ball waiting on an arrow, and then remove them away like the gray
      bricks do.
      d9bc2a01
  3. 25 Dec, 2016 5 commits
    • Terence Martin's avatar
      Hide players before final ball drop · cd982101
      Terence Martin authored
      Now when we enter the phase for the final ball drop, we make sure that
      the human and computer Player entities are hidden.
      cd982101
    • Terence Martin's avatar
      Fix possible premature state change · 05a53006
      Terence Martin authored
      The code for starting the next ball dropping in the final ball drop
      was incorrectly only checking to see if a ball is hidden without also
      checking to see if it's still actively hiding; fixed.
      05a53006
    • Terence Martin's avatar
      Clean up pushed ball marking · 366ba91e
      Terence Martin authored
      Now that we know the dropping of balls works for removing balls from
      the two player arrays, remove the debug logging.
      
      This was particulary annoying in that it would warn about pushing a
      ball not in one of those arrays when the final ball drops were going
      on.
      366ba91e
    • Terence Martin's avatar
      Fix final ball drop bug · c3da8655
      Terence Martin authored
      It turns out that the reason for this failure was entirely because I
      incorrectly stopped the search for balls to remove for being vanished
      one column short of the edge.
      
      This means that any final ball dropped in the last column of the maze
      will vanish but not be reaped. Thus the flag for the ball being done
      will never get set and everything stalls out.
      
      Whoops.
      c3da8655
    • Terence Martin's avatar
      Allow for the notion of no gray bricks · d4a3f817
      Terence Martin authored
      This is probably only of use when debugging, but as originally written
      the code would get stuck and not be able to enter the final ball drop
      if there are no gray bricks in the level because in that case there
      are none to reap.
      
      This is fixed by having the method that would normally remove such a
      brick return false if there are none left to remove; when this happens
      the code can immediately jump to the next phase.
      d4a3f817
  4. 24 Dec, 2016 5 commits
    • Terence Martin's avatar
      Put final ball drop under the control of states · 4b351244
      Terence Martin authored
      This puts the final ball drop into the control of the state machine;
      when we are in the final ball drop state, we select a ball and drop
      it, and then return to this state once the ball is done.
      
      There is currently a bug in this in which sometimes during the final
      ball drop a ball (that is blocked?) starts dropping, but the flag that
      says that it is done moving is not set.
      4b351244
    • Terence Martin's avatar
      Swap to final ball drop state when bricks gone · 1f9e5ca8
      Terence Martin authored
      Now the maze will invoke a method on the listener to tell it that all
      of the gray bricks have vanished out of the maze and have been reaped.
      
      The Game state uses this to transition into the final ball drop state,
      so that it can start the final ball drop of the round.
      1f9e5ca8
    • Terence Martin's avatar
      Switch to removing gray bricks when no moves left · 364531a8
      Terence Martin authored
      Now instead of swapping to the final ball drop state, we swap to the
      state in which we remove all gray bricks. We handle this state by
      using the state timer to slowly remove all of the gray bricks (telling
      them to vanish).
      
      Currently the code that reaps vanishing bricks is just spewing a
      console log every time it knows all of the gray bricks are gone.
      364531a8
    • Terence Martin's avatar
      Clarify the usage of currently defined states · c0cd298d
      Terence Martin authored
      Now that we have a better idea of the exact flow that we're going for,
      update the documentation comments for how all the states are used.
      c0cd298d
    • Terence Martin's avatar
      Remove Maze handling of removing gray bricks · beb4c0db
      Terence Martin authored
      The code in the Maze entity that tries to determine for itself if it
      should remove all gray bricks has been removed. Now no gray brick
      removal happens at all.
      beb4c0db
  5. 23 Dec, 2016 3 commits
    • Terence Martin's avatar
      Check that a play is possible before switching · 41bc2c35
      Terence Martin authored
      We can now check to ensure that if it is to be a player's turn, that
      there is a valid move for that player first. If not, we instead skip
      to the next player's turn.
      
      In the case that neither player has a valid move, we transition to the
      state that handles the final ball drop, although currently that's not
      how this state is handled.
      41bc2c35
    • Terence Martin's avatar
      Enhance state machine · 86cba188
      Terence Martin authored
      In order to handle some upcoming timing changes, make the state
      machine aware of how long it has been in the current state so that we
      can check it, knowing when to transition to another state or perform
      an event at a set interval.
      86cba188
    • Terence Martin's avatar
      Replace ball swapping with direct dropping · 1fffad2a
      Terence Martin authored
      Originally, the MazeContent class would store an array that contained
      the balls left to be played for both the human and computer player
      along with a variable that indicated which of the two were currently
      visible in the maze. We would then save the balls from the maze into
      one array and restore from the other.
      
      This actually causes a problem in that this gets the balls in the
      array out of sync with reality if you don't swap right away.
      
      For example, if the computer pushes a ball, then we check to see if
      the human can play a ball and cannot (all blocked), then we check to
      see if the computer can play to see if they can take another turn,
      since we did not save the ball state and the check happens from the
      array, it thinks it can play the ball it just played.
      
      If that ball is the only ball that can be played, this gets us into
      a situation where there is actually no move to be made.
      
      Now we instead just restore from an array to the maze, and every time
      a ball drops we check to see if it was in one of the arrays and remove
      it from there, thus always keeping everything in sync.
      1fffad2a
  6. 22 Dec, 2016 7 commits
    • Terence Martin's avatar
      Remove some old debug logs · a2de46c6
      Terence Martin authored
      This cleans up the console now that we know that everything works the
      way we want it to.
      a2de46c6
    • Terence Martin's avatar
      Add a "Just in case" check · 22e0f85d
      Terence Martin authored
      Just to ensure that nothing goes away, before we hide a ball while
      swapping we first remove it from the maze. This makes sure that the
      update loop can't hose it out from under us.
      
      I'm pretty sure this can't actually happen but I'm not 100% sure in
      what sequence the code runs if it is responding to input, so bette
      safe than sorry.
      22e0f85d
    • Terence Martin's avatar
      Re-enable the ability of the computer to take turn · 07e0ff3f
      Terence Martin authored
      Now that we have fixed the underlying issue, we can proceed with
      allowing the computer to take a turn again when it becomes its turn,
      since the balls are actually there now.
      
      The rest of the code should work as we want it to from this point, but
      I'll check anyway.
      07e0ff3f
    • Terence Martin's avatar
      Fix a bug; do not reap balls that are hidden · 52d8f9d0
      Terence Martin authored
      Yesterday's woes are caused by the fact that the update loop is
      constantly trying to reap hidden balls by marking them as dead.
      
      This is an issue because a dead ball will not render or update, which
      means that any computer balls that are hidden are almost immediately
      killed, causing them to no longer update even though they're still in
      the maze.
      
      Since we render all balls that are alive, this means that once the
      scene is set up with a set of live balls, it always looks like this
      even when the balls are swapped into the maze, because they won't
      overwrite themselves. Grrr.
      52d8f9d0
    • Terence Martin's avatar
      Include Question mark debugging key · 249f7e6e
      Terence Martin authored
      This adds in the question mark key during debugging mode to dump some
      information to the console of the maze entity currently at this maze
      position.
      249f7e6e
    • Terence Martin's avatar
      Turn off AI pushing of suggested ball · 05ae4a83
      Terence Martin authored
      The question mark key is now a player key, so it only works while it
      is the player's turn. Instead of playing the ball for the human
      player, it merely jumps the player to the suggested ball and turns to
      face the ball in order to set up playing.
      05ae4a83
    • Terence Martin's avatar
      Include some debug keys · b1a8a977
      Terence Martin authored
      For the purposes of debugging the bug from yesterday, introduce a key
      that allows us to switch directly to a set of balls.
      b1a8a977
  7. 21 Dec, 2016 6 commits
    • Terence Martin's avatar
      Include ball swapping at player switch time · d65471c1
      Terence Martin authored
      Now when the game state switches from one player to the other, the
      appropriate ball swap happens.
      
      This is curruently buggy for some reason; although the code is
      extremely straight forward, it somehow fails after the first time,
      which breaks everything and I can't figure out why just yet.
      
      This task will have to carry over into tomorrow.
      d65471c1
    • Terence Martin's avatar
      Update Maze end of game tracking · ecd041c3
      Terence Martin authored
      Now that we have a separate set of balls for the compute and for the
      player, we need better checking to determine if all balls have been
      played or not (since not all are visible).
      
      There is a method we can use for this, which makes the existing code
      much simpler.
      ecd041c3
    • Terence Martin's avatar
      Fix bug in MazeContents · f37c720c
      Terence Martin authored
      In favor of pasing a parameter to the swap function that swaps balls
      between the computer and the player that says if it should save the
      ball state or not, instead allow setting the visible ball state to
      clobber the existing ball row.
      
      This will be futher enhanced in the immediate future, but this causes
      a problem in that we want the player balls to be visible first, but
      because that is the default, the swap function swaps them and displays
      the wrong one.
      f37c720c
    • Terence Martin's avatar
      Fix ball visiblity during generation and swaps · 59c03a4a
      Terence Martin authored
      Now when balls are generated, they are generated hidden. Saving the
      balls to the appropriate array in the MazeContent class hides them and
      restoring them shows them again.
      
      This means that when we swap balls, we automatically hide and show
      everything as needed.
      59c03a4a
    • Terence Martin's avatar
      MazeGenerator now generates dual sets of balls · 05ae7e09
      Terence Martin authored
      When the maze is generated, we now fill out the generated balls into the
      appropriate arrays and then restore the default ones to the top row,
      which gets everything ready to go.
      05ae7e09
    • Terence Martin's avatar
      Enhance MazeContent class · c4a86a1a
      Terence Martin authored
      We now have two separate arrays that store the playable balls for each
      player, and have the ability to swap what set is currently visible in
      the top row of the maze.
      
      We can also query to see if a given player has a move or not, allowing
      us to skip the turn of a player if needed.
      c4a86a1a
  8. 20 Dec, 2016 4 commits
    • Terence Martin's avatar
      Remove superflous state · 983a442f
      Terence Martin authored
      As implemented we don't need a state for the AI to select its move;
      this happens as a part of the state in which it is taking its turn.
      983a442f
    • Terence Martin's avatar
      Use state logic to make a computer take a turn · c5d0a5ad
      Terence Martin authored
      This introduces the logic required to have the computer player take a
      turn. When this happens it will select a move, then walk to that
      location and push the appropriate ball.
      
      This lacks the change to the state where we know that the end of the
      round is at hand, so when this happens the two players just keep
      swapping back and forth doing nothing.
      c5d0a5ad
    • Terence Martin's avatar
      Proper visibility for Player entities · 2f3b5ae5
      Terence Martin authored
      We now track the switching of states so that when it is the player
      turn they are visible and when it is the computer turn they are
      visble, and the alternate entity visiblity is swapped when this
      happens.
      2f3b5ae5
    • Terence Martin's avatar
      Player entity can be visually turned off · 42e3654b
      Terence Martin authored
      This adds to the Player entity a visible property that allows us to
      turn off it's rendering. This will be used by the game scene to only
      display the human or computer player, but not both.
      42e3654b