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.rs63
1 files changed, 29 insertions, 34 deletions
diff --git a/src/server/navigation.rs b/src/server/navigation.rs
index 1d332f9..7f4a1bc 100644
--- a/src/server/navigation.rs
+++ b/src/server/navigation.rs
@@ -16,45 +16,40 @@ impl ServerConnection {
let ship = masses.get_mut(&self.name).unwrap();
let ship_position = ship.position;
- match ship.mass_type {
- 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) < *range)
- .collect();
+ 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 {
- let send = serde_json::to_string(&within_range).unwrap() + "\n";
- match self.stream.write(send.as_bytes()) {
- Ok(_result) => (),
- Err(_error) => return false,
+ match target_name.clone() {
+ Some(name) => {
+ let target = masses_clone.get(&name).unwrap();
+ if distance(target.position, ship.position) > *range {
+ *target_name = None;
}
+ }
+ _ => (),
+ }
- 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 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 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
}