scopedvr-map-editor/tests/probe_drag_echt.gd
2026-11-01 19:34:05 +01:00

79 lines
2.6 KiB
GDScript

extends SceneTree
## Echter Maus-Drag im sichtbaren Fenster (nicht headless): Kachel drücken, über die
## Szene ziehen, loslassen → genau ein Objekt gesetzt. Ausführen:
## godot4 --rendering-driver opengl3 --path . --script res://tests/probe_drag_echt.gd
func _mouse(pos: Vector2, pressed: bool, motion := false) -> void:
var ev: InputEvent
if motion:
var mm := InputEventMouseMotion.new()
mm.position = pos
mm.global_position = pos
mm.relative = Vector2(4, 4)
mm.button_mask = MOUSE_BUTTON_MASK_LEFT
ev = mm
else:
var mb := InputEventMouseButton.new()
mb.button_index = MOUSE_BUTTON_LEFT
mb.position = pos
mb.global_position = pos
mb.pressed = pressed
mb.button_mask = MOUSE_BUTTON_MASK_LEFT if pressed else 0
ev = mb
root.push_input(ev)
func _init() -> void:
root.size = Vector2i(1600, 900)
var main: Control = (load("res://core/scenes/main.tscn") as PackedScene).instantiate()
root.add_child(main)
for i in 10:
await process_frame
main.sym_mode = SymmetryCore.Mode.OFF
var vc0: Control = main.interaction.camera.get_viewport().get_parent()
var n0: int = (main.doc["objects"] as Array).size()
var oid := "barrel_001"
main.assets_mod._on_library_expand_all()
for i in 5:
await process_frame
var btn: Button = main.library_buttons.get(oid)
print("window=", root.size, " btn=", btn)
btn.get_parent().get_parent()
# Kachel in Sicht scrollen
var p := btn.get_parent()
while p != null and not (p is ScrollContainer):
p = p.get_parent()
if p != null:
(p as ScrollContainer).ensure_control_visible(btn)
for i in 5:
await process_frame
var r := btn.get_global_rect()
print("Kachel rect=", r)
var start := r.get_center()
var vc: Control = main.interaction.camera.get_viewport().get_parent()
var vr := vc.get_global_rect()
print("Szene rect=", vr)
var ziel := vr.get_center()
_mouse(start, false, true)
await process_frame
_mouse(start, true)
await process_frame
var steps := 25
for i in steps + 1:
var pos := start.lerp(ziel, float(i) / steps)
_mouse(pos, false, true)
await process_frame
for j in 6:
_mouse(ziel + Vector2(j * 3, j * 2), false, true)
await process_frame
var hov := root.gui_get_hovered_control()
print("Hover-Control: ", hov, " pfad=", hov.get_path() if hov != null else "-")
print("DragData=", root.gui_get_drag_data())
print("während Drag: dragging=", root.gui_is_dragging(), " placing=", main.interaction.placing)
_mouse(ziel, false)
for i in 4:
await process_frame
var n1: int = (main.doc["objects"] as Array).size()
print("Objekte: %d → %d placing=%s" % [n0, n1, main.interaction.placing])
print("ERGEBNIS: ", "OK" if n1 == n0 + 1 else "FEHLER")
quit(0 if n1 == n0 + 1 else 1)