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://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)