diff options
author | tom barrett <spalf0@gmail.com> | 2018-02-27 03:36:04 -0600 |
---|---|---|
committer | tom barrett <spalf0@gmail.com> | 2018-02-27 03:36:04 -0600 |
commit | 87346ea9b91d441e92c476785c2cb979f9a23bf5 (patch) | |
tree | 6cf1b044e8f7d895d61a768d9294158d6aab36d0 /src/navigation.rs | |
parent | c14dcf1998f5ba1ffea813da4f793fc3bde8c2b7 (diff) |
-set up display for navigation system
Diffstat (limited to 'src/navigation.rs')
-rw-r--r-- | src/navigation.rs | 56 |
1 files changed, 50 insertions, 6 deletions
diff --git a/src/navigation.rs b/src/navigation.rs index bcb0c4d..cc2221a 100644 --- a/src/navigation.rs +++ b/src/navigation.rs @@ -1,25 +1,33 @@ use std::net::TcpStream; -use std::io::BufRead; -use std::io::BufReader; +use std::io::{BufRead, BufReader}; + +use std::io::{stdout, Read, Write, stdin}; +use termion::raw::IntoRawMode; +use termion::async_stdin; extern crate erased_serde; extern crate serde_json; +extern crate termion; -use std::collections::BTreeMap; +use erased_serde::Deserializer; use mass::Mass; use ship::Ship; +use math::distance; use astroid::Astroid; -use erased_serde::Deserializer; +pub fn Navigation(name : String, mut stream :TcpStream, mut buff_r : BufReader<TcpStream>){ + let stdout = stdout(); + let mut stdout = stdout.lock().into_raw_mode().unwrap(); + let mut stdin = async_stdin().bytes(); -pub fn Navigation(mut stream :TcpStream, mut buff_r : BufReader<TcpStream>){ loop { let mut data = String::new(); buff_r.read_line(&mut data).unwrap(); let string_masses = data.split(";"); let mut masses : Vec<Box<Mass>> = Vec::new(); + let mut ship : Option<Ship> = None; for string_mass in string_masses { if string_mass.len() == 1 { break; @@ -29,12 +37,48 @@ pub fn Navigation(mut stream :TcpStream, mut buff_r : BufReader<TcpStream>){ if string_mass.contains("Ship") { let mass : Ship = erased_serde::deserialize(&mut deserialized).unwrap(); - masses.push(Box::new(mass)); + if mass.name() == &name { + ship = Some(mass); + } + else { + masses.push(Box::new(mass)); + } } else { let mass : Astroid = erased_serde::deserialize(&mut deserialized).unwrap(); masses.push(Box::new(mass)); } } + + + write!(stdout, "{}{}Targets:", + termion::clear::All, + termion::cursor::Goto(1,1)).unwrap(); + + let location = ship.expect("zz").location(); + for (i, mass) in masses.iter().enumerate() { + write!(stdout, "{}{}) {} {:?} Distance : {}", + termion::cursor::Goto(1, 2 + i as u16), + i, + mass.name(), + mass.location(), + distance(mass.location(), location)).unwrap(); + } + + match stdin.next() { + Some(c) => { + let c = c.unwrap(); + let mut send = String::new(); + send.push(c as char); + if send.as_bytes() == b"q" { + break; + } + //send.push_str("\n"); + //stream.write(send.as_bytes()).unwrap(); + } + None => () + } + + stdout.flush().unwrap(); } } |