From 449644ade6e304429caa2e86d0c6c2e34be9ad29 Mon Sep 17 00:00:00 2001 From: Adrian Heine Date: Fri, 23 Jul 2021 00:57:10 +0200 Subject: [PATCH] Don't remove previous agent position It might still be used by check_move --- src/agent.rs | 1 + src/world.rs | 9 ++++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/agent.rs b/src/agent.rs index 2fdc50b..7c339ed 100644 --- a/src/agent.rs +++ b/src/agent.rs @@ -1,5 +1,6 @@ pub type Distance = isize; +#[derive(Clone)] pub struct Position { pub x: Distance, pub y: Distance, diff --git a/src/world.rs b/src/world.rs index 9eb2c49..4fe9ada 100644 --- a/src/world.rs +++ b/src/world.rs @@ -87,6 +87,7 @@ impl ActualWorld { self.check_move(id, &mv); } let mut new_pos = None; + let pos = self.state.agent_positions.get(&id).unwrap(); match mv { Move::Noop => {} Move::TryTag(other_id) => { @@ -94,14 +95,12 @@ impl ActualWorld { new_state.tagged_by = Some(id); } Move::TryMove(dir) => { - let pos = self.state.agent_positions.get(&id).unwrap(); new_pos = Some((pos.x + dir.x, pos.y + dir.y).into()); } } - new_state.agent_positions.insert( - id, - new_pos.unwrap_or_else(|| self.state.agent_positions.remove(&id).unwrap()), - ); + new_state + .agent_positions + .insert(id, new_pos.unwrap_or_else(|| pos.clone())); } self.state = new_state; }