despero 0.1.0

Rusty game engine, using API Vulkan and implementing paradigm of ECS
Documentation
use std::time::Duration;
use serde::{Serialize, Deserialize};

#[derive(Default, Clone, Copy, Serialize, Deserialize)]
pub struct Timer {
    duration: Duration,
    repeating: bool,
    
    iteration: u32,
    finished: bool,
    elapsed_time: Duration,
}

impl Timer {
    pub fn init(duration: Duration, repeating: bool) -> Self {
        Timer {
            duration,
            repeating,
            
            iteration: 1,
            finished: false,
            elapsed_time: Duration::ZERO,
        }
    }
    
    pub fn iteration(&self) -> u32 {
        self.iteration.clone()
    }
    
    pub fn elapsed(&self) -> Duration {
        self.elapsed_time.clone()
    }
    
    pub fn finished(&self) -> bool {
        self.finished.clone()
    }
    
    pub fn tick(&mut self, step: Duration){
        if self.repeating {
            self.elapsed_time += step;
            
            if self.elapsed_time >= self.duration {
                self.elapsed_time -= self.duration;
                self.iteration += 1;
            }
        } else if !self.finished {
            self.elapsed_time += step;
            
            if self.elapsed_time >= self.duration {
                self.finished = true;
                self.elapsed_time = self.duration;
            }
        }
    }
}