39 lines
1.3 KiB
GDScript
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
|