diff --git a/server/src/perception/interpretation.rs b/server/src/perception/interpretation.rs index 8ea8ef2f0..cdbd52a28 100644 --- a/server/src/perception/interpretation.rs +++ b/server/src/perception/interpretation.rs @@ -213,6 +213,7 @@ mod tests { world.init_resource::(); world.init_resource::(); world.init_resource::(); + world.init_resource::(); world } diff --git a/server/src/perception/observation.rs b/server/src/perception/observation.rs index fcfc776bb..e00c62262 100644 --- a/server/src/perception/observation.rs +++ b/server/src/perception/observation.rs @@ -168,6 +168,7 @@ mod tests { world.init_resource::(); world.init_resource::(); world.init_resource::(); + world.init_resource::(); world } diff --git a/server/src/perception/observer/mod.rs b/server/src/perception/observer/mod.rs index e38f96a09..33ce07e07 100644 --- a/server/src/perception/observer/mod.rs +++ b/server/src/perception/observer/mod.rs @@ -27,6 +27,7 @@ use crate::simulation::monologue::{MonologueBuffer, SprintAnomalyQueue}; use crate::simulation::movement::{PlayerCharacter, TilePosition, WalkabilityMap}; use crate::simulation::poi::PointOfInterest; use crate::simulation::rng::SimRng; +use crate::content::template::TriangleCrisisEventQueue; use crate::simulation::sound::SoundEventQueue; use crate::simulation::stance::Stance; use crate::simulation::time::SimulationTime; @@ -99,6 +100,7 @@ pub fn compute_observer_snapshot( inventory_items: Query<(Entity, &CarriedBy, &ItemName, &InventorySlot)>, poi_query: Query<&PointOfInterest>, mut buffer: ResMut, + mut crisis_queue: ResMut, sim_rng: Option>, pressure_query: Query<&crate::simulation::pressure::CharacterPressure, With>, ) { @@ -387,6 +389,22 @@ pub fn compute_observer_snapshot( // Consume pending save/load result for this tick (#553). let save_result = buffer.pending_save_result.take(); + // Drain triangle crisis events (#250) and convert to wire format. + let triangle_crisis_events = crisis_queue + .drain() + .into_iter() + .map(|e| TriangleCrisisEventWire { + triangle_id: e.triangle_id.0, + role_assignments: e + .role_assignments + .into_iter() + .map(|(role, sid)| (role.0, sid.0)) + .collect(), + trigger_npc_id: e.trigger_npc.0, + tick: e.tick, + }) + .collect(); + buffer.snapshot = Some(ObserverSnapshot { version: crate::bridge::types::PROTOCOL_VERSION, tick: time.tick, @@ -414,7 +432,7 @@ pub fn compute_observer_snapshot( examine_result, player_knowledge, save_result, - triangle_crisis_events: vec![], + triangle_crisis_events, }); } diff --git a/server/src/perception/observer/tests.rs b/server/src/perception/observer/tests.rs index 9dae79a8c..51ac44fc4 100644 --- a/server/src/perception/observer/tests.rs +++ b/server/src/perception/observer/tests.rs @@ -16,6 +16,7 @@ fn setup_world(width: i32, height: i32) -> World { world.init_resource::(); world.init_resource::(); world.init_resource::(); + world.init_resource::(); world }