rmv_bevy_testing_tools/traits/
time_controls.rs

1use std::time::Duration;
2
3use bevy_internal::time::{Time, Virtual};
4
5use crate::prelude::TestApp;
6
7pub trait TimeControls {
8    fn is_paused(&self) -> bool;
9    fn pause(&mut self);
10    fn unpause(&mut self);
11    fn advance_time_to(&mut self, duration: Duration);
12    fn advance_time_by(&mut self, duration: Duration);
13}
14
15impl TimeControls for TestApp {
16    fn is_paused(&self) -> bool {
17        self.world()
18            .get_resource::<Time<Virtual>>()
19            .unwrap()
20            .is_paused()
21    }
22    fn pause(&mut self) {
23        self.world_mut()
24            .get_resource_mut::<Time<Virtual>>()
25            .unwrap()
26            .pause()
27    }
28    fn unpause(&mut self) {
29        self.world_mut()
30            .get_resource_mut::<Time<Virtual>>()
31            .unwrap()
32            .unpause()
33    }
34    fn advance_time_by(&mut self, duration: Duration) {
35        self.world_mut()
36            .get_resource_mut::<Time<Virtual>>()
37            .unwrap()
38            .advance_by(duration);
39        self.update();
40    }
41    fn advance_time_to(&mut self, duration: Duration) {
42        self.world_mut()
43            .get_resource_mut::<Time<Virtual>>()
44            .unwrap()
45            .advance_to(duration);
46        self.update();
47    }
48}