scopedvr-map-core/editor/mouse_pointer.gd
2026-11-01 19:31:33 +01:00

39 lines
1.3 KiB
GDScript

class_name MousePointer
extends RefCounted
## Übersetzt Maus und Esc-Taste in PointerEvent. Die rechte Maustaste fehlt
## absichtlich: sie gehört dem Freelook-Flug (orbit_camera.gd).
static func from_input(event: InputEvent) -> PointerEvent:
if event is InputEventMouseMotion:
var mm := event as InputEventMouseMotion
var p := PointerEvent.make(PointerEvent.Kind.MOVE, mm.position)
p.shift = mm.shift_pressed
p.ctrl = mm.ctrl_pressed
p.command = mm.is_command_or_control_pressed()
p.pressure = mm.pressure
return p
if event is InputEventMouseButton:
var mb := event as InputEventMouseButton
var kind := PointerEvent.Kind.MOVE
var scroll := 0
match mb.button_index:
MOUSE_BUTTON_LEFT:
kind = PointerEvent.Kind.PRESS if mb.pressed else PointerEvent.Kind.RELEASE
MOUSE_BUTTON_WHEEL_UP, MOUSE_BUTTON_WHEEL_DOWN:
if not mb.pressed:
return null
kind = PointerEvent.Kind.SCROLL
scroll = 1 if mb.button_index == MOUSE_BUTTON_WHEEL_UP else -1
_:
return null
var p := PointerEvent.make(kind, mb.position)
p.shift = mb.shift_pressed
p.ctrl = mb.ctrl_pressed
p.command = mb.is_command_or_control_pressed()
p.scroll = scroll
return p
if event is InputEventKey and (event as InputEventKey).pressed \
and (event as InputEventKey).keycode == KEY_ESCAPE:
return PointerEvent.make(PointerEvent.Kind.CANCEL)
return null