From f617213b4a48d73acd245580f8551a7c37ce9ad8 Mon Sep 17 00:00:00 2001 From: tom barrett Date: Sun, 10 Feb 2019 03:55:05 -0600 Subject: added vector math and tractorbeam module --- src/client/mod.rs | 1 + src/client/navigation.rs | 11 +++----- src/client/tractorbeam.rs | 70 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+), 7 deletions(-) create mode 100644 src/client/tractorbeam.rs (limited to 'src/client') diff --git a/src/client/mod.rs b/src/client/mod.rs index 530e2de..9045e90 100644 --- a/src/client/mod.rs +++ b/src/client/mod.rs @@ -4,3 +4,4 @@ pub mod engines; pub mod mining; pub mod navigation; pub mod refinery; +pub mod tractorbeam; diff --git a/src/client/navigation.rs b/src/client/navigation.rs index 0ab25c6..1f2ed06 100644 --- a/src/client/navigation.rs +++ b/src/client/navigation.rs @@ -9,7 +9,6 @@ use std::io::{BufRead, BufReader}; use std::net::TcpStream; use crate::mass::{Mass, MassType}; -use crate::math::distance; use crate::modules::navigation::Navigation; pub fn client_navigation(name: String, mut stream: TcpStream, mut buff_r: BufReader) { @@ -38,14 +37,12 @@ pub fn client_navigation(name: String, mut stream: TcpStream, mut buff_r: BufRea let target_data = get_target_status(&navigation, &mass_name); write!( stdout, - "{}{}) {} ({:.2}, {:.2}, {:.2}) Distance : {:.2} {}", + "{}{}) {} {} Distance : {:.2} {}", termion::cursor::Goto(1, 2 + i as u16), i, mass_name, - mass.position.0, - mass.position.1, - mass.position.2, - distance(mass.position, ship.position), + mass.position, + mass.position.distance_from(ship.position.clone()), target_data ) .unwrap(); @@ -79,6 +76,6 @@ fn get_target_status(navigation: &Navigation, mass_name: &str) -> String { String::new() } } - _ => String::new(), + None => String::new(), } } diff --git a/src/client/tractorbeam.rs b/src/client/tractorbeam.rs new file mode 100644 index 0000000..e9e60b2 --- /dev/null +++ b/src/client/tractorbeam.rs @@ -0,0 +1,70 @@ +extern crate serde_json; +extern crate termion; + +use self::termion::async_stdin; +use self::termion::raw::IntoRawMode; +use std::io::{stdout, Read, Write}; +use std::io::{BufRead, BufReader}; +use std::net::TcpStream; + +use crate::modules::tractorbeam::TractorbeamStatus; +use crate::server::tractorbeam::TractorbeamData; + +pub fn client_tractorbeam(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(); + + loop { + let mut recv = String::new(); + buff_r.read_line(&mut recv).unwrap(); + let data: TractorbeamData = serde_json::from_str(&recv.replace("\n", "")).unwrap(); + + write!(stdout, "{}", termion::clear::All).unwrap(); + + let clear = termion::cursor::Goto(1, 1); + + if data.has_target { + match data.status { + TractorbeamStatus::None => write!( + stdout, + "{}Press o to pull, p to push, t to bring to 5m.", + clear + ) + .unwrap(), + TractorbeamStatus::Push => write!( + stdout, + "{}Press o to pull, p to stop pushing, t to bring to 5m.", + clear + ) + .unwrap(), + TractorbeamStatus::Pull => write!( + stdout, + "{}Press o to stop pulling, p to push, t to bring to 5m.", + clear + ) + .unwrap(), + TractorbeamStatus::Bring => write!( + stdout, + "{}Press o to pulling, p to push, t to stop bringing to 5m.", + clear + ) + .unwrap(), + }; + } else { + write!(stdout, "{}You have no target.", clear).unwrap(); + } + + if let Some(c) = stdin.next() { + 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_all(send.as_bytes()).unwrap(); + } + stdout.flush().unwrap(); + } +} -- cgit v1.2.3