summaryrefslogtreecommitdiff
path: root/src/server/navigation.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/navigation.rs')
-rw-r--r--src/server/navigation.rs52
1 files changed, 18 insertions, 34 deletions
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