Throttle transform sends and smooth proxy movement
Separate normal transform send cadence from movement logging and improve proxy smoothing. Key changes: - Polling/send logic (plugin/src/main.cpp): introduced distinct send vs log intervals (100ms send, 1s log), lowered send thresholds (≈3.0 units position, 0.02 rad rotation), renamed/clarified functions, and added special movement types (worldspace_change, cell_change, teleport) that bypass the send gate and are logged immediately. Normal movement targets roughly 10 Hz while moving to avoid packet-per-frame traffic. - Proxy controller (plugin/src/F4TProxyActorController.cpp): tuned proxy position lerp alpha to 0.15 for smoother motion, renamed movement-interval variables for clarity, and removed the generic per-update movement gate so normal proxy visual updates are applied each game update while only the safety-offset path is throttled. - Documentation updates (docs/architecture.md, docs/dev-log.md, protocol/player-sync.md): describe the new send/log separation, cadence and thresholds, smoothing behavior, and recorded dev-log about smoothing tests and results. These changes reduce network noise, produce smoother remote visuals, and keep readable local movement logs while preserving immediate sends for large/categorical movement changes.
This commit is contained in:
+23
-3
@@ -12,8 +12,11 @@ Plugin Remote Player State
|
||||
```
|
||||
|
||||
The Fallout 4 plugin currently reads the local player's transform and sends it
|
||||
to the local Python server. The server assigns a `playerId`, adds `serverTime`,
|
||||
and broadcasts transform packets to other connected clients.
|
||||
to the local Python server. Normal movement sends are throttled separately from
|
||||
local movement logs: while the player is moving, the plugin targets roughly
|
||||
10 Hz and skips sends until position or rotation changes meaningfully. The
|
||||
server assigns a `playerId`, adds `serverTime`, and broadcasts transform packets
|
||||
to other connected clients.
|
||||
|
||||
The Fallout 4 plugin also receives server packets on a background networking
|
||||
thread. It stores its assigned `playerId`, stores remote transform state by
|
||||
@@ -58,6 +61,8 @@ player exists.
|
||||
## Implemented
|
||||
|
||||
- The plugin sends local player transform packets.
|
||||
- Normal transform sends are independent from movement logging and are
|
||||
thresholded to avoid packet-per-frame traffic.
|
||||
- The plugin receives `welcome` packets and stores its assigned `playerId`.
|
||||
- The plugin receives broadcast transform packets.
|
||||
- The plugin ignores transform packets for its own assigned `playerId`.
|
||||
@@ -72,10 +77,25 @@ player exists.
|
||||
- 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.
|
||||
- Normal proxy movement is smoothed with a simple position lerp, while
|
||||
- Normal proxy movement is smoothed toward the latest received target, while
|
||||
`cell_change`, `worldspace_change`, and `teleport` transforms snap directly to
|
||||
avoid slow movement across large discontinuities.
|
||||
|
||||
## Transform Cadence
|
||||
|
||||
Normal local movement currently uses three separate rates:
|
||||
|
||||
- Network sends target roughly 10 Hz while the player is moving.
|
||||
- Sends are skipped until position changes by about 3 game units or rotation
|
||||
changes by about 0.02 radians.
|
||||
- Local movement logs stay much slower, around once per second, so
|
||||
`Fallout4Together.log` remains readable.
|
||||
|
||||
`cell_change`, `worldspace_change`, and `teleport` movement types bypass the
|
||||
normal send interval and are sent immediately. The receiving plugin still stores
|
||||
remote transform state on the networking thread and moves actors only from the
|
||||
game-thread proxy controller.
|
||||
|
||||
No Fallout 4 remote actor is dynamically spawned yet.
|
||||
|
||||
## Planned Later
|
||||
|
||||
Reference in New Issue
Block a user