feat: Add watering (#27)
This commit is contained in:
@@ -91,7 +91,7 @@ fn test_plant_seed_interaction() {
|
||||
let tile_entity = grid.get_tile((1, 1)).unwrap();
|
||||
let tile_state = app.world().entity(tile_entity).get::<TileState>().unwrap();
|
||||
|
||||
if let TileState::Occupied { seed } = tile_state {
|
||||
if let TileState::Occupied { seed, .. } = tile_state {
|
||||
assert_eq!(
|
||||
*seed,
|
||||
ItemType::BerrySeed {
|
||||
@@ -164,3 +164,89 @@ fn test_plant_seed_no_inventory() {
|
||||
panic!("Tile should remain Empty, found {:?}", tile_state);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_water_crop() {
|
||||
let seed_type = ItemType::BerrySeed {
|
||||
name: "TestSeed".into(),
|
||||
};
|
||||
let mut app = setup_interaction_app(
|
||||
3,
|
||||
3,
|
||||
&[(
|
||||
1,
|
||||
1,
|
||||
TileState::Occupied {
|
||||
seed: seed_type.clone(),
|
||||
watered: false,
|
||||
},
|
||||
)],
|
||||
vec![],
|
||||
);
|
||||
|
||||
// Verify Water option is available
|
||||
let _ = app.world_mut().run_system_once(
|
||||
move |grid: Res<Grid>,
|
||||
tile_query: Query<&TileState>,
|
||||
inventory: Res<Inventory>,
|
||||
item_query: Query<&ItemStack>| {
|
||||
let tile_entity = grid.get_tile((1, 1)).unwrap();
|
||||
let tile_state = tile_query.get(tile_entity).unwrap();
|
||||
let options = InteractionAction::list_options(tile_state, &inventory, item_query);
|
||||
|
||||
assert!(
|
||||
options.contains(&InteractionAction::Water),
|
||||
"Water option should be available"
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
// Execute Water
|
||||
let _ = app.world_mut().run_system_once(
|
||||
move |grid: Res<Grid>,
|
||||
mut tile_query: Query<&mut TileState>,
|
||||
mut inventory: ResMut<Inventory>,
|
||||
mut item_stack_query: Query<&mut ItemStack>,
|
||||
mut commands: Commands| {
|
||||
let action = InteractionAction::Water;
|
||||
action.execute(
|
||||
(1, 1),
|
||||
&grid,
|
||||
&mut tile_query,
|
||||
&mut inventory,
|
||||
&mut item_stack_query,
|
||||
&mut commands,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
app.update();
|
||||
|
||||
// Assert Tile State Watered
|
||||
let grid = app.world().resource::<Grid>();
|
||||
let tile_entity = grid.get_tile((1, 1)).unwrap();
|
||||
let tile_state = app.world().entity(tile_entity).get::<TileState>().unwrap();
|
||||
|
||||
if let TileState::Occupied { watered, .. } = tile_state {
|
||||
assert!(watered, "Tile should be watered");
|
||||
} else {
|
||||
panic!("Tile should be Occupied, found {:?}", tile_state);
|
||||
}
|
||||
|
||||
// Verify Water option is NOT available
|
||||
let _ = app.world_mut().run_system_once(
|
||||
move |grid: Res<Grid>,
|
||||
tile_query: Query<&TileState>,
|
||||
inventory: Res<Inventory>,
|
||||
item_query: Query<&ItemStack>| {
|
||||
let tile_entity = grid.get_tile((1, 1)).unwrap();
|
||||
let tile_state = tile_query.get(tile_entity).unwrap();
|
||||
let options = InteractionAction::list_options(tile_state, &inventory, item_query);
|
||||
|
||||
assert!(
|
||||
!options.contains(&InteractionAction::Water),
|
||||
"Water option should NOT be available"
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@@ -91,8 +91,9 @@ fn test_find_path_simple() {
|
||||
fn test_find_path_around_obstacle() {
|
||||
let obstacle: TileState = TileState::Occupied {
|
||||
seed: ItemType::BerrySeed {
|
||||
name: "test".into(),
|
||||
name: "Test".into(),
|
||||
},
|
||||
watered: false,
|
||||
};
|
||||
let obstacles = vec![
|
||||
(2, 2, obstacle.clone()),
|
||||
@@ -142,8 +143,9 @@ fn test_find_path_around_obstacle() {
|
||||
fn test_find_path_no_path() {
|
||||
let obstacle: TileState = TileState::Occupied {
|
||||
seed: ItemType::BerrySeed {
|
||||
name: "test".into(),
|
||||
name: "Test".into(),
|
||||
},
|
||||
watered: false,
|
||||
};
|
||||
let obstacles = vec![
|
||||
(2, 0, obstacle.clone()),
|
||||
|
||||
Reference in New Issue
Block a user