From 7211ed31e5412eb84f8fbf0e3a465305068f1d7c Mon Sep 17 00:00:00 2001 From: tom barrett Date: Fri, 20 Apr 2018 09:15:29 -0500 Subject: -made modules their own structs instead of structs with enumeration --- src/server/navigation.rs | 52 +++++++++++++++++------------------------------- 1 file changed, 18 insertions(+), 34 deletions(-) (limited to 'src/server/navigation.rs') diff --git a/src/server/navigation.rs b/src/server/navigation.rs index 7f4a1bc..8168fac 100644 --- a/src/server/navigation.rs +++ b/src/server/navigation.rs @@ -2,11 +2,9 @@ extern crate serde_json; use std::io::Write; use std::io::BufRead; -use std::time::SystemTime; use std::collections::HashMap; use math::distance; -use module::{ModuleType, NavigationStatus}; use mass::{Mass, MassType}; use server::connection::ServerConnection; @@ -16,39 +14,25 @@ impl ServerConnection { let ship = masses.get_mut(&self.name).unwrap(); let ship_position = ship.position; - if let MassType::Ship{ref mut modules, ..} = ship.mass_type { - let mut navigation = modules.get_mut("Navigation").unwrap(); - if let ModuleType::Navigation{ref mut target_name, ref mut start, ref mut status, ref range, ..} = navigation.module_type { - - 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) < *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, - } + if let MassType::Ship{ref mut navigation, ..} = ship.mass_type { + let mut navigation = navigation.as_mut().unwrap(); + navigation.verify_target(ship_position, &masses_clone); + let within_range : HashMap<&String, &Mass> = masses_clone.iter().filter(|&(_, mass)| + distance(ship_position, mass.position) < navigation.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 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; - } + let mut recv = String::new(); + match self.buff_r.read_line(&mut recv) { + Ok(_result) => (), + Err(_error) => (), + } + if !recv.is_empty() { + navigation.give_target(recv.replace("\n", "")); } } true -- cgit v1.2.3