From 1454eab75aa711962205d248686c87f27d41ff20 Mon Sep 17 00:00:00 2001 From: Erik Date: Sun, 24 May 2026 15:14:20 +0200 Subject: [PATCH] feat(phys): ShadowEntry adds LocalPosition + LocalRotation Local-to-entity transform fields, default-valued so existing single-shape callers keep working unchanged. RegisterMultiPart (next commit) populates them per part so UpdatePosition can rebuild the entry's world Position + Rotation when the entity moves. All 24 existing ShadowObjectRegistry tests pass (including the 2 new slice 1 tests from b49ed90). Co-Authored-By: Claude Opus 4.7 (1M context) --- src/AcDream.Core/Physics/ShadowObjectRegistry.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/AcDream.Core/Physics/ShadowObjectRegistry.cs b/src/AcDream.Core/Physics/ShadowObjectRegistry.cs index 8a4518a..e0425d8 100644 --- a/src/AcDream.Core/Physics/ShadowObjectRegistry.cs +++ b/src/AcDream.Core/Physics/ShadowObjectRegistry.cs @@ -431,4 +431,11 @@ public readonly record struct ShadowEntry( /// from PWD._bitfield at CreateObject time via /// . /// - EntityCollisionFlags Flags = EntityCollisionFlags.None); + EntityCollisionFlags Flags = EntityCollisionFlags.None, + // A6.P4 door fix (2026-05-24): local-to-entity transform for multi-part + // entities. ShadowObjectRegistry.UpdatePosition uses these to rebuild + // Position/Rotation when the entity moves. Single-shape callers leave + // these at default (zero offset, identity rotation) — equivalent to + // the shape sitting at the entity's origin. + Vector3 LocalPosition = default, + Quaternion LocalRotation = default);