diff --git a/src/features/inventory/components.rs b/src/features/inventory/components.rs index 63ca0d9..bd06a93 100644 --- a/src/features/inventory/components.rs +++ b/src/features/inventory/components.rs @@ -39,7 +39,7 @@ impl ItemType { ItemType::Berry => { "Von Pflanzen erntbar. Kann im Shop zum Einkaufen benutzt werden.".into() } - ItemType::Shovel => "Schaltet ein neues Feld im Garten frei.".into(), + ItemType::Shovel => "Im Shop kaufbar. Schaltet ein neues Feld im Garten frei. Preis steigt bei jedem Kauf!".into(), ItemType::BerrySeed { name } => { let seed_config = game_config.berry_seeds.iter().find(|s| s.name == *name); if let Some(s) = seed_config { @@ -68,7 +68,11 @@ impl ItemType { } } - pub fn get_sprite(&self, asset_server: Res, game_config: &GameConfig) -> AseSlice { + pub fn get_sprite( + &self, + asset_server: &Res, + game_config: &GameConfig, + ) -> AseSlice { match self { ItemType::Berry => AseSlice { name: "Berry".into(), diff --git a/src/features/inventory/mod.rs b/src/features/inventory/mod.rs index 2915d40..5e91a71 100644 --- a/src/features/inventory/mod.rs +++ b/src/features/inventory/mod.rs @@ -20,12 +20,13 @@ fn buttons( itemstack_query: Query<&ItemStack>, root_query: Query<(Entity, &RootMarker)>, game_config: Res, + asset_server: Res, ) { 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); + open_inventory(&mut commands, itemstack_query, &game_config, &asset_server); } ButtonType::InventoryClose => { for (entity, root) in root_query.iter() { diff --git a/src/features/inventory/ui/inventory.rs b/src/features/inventory/ui/inventory.rs index 50ed085..f045e65 100644 --- a/src/features/inventory/ui/inventory.rs +++ b/src/features/inventory/ui/inventory.rs @@ -6,6 +6,7 @@ pub fn open_inventory( commands: &mut Commands, items: Query<&ItemStack>, game_config: &Res, + asset_server: &Res, ) { commands .spawn(( @@ -61,7 +62,7 @@ pub fn open_inventory( }) .with_children(|parent| { for itemstack in items.iter() { - parent.spawn(list_itemstack(itemstack, game_config)); + parent.spawn(list_itemstack(itemstack, game_config, asset_server)); } }); }); diff --git a/src/features/inventory/ui/item.rs b/src/features/inventory/ui/item.rs index 3e6c0cc..39a9f0a 100644 --- a/src/features/inventory/ui/item.rs +++ b/src/features/inventory/ui/item.rs @@ -1,6 +1,10 @@ use crate::prelude::*; -pub fn list_itemstack(itemstack: &ItemStack, game_config: &GameConfig) -> impl Bundle { +pub fn list_itemstack( + itemstack: &ItemStack, + game_config: &GameConfig, + asset_server: &Res, +) -> impl Bundle { let name = match itemstack.amount { 1 => itemstack.item_type.singular(game_config), _ => itemstack.item_type.plural(game_config), @@ -8,21 +12,22 @@ pub fn list_itemstack(itemstack: &ItemStack, game_config: &GameConfig) -> impl B ( Node { + width: percent(100), padding: UiRect::all(px(4)), ..Node::hstack(px(8)) }, - BackgroundColor(ButtonVariant::Secondary.normal_background()), BorderRadius::all(px(10)), children![ ( - // Placeholder for icon Node { height: percent(100), aspect_ratio: Some(1.0), ..default() }, BackgroundColor(ButtonVariant::Secondary.hover_background()), - BorderRadius::all(px(10)) + BorderRadius::all(px(10)), + itemstack.item_type.get_sprite(asset_server, game_config), + ImageNode::default() ), ( Node { diff --git a/src/features/shop/components.rs b/src/features/shop/components.rs index 0b5d762..ee71abc 100644 --- a/src/features/shop/components.rs +++ b/src/features/shop/components.rs @@ -7,7 +7,9 @@ pub enum RootMarker { #[derive(Component)] pub enum ButtonType { + ShopOpen, ShopClose, + ShopBuyItem(ShopOffer), } #[derive(Clone)] diff --git a/src/features/shop/mod.rs b/src/features/shop/mod.rs index 9f2a0f8..ed45ebb 100644 --- a/src/features/shop/mod.rs +++ b/src/features/shop/mod.rs @@ -1,4 +1,6 @@ use crate::prelude::*; +use components::*; +use ui::open_shop; pub mod components; pub mod ui; @@ -6,5 +8,34 @@ pub mod ui; pub struct ShopPlugin; impl Plugin for ShopPlugin { - fn build(&self, app: &mut App) {} + fn build(&self, app: &mut App) { + app.add_systems(Update, buttons.run_if(in_state(AppState::GameScreen))); + } +} + +fn buttons( + mut commands: Commands, + mut interaction_query: Query<(&Interaction, &ButtonType), (Changed, With