about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGriffin Smith <root@gws.fyi>2019-07-14T15·00-0400
committerGriffin Smith <root@gws.fyi>2019-07-14T15·00-0400
commit405dbffe376b05af31dc57f027658c70b4fb9634 (patch)
treee8d1e50b66e2b9e64d01336108f3176c4a07e78e
parentbf03ebc549bfeef38b91110511a56a6cd24dc58d (diff)
Add commands for diagonal movement
Cribbed directly from Nethack

This was really, really easy.
-rw-r--r--proptest-regressions/types/entity_map.txt1
-rw-r--r--src/types/command.rs5
-rw-r--r--src/types/direction.rs4
-rw-r--r--src/types/entity_map.rs5
-rw-r--r--src/types/mod.rs6
5 files changed, 17 insertions, 4 deletions
diff --git a/proptest-regressions/types/entity_map.txt b/proptest-regressions/types/entity_map.txt
index 7d85b28bf400..68be5752f4e0 100644
--- a/proptest-regressions/types/entity_map.txt
+++ b/proptest-regressions/types/entity_map.txt
@@ -6,3 +6,4 @@
 # everyone who runs the test benefits from these saved cases.
 cc 16afe2473971397314ffa77acf7bad62f0c40bc3f591aff7aa9193c29e5a0921 # shrinks to items = [(Position { x: 92, y: 60 }, ""), (Position { x: 92, y: 60 }, "")]
 cc 3a68a382c3bb8fdf60ea150a369abbdd45859e0c54cd6a4f7c75937a6c783b98 # shrinks to mut em = EntityMap { by_position: {Position { x: 25, y: 33 }: [1]}, by_id: {1: TestEntity { position: Position { x: 25, y: 33 }, name: "" }}, last_id: 1 }, ent = TestEntity { position: Position { x: 25, y: 33 }, name: "" }, new_position = Position { x: 0, y: 0 }
+cc ffd7181e1c0343ab4c2ac92990f068d24c8663158c1c0a9526cd9edc470f950a # shrinks to mut em = EntityMap { by_position: {Position { x: 64, y: 58 }: [1]}, by_id: {1: TestEntity { position: Position { x: 64, y: 58 }, name: "" }}, last_id: 1 }, ent = TestEntity { position: Position { x: 0, y: 0 }, name: "" }, new_position = Position { x: 64, y: 58 }
diff --git a/src/types/command.rs b/src/types/command.rs
index 2a51531c0a8a..15017cde9904 100644
--- a/src/types/command.rs
+++ b/src/types/command.rs
@@ -23,6 +23,11 @@ impl Command {
             Char('k') | Char('w') | Key::Up => Some(Move(Up)),
             Char('j') | Char('s') | Key::Down => Some(Move(Down)),
             Char('l') | Char('d') | Key::Right => Some(Move(Right)),
+            Char('y') => Some(Move(UpLeft)),
+            Char('u') => Some(Move(UpRight)),
+            Char('b') => Some(Move(DownLeft)),
+            Char('n') => Some(Move(DownRight)),
+
             Ctrl('p') => Some(PreviousMessage),
             _ => None,
         }
diff --git a/src/types/direction.rs b/src/types/direction.rs
index 5ab660f19317..9b5c0991da8d 100644
--- a/src/types/direction.rs
+++ b/src/types/direction.rs
@@ -6,4 +6,8 @@ pub enum Direction {
     Up,
     Down,
     Right,
+    UpLeft,
+    UpRight,
+    DownRight,
+    DownLeft,
 }
diff --git a/src/types/entity_map.rs b/src/types/entity_map.rs
index 1846686d1164..1d58873bb0ac 100644
--- a/src/types/entity_map.rs
+++ b/src/types/entity_map.rs
@@ -234,10 +234,9 @@ mod tests {
                 em.get(entity_id).map(|e| e.position()),
                 Some(new_position)
             );
-            assert_eq!(
+            assert!(
                 em.at(new_position).iter().map(
-                    |e| e.name.clone()).collect::<Vec<_>>(),
-                vec![ent.name]
+                    |e| e.name.clone()).any(|en| en == ent.name),
             )
         }
 
diff --git a/src/types/mod.rs b/src/types/mod.rs
index 67c773fdb107..ac44bcc9c89e 100644
--- a/src/types/mod.rs
+++ b/src/types/mod.rs
@@ -8,7 +8,7 @@ pub mod direction;
 pub mod entity_map;
 pub use collision::Collision;
 pub use direction::Direction;
-pub use direction::Direction::{Down, Left, Right, Up};
+pub use direction::Direction::*;
 use proptest_derive::Arbitrary;
 use termion::cursor;
 
@@ -217,6 +217,10 @@ impl ops::Add<Direction> for Position {
                     self
                 }
             }
+            UpLeft => self + Up + Left,
+            UpRight => self + Up + Right,
+            DownLeft => self + Down + Left,
+            DownRight => self + Down + Right,
         }
     }
 }