def mode_LINEAR(self, x, y, range):
"""
Input value is scaled, so entire output range is covered by
reduced input range of deadzone.
"""
if y == 0:
# Small optimalization for 1D input, for example trigger
return copysign(
clamp(
0,
((x - self.lower) / (self.upper - self.lower)) * range,
range),
x
), 0
distance = clamp(self.lower, sqrt(x*x + y*y), self.upper)
distance = (distance - self.lower) / (self.upper - self.lower) * range
angle = atan2(x, y)
return distance * sin(angle), distance * cos(angle)
评论列表
文章目录