diff options
Diffstat (limited to 'src/modules/construction.rs')
-rw-r--r-- | src/modules/construction.rs | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/modules/construction.rs b/src/modules/construction.rs new file mode 100644 index 0000000..22086a5 --- /dev/null +++ b/src/modules/construction.rs @@ -0,0 +1,61 @@ +use std::time::SystemTime; +use modules::types::ModuleType; + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] +pub enum ConstructionStatus { + None, + Constructing, + Constructed, +} + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct Construction { + pub status : ConstructionStatus, + construction : Option<ModuleType>, + time : u64, + start : Option<SystemTime>, +} + +impl Construction { + pub fn new() -> Construction { + Construction { + status : ConstructionStatus::None, + construction : None, + time : 5, + start : None, + } + } + + pub fn process(&mut self) { + match self.start.clone() { + Some(timer) => { + if timer.elapsed().unwrap().as_secs() > self.time { + self.start = Some(SystemTime::now()); + self.status = ConstructionStatus::Constructed; + } + } + _ => (), + } + } + + pub fn toggle(&mut self) { + match self.status { + ConstructionStatus::None => self.on(), + _ => self.off(), + }; + } + + pub fn on(&mut self) { + self.start = Some(SystemTime::now()); + self.status = ConstructionStatus::Constructing; + } + + pub fn off(&mut self) { + self.start = None; + self.status = ConstructionStatus::None; + } + + pub fn take(&mut self) { + self.status = ConstructionStatus::None; + } +} |