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

@ -33,10 +33,9 @@ public sealed class LiveEntityCollisionBuilderTests
scale: 2f,
itemType: (uint)ItemType.Creature,
descriptionFlags: 0x28u);
var record = new LiveEntityRecord(spawn)
{
FinalPhysicsState = PhysicsStateFlags.Hidden | PhysicsStateFlags.Static,
};
var record = LiveEntityTestFixture.CreateExactProjectionRecord(spawn);
record.FinalPhysicsState =
PhysicsStateFlags.Hidden | PhysicsStateFlags.Static;
WorldEntity entity = Entity();
record.WorldEntity = entity;
var builder = Builder();
@ -65,7 +64,7 @@ public sealed class LiveEntityCollisionBuilderTests
var setup = new Setup();
setup.Parts.Add(part);
WorldSession.EntitySpawn spawn = Spawn(scale: 1.5f);
var record = new LiveEntityRecord(spawn);
var record = LiveEntityTestFixture.CreateExactProjectionRecord(spawn);
WorldEntity entity = Entity();
record.WorldEntity = entity;
var builder = new LiveEntityCollisionBuilder(
@ -90,7 +89,7 @@ public sealed class LiveEntityCollisionBuilderTests
var setup = new Setup();
setup.Parts.Add(basePart);
WorldSession.EntitySpawn spawn = Spawn(scale: 1f);
var record = new LiveEntityRecord(spawn);
var record = LiveEntityTestFixture.CreateExactProjectionRecord(spawn);
WorldEntity entity = Entity();
record.WorldEntity = entity;
var builder = new LiveEntityCollisionBuilder(
@ -115,7 +114,7 @@ public sealed class LiveEntityCollisionBuilderTests
var setup = new Setup();
setup.Parts.Add(basePart);
WorldSession.EntitySpawn spawn = Spawn(scale: 1f);
var record = new LiveEntityRecord(spawn);
var record = LiveEntityTestFixture.CreateExactProjectionRecord(spawn);
WorldEntity entity = Entity();
record.WorldEntity = entity;
var builder = new LiveEntityCollisionBuilder(
@ -145,7 +144,7 @@ public sealed class LiveEntityCollisionBuilderTests
var setup = new Setup();
setup.Parts.Add(basePart);
WorldSession.EntitySpawn spawn = Spawn(scale: 1f);
var record = new LiveEntityRecord(spawn);
var record = LiveEntityTestFixture.CreateExactProjectionRecord(spawn);
WorldEntity entity = Entity();
record.WorldEntity = entity;
var builder = new LiveEntityCollisionBuilder(
@ -178,7 +177,7 @@ public sealed class LiveEntityCollisionBuilderTests
var setup = new Setup();
setup.Parts.Add(basePart);
WorldSession.EntitySpawn spawn = Spawn(scale: 1f);
var record = new LiveEntityRecord(spawn);
var record = LiveEntityTestFixture.CreateExactProjectionRecord(spawn);
WorldEntity entity = Entity();
record.WorldEntity = entity;
var builder = new LiveEntityCollisionBuilder(
@ -243,7 +242,7 @@ public sealed class LiveEntityCollisionBuilderTests
var setup = new Setup();
setup.Parts.Add(basePart);
WorldSession.EntitySpawn spawn = Spawn(scale: 1f);
var record = new LiveEntityRecord(spawn);
var record = LiveEntityTestFixture.CreateExactProjectionRecord(spawn);
WorldEntity entity = Entity();
record.WorldEntity = entity;
var builder = new LiveEntityCollisionBuilder(
@ -277,7 +276,7 @@ public sealed class LiveEntityCollisionBuilderTests
public void ShapelessSetup_ProducesNoRegistration()
{
WorldSession.EntitySpawn spawn = Spawn(scale: 1f);
var record = new LiveEntityRecord(spawn);
var record = LiveEntityTestFixture.CreateExactProjectionRecord(spawn);
WorldEntity entity = Entity();
record.WorldEntity = entity;
@ -294,8 +293,9 @@ public sealed class LiveEntityCollisionBuilderTests
public void Build_RejectsDifferentRecordIncarnation()
{
WorldSession.EntitySpawn spawn = Spawn(scale: 1f);
var expected = new LiveEntityRecord(spawn);
var other = new LiveEntityRecord(spawn with { InstanceSequence = 2 });
var expected = LiveEntityTestFixture.CreateExactProjectionRecord(spawn);
var other = LiveEntityTestFixture.CreateExactProjectionRecord(
spawn with { InstanceSequence = 2 });
WorldEntity entity = Entity();
expected.WorldEntity = entity;
other.WorldEntity = entity;