refactor(app): key live projections by runtime identity

Move materialized live-object sidecars and presentation worksets to exact RuntimeEntityKey ownership. Runtime remains the only GUID/incarnation/local-ID authority while hydration, animation, effects, lights, equipped children, renderer resources, visibility, liveness, and teardown resolve exact projection identities. Preserve synchronous callbacks, local-ID allocation order, and current rendering behavior.
This commit is contained in:
Erik 2026-07-25 21:50:58 +02:00
parent e18df84437
commit 420e5eea70
73 changed files with 2939 additions and 1715 deletions

View file

@ -1089,13 +1089,14 @@ public sealed class RemoteTeleportControllerTests
const uint sourceCell = 0xA9B40039u;
const uint destinationCell = 0xAAB40001u;
RemoteTeleportController? controller = null;
LiveEntityRecord? owner = null;
bool cleanupAfterFailureRan = false;
var resources = new DelegateLiveEntityResourceLifecycle(
_ => { },
_ => LiveEntityTeardown.Run(
[
() => throw new InvalidOperationException("effect teardown failed"),
() => controller!.Forget(guid),
() => controller!.Forget(owner!),
() => cleanupAfterFailureRan = true,
]));
var spatial = new GpuWorldState();
@ -1117,6 +1118,7 @@ public sealed class RemoteTeleportControllerTests
var remote = new AcDream.App.Physics.RemoteMotion();
remote.Body.SnapToCell(sourceCell, entity.Position, entity.Position);
live.SetRemoteMotionRuntime(guid, remote);
Assert.True(live.TryGetRecord(guid, out owner));
controller = new RemoteTeleportController(
BuildEngine(includeDestination: false),
live,