feat(physics): S2 chunk 4 - movement publishes from the transition's cells; children inherit at registration
Movement: CommitSetPosition's RefreshPositionRows/ReplacePositionRows and the staged apply publish the retail render product from the exact cell list collision just used, the transition's cell_array retail feeds add_shadows_to_cells in CPhysicsObj::SetPositionInternal @0x00515330 (pseudo-C 283526-283539); the separate move-path bbox recompute is deleted. calc_cross_cells @0x00515230 stays the distinct full-recompute path (PhysicsShadowCommitAction.Recalculate). Children (Contract B recursion): ShadowObjectRegistry.AttachChild/DetachChild give an attached object the root's current cells as part entries only, republished whenever the root's array changes, detached at withdrawal and cascaded from the root's Deregister; nested attachment resolves to the root with a bounded, cycle-safe chain. EquippedChildRenderController attaches at realization (FromSetupRenderParts over the child's Setup) and detaches at its single removal funnel. WalkProductionWorldData's dynamic sweep reads TryGetRetailCellArray directly; the 64-hop parent-chain walk and its FindParentLocalId plumbing are deleted. CollisionWorldState.Clear now also clears the retail products. Gates (implementer's isolated worktree at identical content): Release build 0/0; Core 4,970/4,970; App hermetic 6,761/6,761; targeted walk/child/live-entity/placement/comparator 166/166; Runtime 1,884/1,884. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
706fc49397
commit
75ea269d35
14 changed files with 1072 additions and 179 deletions
|
|
@ -127,6 +127,17 @@ internal sealed class CollisionWorldState
|
|||
ShadowEntityRetailCellArrayRoutes { get; } = new();
|
||||
internal Dictionary<uint, List<RetailPartEntry>> RetailPartEntriesByCell { get; } = new();
|
||||
|
||||
// ── Campaign OVERHAUL S2 chunk 4 ────────────────────────────────────────
|
||||
// Retail's add_shadows_to_cells (0x00514ae0) child-inheritance recursion
|
||||
// (oh1-construction-landscape-contract.md Contract B): an attached
|
||||
// projection (equipped weapon/shield/ammunition) owns no independent
|
||||
// collision shapes and inherits its root's retail CELLARRAY instead of
|
||||
// flooding its own. See ShadowObjectRegistry.AttachChild/DetachChild.
|
||||
internal Dictionary<uint, uint> ShadowChildParent { get; } = new();
|
||||
internal Dictionary<uint, List<uint>> ShadowParentChildren { get; } = new();
|
||||
internal Dictionary<uint, IReadOnlyList<ShadowShape>>
|
||||
ShadowChildPartArrays { get; } = new();
|
||||
|
||||
// ── O1 per-prefix installed-key ledgers ────────────────────────────────
|
||||
// Every mutation of the five landblock-scoped world maps goes through the
|
||||
// typed helpers below so these ledgers stay exact. The seal's landblock-
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue