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:
@@ -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:
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user