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