diff options
author | tom barrett <spalf0@gmail.com> | 2018-04-23 06:25:55 -0500 |
---|---|---|
committer | tom barrett <spalf0@gmail.com> | 2018-04-23 06:25:55 -0500 |
commit | 923e49d29ce2f51df608011db192cbb73e8f7345 (patch) | |
tree | 1813395ed810b3f5a810cb13abd5bf39f94349ef /src/modules/navigation.rs | |
parent | 7211ed31e5412eb84f8fbf0e3a465305068f1d7c (diff) |
-split up module.rs
Diffstat (limited to 'src/modules/navigation.rs')
-rw-r--r-- | src/modules/navigation.rs | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/modules/navigation.rs b/src/modules/navigation.rs new file mode 100644 index 0000000..179a766 --- /dev/null +++ b/src/modules/navigation.rs @@ -0,0 +1,64 @@ +use std::time::SystemTime; +use std::collections::HashMap; + +use mass::Mass; +use math::distance; + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] +pub enum NavigationStatus { + None, + Targeting, + Targeted, +} + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct Navigation { + pub range : f64, + pub status : NavigationStatus, + pub target_name : Option<String>, + time : u64, + start : Option<SystemTime>, +} + +impl Navigation { + pub fn new() -> Navigation { + Navigation { + target_name : None, + range : 100.0, + status : NavigationStatus::None, + time : 3, + start : None, + } + } + + pub fn process(&mut self) { + match self.start.clone() { + Some(timer) => { + if timer.elapsed().unwrap().as_secs() > self.time { + self.status = NavigationStatus::Targeted; + self.start = None; + } + } + _ => (), + } + } + + pub fn give_target(&mut self, target_name : String) { + self.start = Some(SystemTime::now()); + self.status = NavigationStatus::Targeting; + self.target_name = Some(target_name); + } + + pub fn verify_target(&mut self, ship_position : (f64, f64, f64), masses : &HashMap<String, Mass>) { + match self.target_name.clone() { + Some(name) => { + let target = masses.get(&name).unwrap(); + if distance(target.position, ship_position) > self.range { + self.target_name = None; + self.status = NavigationStatus::None; + } + } + _ => (), + } + } +} |