com_croftsoft_lib_animation/metronome/
delta.rs1use super::Metronome;
15
16pub struct DeltaMetronome {
17 pub period_millis: f64,
18 pub time_millis_next_tick: f64,
19}
20
21impl Metronome for DeltaMetronome {
22 fn reset(
23 &mut self,
24 current_time_millis: f64,
25 ) {
26 self.time_millis_next_tick = current_time_millis + self.period_millis
27 }
28
29 fn set_period_millis(
30 &mut self,
31 period_millis: f64,
32 ) {
33 self.period_millis = period_millis;
34 }
35
36 fn set_time_millis_next_tick(
37 &mut self,
38 time_millis_next_tick: f64,
39 ) {
40 self.time_millis_next_tick = time_millis_next_tick;
41 }
42
43 fn tick(
44 &mut self,
45 current_time_millis: f64,
46 ) -> bool {
47 let overshoot_millis = current_time_millis - self.time_millis_next_tick;
48 if overshoot_millis < 0. {
49 return false;
50 }
51 let mut delta_millis = self.period_millis - overshoot_millis;
52 if delta_millis < 0. {
53 delta_millis = self.period_millis;
54 }
55 self.time_millis_next_tick = current_time_millis + delta_millis;
56 true
57 }
58}