summaryrefslogtreecommitdiff
path: root/src/server/engines.rs
diff options
context:
space:
mode:
authortom barrett <spalf0@gmail.com>2018-04-12 04:33:23 -0500
committertom barrett <spalf0@gmail.com>2018-04-12 04:33:23 -0500
commit573ba69d810914c153a578747414b3d631e61bbc (patch)
tree4ce164db9d28ede9778d75ddb4f6922ea1dc1a91 /src/server/engines.rs
parentab797e7f30e5e8913faf73516346129b9a620550 (diff)
completely restructured code and fixed navigation bug
Diffstat (limited to 'src/server/engines.rs')
-rw-r--r--src/server/engines.rs78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/server/engines.rs b/src/server/engines.rs
new file mode 100644
index 0000000..ec55ee0
--- /dev/null
+++ b/src/server/engines.rs
@@ -0,0 +1,78 @@
+extern crate serde_json;
+
+use std::io::Write;
+use std::io::BufRead;
+use std::collections::HashMap;
+
+use ship::Ship;
+use mass::Mass;
+use connection::Connection;
+use targeting::TargetingStatus;
+
+impl Connection {
+ pub fn server_engines(&mut self, masses : &mut HashMap<String, Box<Mass>>) -> bool {
+ let masses_clone = masses.clone();
+
+ let mass = masses.get_mut(&self.name).unwrap();
+ let ship = mass.downcast_mut::<Ship>().unwrap();
+
+ let targeted = ship.recv_targeting_status() == TargetingStatus::Targeted;
+ let send = serde_json::to_string(&targeted).unwrap() + "\n";
+
+ match self.stream.write(send.as_bytes()) {
+ Ok(_result) => (),
+ Err(_error) => return false,
+ }
+
+ let mut acceleration = (0.0, 0.0, 0.0);
+ let mut recv = String::new();
+ match self.buff_r.read_line(&mut recv) {
+ Ok(result) => match recv.as_bytes() {
+ b"5\n" => acceleration.0 += 0.1,
+ b"0\n" => acceleration.0 -= 0.1,
+ b"8\n" => acceleration.1 += 0.1,
+ b"2\n" => acceleration.1 -= 0.1,
+ b"4\n" => acceleration.2 += 0.1,
+ b"6\n" => acceleration.2 -= 0.1,
+ b"+\n" => ship.speedup(),
+ b"-\n" => ship.slow(),
+ b"c\n" => {
+ match ship.recv_target() {
+ Some(name) => {
+ let target = masses_clone.get(&name).unwrap();
+ let d_v = target.recv_velocity();
+ let m_v = ship.recv_velocity();
+ acceleration = (d_v.0 - m_v.0,
+ d_v.1 - m_v.1,
+ d_v.2 - m_v.2);
+ },
+ None => (),
+ }
+ },
+ b"t\n" => {
+ match ship.recv_target() {
+ Some(name) => {
+ let target = masses_clone.get(&name).unwrap();
+ let d_p = target.position();
+ let m_p = ship.position();
+ acceleration = ((d_p.0 - m_p.0) * 0.01,
+ (d_p.1 - m_p.1) * 0.01,
+ (d_p.2 - m_p.2) * 0.01);
+ },
+ None => (),
+ }
+ },
+ _ => {
+ if result == 0 {
+ return false
+ }
+ },
+ },
+ Err(_error) => (),
+ }
+
+ ship.give_acceleration(acceleration);
+
+ true
+ }
+}