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