diff --git a/src/blueprint.rs b/src/blueprint.rs index 5cdb6e2..2419eeb 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, userdata_dir}; +use crate::{marble_engine::board::Board, util::userdata_dir}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Blueprint { diff --git a/src/editor.rs b/src/editor.rs index c941a3f..548f201 100644 --- a/src/editor.rs +++ b/src/editor.rs @@ -15,7 +15,6 @@ use crate::{ theme::*, ui::*, util::*, - TILE_TEXTURE_SIZE, }; const HEADER_HEIGHT: i32 = 40; diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..294ea50 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,8 @@ +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 72cb5ac..e613aba 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,14 +5,7 @@ use std::{ use raylib::prelude::*; -mod blueprint; -mod editor; -mod level; -mod marble_engine; -mod solution; -mod theme; -mod ui; -mod util; +use marble_machinations::*; use editor::{Editor, ExitState}; use level::{Chapter, Level}; @@ -23,8 +16,6 @@ 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 6180a76..bcaf731 100644 --- a/src/marble_engine.rs +++ b/src/marble_engine.rs @@ -3,12 +3,11 @@ 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, @@ -268,7 +267,8 @@ impl Machine { // 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::ClaimedIndirect)) = self.board.get_mut(pos) + else { continue; }; self.board.set(pos, Tile::Marble { value, dir }); diff --git a/src/marble_engine/board.rs b/src/marble_engine/board.rs index 6aa6c7b..e6d008f 100644 --- a/src/marble_engine/board.rs +++ b/src/marble_engine/board.rs @@ -1,11 +1,11 @@ -use crate::TILE_TEXTURE_SIZE; -use crate::{draw_scaled_texture, Textures}; - -use super::tile::*; -use super::Pos; -use super::PosInt; use raylib::prelude::*; +use super::{tile::*, Pos, PosInt}; +use crate::{ + theme::TILE_TEXTURE_SIZE, + util::{draw_scaled_texture, Textures}, +}; + #[derive(Debug, Clone, PartialEq)] pub struct Board { tiles: Vec, diff --git a/src/solution.rs b/src/solution.rs index 37d4c25..55f30fe 100644 --- a/src/solution.rs +++ b/src/solution.rs @@ -6,7 +6,7 @@ use std::{ use serde::{Deserialize, Serialize}; -use crate::{level::Level, userdata_dir}; +use crate::{level::Level, util::userdata_dir}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Solution { diff --git a/src/theme.rs b/src/theme.rs index d14c097..e470639 100644 --- a/src/theme.rs +++ b/src/theme.rs @@ -1,5 +1,7 @@ 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 1a94a7f..3a9bc42 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -1,6 +1,6 @@ use std::ops::Range; -use crate::{draw_scaled_texture, theme::*, MouseInput, Scroll, Textures}; +use crate::{theme::*, util::draw_scaled_texture, util::MouseInput, util::Scroll, util::Textures}; use raylib::prelude::*; #[derive(Debug)] diff --git a/tests/main.rs b/tests/main.rs new file mode 100644 index 0000000..3b0ab6f --- /dev/null +++ b/tests/main.rs @@ -0,0 +1,27 @@ +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]); +}