diff options
author | tom barrett <spalf0@gmail.com> | 2018-03-05 08:14:14 -0600 |
---|---|---|
committer | tom barrett <spalf0@gmail.com> | 2018-03-05 08:14:14 -0600 |
commit | 160d7b6e50df6d818f6882c033398d49193bd804 (patch) | |
tree | b211d052dce89c9c69012c8e6c7f9de648322086 /src/navigation.rs | |
parent | 233aa5d803e8015f78f663bc9af6bb33e56eb96e (diff) |
-brought back downcasting, moved connection functions inside the structure
Diffstat (limited to 'src/navigation.rs')
-rw-r--r-- | src/navigation.rs | 57 |
1 files changed, 34 insertions, 23 deletions
diff --git a/src/navigation.rs b/src/navigation.rs index a9c38b2..b615eaa 100644 --- a/src/navigation.rs +++ b/src/navigation.rs @@ -11,6 +11,7 @@ use mass::Mass; use ship::Ship; use math::distance; use astroid::Astroid; +use connection::Connection; pub fn client_navigation(name : String, mut stream : TcpStream, mut buff_r : BufReader<TcpStream>){ let stdout = stdout(); @@ -24,7 +25,7 @@ pub fn client_navigation(name : String, mut stream : TcpStream, mut buff_r : Buf let string_masses = data.split(";"); let mut masses : Vec<Box<Mass>> = Vec::new(); for string_mass in string_masses { - if string_mass.len() == 1 { + if string_mass.len() <= 1 { break; } masses.push(build_mass(string_mass)); @@ -76,30 +77,40 @@ pub fn client_navigation(name : String, mut stream : TcpStream, mut buff_r : Buf } } -pub fn server_navigation(masses : &mut Vec<Box<Mass>>, ship : &mut Box<Mass>, mut stream : &TcpStream, buff_r : &mut BufReader<TcpStream>) -> bool { - let within_range : Vec<&Box<Mass>> = masses.iter().filter(|mass| - distance(ship.position(), mass.position()) < ship.range()).collect(); - - let mut send = String::new(); - for mass in within_range { - send.push_str(&mass.serialize()); - send.push_str(";"); - } - send.push_str("\n"); - match stream.write(send.as_bytes()) { - Ok(_result) => (), - Err(_error) => return false, - } - - let mut string_mass = String::new(); +impl Connection { + pub fn server_navigation(&mut self, masses : &mut Vec<Box<Mass>>) -> bool { + let position = masses[self.index].position(); + let range = masses[self.index].downcast_ref::<Ship>().unwrap().range(); + + { + let within_range : Vec<&Box<Mass>> = masses.iter().filter(|mass| + distance(position, mass.position()) < range) + .collect(); + let mut send = String::new(); + for mass in within_range { + send.push_str(&mass.serialize()); + send.push_str(";"); + } + send.push_str("\n"); + match self.stream.write(send.as_bytes()) { + Ok(_result) => (), + Err(_error) => return false, + } + } - if string_mass.len() > 0 { - let target = build_mass(&string_mass); - ship.give_target(masses.iter().position(|mass| - mass.name() == target.name())); + let mut string_mass = String::new(); + match self.buff_r.read_line(&mut string_mass) { + Ok(_result) => (), + Err(_error) => (), + } + if string_mass.len() > 0 { + let target = build_mass(&string_mass); + let t = masses.iter().position(|mass| + mass.name() == target.name()); + masses[self.index].downcast_mut::<Ship>().unwrap().give_target(t); + } + true } - - true } fn build_mass(string_mass : &str) -> Box<Mass> { |