scopedvr-map-core/ui/panels/test_start_panel.gd
2026-11-01 19:31:33 +01:00

63 lines
2.4 KiB
GDScript

extends "res://core/ui/panels/editor_panel.gd"
## Test-Start-Bereich (rechte Spalte — Karte t_96e3c4ee / T1b, Wiederanbindung
## durch den Operator am 20.10.).
##
## Aufteilung: der ZUSTAND lebt in main.gd (`test_start_point`) samt den Haken
## `_test_start_apply` / `_test_start_delete` / `_test_start_reload`, weil die
## Prüfsuite tests/test_playtest_spawn.gd (56 checks) genau diese drei Namen auf
## main erwartet — das ist der T1b-Vertrag. Beim U1-Umbau waren sie verschwunden,
## die Suite brach mit „Nonexistent function '_test_start_reload'" ab.
## Dieses Modul zeigt den Zustand nur an (Info-Text + Löschen-Knopf) und meldet
## sich datengetrieben über registry.gd an — main.gd verdrahtet nichts fest.
var info: Label
var delete_btn: Button
var info_hint: Label
static func spec() -> Dictionary:
return {"titel": "Test-Start", "gruppe": "map", "order": 20}
func panel_title() -> String:
return "Test-Start (F5)"
func build() -> void:
add_child(_header_label("Startpunkt für „▶ Karte testen“"))
info = Label.new()
info.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
add_child(info)
delete_btn = Button.new()
delete_btn.text = "🗑 Test-Start löschen"
delete_btn.custom_minimum_size = UIScale.v2(0, 40)
delete_btn.tooltip_text = "Test-Startpunkt entfernen — F5 startet dann wieder am ersten Team-Spawnpunkt."
delete_btn.pressed.connect(func() -> void: main.call("_test_start_delete"))
add_child(delete_btn)
add_child(_separator())
info_hint = Label.new()
info_hint.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
info_hint.text = "Leiste „🎯 Test-Start“ oder Taste T, dann in die Karte klicken."
add_child(info_hint)
# main holt sich das Modul hier ab (main._refresh_test_start_panel) — die
# Prüfsuite liest es als main.test_start_panel. Sichtbar erst, wenn das
# Werkzeug aktiv ist (wie vor dem U1-Umbau).
main.set("test_start_panel", self)
visible = false
refresh_point(main.get("test_start_point"))
## Wird von main._refresh_test_start_panel() gerufen. point = Vector3 oder null.
func refresh_point(point: Variant) -> void:
if info == null or delete_btn == null:
return
if point == null:
info.text = "Kein Test-Start gesetzt.\nF5 startet dann am ersten Team-Blau-Spawnpunkt (ohne Spawnpunkte: Kartenmitte)."
delete_btn.disabled = true
else:
var p: Vector3 = point
info.text = "Test-Start: x=%.0f z=%.0f\n(Höhe kommt automatisch vom Terrain)" % [p.x, p.z]
delete_btn.disabled = false