From 22ec8b31c66475f29106f2fda46969e427f2e704 Mon Sep 17 00:00:00 2001 From: tom barrett Date: Thu, 5 Apr 2018 02:04:11 -0500 Subject: -changed how data is passed (learned you can serialize a vec) -added targeting struct to ship and got timer prototype --- src/ship.rs | 68 +++++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 48 insertions(+), 20 deletions(-) (limited to 'src/ship.rs') diff --git a/src/ship.rs b/src/ship.rs index e226936..f56492e 100644 --- a/src/ship.rs +++ b/src/ship.rs @@ -1,7 +1,24 @@ +use std::time::{Duration, Instant, SystemTime}; + use module::Module; use mass::{Mass, Type}; extern crate serde_json; +#[derive(Serialize, Deserialize, Debug, Clone)] +enum TargetingStatus { + None, + Targeting, + Targeted, +} + +#[derive(Serialize, Deserialize, Debug, Clone)] +struct Targeting { + target : Option, + status : TargetingStatus, + time : u64, + start : Option, +} + #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Ship { name : String, @@ -9,8 +26,8 @@ pub struct Ship { velocity : (f64, f64, f64), mass_type : Type, r : f64, - target : Option, modules : Vec, + targeting : Targeting, } impl Ship { @@ -22,13 +39,18 @@ impl Ship { modules.push(Module::Dashboard); Ship { - name : String::from(name), - position : position, - velocity : (0.0, 0.0, 0.0), - mass_type : Type::Ship, - r : 100.0, - target : None, - modules : modules, + name : String::from(name), + position : position, + velocity : (0.0, 0.0, 0.0), + mass_type : Type::Ship, + r : 100.0, + targeting : Targeting { + target : None, + status : TargetingStatus::None, + time : 3, + start : None, + }, + modules : modules, } } @@ -59,7 +81,6 @@ impl Ship { self.velocity.0 *= 1.05; self.velocity.1 *= 1.05; self.velocity.2 *= 1.05; - } pub fn range(&self) -> f64 { @@ -67,23 +88,20 @@ impl Ship { } pub fn give_target(&mut self, target : Option) { - self.target = target; + self.targeting.target = target; + self.targeting.status = TargetingStatus::Targeted; + //self.targeting.start = Some(SystemTime::now()); } pub fn recv_target(&self) -> Option { - self.target + match self.targeting.status { + TargetingStatus::Targeted => self.targeting.target, + _ => None + } } pub fn get_modules(&self) -> String { - let mut data = String::new(); - - for module in self.modules.iter() { - data.push_str(&serde_json::to_string(&module).unwrap()); - data.push_str(";"); - } - data.push_str("\n"); - - data + serde_json::to_string(&self.modules).unwrap() + "\n" } } @@ -96,6 +114,16 @@ impl Mass for Ship { self.position.0 += self.velocity.0; self.position.1 += self.velocity.1; self.position.2 += self.velocity.2; + /* + match self.targeting.start { + Some(time) => { + if time.elapsed().unwrap().as_secs() > self.targeting.time { + self.targeting.status = TargetingStatus::Targeted; + } + } + None => (), + } + */ } fn position(&self) -> (f64, f64, f64) { -- cgit v1.2.3