From 87346ea9b91d441e92c476785c2cb979f9a23bf5 Mon Sep 17 00:00:00 2001 From: tom barrett Date: Tue, 27 Feb 2018 03:36:04 -0600 Subject: -set up display for navigation system --- src/navigation.rs | 56 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 50 insertions(+), 6 deletions(-) (limited to 'src/navigation.rs') 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){ + 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){ loop { let mut data = String::new(); buff_r.read_line(&mut data).unwrap(); let string_masses = data.split(";"); let mut masses : Vec> = Vec::new(); + let mut ship : Option = 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){ 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(); } } -- cgit v1.2.3