refactor(runtime): acknowledge exact world host projections

This commit is contained in:
Erik 2026-07-26 18:27:41 +02:00
parent 73d0b54e38
commit 18d17d8bb1
17 changed files with 1677 additions and 72 deletions

View file

@ -144,6 +144,39 @@ public sealed class WorldGenerationQuiescenceTests
Assert.Equal(inventoryGuid, selection.SelectedObjectId);
}
[Fact]
public void ReentrantBeginDuringAudioResume_ReconcilesToNewestEdge()
{
var transit = new RuntimeWorldTransitState();
var world = new GpuWorldState(
availability: new WorldGenerationAvailabilityState(transit));
var audio = new ReentrantAudioQuiescence();
var quiescence = new WorldGenerationQuiescence(
new SelectionState(),
world,
_ => null,
audio);
var edge = new WorldGenerationQuiescenceEdge(
ShouldApply: true,
ClearWorldSelection: false);
quiescence.CommitBegin(edge);
audio.OnResume = () =>
{
audio.OnResume = null;
quiescence.CommitBegin(edge);
};
quiescence.ObserveReleased();
Assert.Equal(2, audio.SuspendCalls);
Assert.Equal(1, audio.ResumeCalls);
quiescence.ObserveReleased();
Assert.Equal(2, audio.SuspendCalls);
Assert.Equal(2, audio.ResumeCalls);
}
private static RuntimeDestinationReadiness Ready(
long generation,
uint destinationCell) =>
@ -178,4 +211,19 @@ public sealed class WorldGenerationQuiescenceTests
public void SuspendWorldAudio() => SuspendCalls++;
public void ResumeWorldAudio() => ResumeCalls++;
}
private sealed class ReentrantAudioQuiescence : IWorldAudioQuiescence
{
public int SuspendCalls { get; private set; }
public int ResumeCalls { get; private set; }
public Action? OnResume { get; set; }
public void SuspendWorldAudio() => SuspendCalls++;
public void ResumeWorldAudio()
{
ResumeCalls++;
OnResume?.Invoke();
}
}
}