|The character now backtracks when overshooting the intended destination on a slippery surface.|
tl;dr: I refactored how walking navigation is calculated, and I added better support for getting to the intended destination on slippery surfaces.
What happened last week?
- I refactored how walking navigation is calculated.
- I added support for conditionally decelerating at the end of a walking navigation.
- I added support for turning around and backtracking when overshooting the intended destination on a slippery surface.
- Refactor IntraSurfaceCalculator:
- Refactor stopping-distance calculations.
- Add support for calculating stopping-distance with some initial backward deceleration.
- Add support for pressing backwards on intra-surface edges, if the stopping distance would be too great with only forward-acceleration.
- Update IntraSurfaceEdge to include stopping deceleration in the duration.
- Update IntraSurfaceEdge to not be ended until after decelerating rather than immediately when releasing.
- Update IntraSurfaceEdge to support pressing backward, against the direction of motion.
- Add a check for whether there is enough time to decelerate to zero in an intra-surface edge.
- Fix various issues relating to the recent intra-surface-edge refactor.
- Fix an issue with intra-surface-edge trajectory positions being clamped such that movement can't move past the start point in the direction opposite the end point.
- Clamp intra-surface-edge trajectory positions to the bounds of the surface, and discard any duplicate positions from this clamping.
- Update intra-surface-edge and move-to-collinear-neighbor-surface-edge start velocities to match previous-edge end velocities.
- Add an indicator for whether an intra-surface-edge should include deceleration at the end.
- Fix duration and end-velocity calculations for intra-surface-edges when not including deceleration at end.
- Fix issue with IntraSurfaceEdge.includes_deceleration_at_end not being set sometimes.
- Start creating a new function for backtracking to the intended destination point when end-velocity would otherwise send the character past the destination.
- Remove legacy logic for dynamically adjusting navigation at the end of a path in order to correct for discrete-interval-run-time-error and ensure the character isn't leaning too-far past the end of a surface.
- Update calculate_duration_for_displacement to support starting with max-speed but decelerating.
- Update calculate_velocity_for_displacement to support starting with max-speed but decelerating.
- Fix an issue with `is_dashing` checks causing errors when the character can't dash.
- Fix a typo with run-time velocity updates using the wrong parameters for gravity.
- Fix an issue with over-counting jumps, which prevented correct gravity and double-jumps from working.
- Clean-up how wall-vs-left-wall/right-wall and surface-vs-floor/ceiling/wall state is maintained in CharacterSurfaceState.
- Add new surface-state helper functions for checking whether we just transitioned to a neighbor surface.
- Update sync_state_for_surface_grab to consider the previous state when updating just_(touched|grabbed)_(surface) state.
- Update SurfaceNavigator logging to consider surface-state syncing verbose when the mismatch is only across the cusp between neighbor collinear surfaces.
- Fix an issue with the animator flickering to face the wrong direction when crossing neighbor collinear surfaces.
- Fix an issue with the cat-animator hip sprite rendering behind the torso sprite.
- Finish some remaining details for slippery surface navigation.
- Fix the navigator's ability to always calculate a valid fall-from-air edge.
- Fix some issues with Behaviors.