refactor(world): extract live projection mechanics

Move appearance rebinding, collision construction, default-pose resolution, local shadow ownership, and exact leave-world presentation into focused owners. Preserve retail parent ordering with staged validation, committed recovery, recursive attached-subtree withdrawal, and retryable exact teardown across parent, pickup, position, unwield, and pose-loss edges.

Co-Authored-By: OpenAI Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-21 16:17:03 +02:00
parent c87bac31a0
commit 69a2ca0c6d
26 changed files with 4172 additions and 430 deletions

View file

@ -208,7 +208,7 @@ public sealed class InboundPhysicsStateControllerTests
}
[Fact]
public void ParentEventWaitsForParent_ThenConsumesChildPositionOnce()
public void ParentEventWaitsForParent_ThenStagesTimestampUntilValidatedCommit()
{
var controller = new InboundPhysicsStateController();
controller.AcceptCreate(Spawn(
@ -219,7 +219,17 @@ public sealed class InboundPhysicsStateControllerTests
Assert.False(controller.TryApplyParent(update, out _));
controller.AcceptCreate(Spawn(
0x70000004u, 9, 1, 1, Position(0x0101FFFFu, 15f), 0x408u));
Assert.True(controller.TryApplyParent(update, out WorldSession.EntitySpawn attached));
Assert.True(controller.TryApplyParent(update, out WorldSession.EntitySpawn staged));
Assert.Null(staged.ParentGuid);
Assert.NotNull(staged.Position);
Assert.Equal((ushort)5, staged.PositionSequence);
Assert.True(controller.TryCommitParent(
update.ChildGuid,
update.ParentGuid,
update.ParentLocation,
update.PlacementId,
update.ChildPositionSequence,
out WorldSession.EntitySpawn attached));
Assert.Equal(0x70000004u, attached.ParentGuid);
Assert.Null(attached.Position);
Assert.False(controller.TryApplyParent(update, out _));