fix(anim): remove frame swap — cursor now traverses all frames in reverse
ROOT CAUSE of "twitching" / stuck-on-frame-0 for reverse animations (TurnRight with negative dat framerate, StrafeRight, etc.): The frame swap (StartFrame↔EndFrame for negative speed) made EndFrame=0, and GetStartFramePosition returned (0+1)-eps = 0.999. The cursor oscillated between 0.0 and 0.999 — floor() of anything in [0,1) is always 0, so only frame 0 ever rendered. Fix: DON'T swap. Keep StartFrame=0, EndFrame=N-1 regardless of speed sign. GetStartFramePosition for negative speed returns (N-1+1)-eps ≈ N, so the cursor starts near the high end and counts down through ALL frames. The Advance loop's reverse boundary check uses StartFrame (the low value) correctly without the swap. Also strips diagnostic logging from AnimationSequencer and GameWindow. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
a57c5ccb76
commit
0335e317d2
2 changed files with 20 additions and 26 deletions
|
|
@ -456,13 +456,12 @@ public sealed class AnimationSequencerTests
|
|||
// CurrentMotion should record the original TurnLeft command.
|
||||
Assert.Equal(TurnLeft, seq.CurrentMotion);
|
||||
|
||||
// After FUN_005267E0 (multiply_framerate) swaps low↔high for negative speed:
|
||||
// StartFrame = 3 (was high), EndFrame = 0 (was low)
|
||||
// GetStartFramePosition for negative speed = (EndFrame + 1) - EPSILON = (0+1) - eps ≈ 0.99999.
|
||||
// The cursor starts just below frame 1 and counts DOWN toward EndFrame(=0).
|
||||
// Without swap: StartFrame=0, EndFrame=3 (original range preserved).
|
||||
// GetStartFramePosition for negative speed = (EndFrame+1)-eps = (3+1)-eps ≈ 3.99999.
|
||||
// The cursor starts near the HIGH end and counts DOWN toward StartFrame(=0).
|
||||
double pos = GetFramePosition(seq);
|
||||
Assert.True(pos > 0.9 && pos < 1.0,
|
||||
$"Expected framePosition near 0.99999 (reverse start near EndFrame+1) but got {pos}");
|
||||
Assert.True(pos > 3.9 && pos < 4.0,
|
||||
$"Expected framePosition near 3.99999 (reverse start near EndFrame+1) but got {pos}");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue