1pub mod prelude;
2
3use limnus_app::prelude::{App, Plugin};
4use limnus_default_stages::First;
5use limnus_local_resource::LocalResource;
6use limnus_macros::{LocalResource, Resource};
7use limnus_resource::Resource;
8use limnus_system_params::{LoRe, ReM};
9use monotonic_time_rs::{create_monotonic_clock, Millis, MonotonicClock};
10use std::fmt::{Debug, Formatter};
11
12#[derive(LocalResource)]
13pub struct Clock {
14 pub clock: Box<dyn MonotonicClock>,
15}
16
17impl Debug for Clock {
18 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
19 write!(f, "clock")
20 }
21}
22
23#[derive(Debug, Resource)]
24pub struct MonotonicTime {
25 pub time: Millis,
26}
27
28fn update_time(clock: LoRe<Clock>, mut time: ReM<MonotonicTime>) {
29 time.time = clock.clock.now();
30}
31
32pub struct ClockPlugin;
33
34impl Plugin for ClockPlugin {
35 fn build(&self, app: &mut App) {
36 let clock = create_monotonic_clock();
37 let now = clock.now();
38 app.insert_local_resource(Clock {
39 clock: Box::new(clock),
40 });
41 app.insert_resource(MonotonicTime { time: now });
42
43 app.add_system(First, update_time);
44 }
45}