feat(simulation): add Zone Gate gauntlet room and zone crossing detection (#512)

New test_world room with two zones (Terminal/Corridor) separated by
a door. Adds ZoneCrossEventQueue resource and detect_zone_crossings
system to fire events when the player crosses zone boundaries.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-28 16:34:21 +01:00
co-authored by Claude Opus 4.6
parent 61eb40fcab
commit daae3dd6ab
6 changed files with 501 additions and 3 deletions
+11
View File
@@ -9,10 +9,12 @@ pub mod conversation;
pub mod dialogue;
pub mod examine;
pub mod follow;
pub mod generator;
pub mod input;
pub mod interaction;
pub mod inventory;
pub mod listening;
pub mod modification;
pub mod monologue;
pub mod movement;
pub mod npc_knowledge_transfer;
@@ -63,6 +65,9 @@ impl Plugin for SimulationPlugin {
.init_resource::<crate::npc::relationships::RelationshipGraph>()
.init_resource::<crate::knowledge::KnowledgeEventQueue>()
.init_resource::<interaction::TerminalInteractedQueue>()
// Zone crossing event queue (#512, D-077): detect when player moves between zones.
.init_resource::<zone::ZoneCrossEventQueue>()
.init_resource::<zone::PreviousPlayerZone>()
.add_systems(
Update,
(
@@ -116,6 +121,12 @@ impl Plugin for SimulationPlugin {
.before(crate::perception::observer::compute_observer_snapshot),
time::advance_tick.after(path_follow::cleanup_path_blocked),
),
)
// Zone crossing detection (#512, D-077) — separate call to stay within
// Bevy's 20-element system tuple limit.
.add_systems(
Update,
zone::detect_zone_crossings.after(movement::validate_movement),
);
tracing::debug!("SimulationPlugin initialized");