use crate::prelude::*;
use beet_ecs::prelude::*;
use bevy::prelude::*;
use serde::Deserialize;
use serde::Serialize;
pub struct CommonEventsPlugin;
impl Plugin for CommonEventsPlugin {
fn build(&self, app: &mut App) {
app
.add_event::<AppStartup>()
.replicate_event_outgoing::<AppStartup>()
.add_systems(Startup, |mut events: EventWriter<AppStartup>| {
events.send(AppStartup);
})
.add_event::<AppReady>()
.replicate_observer_outgoing::<AppReady>()
.add_plugins(ActionPlugin::<(
TriggerOnRun<AppReady>,
RunOnAppReady,
)>::default())
.add_event::<SpawnSceneFile>()
.replicate_event_incoming::<SpawnSceneFile>()
.add_event::<SpawnSceneFileResponse>()
.replicate_event_outgoing::<SpawnSceneFileResponse>()
.add_systems(Update, handle_spawn_scene)
.replicate_observer_incoming::<OnUserMessage>()
.observe(log_on_user_message)
.replicate_observer_outgoing::<OnAppMessage>();
#[cfg(not(test))]
app.add_event::<SaveScreenshot>()
.replicate_event_incoming::<SaveScreenshot>()
.add_systems(Update,screenshot_on_event)
.add_systems(Update,screenshot_on_keypress)
;
}
}
#[derive(Debug, Default, Clone, Serialize, Deserialize, Event, Reflect)]
#[reflect(Default)]
pub struct AppStartup;
#[derive(Debug, Default, Clone, Serialize, Deserialize, Event, Reflect)]
#[reflect(Default)]
pub struct AppReady;
pub type RunOnAppReady = TriggerOnGlobalTrigger<AppReady, OnRun>;
#[derive(
Debug, Clone, Deref, DerefMut, Serialize, Deserialize, Event, Reflect,
)]
pub struct OnUserMessage(pub String);
#[derive(
Debug, Clone, Deref, DerefMut, Serialize, Deserialize, Event, Reflect,
)]
pub struct OnAppMessage(pub String);
fn log_on_user_message(
trigger: Trigger<OnUserMessage>,
mut commands: Commands,
) {
commands.trigger(OnLogMessage::new(format!("User: {}", &trigger.event().0)))
}