Move placed proxy from remote-player snapshot
Enable game-thread proxy actor movement driven by a copied remote-player snapshot and update related networking/validation, docs, and test client. - Plugin: add F4T::ProxyActorController::Update() (alias UpdateSafetyTest preserved) and implement remote-state-driven movement for the single placed proxy (F4TProxyRemotePlayer01REF) in F4TTestCell01. Selects lowest available playerId, validates same-cell/worldspace for movement, and caches represented playerId. Adds helper functions (ParseHexFormId, IsRemotePlayerInSameLocation, SelectRemotePlayerToRepresent, MoveProxyToRemotePlayer) and improved throttled logging. - Networking: tighten transform packet required-field checking (requires type, playerId, x, y, z, angleZ, cellId), add GetMissingRequiredTransformField, make movementType/worldspaceId/clientTime/serverTime optional with sensible defaults, and switch LogThrottledWarning to accept string_view. - main.cpp: call ProxyActorController::Update on game-thread tasks. - fake_client.py: mirror new packet validation and provide defaults for optional fields. - Docs/dev-log/protocol/setup: update architecture, dev log, protocol, and setup notes to describe the single-proxy remote-state milestone, required packet fields, and testing checklist. This change keeps networking thread limited to parsing/updating plain remote-player state and moves all actor access to the game-thread controller. Dynamic spawning, multiple proxies, and interpolation remain out of scope.
This commit is contained in:
+18
-3
@@ -21,6 +21,11 @@ remote `playerId`, and removes remote state when disconnect packets arrive.
|
||||
`server/fake_client.py` remains a lightweight test receiver for the same packet
|
||||
lifecycle.
|
||||
|
||||
The plugin's game-thread proxy actor controller can now read a copied snapshot
|
||||
of this remote-player state and move the single placed test proxy actor
|
||||
`F4TProxyRemotePlayer01REF` in `F4TTestCell01`. The networking thread still does
|
||||
not touch Fallout 4 actors or references.
|
||||
|
||||
## Current Remote Player State Model
|
||||
|
||||
The plugin and fake client store remote players by `playerId`.
|
||||
@@ -41,7 +46,14 @@ serverTime
|
||||
lastReceivedLocalTime
|
||||
```
|
||||
|
||||
Required transform packet fields are `type`, `playerId`, `x`, `y`, `z`,
|
||||
`angleZ`, and `cellId`. `worldspaceId`, `movementType`, `clientTime`, and
|
||||
`serverTime` are optional; interior test cells may omit `worldspaceId`.
|
||||
|
||||
This model proves the data shape and lifecycle before spawning remote actors.
|
||||
For the current visual milestone, the controller represents only one remote
|
||||
player and chooses the lowest available `playerId` if more than one remote
|
||||
player exists.
|
||||
|
||||
## Implemented
|
||||
|
||||
@@ -58,13 +70,16 @@ This model proves the data shape and lifecycle before spawning remote actors.
|
||||
- The fake client stores remote player state by `playerId`.
|
||||
- The server broadcasts `disconnect` packets.
|
||||
- The fake client removes disconnected remote players from its state table.
|
||||
- The plugin moves the single placed test proxy actor from a thread-safe
|
||||
remote-player snapshot on the game-thread update path.
|
||||
|
||||
No Fallout 4 remote actor is spawned yet.
|
||||
No Fallout 4 remote actor is dynamically spawned yet.
|
||||
|
||||
## Planned Later
|
||||
|
||||
- Add interpolation or smoothing after plugin-side state exists.
|
||||
- Spawn and move remote actors only after the receive loop is stable.
|
||||
- Add interpolation or smoothing after snap movement is proven stable.
|
||||
- Add one proxy actor per remote player after the single-proxy test is stable.
|
||||
- Dynamically spawn remote actors only after placed-proxy movement is stable.
|
||||
|
||||
## Not Required Yet
|
||||
|
||||
|
||||
Reference in New Issue
Block a user