tl;dr: I added logic for tracking music beats and annotating them along navigation paths, and automatic camera pan and zoom when dragging near the screen edges.
What happened last week?
- Add automatic camera pan+zoom when the user is dragging near the edges of the screen during navigation preselection.
- This makes it a lot easier to see things and navigate in the level!
- Add music beat tracking and draw hash marks along navigation paths to show where the player will be on the beats.
- I've toyed with the idea of some sort of rhythm or timing based gameplay a lot before, and I think it should be pretty easy to use my Surfacer tool for this.
- This feature I've added now just shows future player positions relative to the music beats, but I can use very similar logic to track the timing of other significant events.
- It should even be easy for me to modify the timing of the player's trajectory in order to coincide with other significant events.
- Finish implementing camera pan and zoom during navigation preselection.
- This involves auto-zooming and panning the camera out when the user is dragging close to the edge of the game region.
- Implement the main logic for calculating pan and zoom amounts per frame depending on the drag position.
- Fix an issue with my camera bounds calculations.
- Fix camera pan/zoom to use set_interval instead of throttle, so the camera continues to move even when the pointer hasn't moved.
- Adjust camera pan/zoom control parameters.
- Fix a bug affecting the duration of the camera pan/zoom control. The new tween applied at each interval was starting from the current value and should have been starting from the previous target value.
- Fix a bug relating to selection-nearby-positions-along-surfaces sometimes being too close to concave neighbor surfaces, which could lead to very broken paths into walls.
- Add sound effects for slow-motion start/end and navigation selection success/fail.
- Add a utility function for prepending a second array onto the front of a first array.
- Add logic for encoding the tempo and meter of each piece of music.
- Add logic for playing a sort of tick-tock background track during slow-motion mode, and align the tick-tocks to the beat of the background music that has been slowed.
- Add logic for rendering hash marks along navigation path annotations during slow-motion-mode, and align the hash marks with where the player would be on the beats of the background music.
- Add logic to track the current music beat state during each frame.
- Add logic to draw hash marks along navigator trajectories to indicate where the player will be during the beats of the music.
- Rename "Handler" classes to "Controller" and "Listener".
- Update the player-recent-movement-annotator to show where beats occur during player movement.
- Offset beat hashes in annotations by the path start time.
- Smooth-out some remaining kinks with my new beat annotations.
- It looks like my beat predictions are offset very slightly from where they should be.
- I need to update the path trajectory beats to account for any extra time scaling that is in effect.
- Smooth-out some other small issues with navigation start/end state possibly being off by a frame from what is expected.