Use the radio and wand mockups behind their forms

Draw radio_report/emergency_radio behind a transparent, padded form and switch
the backdrop with the call type. The wand HUD popup now shows wand_screening
behind its text while open. Both covers use the mockup panel bounds so baked-in
controls stay hidden. Headless 226/226 verified in a clean HEAD worktree.
This commit is contained in:
zwitschi committed 2026-11-01 16:29:35 +01:00
1 parent 8582e496ff
commit 8032999a4d
3 files changed
+66 -7

No files matched your search

+28
View File
@@ -5,6 +5,7 @@ extends CanvasLayer
const Rules := preload("res://src/core/rules.gd")
const Strings := preload("res://src/core/strings.gd")
const UiArt := preload("res://src/game/ui/art.gd")
const T_VIGNETTE := preload("res://assets/textures/ai/game_ready/vignette.png")
const T_ICON_FLASH := preload("res://assets/textures/ai/game_ready/icons/flashlight_on.png")
const T_ICON_DOOR := preload("res://assets/textures/ai/game_ready/icons/door_locked.png")
@@ -51,6 +52,8 @@ var _controls_label: Label
var _debug_enabled := false
var _log_lines: Array[String] = []
var _cam_overlay: Control = null
var _wand_art_layer: Control = null
var _wand_art := UiArt.new()
var _body_camera_on := false
var _font_scale := 1.0
var _base_font_sizes: Dictionary = {}
@@ -235,12 +238,33 @@ func _init() -> void:
inspect_center.add_child(inspect_panel)
# --- wand screening panel (popup center) ---
_wand_art_layer = Control.new()
_wand_art_layer.name = "WandArt"
_wand_art_layer.set_anchors_preset(Control.PRESET_FULL_RECT)
_wand_art_layer.mouse_filter = Control.MOUSE_FILTER_IGNORE
_wand_art_layer.visible = false
add_child(_wand_art_layer)
if not _wand_art.add_screen_backdrop(_wand_art_layer, "wand_screening",
Rect2(0.236, 0.094, 0.453, 0.884)):
var wand_dim := ColorRect.new()
wand_dim.color = Color(0, 0, 0, 0.55)
wand_dim.set_anchors_preset(Control.PRESET_FULL_RECT)
wand_dim.mouse_filter = Control.MOUSE_FILTER_IGNORE
_wand_art_layer.add_child(wand_dim)
var wand_center := CenterContainer.new()
wand_center.set_anchors_preset(Control.PRESET_FULL_RECT)
wand_center.mouse_filter = Control.MOUSE_FILTER_IGNORE
add_child(wand_center)
wand_panel = PanelContainer.new()
wand_panel.visible = false
wand_panel.custom_minimum_size = Vector2(440, 0)
var wand_style := StyleBoxFlat.new()
wand_style.bg_color = Color(0, 0, 0, 0)
wand_style.content_margin_left = 26
wand_style.content_margin_right = 26
wand_style.content_margin_top = 18
wand_style.content_margin_bottom = 18
wand_panel.add_theme_stylebox_override("panel", wand_style)
var wvbox := VBoxContainer.new()
wand_panel.add_child(wvbox)
wand_text = Label.new()
@@ -526,6 +550,10 @@ func show_wand(controller: Object, result: Dictionary) -> void:
lines.append("No alert. The guest appears clear.")
wand_meta.text = "\n".join(lines)
wand_panel.visible = true
if _wand_art_layer:
_wand_art_layer.visible = true
func hide_wand() -> void:
wand_panel.visible = false
if _wand_art_layer:
_wand_art_layer.visible = false