Skip to content

Instantly share code, notes, and snippets.

@WhiteMagic
Last active May 1, 2021 00:28
Show Gist options
  • Save WhiteMagic/aea4406f4b02f12e167eb35c4a0f2ec8 to your computer and use it in GitHub Desktop.
Save WhiteMagic/aea4406f4b02f12e167eb35c4a0f2ec8 to your computer and use it in GitHub Desktop.
import math
import gremlin
# Define all used devices
mt50_l= gremlin.input_devices.JoystickDecorator(
"MT50=DT_L",
gremlin.common.DeviceIdentifier(65740868, 1)
"Default"
)
crosswind = gremlin.input_devices.JoystickDecorator(
"MFG Crosswind V2",
gremlin.common.DeviceIdentifier(382732856, 2)
"Default"
)
hog_throttle = gremlin.input_devices.JoystickDecorator(
"Throttle - HOTAS Warthog",
gremlin.common.DeviceIdentifier(72287236, 3)
"Default"
)
class ValueCombiner:
vjoy_proxy = gremlin.joystick_handling.VJoyProxy()
def __init__(self, vjoy_axis_id):
self.vjoy_axis_id = vjoy_axis_id
self.value1 = 0.0
self.value2 = 0.0
def update_vjoy(self):
value = min(1.0, max(-1.0, self.value1 + self.value2))
ValueCombiner.vjoy_proxy[1].axis(self.vjoy_axis_id).value = value
def set_value1(self, value):
self.value1 = value
self.update_vjoy()
def set_value2(self, value):
self.value2 = value
self.update_vjoy()
# Sensitivity curve setup and deadzone
default_curve = gremlin.spline.CubicSpline([
(-1.00, 1.00),
( 1.00, -1.00),
])
deadzone = lambda value: gremlin.input_devices.deadzone(value, -1.0, -0.4, 0.4, 1.0)
# Yaw merge
combiner_yaw = ValueCombiner(6)
@mt50_l.axis(3)
def combine_yaw_mt50(event):
combiner_yaw.set_value1(default_curve(deadzone(event.value)))
@crosswind.axis(3)
def combine_yaw_slaw(event):
combiner_yaw.set_value2(default_curve(deadzone(event.value)))
# Translation X merge
combiner_tx = ValueCombiner(4)
@mt50_l.axis(1)
def combine_tx_mt50(event):
combiner_tx.set_value1(default_curve(deadzone(event.value)))
@hog_throttle.axis(1)
def combine_tx_how(event):
combiner_tx.set_value2(default_curve(deadzone(event.value)))
# Translation Y merge
combiner_ty = ValueCombiner(5)
@mt50_l.axis(2)
def combine_ty_mt50(event):
combiner_ty.set_value1(default_curve(deadzone(event.value)))
@hog_throttle.axis(2)
def combine_ty_hog(event):
combiner_ty.set_value2(default_curve(deadzone(event.value)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment