64 lines
2.0 KiB
Rust
64 lines
2.0 KiB
Rust
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>,
|
|
root_query: Query<(Entity, &RootMarker)>,
|
|
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);
|
|
}
|
|
ButtonType::InventoryClose => {
|
|
for (entity, root) in root_query.iter() {
|
|
match *root {
|
|
RootMarker::Inventory => commands.entity(entity).despawn(),
|
|
}
|
|
}
|
|
}
|
|
},
|
|
_ => {}
|
|
}
|
|
}
|
|
}
|
|
|
|
#[cfg(debug_assertions)]
|
|
fn debug_modify_berries(
|
|
mut commands: Commands,
|
|
mut inventory: ResMut<Inventory>,
|
|
mut items: Query<&mut ItemStack>,
|
|
keys: Res<ButtonInput<KeyCode>>,
|
|
) {
|
|
if keys.any_pressed([KeyCode::ShiftLeft, KeyCode::ShiftRight]) {
|
|
if keys.just_pressed(KeyCode::ArrowUp) {
|
|
println!("Adding 1 berry using debug bind");
|
|
inventory.update_item_stack(&mut commands, &mut items, ItemType::Berry, 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);
|
|
}
|
|
}
|
|
}
|