Playtest: Splitter-Lagen bleiben erhalten (Sly-Befund 20.10.)
Beim Start des Test-Modus versteckt der Editor die Panels — Godot klappt dabei die Splitter zusammen (Lage springt z. B. [-320,0] → [160]), beim Wiedereinblenden baut er die Trenner mit Defaults wieder auf → die fein gezogenen Seitenbereiche waren weg („riesen groß"). Fix in main.gd (besitzt die UI, überlebt den Playtest-Node): beim Start alle split_offsets von MainSplit/BottomSplit sichern, im Exit-Handler deferred UND im nächsten Frame zurücksetzen (das Layout muss die Panels erst neu vermessen haben). Suite test_playtest 52/52 (mit Splitter-Regression: merken → verbiegen → Exit → unverändert), test_ui_layout 79, test_gui_smoke 92 grün.
This commit is contained in:
parent
812da1a261
commit
7a1b5037e7
2 changed files with 65 additions and 0 deletions
|
|
@ -187,6 +187,7 @@ var test_btn: Button
|
||||||
|
|
||||||
# U1-Dock-Zustand: Splitter-Lagen ([fenster]-Abschnitt, gemerkt)
|
# U1-Dock-Zustand: Splitter-Lagen ([fenster]-Abschnitt, gemerkt)
|
||||||
var _dock_offsets: Dictionary = {}
|
var _dock_offsets: Dictionary = {}
|
||||||
|
var _split_lagen_playtest: Dictionary = {} # Playtest: Trenner-Lagen (Sly-Befund 20.10.)
|
||||||
|
|
||||||
const GizmoScript := preload("res://src/viewport/gizmo.gd")
|
const GizmoScript := preload("res://src/viewport/gizmo.gd")
|
||||||
const INSPECTOR_PANEL := preload("res://src/ui/inspector_panel.gd")
|
const INSPECTOR_PANEL := preload("res://src/ui/inspector_panel.gd")
|
||||||
|
|
@ -1105,6 +1106,14 @@ func _start_playtest() -> void:
|
||||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||||
playtest = load("res://src/editor/playtest/playtest_mode.gd").new()
|
playtest = load("res://src/editor/playtest/playtest_mode.gd").new()
|
||||||
playtest.ui_panels = [ui_top_bar, ui_left_panel, ui_right_panel, ui_status_bar]
|
playtest.ui_panels = [ui_top_bar, ui_left_panel, ui_right_panel, ui_status_bar]
|
||||||
|
# Trenner-Lagen JETZT sichern (Sly-Befund 20.10.: beim Verstecken der
|
||||||
|
# Panels klappen die Trenner zusammen — nach dem Playtest mussten die
|
||||||
|
# Seitenbereiche neu gezogen werden). Wiederherstellung im Exit-Handler.
|
||||||
|
_split_lagen_playtest.clear()
|
||||||
|
for sname in ["MainSplit", "BottomSplit"]:
|
||||||
|
var sp := _find_split(sname)
|
||||||
|
if sp != null:
|
||||||
|
_split_lagen_playtest[sname] = sp.split_offsets.duplicate()
|
||||||
playtest.ui_status = status_label
|
playtest.ui_status = status_label
|
||||||
playtest.help_label = help_label
|
playtest.help_label = help_label
|
||||||
playtest.exit_requested.connect(_on_playtest_exit_requested)
|
playtest.exit_requested.connect(_on_playtest_exit_requested)
|
||||||
|
|
@ -1146,6 +1155,22 @@ func _on_playtest_exit_requested() -> void:
|
||||||
tool_mode = _playtest_tool_mode
|
tool_mode = _playtest_tool_mode
|
||||||
_update_tool_label()
|
_update_tool_label()
|
||||||
_set_status("Testlauf beendet — zurück im Editor (Auswahl und Dokument unverändert).")
|
_set_status("Testlauf beendet — zurück im Editor (Auswahl und Dokument unverändert).")
|
||||||
|
# Trenner-Lagen zurücksetzen (Sly-Befund 20.10.): das Re-Layout nach dem
|
||||||
|
# Wiedereinblenden der Panels setzt die Trenner auf Defaults — die gemerkten
|
||||||
|
# Lagen deshalb deferred UND im nächsten Frame zurücksetzen (das Layout
|
||||||
|
# muss die Panels erst neu vermessen haben, sonst clampen sie erneut).
|
||||||
|
_playtest_split_lagen_zurueck.call_deferred()
|
||||||
|
get_tree().process_frame.connect(_playtest_split_lagen_zurueck, CONNECT_ONE_SHOT)
|
||||||
|
|
||||||
|
|
||||||
|
## Gemerkte Playtest-Trenner-Lagen zurück auf die Splitter schreiben.
|
||||||
|
func _playtest_split_lagen_zurueck() -> void:
|
||||||
|
if _split_lagen_playtest.is_empty():
|
||||||
|
return
|
||||||
|
for sname in _split_lagen_playtest.keys():
|
||||||
|
var sp := _find_split(str(sname))
|
||||||
|
if sp != null:
|
||||||
|
sp.split_offsets = _split_lagen_playtest[sname]
|
||||||
|
|
||||||
|
|
||||||
func _on_new_map_confirmed() -> void:
|
func _on_new_map_confirmed() -> void:
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,9 @@ func _run_all() -> void:
|
||||||
main.call("_refresh_all")
|
main.call("_refresh_all")
|
||||||
await process_frame
|
await process_frame
|
||||||
|
|
||||||
|
_test_splitter_lagen_merken()
|
||||||
_test_start_state()
|
_test_start_state()
|
||||||
|
_test_splitter_lagen_verbiegen()
|
||||||
await _test_terrain_height_matches_document()
|
await _test_terrain_height_matches_document()
|
||||||
await _test_wall_blocks_player()
|
await _test_wall_blocks_player()
|
||||||
await _test_step_up_semantics()
|
await _test_step_up_semantics()
|
||||||
|
|
@ -66,6 +68,7 @@ func _run_all() -> void:
|
||||||
await _test_yaw_relatives_laufen()
|
await _test_yaw_relatives_laufen()
|
||||||
await _test_bauteile_treppe_tuer()
|
await _test_bauteile_treppe_tuer()
|
||||||
_test_exit_restores_editor()
|
_test_exit_restores_editor()
|
||||||
|
await _test_splitter_lagen_pruefen()
|
||||||
|
|
||||||
_finish()
|
_finish()
|
||||||
|
|
||||||
|
|
@ -366,6 +369,43 @@ func _test_yaw_relatives_laufen() -> void:
|
||||||
_check(d1.x < -1.0 and absf(d1.z) < 0.6,
|
_check(d1.x < -1.0 and absf(d1.z) < 0.6,
|
||||||
"yaw 90° + W → Bewegung folgt Blick nach -X (d=%.1f, %.1f)" % [d1.x, d1.z])
|
"yaw 90° + W → Bewegung folgt Blick nach -X (d=%.1f, %.1f)" % [d1.x, d1.z])
|
||||||
|
|
||||||
|
## --- Test 6b: Splitter-Lagen überleben den Playtest (Sly-Befund 20.10.) -----
|
||||||
|
## Beim Verstecken der Panels klappen die Trenner zusammen; der Exit muss die
|
||||||
|
## gemerkten Lagen zurücksetzen. Der Test verbiegt die Lagen bewusst hart
|
||||||
|
## (wie der Clamp es tut) und verlangt nach dem Exit die Original-Lagen.
|
||||||
|
var _split_vor_start: Dictionary = {}
|
||||||
|
|
||||||
|
func _split_by_name(sname: String) -> SplitContainer:
|
||||||
|
var found := root.find_children(sname, "SplitContainer", true, false)
|
||||||
|
return found[0] if not found.is_empty() else null
|
||||||
|
|
||||||
|
func _test_splitter_lagen_merken() -> void:
|
||||||
|
# Bezugspunkt = VOR dem Start (nach dem Start klappen die Trenner bereits).
|
||||||
|
for sname in ["MainSplit", "BottomSplit"]:
|
||||||
|
var sp := _split_by_name(sname)
|
||||||
|
if sp != null:
|
||||||
|
_split_vor_start[sname] = Array(sp.split_offsets)
|
||||||
|
|
||||||
|
func _test_splitter_lagen_verbiegen() -> void:
|
||||||
|
var ms := _split_by_name("MainSplit")
|
||||||
|
if ms != null:
|
||||||
|
ms.split_offsets = PackedInt32Array([9999, 9999])
|
||||||
|
var bs := _split_by_name("BottomSplit")
|
||||||
|
if bs != null:
|
||||||
|
bs.split_offsets = PackedInt32Array([-9999])
|
||||||
|
|
||||||
|
func _test_splitter_lagen_pruefen() -> void:
|
||||||
|
for i in 3:
|
||||||
|
await process_frame
|
||||||
|
var ok := true
|
||||||
|
for sname in _split_vor_start.keys():
|
||||||
|
var sp := _split_by_name(str(sname))
|
||||||
|
if sp == null or Array(sp.split_offsets) != _split_vor_start[sname]:
|
||||||
|
ok = false
|
||||||
|
print(" DIFF ", sname, ": ", str(sp.split_offsets if sp != null else null),
|
||||||
|
" statt ", str(_split_vor_start[sname]))
|
||||||
|
_check(ok, "Splitter-Lagen nach Playtest unverändert (Sly-Befund)")
|
||||||
|
|
||||||
## --- Test 6: Rückkehr stellt den Editor-Zustand wieder her ------------------
|
## --- Test 6: Rückkehr stellt den Editor-Zustand wieder her ------------------
|
||||||
func _test_exit_restores_editor() -> void:
|
func _test_exit_restores_editor() -> void:
|
||||||
print("Testgruppe: Rückkehr in den Editor (Dokument + Undo unverändert)")
|
print("Testgruppe: Rückkehr in den Editor (Dokument + Undo unverändert)")
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue