diff --git a/src/features/hud/components.rs b/src/features/hud/components.rs index 547dfae..6d93783 100644 --- a/src/features/hud/components.rs +++ b/src/features/hud/components.rs @@ -14,7 +14,6 @@ pub enum TextType { #[derive(Component)] pub enum ButtonType { - SavegameDump, SettingsOpen, SettingsClose, SettingsExit, diff --git a/src/features/hud/mod.rs b/src/features/hud/mod.rs index a248c1e..92f5bbe 100644 --- a/src/features/hud/mod.rs +++ b/src/features/hud/mod.rs @@ -1,3 +1,4 @@ +use crate::features::inventory; use crate::features::phase::components::TimerSettings; use crate::features::savegame::messages::SavegameDumpMessage; use crate::prelude::*; @@ -50,15 +51,25 @@ fn setup(mut commands: Commands) { TextFont::from_font_size(16.0), TextColor(Color::WHITE) ), + ( + Button, + inventory::components::ButtonType::InventoryOpen, + Node::default(), + children![( + Text::new("Inventar"), + TextFont::from_font_size(16.0), + TextColor(Color::WHITE) + )] + ), ( Button, ButtonType::SettingsOpen, Node::default(), - children![ + children![( Text::new("Einstellungen"), TextFont::from_font_size(16.0), TextColor(Color::WHITE) - ] + )] ) ], )); @@ -115,7 +126,6 @@ fn buttons( timer_settings.change(timer_type, *amount) } }, - _ => {} }, _ => {} } diff --git a/src/features/inventory/components.rs b/src/features/inventory/components.rs new file mode 100644 index 0000000..bf2e418 --- /dev/null +++ b/src/features/inventory/components.rs @@ -0,0 +1,51 @@ +use crate::prelude::*; + +#[derive(Serialize, Deserialize, Clone)] +pub enum ItemType { + Berry, +} + +impl ItemType { + pub fn singular(&self) -> String { + match self { + ItemType::Berry => "Beere", + } + .into() + } + + pub fn plural(&self) -> String { + match self { + ItemType::Berry => "Beeren", + } + .into() + } + + pub fn description(&self) -> String { + match self { + ItemType::Berry => "Von Pflanzen erntbar. Kann im Shop zum Einkaufen benutzt werden.", + } + .into() + } +} + +#[derive(Component, Serialize, Deserialize, Clone)] +pub struct ItemStack { + pub item_type: ItemType, + pub amount: u32, +} + +#[derive(Resource, Default, Serialize, Deserialize)] +pub struct Inventory { + pub items: Vec, +} + +#[derive(Component)] +pub enum RootMarker { + Inventory, +} + +#[derive(Component)] +pub enum ButtonType { + InventoryOpen, + InventoryClose, +} diff --git a/src/features/inventory/mod.rs b/src/features/inventory/mod.rs new file mode 100644 index 0000000..1b60ee8 --- /dev/null +++ b/src/features/inventory/mod.rs @@ -0,0 +1,40 @@ +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::(); + + app.add_systems(Update, buttons.run_if(in_state(AppState::GameScreen))); + } +} + +fn buttons( + mut commands: Commands, + mut interaction_query: Query<(&Interaction, &ButtonType), (Changed, With