feat(simulation): auto-pause sim on implant-fullscreen — inspection substrate (T-970)
D-226 layer 1. World-advancing phases gated on pause: Movement/Storyteller/Knowledge/TickAdvance set-gated via sim_not_paused; Simulation + Economy gated per-system at their registration sites — collect_sound_events and serve_econ_state_query stay unconditioned (transient-buffer clear + paused-allowed query; set-gating Simulation leaked a stale tick-7 footstep into frozen snapshots — caught by golden_suite, fixed without touching the fixture; regression test encodes the bug shape). New PlayerAction::AutoPause/AutoResume + AutoPauseState resource implement Option A reconciliation: auto-resume only fires if auto-pause caused the pause; manual pause and Half rate survive implant open/close. PauseParams SystemParam bundle keeps process_player_input under the 16-param ceiling (BookmarkInputParams precedent). Client: HudGroups.gameplay_occluded now sends AutoPause/AutoResume via send_named_action; 5 gdUnit tests + 7 Rust tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -520,6 +520,17 @@ pub enum PlayerAction {
|
||||
UsePerceptionMode(String),
|
||||
Pause,
|
||||
Unpause,
|
||||
/// Auto-pause the sim when a fullscreen implant app occludes gameplay
|
||||
/// (T-970, D-226 layer 1: `HudGroups.gameplay_occluded`, D-170). Distinct
|
||||
/// from the manual `Pause` (Space bar, D-088) so the server can tell
|
||||
/// whether IT caused the current pause via `AutoPauseState` — a
|
||||
/// pre-existing manual pause or Half rate survives an implant
|
||||
/// open/close cycle untouched. No-op unless the sim is currently
|
||||
/// `TickRate::Full` (see `simulation::time::AutoPauseState`).
|
||||
AutoPause,
|
||||
/// Auto-resume when the fullscreen implant app closes (T-970, D-226
|
||||
/// layer 1). No-op unless `AutoPause` is what caused the current pause.
|
||||
AutoResume,
|
||||
/// Player walked away during active dialogue (WASD during conversation, D-064).
|
||||
/// Client sends this when movement input is detected while dialogue box is visible.
|
||||
/// Server records incomplete interaction in KG and clears dialogue state.
|
||||
|
||||
Reference in New Issue
Block a user