79 lines
2.6 KiB
GDScript
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)
|