From 50314e6c4ea23cfd5d69c172daf3e8c6341fe19b Mon Sep 17 00:00:00 2001 From: demenik Date: Tue, 9 Dec 2025 18:33:48 +0100 Subject: [PATCH] feat: Add HUD text for shovel mode --- src/features/hud/components.rs | 1 + src/features/hud/mod.rs | 85 +++++++++++++++++++++++++++++++++- 2 files changed, 84 insertions(+), 2 deletions(-) diff --git a/src/features/hud/components.rs b/src/features/hud/components.rs index 9de7636..be49eb9 100644 --- a/src/features/hud/components.rs +++ b/src/features/hud/components.rs @@ -4,6 +4,7 @@ use crate::{features::phase::components::TimerSettings, prelude::*}; pub enum RootMarker { Status, Settings, + ShovelOverlay, } #[derive(Component)] diff --git a/src/features/hud/mod.rs b/src/features/hud/mod.rs index c780242..41937d0 100644 --- a/src/features/hud/mod.rs +++ b/src/features/hud/mod.rs @@ -16,12 +16,18 @@ impl Plugin for HudPlugin { app.add_systems(OnExit(AppState::GameScreen), cleanup); app.add_systems( Update, - (update_status, buttons, update_timer_settings).run_if(in_state(AppState::GameScreen)), + ( + update_status, + buttons, + update_timer_settings, + update_shovel_overlay_visibility, + ) + .run_if(in_state(AppState::GameScreen)), ); } } -fn setup(mut commands: Commands) { +fn setup(mut commands: Commands, game_config: Res, asset_server: Res) { commands.spawn(( RootMarker::Status, Node { @@ -61,6 +67,63 @@ fn setup(mut commands: Commands) { ) ], )); + + // Shovel Overlay + commands.spawn(( + RootMarker::ShovelOverlay, + Node { + position_type: PositionType::Absolute, + top: px(20), + left: px(0), + right: px(0), + width: percent(100), + justify_content: JustifyContent::Center, + align_items: AlignItems::Center, + flex_direction: FlexDirection::Column, + row_gap: px(5), + ..default() + }, + Visibility::Hidden, + children![( + Node { + flex_direction: FlexDirection::Column, + align_items: AlignItems::Center, + padding: UiRect::all(px(10)), + row_gap: px(5), + ..default() + }, + BackgroundColor(Color::srgba(0.0, 0.0, 0.0, 0.7)), + BorderRadius::all(px(10)), + children![ + ( + Node { + flex_direction: FlexDirection::Row, + align_items: AlignItems::Center, + column_gap: px(10), + ..default() + }, + children![ + ( + Node { + width: px(32), + height: px(32), + ..default() + }, + inventory::components::ItemType::Shovel + .get_sprite(&asset_server, &game_config), + ImageNode::default() + ), + text("Schaufel-Modus", 20.0, Color::WHITE) + ] + ), + text( + "Klicke auf ein freies Feld, um es freizuschalten.", + 14.0, + Color::WHITE + ) + ] + )], + )); } fn update_status(phase_res: Res, mut text_query: Query<(&mut Text, &TextType)>) { @@ -151,3 +214,21 @@ fn update_timer_settings( } } } + +fn update_shovel_overlay_visibility( + inventory: Res, + item_stacks: Query<&inventory::components::ItemStack>, + mut overlay_query: Query<(&RootMarker, &mut Visibility)>, +) { + let has_shovel = inventory.has_item_type(&item_stacks, inventory::components::ItemType::Shovel); + + for (marker, mut vis) in overlay_query.iter_mut() { + if let RootMarker::ShovelOverlay = marker { + *vis = if has_shovel { + Visibility::Inherited + } else { + Visibility::Hidden + }; + } + } +}