feat(net): port retail physics spawn and event timestamps
Parse the complete PhysicsDesc plus F754/F755 packets, correct every PhysicsState bit, and gate all nine retail update channels with generation-safe immutable snapshots. Preserve ForcePosition, teleport, placement, velocity, parent, pickup, delete, and same-generation CreateObject ordering from the named client. Separate accepted logical lifecycle notifications from retained UI qualities, make GUID replacement and session reset clear every projection exactly once, and add packet, wraparound, malformed-input, parent FIFO, canonical-position, reconnect, and GUID-reuse conformance coverage. Co-Authored-By: Codex <noreply@openai.com>
This commit is contained in:
parent
d53fe30ffe
commit
8a5d77f7f4
50 changed files with 3809 additions and 649 deletions
|
|
@ -188,7 +188,8 @@ src/AcDream.App/
|
|||
├── Net/
|
||||
│ └── LiveSessionController.cs # owns WorldSession lifecycle, login/handshake, reconnect
|
||||
├── World/
|
||||
│ └── LiveEntityRuntime.cs # owns per-entity state dicts + ServerGuid↔entity.Id translation
|
||||
│ ├── InboundPhysicsStateController.cs # shipped: timestamps + accepted spawn snapshots
|
||||
│ └── LiveEntityRuntime.cs # target: full lifecycle + ServerGuid↔entity.Id translation
|
||||
├── Interaction/
|
||||
│ └── SelectionInteractionController.cs # owns WorldPicker, selection state, Use/PickUp dispatch
|
||||
├── Streaming/ # LandblockStreamer + immutable LandblockBuild completion
|
||||
|
|
@ -225,6 +226,17 @@ The eventual `GameEntity` aggregation (target state described in
|
|||
Until then, the parallel-dicts problem is bounded inside one class
|
||||
instead of spread across `GameWindow`.
|
||||
|
||||
`InboundPhysicsStateController` is the first shipped slice of that boundary:
|
||||
it owns the nine-channel retail timestamp gates and the latest accepted
|
||||
immutable CreateObject snapshot. It deliberately owns no renderer adapter,
|
||||
local entity ID, physics body, animation, effect, or spatial bucket; those
|
||||
move together in the `LiveEntityRuntime` extraction.
|
||||
|
||||
`ParentAttachmentState` is a focused interim pending queue for ParentEvent:
|
||||
it keys unresolved relations by child and parent generation, distinguishes
|
||||
atomic incarnation replacement from true deletion, and migrates into
|
||||
`LiveEntityRuntime` with the general mixed packet queue.
|
||||
|
||||
---
|
||||
|
||||
## 4. Extraction sequence — safest first
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue