com_croftsoft_lib_animation/metronome/
simple.rs

1// =============================================================================
2//! - A simple implementation of the Metronome trait
3//!
4//! # Metadata
5//! - Copyright: © 2023 [`CroftSoft Inc`]
6//! - Author: [`David Wallace Croft`]
7//! - Created: 2023-02-21
8//! - Updated: 2023-02-21
9//!
10//! [`CroftSoft Inc`]: https://www.croftsoft.com/
11//! [`David Wallace Croft`]: https://www.croftsoft.com/people/david/
12// =============================================================================
13
14use super::Metronome;
15
16pub struct SimpleMetronome {
17  pub period_millis: f64,
18  pub time_millis_next_tick: f64,
19}
20
21impl Metronome for SimpleMetronome {
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    if current_time_millis < self.time_millis_next_tick {
48      return false;
49    }
50    self.time_millis_next_tick = current_time_millis + self.period_millis;
51    true
52  }
53}