Files
pomomon-garden/src/features/inventory/mod.rs
2025-12-10 13:36:07 +01:00

60 lines
1.9 KiB
Rust

use crate::features::phase::components::SessionTracker;
use crate::{features::inventory::ui::open_inventory, prelude::*};
use components::*;
pub mod components;
pub mod ui;
pub struct InventoryPlugin;
impl Plugin for InventoryPlugin {
fn build(&self, app: &mut App) {
app.init_resource::<Inventory>();
app.add_systems(Update, buttons.run_if(in_state(AppState::GameScreen)));
#[cfg(debug_assertions)]
app.add_systems(Update, debug_modify_berries);
}
}
fn buttons(
mut commands: Commands,
mut interaction_query: Query<(&Interaction, &ButtonType), (Changed<Interaction>, With<Button>)>,
itemstack_query: Query<&ItemStack>,
game_config: Res<GameConfig>,
asset_server: Res<AssetServer>,
) {
for (interaction, button_type) in &mut interaction_query {
match *interaction {
Interaction::Pressed => match button_type {
ButtonType::InventoryOpen => {
open_inventory(&mut commands, itemstack_query, &game_config, &asset_server);
}
},
_ => {}
}
}
}
#[cfg(debug_assertions)]
fn debug_modify_berries(
mut commands: Commands,
mut inventory: ResMut<Inventory>,
mut items: Query<&mut ItemStack>,
keys: Res<ButtonInput<KeyCode>>,
mut session_tracker: ResMut<SessionTracker>,
) {
if keys.any_pressed([KeyCode::ShiftLeft, KeyCode::ShiftRight]) {
if keys.just_pressed(KeyCode::ArrowUp) {
println!("Adding 1 berry using debug bind");
if inventory.update_item_stack(&mut commands, &mut items, ItemType::Berry, 1) {
session_tracker.total_berries_earned += 1;
}
} else if keys.just_pressed(KeyCode::ArrowDown) {
println!("Removing 1 berry using debug bind");
inventory.update_item_stack(&mut commands, &mut items, ItemType::Berry, -1);
}
}
}