//! Social simulation plugin — NPC knowledge transfer, disclosure, and social systems. //! //! All systems run in [`TickPhase::Simulation`]. use bevy_app::prelude::*; use bevy_ecs::schedule::IntoScheduleConfigs; use crate::tick_phases::TickPhase; pub struct SocialPlugin; impl Plugin for SocialPlugin { fn build(&self, app: &mut App) { app.init_resource::() .init_resource::() .init_resource::() .init_resource::() .add_systems( Update, ( super::npc_knowledge_transfer::transfer_npc_knowledge, super::sound::collect_sound_events, // Voice enrichment (D-138) — rewrite NPC text with voiced variants. // No-op when VoiceCacheResource is absent. crate::voice::integration::voice_enrich_dialogue_response, // POI discovery reads visibility geometry (also Simulation phase) super::poi_discovery::discover_pois, // Follow state reads visibility geometry + movement super::follow::update_follow_state, // Contraband scan reads movement + NPC awareness super::contraband::check_contraband_scan, // Pressure reads NPC awareness + relationship graph super::pressure::update_character_pressure, // Triangle escalation (#250) — runs on game-minute boundaries super::triangle::tick_triangle_escalation, ) .in_set(TickPhase::Simulation), ); } }