Hold proxy in hidden position when no remote

Add a temporary in-cell holding fallback for the single placed proxy actor when no valid same-cell remote player is available. Introduces kProxyHiddenHoldingPosition, ProxyLifecycleState, RemotePlayerSelection, MoveProxyToHoldingPosition and RestoreProxyForRemotePlayer, plus selection/state-tracking and throttled logs. The controller now moves the proxy to the hidden position on disconnect, disappearance, or cell-mismatch and snaps it back when a valid same-cell remote appears. Documentation and dev log updated to describe the lifecycle and rationale (docs/architecture.md, docs/dev-log.md, protocol/player-sync.md).
This commit is contained in:
2026-06-02 13:59:32 +12:00
parent d36140c76e
commit a0563a6849
4 changed files with 233 additions and 31 deletions
+6
View File
@@ -30,6 +30,10 @@ both send and receive paths:
Proxy visual updates are independent from local movement log throttling:
normal movement is smoothed toward the latest target, while cell changes,
worldspace changes, and teleports snap directly.
12. When the selected remote player is missing, disconnected, or not in the same
test cell, the game-thread proxy controller moves the single placed proxy to
a hidden holding position inside `F4TTestCell01` until a valid same-cell
remote player is available again.
The Fallout 4 plugin still does not dynamically spawn remote actors.
@@ -48,6 +52,8 @@ The native plugin is responsible for:
- Storing assigned and remote `playerId` state internally
- Moving the single placed test proxy actor from remote-player state on the game
thread
- Holding that proxy actor at a hidden in-cell position when no valid same-cell
remote player should be represented
Planned later:
+45
View File
@@ -837,6 +837,51 @@ Player position: X=2048.00, Y=2048.00, Z=0.00, AngleZ=0.00
---
## 2026-06-02 - Proxy Lifecycle Holding
### What Changed
- Added controller-local lifecycle state for the single placed proxy actor.
- Added a temporary hidden holding position inside `F4TTestCell01` for cases
where no valid same-cell remote player should be represented.
- Moved the proxy to the holding position when the represented remote player
disconnects, disappears from remote-player state, or leaves the local test
cell.
- Restored representation by snapping the proxy to a valid same-cell remote
player once before resuming existing smooth movement.
- Kept disconnect, no-remote-player, and cell-mismatch logs transition-based or
throttled so the log does not spam every update.
### What Worked
- Actor/reference access remains inside `F4TProxyActorController` on the
game-thread update path.
- The networking protocol, Python server, and fake client remain unchanged.
- Existing smooth movement, special movement snapping, and sneak-state
observation remain in place for valid same-cell remote players.
### What Broke
- Nothing recorded during implementation.
### Notes
- This milestone deliberately does not call `Disable()`, `Enable()`,
`SetAlpha()`, invisibility APIs, or animation graph APIs.
- Dynamic spawning, multiple proxy actors, combat, inventory, quest, settlement,
weapon/projectile, interaction, and animation sync remain out of scope.
- The holding position is a prototype-safe fallback until a hide/disable path is
validated for the persistent placed proxy reference.
### Next Steps
- Test single-client, two-client, disconnect, cell-leave, and return/reconnect
flows in `F4TTestCell01`.
- If the holding fallback proves stable, separately validate whether a true
hide/disable path is safe for the placed proxy reference.
---
## Entry Template
Use this format for future updates: