My expected behaviour of trackEntry.Reverse: I would want reverse animations to act exactly like a normal animation but now all keyframes are flipped/inverted, so I don’t have to set up duplicate animations.
But in the current implementation they don’t fire events, and they seem to cause issues on other tracks.
For example: If a top layer has a "shoot" animation (that gets looped), and we walk reversed and forward, if the shooting loop is played, some of its animations gets reversed and some not (when we no longer even walk backwards/reversed). Really messy. Should I just: 1. lerp the trackEntry.TrackTime in reverse, or should I create duplicate animations?

var trackEntry = animationState.SetAnimation(baseLayer, animations.move, true);
trackEntry.Reverse = character.IsMovingBackwards;

Related Discussions
...

The current implementation of trackEntry.Reverse does have limitations, such as not firing events and causing issues with other tracks. This is because the AnimationState API is not designed to handle backward playback seamlessly. Given these constraints, you have two main options:

  1. Lerp the trackEntry.TrackTime in reverse: This approach involves manually controlling the animation time to play it backward. While this can work, it may still lead to complications, especially with event timelines and mixing between animations.

  2. Create duplicate animations: This is the recommended approach. By duplicating your animations and reversing the keyframes in the Spine Editor, you can ensure that all events and transitions work correctly. This method avoids the complexities and potential issues associated with reversing animations at runtime.

To reverse keyframes in the Spine Editor:

  • Copy the keys you need and move them all to the right.
  • Drag a box around them and drag the left side of the box so it is in front of the right side of the box, inverting the animation.
  • Move the keys into position.

This method ensures that your animations behave as expected without runtime complications.