diff --git a/src/features/grid/components.rs b/src/features/grid/components.rs index 6875de2..4b5bf8f 100644 --- a/src/features/grid/components.rs +++ b/src/features/grid/components.rs @@ -7,18 +7,20 @@ pub struct Tile { pub y: u32, } -#[derive(Component, Default, Serialize, Deserialize, Clone, Copy, Debug)] +#[derive(Component, Default, Serialize, Deserialize, Clone, Debug)] pub enum TileState { #[default] Unclaimed, Empty, - Occupied, + Occupied { + seed: ItemType, + }, } impl TileState { pub fn is_blocking(&self) -> bool { match self { - TileState::Occupied => true, + TileState::Occupied { .. } => true, _ => false, } } diff --git a/src/features/grid/mod.rs b/src/features/grid/mod.rs index 1f06f99..9334d52 100644 --- a/src/features/grid/mod.rs +++ b/src/features/grid/mod.rs @@ -73,14 +73,14 @@ fn update_tile_colors( slice.name = match state { TileState::Unclaimed => "Unclaimed", TileState::Empty => "Empty", - TileState::Occupied => "Occupied", + TileState::Occupied { .. } => "Occupied", } .into(); slice.aseprite = match state { TileState::Unclaimed => asset_server.load("tiles/tile-unclaimed.aseprite"), TileState::Empty => asset_server.load("tiles/tile-empty.aseprite"), - TileState::Occupied => asset_server.load("tiles/tile-occupied.aseprite"), + TileState::Occupied { .. } => asset_server.load("tiles/tile-occupied.aseprite"), }; } } diff --git a/src/features/input/mod.rs b/src/features/input/mod.rs index 0365c10..ccb422b 100644 --- a/src/features/input/mod.rs +++ b/src/features/input/mod.rs @@ -121,8 +121,12 @@ fn debug_click( (x, y), |state| match state { TileState::Unclaimed => TileState::Empty, - TileState::Empty => TileState::Occupied, - TileState::Occupied => TileState::Unclaimed, + TileState::Empty => TileState::Occupied { + seed: ItemType::BerrySeed { + name: "Debug".into(), + }, + }, + TileState::Occupied { .. } => TileState::Unclaimed, }, tile_query, ) diff --git a/src/features/savegame/mod.rs b/src/features/savegame/mod.rs index eb6d0e3..597e01e 100644 --- a/src/features/savegame/mod.rs +++ b/src/features/savegame/mod.rs @@ -55,7 +55,7 @@ fn dump_savegame( for y in 0..grid.height { if let Ok(entity) = grid.get_tile((x, y)) { if let Ok(state) = tile_query.get(entity) { - col.push(*state); + col.push(state.clone()); } else { col.push(TileState::Unclaimed); } @@ -146,7 +146,7 @@ fn load_savegame( if x < grid.width && y < grid.height { if let Ok(entity) = grid.get_tile((x, y)) { if let Ok(mut state) = tile_query.get_mut(entity) { - *state = save_data.tiles[x as usize][y as usize]; + *state = save_data.tiles[x as usize][y as usize].clone(); } } } diff --git a/tests/pathfinding.rs b/tests/pathfinding.rs index 02ffde8..97bcb23 100644 --- a/tests/pathfinding.rs +++ b/tests/pathfinding.rs @@ -4,6 +4,12 @@ use pomomon_garden::features::pom::utils::find_path; use pomomon_garden::prelude::*; use std::collections::VecDeque; +const OBSTACLE: TileState = TileState::Occupied { + seed: ItemType::BerrySeed { + name: "test".into(), + }, +}; + // Helper to set up a Bevy App for pathfinding tests fn setup_pathfinding_app( grid_width: u32, @@ -89,11 +95,7 @@ fn test_find_path_simple() { #[test] fn test_find_path_around_obstacle() { - let obstacles = vec![ - (2, 2, TileState::Occupied), - (2, 3, TileState::Occupied), - (2, 4, TileState::Occupied), - ]; + let obstacles = vec![(2, 2, OBSTACLE), (2, 3, OBSTACLE), (2, 4, OBSTACLE)]; let mut app = setup_pathfinding_app(5, 5, &obstacles); let _ = app.world_mut().insert_resource(PathResult(None)); @@ -136,11 +138,11 @@ fn test_find_path_around_obstacle() { #[test] fn test_find_path_no_path() { let obstacles = vec![ - (2, 0, TileState::Occupied), - (2, 1, TileState::Occupied), - (2, 2, TileState::Occupied), - (2, 3, TileState::Occupied), - (2, 4, TileState::Occupied), + (2, 0, OBSTACLE), + (2, 1, OBSTACLE), + (2, 2, OBSTACLE), + (2, 3, OBSTACLE), + (2, 4, OBSTACLE), ]; let mut app = setup_pathfinding_app(5, 5, &obstacles);