From bb2b1fea7c8bcf623388913b31f13c14f850aa84 Mon Sep 17 00:00:00 2001 From: CrispyPin Date: Fri, 14 Mar 2025 22:20:48 +0100 Subject: [PATCH] fix tiles not being unclaimed after multiple marble creations block each other --- src/config.rs | 26 ++++++++++++++++++++++++++ src/marble_engine.rs | 7 +++++-- 2 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 src/config.rs diff --git a/src/config.rs b/src/config.rs new file mode 100644 index 0000000..cdcb5a3 --- /dev/null +++ b/src/config.rs @@ -0,0 +1,26 @@ +use std::collections::HashMap; + +use raylib::ffi::KeyboardKey; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Default, Deserialize, Serialize)] +pub struct Config { + hotkeys: Hotkeys, +} + +#[derive(Debug, Default, Deserialize, Serialize)] +pub struct Hotkeys { + map: HashMap, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct Hotkey { + modifiers: Vec, + trigger: Trigger, +} + +#[derive(Debug, Deserialize, Serialize)] +pub enum Trigger { + Mouse(u32), + Key(u32), +} diff --git a/src/marble_engine.rs b/src/marble_engine.rs index 402842b..e0191fd 100644 --- a/src/marble_engine.rs +++ b/src/marble_engine.rs @@ -255,13 +255,17 @@ impl Machine { } // #### new marbles #### + let mut claim_positions = Vec::new(); // prepare creating the new marbles for &(pos, _val, _dir) in &new_marbles { let Some(Tile::Open(OpenTile::Blank, claim)) = self.board.get_mut(pos) else { unreachable!() }; *claim = match claim { - Claim::Free => Claim::Claimed, + Claim::Free => { + claim_positions.push(pos); + Claim::Claimed + } Claim::Claimed | Claim::Blocked => Claim::Blocked, _ => unreachable!(), } @@ -277,7 +281,6 @@ impl Machine { } // #### movement #### - let mut claim_positions = Vec::new(); // mark claims to figure out what spaces can be moved to for &pos in &self.marbles[..old_marbles] { let Some(Tile::Marble { value: _, dir }) = self.board.get(pos) else {