use crate::{cutscene::StartCutscene, keys::KeyCollected, movables::TriggerMovableEvent}; use bevy::{prelude::*, utils::hashbrown::HashSet}; pub fn plugin(app: &mut App) { app.add_observer(on_key); } fn on_key(trigger: Trigger, mut commands: Commands, asset_server: Res) { match trigger.event().0.as_str() { "fence_gate" => { commands.trigger(StartCutscene("fence_01".to_string())); //TODO: put into a sound effects system commands.spawn(( AudioPlayer::new(asset_server.load("sfx/effects/gate.ogg")), PlaybackSettings::DESPAWN, )); let entities: HashSet<_> = vec!["fence_01", "fence_02"] .into_iter() .map(|s| String::from(s)) .collect(); commands.trigger(TriggerMovableEvent(entities)); } "fence_shaft" => { commands.trigger(StartCutscene("cutscene_02".to_string())); //TODO: put into a sound effects system commands.spawn(( AudioPlayer::new(asset_server.load("sfx/effects/gate.ogg")), PlaybackSettings::DESPAWN, )); let entities: HashSet<_> = vec!["fence_shaft"] .into_iter() .map(|s| String::from(s)) .collect(); commands.trigger(TriggerMovableEvent(entities)); } _ => { error!("unknown key logic: {}", trigger.event().0); } } }