From 47d15d537c61b828e72113cc8d3d8da3db9a2efb Mon Sep 17 00:00:00 2001 From: Charles Date: Wed, 10 Jun 2020 13:15:16 +0200 Subject: Added idle state before solve timer --- src/time.rs | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/time.rs (limited to 'src/time.rs') diff --git a/src/time.rs b/src/time.rs new file mode 100644 index 0000000..2cdd768 --- /dev/null +++ b/src/time.rs @@ -0,0 +1,50 @@ +use std::time::{SystemTime, Duration}; +use sdl2::ttf; +use sdl2::render::{Texture, TextureCreator}; +use sdl2::pixels::Color; + +#[derive(PartialEq)] +pub enum State { + Idle, + Active, + Inactive, +} + +pub struct Timer { + pub state: State, + time: SystemTime, + result: Duration, +} + +impl Timer { + pub fn new() -> Timer { + Timer { + state: State::Inactive, + time: SystemTime::now(), + result: Duration::new(0, 0), + } + } + + pub fn start(&mut self) { + self.time = SystemTime::now(); + self.state = State::Active; + } + + pub fn stop(&mut self) { + self.result = self.time.elapsed().unwrap(); + self.state = State::Inactive; + } + + pub fn idle(&mut self) { + self.state = State::Idle; + } + + pub fn to_texture<'a, T>(&'a self, font: &ttf::Font, texture_creator: &'a TextureCreator) -> Texture { + let rendered = if self.state == State::Active { self.time.elapsed().unwrap() } else { self.result }; + + let surface = font.render(&rendered.as_millis().to_string()) + .solid(Color::RGB(255, 255, 255)) + .unwrap(); + texture_creator.create_texture_from_surface(&surface).unwrap() + } +} -- cgit