summaryrefslogtreecommitdiff
path: root/src/modules/navigation.rs
diff options
context:
space:
mode:
authortom barrett <spalf0@gmail.com>2018-04-23 06:25:55 -0500
committertom barrett <spalf0@gmail.com>2018-04-23 06:25:55 -0500
commit923e49d29ce2f51df608011db192cbb73e8f7345 (patch)
tree1813395ed810b3f5a810cb13abd5bf39f94349ef /src/modules/navigation.rs
parent7211ed31e5412eb84f8fbf0e3a465305068f1d7c (diff)
-split up module.rs
Diffstat (limited to 'src/modules/navigation.rs')
-rw-r--r--src/modules/navigation.rs64
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;
+ }
+ }
+ _ => (),
+ }
+ }
+}