diff --git a/src/blueprint.rs b/src/blueprint.rs index 2419eeb..5cdb6e2 100644 --- a/src/blueprint.rs +++ b/src/blueprint.rs @@ -6,7 +6,7 @@ use std::{ use serde::{Deserialize, Serialize}; -use crate::{marble_engine::board::Board, util::userdata_dir}; +use crate::{marble_engine::board::Board, userdata_dir}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Blueprint { diff --git a/src/editor.rs b/src/editor.rs index 548f201..c941a3f 100644 --- a/src/editor.rs +++ b/src/editor.rs @@ -15,6 +15,7 @@ use crate::{ theme::*, ui::*, util::*, + TILE_TEXTURE_SIZE, }; const HEADER_HEIGHT: i32 = 40; diff --git a/src/lib.rs b/src/lib.rs deleted file mode 100644 index 294ea50..0000000 --- a/src/lib.rs +++ /dev/null @@ -1,8 +0,0 @@ -pub mod blueprint; -pub mod editor; -pub mod level; -pub mod marble_engine; -pub mod solution; -pub mod theme; -pub mod ui; -pub mod util; diff --git a/src/main.rs b/src/main.rs index e613aba..72cb5ac 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,7 +5,14 @@ use std::{ use raylib::prelude::*; -use marble_machinations::*; +mod blueprint; +mod editor; +mod level; +mod marble_engine; +mod solution; +mod theme; +mod ui; +mod util; use editor::{Editor, ExitState}; use level::{Chapter, Level}; @@ -16,6 +23,8 @@ use util::*; const TITLE_TEXT: &str = concat!("Marble Machinations v", env!("CARGO_PKG_VERSION")); +pub const TILE_TEXTURE_SIZE: f32 = 16.0; + struct Game { levels: Vec, level_scroll: usize, diff --git a/src/marble_engine.rs b/src/marble_engine.rs index bcaf731..e0191fd 100644 --- a/src/marble_engine.rs +++ b/src/marble_engine.rs @@ -3,11 +3,12 @@ use raylib::prelude::*; pub mod board; pub mod pos; pub mod tile; -use crate::{theme::TILE_TEXTURE_SIZE, ui::draw_usize_small, util::Textures}; use board::Board; use pos::*; use tile::*; +use crate::{ui::draw_usize_small, Textures, TILE_TEXTURE_SIZE}; + #[derive(Debug)] pub struct Machine { board: Board, @@ -260,15 +261,19 @@ impl Machine { let Some(Tile::Open(OpenTile::Blank, claim)) = self.board.get_mut(pos) else { unreachable!() }; - if claim.claim_indirect() { - claim_positions.push(pos); + *claim = match claim { + Claim::Free => { + claim_positions.push(pos); + Claim::Claimed + } + Claim::Claimed | Claim::Blocked => Claim::Blocked, + _ => unreachable!(), } } // create new marbles // new marbles are past old_marbles index, so will not move this step for (pos, value, dir) in new_marbles { - let Some(Tile::Open(OpenTile::Blank, Claim::ClaimedIndirect)) = self.board.get_mut(pos) - else { + let Some(Tile::Open(OpenTile::Blank, Claim::Claimed)) = self.board.get_mut(pos) else { continue; }; self.board.set(pos, Tile::Marble { value, dir }); @@ -286,9 +291,16 @@ impl Machine { continue; }; if let Tile::Open(_type, claim) = front_tile { - if claim.claim() { - claim_positions.push(front_pos); - } + *claim = match claim { + Claim::Free => { + claim_positions.push(front_pos); + Claim::Claimed + } + Claim::ClaimedIndirect => Claim::Claimed, + Claim::BlockedIndirect => Claim::Claimed, + Claim::Claimed => Claim::Blocked, + Claim::Blocked => Claim::Blocked, + }; } else { let target_pos = match front_tile { Tile::Arrow(d) => d.step(front_pos), @@ -300,9 +312,16 @@ impl Machine { continue; }; if let Tile::Open(_type, claim) = target_tile { - if claim.claim_indirect() { - claim_positions.push(front_pos); - } + *claim = match claim { + Claim::Free => { + claim_positions.push(front_pos); + Claim::ClaimedIndirect + } + Claim::ClaimedIndirect => Claim::BlockedIndirect, + Claim::BlockedIndirect => Claim::BlockedIndirect, + Claim::Claimed => Claim::Claimed, + Claim::Blocked => Claim::Blocked, + }; } } } diff --git a/src/marble_engine/board.rs b/src/marble_engine/board.rs index e6d008f..6aa6c7b 100644 --- a/src/marble_engine/board.rs +++ b/src/marble_engine/board.rs @@ -1,10 +1,10 @@ -use raylib::prelude::*; +use crate::TILE_TEXTURE_SIZE; +use crate::{draw_scaled_texture, Textures}; -use super::{tile::*, Pos, PosInt}; -use crate::{ - theme::TILE_TEXTURE_SIZE, - util::{draw_scaled_texture, Textures}, -}; +use super::tile::*; +use super::Pos; +use super::PosInt; +use raylib::prelude::*; #[derive(Debug, Clone, PartialEq)] pub struct Board { diff --git a/src/marble_engine/tile.rs b/src/marble_engine/tile.rs index 568411d..8fc0809 100644 --- a/src/marble_engine/tile.rs +++ b/src/marble_engine/tile.rs @@ -485,35 +485,3 @@ impl Comparison { } } } - -impl Claim { - #[must_use] - /// returns `was_free` - pub fn claim(&mut self) -> bool { - let mut was_free = false; - *self = match self { - Claim::Free => { - was_free = true; - Claim::Claimed - } - Claim::ClaimedIndirect | Claim::BlockedIndirect => Claim::Claimed, - Claim::Claimed | Claim::Blocked => Claim::Blocked, - }; - was_free - } - - #[must_use] - /// returns `was_free` - pub fn claim_indirect(&mut self) -> bool { - let mut was_free = false; - *self = match self { - Claim::Free => { - was_free = true; - Claim::ClaimedIndirect - } - Claim::ClaimedIndirect => Claim::BlockedIndirect, - _ => *self, - }; - was_free - } -} diff --git a/src/solution.rs b/src/solution.rs index 55f30fe..37d4c25 100644 --- a/src/solution.rs +++ b/src/solution.rs @@ -6,7 +6,7 @@ use std::{ use serde::{Deserialize, Serialize}; -use crate::{level::Level, util::userdata_dir}; +use crate::{level::Level, userdata_dir}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Solution { diff --git a/src/theme.rs b/src/theme.rs index e470639..d14c097 100644 --- a/src/theme.rs +++ b/src/theme.rs @@ -1,7 +1,5 @@ use raylib::prelude::*; -pub const TILE_TEXTURE_SIZE: f32 = 16.0; - pub const BG_WORLD: Color = gray(48); pub const FG_GRID: Color = gray(64); diff --git a/src/ui.rs b/src/ui.rs index 3a9bc42..1a94a7f 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -1,6 +1,6 @@ use std::ops::Range; -use crate::{theme::*, util::draw_scaled_texture, util::MouseInput, util::Scroll, util::Textures}; +use crate::{draw_scaled_texture, theme::*, MouseInput, Scroll, Textures}; use raylib::prelude::*; #[derive(Debug)] diff --git a/tests/main.rs b/tests/main.rs deleted file mode 100644 index 3b0ab6f..0000000 --- a/tests/main.rs +++ /dev/null @@ -1,27 +0,0 @@ -use marble_machinations::marble_engine::{board::Board, Machine}; - -#[test] -fn creating_marbles_cause_indirect_claim() { - let mut eng = Machine::new_empty(); - eng.set_board(Board::parse( - " - I -o 2 - B- o - B | |-*-| - |-+o | | -*-| |* -B B- - - 1 3 - - - - - I I -", - )); - for _ in 0..9 { - eng.step(); - } - assert_eq!(eng.output(), [1, 2, 3]); -}