diff --git a/scripts/scenes/battle_scene.gd b/scripts/scenes/battle_scene.gd index 61bbd3b..ba13d98 100644 --- a/scripts/scenes/battle_scene.gd +++ b/scripts/scenes/battle_scene.gd @@ -493,6 +493,8 @@ var cell_info_label: Label var forecast_panel: PanelContainer var forecast_icon: TextureRect var forecast_label: Label +var inventory_status_panel: PanelContainer +var inventory_status_icon: TextureRect var inventory_label: Label var briefing_panel: PanelContainer var briefing_title_label: Label @@ -3888,11 +3890,27 @@ func _create_hud() -> void: _apply_label_style(forecast_label, UI_PARCHMENT_TEXT, 14) forecast_row.add_child(forecast_label) + inventory_status_panel = PanelContainer.new() + inventory_status_panel.name = "InventoryStatusChip" + inventory_status_panel.custom_minimum_size = Vector2(420, 46) + inventory_status_panel.size_flags_horizontal = Control.SIZE_EXPAND_FILL + _apply_panel_style(inventory_status_panel, "hud_readable") + side_column.add_child(inventory_status_panel) + + var inventory_status_row := HBoxContainer.new() + inventory_status_row.add_theme_constant_override("separation", 8) + inventory_status_panel.add_child(inventory_status_row) + + inventory_status_icon = _make_side_info_chip_icon("item") + inventory_status_icon.name = "InventoryStatusIcon" + inventory_status_row.add_child(inventory_status_icon) + inventory_label = Label.new() inventory_label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART - inventory_label.custom_minimum_size = Vector2(420, 34) + inventory_label.custom_minimum_size = Vector2(354, 28) + inventory_label.size_flags_horizontal = Control.SIZE_EXPAND_FILL _apply_label_style(inventory_label, UI_PARCHMENT_TEXT, 14) - side_column.add_child(inventory_label) + inventory_status_row.add_child(inventory_label) var button_row := GridContainer.new() button_row.name = "HudCommandGrid" @@ -10168,8 +10186,13 @@ func _update_hud() -> void: _update_result_panel() _update_prep_menu_button_selection() if inventory_label != null: + var inventory_detail := _format_inventory_status_text() inventory_label.text = _format_inventory_status_summary_text() - inventory_label.tooltip_text = _format_inventory_status_text() + inventory_label.tooltip_text = inventory_detail + if inventory_status_panel != null: + inventory_status_panel.tooltip_text = inventory_detail + if inventory_status_icon != null: + inventory_status_icon.tooltip_text = inventory_detail var selected := state.get_selected_unit() if selected.is_empty(): diff --git a/tools/smoke_visual_assets.gd b/tools/smoke_visual_assets.gd index 68a490f..2abebb2 100644 --- a/tools/smoke_visual_assets.gd +++ b/tools/smoke_visual_assets.gd @@ -3549,6 +3549,16 @@ func _check_hud_focus_text(failures: Array[String]) -> void: failures.append("inventory HUD summary should stay compact and leave details to tooltip: %s" % ("" if scene.inventory_label == null else scene.inventory_label.text)) elif not scene.inventory_label.tooltip_text.contains("군수:"): failures.append("inventory HUD tooltip should preserve full inventory detail: %s" % scene.inventory_label.tooltip_text) + if scene.inventory_status_panel == null: + failures.append("inventory HUD summary should sit inside a readable generated status chip") + else: + _check_panel_uses_flat_readable_backing(failures, scene.inventory_status_panel, "inventory HUD status chip") + if scene.inventory_status_panel.tooltip_text != scene.inventory_label.tooltip_text: + failures.append("inventory HUD status chip should expose the same tooltip as the compact label") + if scene.inventory_status_icon == null or scene.inventory_status_icon.texture == null: + failures.append("inventory HUD status chip should use a generated item icon") + elif scene.inventory_status_icon.tooltip_text != scene.inventory_label.tooltip_text: + failures.append("inventory HUD status icon should expose the same tooltip as the compact label") scene.state.selected_unit_id = "" scene.hover_cell = Vector2i(-1, -1) scene._update_hud() @@ -3570,6 +3580,10 @@ func _check_hud_focus_text(failures: Array[String]) -> void: failures.append("empty battle inventory line should not show noisy stock text: %s" % ("" if scene.inventory_label == null else scene.inventory_label.text)) if scene.inventory_label != null and (not scene.inventory_label.tooltip_text.contains("장수 선택") or not scene.inventory_label.tooltip_text.contains("도구")): failures.append("empty battle inventory tooltip should explain where readable item detail appears: %s" % scene.inventory_label.tooltip_text) + if scene.inventory_status_panel == null or scene.inventory_status_icon == null: + failures.append("empty battle inventory prompt should still be framed as an icon status chip") + elif scene.inventory_status_panel.tooltip_text != scene.inventory_label.tooltip_text or scene.inventory_status_icon.tooltip_text != scene.inventory_label.tooltip_text: + failures.append("empty battle inventory chip should carry the readable inventory tooltip") scene.state.selected_unit_id = "cao_cao" scene.hover_cell = Vector2i(1, 6) scene._update_hud()