diff options
Diffstat (limited to 'src/server/navigation.rs')
-rw-r--r-- | src/server/navigation.rs | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/server/navigation.rs b/src/server/navigation.rs index 8168fac..2a2f105 100644 --- a/src/server/navigation.rs +++ b/src/server/navigation.rs @@ -10,20 +10,21 @@ use server::connection::ServerConnection; impl ServerConnection { pub fn server_navigation(&mut self, masses : &mut HashMap<String, Mass>) -> bool { - let masses_clone = masses.clone(); - let ship = masses.get_mut(&self.name).unwrap(); - let ship_position = ship.position; + let mut ship = masses.remove(&self.name).unwrap(); + let ship_clone = ship.clone(); + let mut connection_good = true; 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(); + navigation.verify_target(ship_clone.position, &masses); + let mut within_range : HashMap<&String, &Mass> = masses.iter().filter(|&(_, mass)| + distance(ship_clone.position, mass.position) < navigation.range) + .collect(); + within_range.insert(&self.name, &ship_clone); let send = serde_json::to_string(&within_range).unwrap() + "\n"; match self.stream.write(send.as_bytes()) { Ok(_result) => (), - Err(_error) => return false, + Err(_error) => connection_good = false, } let mut recv = String::new(); @@ -35,6 +36,8 @@ impl ServerConnection { navigation.give_target(recv.replace("\n", "")); } } - true + + masses.insert(self.name.clone(), ship); + connection_good } } |