1use crate::prelude::*;
2use bevy_ecs::prelude::*;
3use bevy_time::Stopwatch;
4use bevy_time::Time;
5use std::fmt::Debug;
6
7#[derive(Default, Debug, Component)]
9pub struct RunTimer {
10 pub last_started: Stopwatch,
12 pub last_stopped: Stopwatch,
14}
15
16
17
18
19pub fn sync_run_timers(
21 time: Res<Time>,
22 mut timers: Query<&mut RunTimer>,
23 added: Query<Entity, Added<Running>>,
24 mut removed: RemovedComponents<Running>,
25) {
26 for mut timer in timers.iter_mut() {
27 timer.last_started.tick(time.delta());
28 timer.last_stopped.tick(time.delta());
29 }
30
31 for added in added.iter() {
32 if let Ok(mut timer) = timers.get_mut(added) {
33 timer.last_started.reset();
34 }
35 }
36
37 for removed in removed.read() {
38 if let Ok(mut timer) = timers.get_mut(removed) {
39 timer.last_stopped.reset();
40 }
41 }
42}