diff options
author | tom barrett <spalf0@gmail.com> | 2018-04-16 02:28:33 -0500 |
---|---|---|
committer | tom barrett <spalf0@gmail.com> | 2018-04-16 02:28:33 -0500 |
commit | 2940809bf50c2874487ba55efb17ba03c52dd9c2 (patch) | |
tree | 2a69facf7922c38256e5886484ad45a566cda970 /src/server/navigation.rs | |
parent | 4d7a7e368a3f0a6b1261e1b9180a2647eb158047 (diff) |
-removed trait objects and went to structs with enumerations completely
Diffstat (limited to 'src/server/navigation.rs')
-rw-r--r-- | src/server/navigation.rs | 65 |
1 files changed, 36 insertions, 29 deletions
diff --git a/src/server/navigation.rs b/src/server/navigation.rs index 3813732..58d88e7 100644 --- a/src/server/navigation.rs +++ b/src/server/navigation.rs @@ -2,10 +2,12 @@ extern crate serde_json; use std::io::Write; use std::io::BufRead; +use std::time::SystemTime; use std::collections::HashMap; -use mass::{Mass, MassType}; use math::distance; +use module::{ModuleType, NavigationStatus}; +use mass::{Mass, MassType}; use connection::Connection; impl Connection { @@ -15,40 +17,45 @@ impl Connection { let ship_position = ship.position; match ship.mass_type { - MassType::Ship{ref mut targeting, ..} => { - let target_name = targeting.clone().target; - match target_name { - Some(target_name) => { - let target = masses_clone.get(&target_name).unwrap(); - if distance(target.position, ship.position) > targeting.range { - targeting.target = None; + MassType::Ship{ref mut modules, ..} => { + match modules.get_mut("Navigation").unwrap().module_type { + ModuleType::Navigation{ref mut target_name, ref mut start, ref mut status, ref range, ..} => { + match target_name.clone() { + Some(name) => { + let target = masses_clone.get(&name).unwrap(); + if distance(target.position, ship.position) > *range { + *target_name = None; + } + }, + _ => (), } - }, - _ => (), - } - let within_range : HashMap<&String, &Mass> = masses_clone.iter().filter(|&(_, mass)| - distance(ship_position, mass.position) < targeting.range) - .collect(); + let within_range : HashMap<&String, &Mass> = masses_clone.iter().filter(|&(_, mass)| + distance(ship_position, mass.position) < *range) + .collect(); - let send = serde_json::to_string(&within_range).unwrap() + "\n"; - match self.stream.write(send.as_bytes()) { - Ok(_result) => (), - Err(_error) => return false, - } + let send = serde_json::to_string(&within_range).unwrap() + "\n"; + match self.stream.write(send.as_bytes()) { + Ok(_result) => (), + Err(_error) => return false, + } - let mut recv = String::new(); - match self.buff_r.read_line(&mut recv) { - Ok(_result) => (), - Err(_error) => (), - } - if !recv.is_empty() { - targeting.give_target(Some(recv.replace("\n", ""))); + let mut recv = String::new(); + match self.buff_r.read_line(&mut recv) { + Ok(_result) => (), + Err(_error) => (), + } + if !recv.is_empty() { + *target_name = Some(recv.replace("\n", "")); + *start = Some(SystemTime::now()); + *status = NavigationStatus::Targeting; + } + }, + _ => (), } - }, - _ => (), + } + _ => (), } - true } } |