mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-14 15:56:23 -04:00
Improve joystick analog conversion
cVS: ----------------------------------------------------------------------
This commit is contained in:
parent
289e11b386
commit
9153d8fe8f
@ -135,25 +135,28 @@ class DirectAnalogs(AnalogNode, DirectObject):
|
|||||||
((val - self.analogMin) / float(self.analogRange))) + minVal)
|
((val - self.analogMin) / float(self.analogRange))) + minVal)
|
||||||
|
|
||||||
|
|
||||||
def normalize(self, val, minVal = -1, maxVal = 1, sf = 1.0):
|
def normalize(self, rawValue, minVal = -1, maxVal = 1, sf = 1.0):
|
||||||
max = self.analogMax
|
aMax = self.analogMax
|
||||||
min = self.analogMin
|
aMin = self.analogMin
|
||||||
center = self.analogCenter
|
center = self.analogCenter
|
||||||
deadband = self.analogDeadband
|
deadband = self.analogDeadband
|
||||||
range = self.analogRange
|
range = self.analogRange
|
||||||
# Zero out values in deadband
|
# Zero out values in deadband
|
||||||
if (abs(val) <= deadband):
|
if (abs(rawValue-center) <= deadband):
|
||||||
return 0.0
|
return 0.0
|
||||||
# Apply scale factor
|
# Clamp value between aMin and aMax and scale around center
|
||||||
val *= sf
|
if (rawValue >= center):
|
||||||
# Clamp value between min and max and scale around center
|
# Convert positive values to range 0 to 1
|
||||||
if (val >= center):
|
val = min(rawValue * sf, aMax)
|
||||||
val = (val - center) / float(max - center)
|
percentVal = ((val - (center + deadband))/
|
||||||
|
float(aMax - (center + deadband)))
|
||||||
else:
|
else:
|
||||||
val = (val - center) / float(center - min)
|
# Convert negative values to range -1 to 0
|
||||||
|
val = max(rawValue * sf, aMin)
|
||||||
|
percentVal = -((val - (center - deadband))/
|
||||||
|
float(aMin - (center - deadband)))
|
||||||
# Normalize values to given minVal and maxVal range
|
# Normalize values to given minVal and maxVal range
|
||||||
return (((maxVal - minVal) *
|
return (((maxVal - minVal) * ((percentVal + 1)/2.0)) + minVal)
|
||||||
((val - min) / float(range))) + minVal)
|
|
||||||
|
|
||||||
def normalizeChannel(self, chan, minVal = -1, maxVal = 1, sf = 1.0):
|
def normalizeChannel(self, chan, minVal = -1, maxVal = 1, sf = 1.0):
|
||||||
try:
|
try:
|
||||||
|
@ -283,6 +283,12 @@ class DirectJoybox(PandaObject):
|
|||||||
self.modifier = [1,1,-1,-1,-1,1]
|
self.modifier = [1,1,-1,-1,-1,1]
|
||||||
self.setMode(self.joyboxFly, 'HprXyz Mode')
|
self.setMode(self.joyboxFly, 'HprXyz Mode')
|
||||||
|
|
||||||
|
def mopathMode(self):
|
||||||
|
self.mapping = [R_LEFT_RIGHT, R_FWD_BACK, R_TWIST,
|
||||||
|
L_LEFT_RIGHT, L_FWD_BACK, L_LEFT_RIGHT]
|
||||||
|
self.modifier = [1,1,-1,-1,1,0]
|
||||||
|
self.setMode(self.joyboxFly, 'Mopath Mode')
|
||||||
|
|
||||||
def walkthruMode(self):
|
def walkthruMode(self):
|
||||||
self.mapping = [R_LEFT_RIGHT, R_FWD_BACK, L_TWIST,
|
self.mapping = [R_LEFT_RIGHT, R_FWD_BACK, L_TWIST,
|
||||||
R_TWIST, L_FWD_BACK, L_LEFT_RIGHT]
|
R_TWIST, L_FWD_BACK, L_LEFT_RIGHT]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user