fix(physics): #31 update outdoor cell id during transition movement

This commit is contained in:
Erik 2026-04-29 22:00:30 +02:00
parent 3be0c8b7c7
commit 9fea9b13ad
5 changed files with 109 additions and 29 deletions

View file

@ -177,33 +177,6 @@ missing is the plugin-API surface.
---
## #31 — Low outdoor cell id can go stale after transition movement
**Status:** OPEN
**Severity:** HIGH
**Filed:** 2026-04-29
**Component:** physics / cells / movement
**Description:** Local movement can cross 24m outdoor cell boundaries while
the low cell id used for outbound full cell id remains stale. This can combine
correct landblock high bits with the wrong outdoor-cell low byte.
**Root cause / status:** Tracked under Phase L.2e. `CELLARRAY`,
`CObjCell::find_cell_list`, adjacent-cell checks, and low-cell ownership are
not fully ported.
**Files:** `src/AcDream.Core/Physics/PhysicsEngine.cs`,
`src/AcDream.Core/Physics/TransitionTypes.cs`,
`src/AcDream.App/Input/PlayerMovementController.cs`.
**Research:** `docs/plans/2026-04-29-movement-collision-conformance.md`.
**Acceptance:** Crossing a 24m outdoor-cell seam updates the local resolved
cell id and the outbound full cell id. Tests cover intra-landblock seams and
landblock-edge seams.
---
## #32 — Retail edge-slide / cliff-slide / precipice-slide incomplete
**Status:** OPEN
@ -440,6 +413,18 @@ If hypothesis (a) is correct, this issue effectively rolls into **#28** — the
# Recently closed
## #31 — [DONE 2026-04-29] Low outdoor cell id can go stale after transition movement
**Closed:** 2026-04-29
**Commit:** `(this commit)`
**Resolution:** `ResolveWithTransition` now refreshes outdoor cell ownership
from the resolved world position while the sphere sweep runs. Intra-landblock
24m outdoor seams update the low cell id, and full-cell callers crossing a
landblock seam get the destination landblock prefix plus the correct outdoor
low cell.
---
## #34 — [DONE 2026-04-29] Missing routine local/server correction diagnostic
**Closed:** 2026-04-29