60 lines
1.9 KiB
Rust
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);
|
|
}
|
|
}
|
|
}
|