use bevy::{log::LogPlugin, prelude::*};
use bevy_mod_observable_timer::*;
fn main() {
App::new()
.add_plugins((
MinimalPlugins,
LogPlugin::default(),
ObservableTimerPlugin::default(),
))
.add_systems(Startup, startup)
.run();
}
fn startup(mut commands: Commands) {
let timer_id = commands
.spawn(ObservableTimer::from_seconds(1.0, TimerMode::Repeating))
.observe(|_: On<TimerStarted>| {
info!("Timer started");
})
.observe(|_: On<TimerFinished>, mut count: Local<usize>| {
*count += 1;
info!("Timer finished (#{})", *count);
})
.observe(
|trigger: On<TimerStopped>, mut app_exit: MessageWriter<AppExit>| {
info!("Timer stopped (finished = {})", trigger.event().finished);
app_exit.write_default();
},
)
.id();
commands
.spawn(ObservableTimer::from_seconds(2.5, TimerMode::Once))
.observe(move |_: On<TimerFinished>, mut commands: Commands| {
commands.entity(timer_id).despawn();
});
}