joystick_gremlin_axis_to_sc.../axis_to_scrollwheel.py

57 lines
1.4 KiB
Python
Raw Normal View History

2025-01-19 17:39:31 +00:00
from datetime import datetime, timedelta
import gremlin
from gremlin.user_plugin import *
axis = PhysicalInputVariable(
"Axis",
"The axis that will trigger scrolling.",
[gremlin.common.InputType.JoystickAxis],
)
mode = ModeVariable(
"Mode",
"The mode in which the axis will be mapped.",
)
response_coefficient = FloatVariable(
"Scroll Speed",
"Adjusts the rate at which the target button is pressed, relative to the axis strength.",
1.0,
)
deadzone = FloatVariable(
"Deadzone",
"Applies a deadzone to both sides of the axis.",
0.0,
)
# NB: Not a real boolean; invert.value returns 0 or 2
invert = BoolVariable(
"Invert",
"Reverse the direction that the axis scrolls.",
False,
)
axis_decorator = axis.create_decorator(mode.value)
# Stateful data
last_timestamp = datetime.now()
@axis_decorator.axis(axis.input_id)
# @gremlin.input_devices.periodic(1)
def handle_axis(event):
global last_timestamp
# axis_value = joy[axis.device_guid].axis(axis.input_id).value
axis_value = event.value
if (abs(axis_value) < deadzone.value):
return
delta = (datetime.now() - last_timestamp) / timedelta(milliseconds=1)
if delta >= (1 - abs(axis_value)) * 250 * response_coefficient.value:
direction = 1 if axis_value > 0 else -1
if invert.value: direction = direction * -1
gremlin.sendinput.mouse_wheel(direction)
last_timestamp = datetime.now()