Skip to main content

proteus_lib/
timer.rs

1use std::time::{Duration, Instant};
2
3#[derive(Debug, Clone)]
4pub struct Timer {
5    pub time: Duration,
6    start_time: Option<Instant>,
7}
8
9impl Timer {
10    pub fn new() -> Self {
11        Self {
12            time: Duration::new(0, 0),
13            start_time: None,
14        }
15    }
16
17    pub fn start(&mut self) {
18        self.start_time = Some(Instant::now());
19    }
20
21    pub fn start_at(&mut self, time: Duration) {
22        self.start_time = Some(Instant::now());
23        self.time = time;
24    }
25
26    pub fn un_pause(&mut self) {
27        if self.start_time == None {
28            self.start_time = Some(Instant::now());
29        }
30    }
31
32    pub fn pause(&mut self) {
33        if let Some(start) = self.start_time {
34            self.time += start.elapsed();
35            self.start_time = None;
36        }
37    }
38
39    pub fn stop(&mut self) {
40        self.reset();
41    }
42
43    pub fn get_time(&self) -> Duration {
44        if let Some(start) = self.start_time {
45            self.time + start.elapsed()
46        } else {
47            self.time
48        }
49    }
50
51    pub fn reset(&mut self) {
52        self.start_time = None;
53        self.time = Duration::new(0, 0);
54    }
55}