diff options
author | tom barrett <spalf0@gmail.com> | 2018-04-13 03:39:24 -0500 |
---|---|---|
committer | tom barrett <spalf0@gmail.com> | 2018-04-13 03:39:24 -0500 |
commit | 4d7a7e368a3f0a6b1261e1b9180a2647eb158047 (patch) | |
tree | 50ead62fdc5e22e839920dae44a02dc25b247678 /src/server/mining.rs | |
parent | 74c7e70096ebcb0cab10f24ce1d348198d583161 (diff) |
moved over to mass struct with enum for types
Diffstat (limited to 'src/server/mining.rs')
-rw-r--r-- | src/server/mining.rs | 40 |
1 files changed, 18 insertions, 22 deletions
diff --git a/src/server/mining.rs b/src/server/mining.rs index 9aa054f..ff26840 100644 --- a/src/server/mining.rs +++ b/src/server/mining.rs @@ -4,7 +4,6 @@ use std::io::BufRead; use std::io::Write; use std::collections::HashMap; -use ship::Ship; use math::distance; use mass::{Mass, MassType}; use connection::Connection; @@ -18,40 +17,38 @@ struct ServerData { } impl Connection { - pub fn server_mining(&mut self, masses : &mut HashMap<String, Box<Mass>>) -> bool { + pub fn server_mining(&mut self, masses : &mut HashMap<String, Mass>) -> bool { let masses_clone = masses.clone(); - let mass = masses.get_mut(&self.name).unwrap(); - let ship = mass.downcast_mut::<Ship>().unwrap(); + let ship = masses.get_mut(&self.name).unwrap(); - let target = match ship.recv_target() { - Some(name) => masses_clone.get(&name), - None => None, + let (mining, targeting) = match ship.mass_type { + MassType::Ship{ref targeting, ref mut mining, ..} => (Some(mining), Some(targeting.clone())), + _ => (None, None), }; + let mining = mining.unwrap(); + let target = masses_clone.get(&targeting.unwrap().target.unwrap()); let has_astroid_target = match target { - Some(target) => match target.recv_mass_type() { - MassType::Ship => false, - MassType::Astroid => true, + Some(target) => match target.mass_type { + MassType::Astroid{..} => true, + _ => false, }, None => false, }; let is_within_range = match has_astroid_target { true => match target { - Some(target) => match ship.recv_mining_range() > distance(ship.position(), target.position()) { - true => true, - false => false, - }, - None => false, + Some(target) => mining.range > distance(ship.position, target.position), + _ => false, } - false => false, + _ => false, }; let send = serde_json::to_string(&ServerData { has_astroid_target : has_astroid_target, is_within_range : is_within_range, - mining_range : ship.recv_mining_range(), - mining_status : ship.recv_mining_status(), + mining_range : mining.range, + mining_status : mining.status, }).unwrap() + "\n"; match self.stream.write(send.as_bytes()) { @@ -64,9 +61,9 @@ impl Connection { Ok(result) => match recv.as_bytes() { b"F\n" => { if is_within_range { - match ship.recv_mining_status() { - true => ship.stop_mining(), - false => ship.start_mining(), + match mining.status { + true => mining.stop(), + false => mining.start(), } } }, @@ -78,7 +75,6 @@ impl Connection { } Err(_error) => (), } - true } } |