feat: Allow TileState to hold ItemType (Seeds)
This commit is contained in:
@@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user