From 233aa5d803e8015f78f663bc9af6bb33e56eb96e Mon Sep 17 00:00:00 2001 From: tom barrett Date: Thu, 1 Mar 2018 03:51:36 -0600 Subject: -added copying of mass vector, fixed buildmass bug, and allow giving of target --- src/navigation.rs | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) (limited to 'src/navigation.rs') diff --git a/src/navigation.rs b/src/navigation.rs index e55b65a..a9c38b2 100644 --- a/src/navigation.rs +++ b/src/navigation.rs @@ -30,13 +30,14 @@ pub fn client_navigation(name : String, mut stream : TcpStream, mut buff_r : Buf masses.push(build_mass(string_mass)); } - let ship = masses.iter().find(|ship| ship.name() == &name); + let index = masses.iter().position(|ship| ship.name() == &name).unwrap(); + let ship = masses.remove(index); write!(stdout, "{}{}Targets:", termion::clear::All, termion::cursor::Goto(1,1)).unwrap(); - let position = ship.unwrap().position(); + let position = ship.position(); for (i, mass) in masses.iter().enumerate() { write!(stdout, "{}{}) {} ({:.2}, {:.2}, {:.2}) Distance : {:.2}", termion::cursor::Goto(1, 2 + i as u16), @@ -75,9 +76,7 @@ pub fn client_navigation(name : String, mut stream : TcpStream, mut buff_r : Buf } } -pub fn server_navigation(masses : &mut Vec>, index : usize, mut stream : &TcpStream, buff_r : &mut BufReader) -> bool { - let ship = masses[index].downcast_ref::().unwrap(); - +pub fn server_navigation(masses : &mut Vec>, ship : &mut Box, mut stream : &TcpStream, buff_r : &mut BufReader) -> bool { let within_range : Vec<&Box> = masses.iter().filter(|mass| distance(ship.position(), mass.position()) < ship.range()).collect(); @@ -93,23 +92,23 @@ pub fn server_navigation(masses : &mut Vec>, index : usize, mut stream } let mut string_mass = String::new(); - buff_r.read_line(&mut string_mass).unwrap(); + if string_mass.len() > 0 { let target = build_mass(&string_mass); - //ship.give_target(masses.iter().position(|mass| - // mass.name() == target.name())); + ship.give_target(masses.iter().position(|mass| + mass.name() == target.name())); } true } fn build_mass(string_mass : &str) -> Box { - let mut mass = Astroid::new(); if string_mass.contains("Ship") { let mass : Ship = serde_json::from_str(&string_mass).unwrap(); + return Box::new(mass) } else { let mass : Astroid = serde_json::from_str(&string_mass).unwrap(); + return Box::new(mass) } - Box::new(mass) } -- cgit v1.2.3