50 lines
1.6 KiB
Rust
50 lines
1.6 KiB
Rust
use crate::{
|
|
cutscene::StartCutscene, global_observer, keys::KeyCollected, movables::TriggerMovableEvent,
|
|
protocol::PlaySound,
|
|
};
|
|
use bevy::{platform::collections::HashSet, prelude::*};
|
|
use bevy_replicon::prelude::{SendMode, ServerTriggerExt, ToClients};
|
|
|
|
pub fn plugin(app: &mut App) {
|
|
global_observer!(app, on_key_collected);
|
|
}
|
|
|
|
fn on_key_collected(trigger: On<KeyCollected>, mut commands: Commands) {
|
|
match trigger.event().0.as_str() {
|
|
"fence_gate" => {
|
|
commands.server_trigger(ToClients {
|
|
mode: SendMode::Broadcast,
|
|
message: StartCutscene("fence_01".to_string()),
|
|
});
|
|
|
|
let entities: HashSet<_> = vec!["fence_01", "fence_02"]
|
|
.into_iter()
|
|
.map(String::from)
|
|
.collect();
|
|
|
|
commands.server_trigger(ToClients {
|
|
mode: SendMode::Broadcast,
|
|
message: PlaySound::Gate,
|
|
});
|
|
commands.trigger(TriggerMovableEvent(entities));
|
|
}
|
|
"fence_shaft" => {
|
|
commands.server_trigger(ToClients {
|
|
mode: SendMode::Broadcast,
|
|
message: StartCutscene("cutscene_02".to_string()),
|
|
});
|
|
|
|
let entities: HashSet<_> = vec!["fence_shaft"].into_iter().map(String::from).collect();
|
|
|
|
commands.server_trigger(ToClients {
|
|
mode: SendMode::Broadcast,
|
|
message: PlaySound::Gate,
|
|
});
|
|
commands.trigger(TriggerMovableEvent(entities));
|
|
}
|
|
_ => {
|
|
error!("unknown key logic: {}", trigger.event().0);
|
|
}
|
|
}
|
|
}
|