From 405dbffe376b05af31dc57f027658c70b4fb9634 Mon Sep 17 00:00:00 2001 From: Griffin Smith Date: Sun, 14 Jul 2019 11:00:44 -0400 Subject: Add commands for diagonal movement Cribbed directly from Nethack This was really, really easy. --- proptest-regressions/types/entity_map.txt | 1 + src/types/command.rs | 5 +++++ src/types/direction.rs | 4 ++++ src/types/entity_map.rs | 5 ++--- src/types/mod.rs | 6 +++++- 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![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 for Position { self } } + UpLeft => self + Up + Left, + UpRight => self + Up + Right, + DownLeft => self + Down + Left, + DownRight => self + Down + Right, } } } -- cgit 1.4.1