Fix incremental menu animation presentation

This commit is contained in:
gamer147
2026-07-30 11:04:29 -04:00
parent 56d60c0625
commit 2ba0870967
10 changed files with 171 additions and 39 deletions

View File

@@ -22,6 +22,21 @@ public class TimedCallbackOpsTests
}
}
private sealed class NonPresentingClockHost : RecordingHost
{
private long _now;
public override long InputClockMilliseconds => _now;
public override void Sleep(long duration)
=> throw new InvalidOperationException("Timed callback pacing used presentation-capable sleep.");
public override void WaitForTimedCallbackDeadline(long duration)
{
TimedCallbackWaitDurations.Add(duration);
_now += duration;
}
}
private static Script BuildTwoEventSequence()
=> ScriptAssembler.Assemble(Table, "TIMED_CALLBACKS",
new List<(int, Operand[])>
@@ -48,6 +63,7 @@ public class TimedCallbackOpsTests
Assert.Equal(2, vm.Globals[0x100]);
Assert.Equal(0, vm.Globals.GetValueOrDefault(0x101));
Assert.Equal(new long[] { 10, 10 }, host.SleptDurations);
Assert.Equal(new long[] { 10, 10 }, host.TimedCallbackWaitDurations);
}
[Fact]
@@ -62,5 +78,19 @@ public class TimedCallbackOpsTests
Assert.Equal(1, vm.Globals[0x100]);
Assert.Equal(1, vm.Globals[0x101]);
Assert.Equal(new long[] { 10 }, host.SleptDurations);
Assert.Equal(new long[] { 10 }, host.TimedCallbackWaitDurations);
}
[Fact]
public void SequencePacingDoesNotUsePresentationCapableScriptSleep()
{
var host = new NonPresentingClockHost();
var vm = new VirtualMachine(BuildTwoEventSequence(), Table, host);
vm.Run();
Assert.Equal("exit", vm.HaltReason);
Assert.Equal(new long[] { 10, 10 }, host.TimedCallbackWaitDurations);
Assert.Empty(host.SleptDurations);
}
}