256 lines
4.9 KiB
Python
Executable File
256 lines
4.9 KiB
Python
Executable File
"""
|
|
Directions Buttons defined correctly only for PS3 and USBJoystick
|
|
|
|
|
|
Represent various videogame controllers
|
|
|
|
TODO: Various play schemes/configs
|
|
XXX: UNTESTED
|
|
"""
|
|
|
|
import re
|
|
|
|
def setup_controls(joystick):
|
|
"""
|
|
Joystick wrapper.
|
|
"""
|
|
if re.search('playstation', joystick.get_name(), re.I):
|
|
return Ps3Controller(joystick)
|
|
|
|
elif re.search('X-box', joystick.get_name(), re.I):
|
|
return XboxController(joystick)
|
|
|
|
elif re.search('Saitek', joystick.get_name(), re.I):
|
|
return MySaitekController(joystick)
|
|
|
|
elif re.search('Thrustmaster dual analog 3.2', joystick.get_name(), re.I):
|
|
return MyThrustController(joystick)
|
|
|
|
elif re.search('2n1 USB', joystick.get_name(), re.I):
|
|
return CSLController(joystick)
|
|
|
|
elif re.search('Joystick', joystick.get_name(), re.I):
|
|
return USBController(joystick)
|
|
|
|
return Controller(joystick)
|
|
|
|
class Controller(object):
|
|
|
|
def __init__(self, joystick):
|
|
"""Pass a PyGame joystick instance."""
|
|
self.js = joystick
|
|
|
|
def getLeftHori(self):
|
|
return self.js.get_axis(2)
|
|
|
|
def getLeftVert(self):
|
|
return self.js.get_axis(3)
|
|
|
|
def getRightHori(self):
|
|
return self.js.get_axis(0)
|
|
|
|
def getRightVert(self):
|
|
return self.js.get_axis(1)
|
|
|
|
def getLeftTrigger(self):
|
|
return self.js.get_button(9)
|
|
|
|
def getRightTrigger(self):
|
|
return self.js.get_button(2)
|
|
|
|
class XboxController(Controller):
|
|
|
|
def __init__(self, joystick):
|
|
super(XboxController, self).__init__(joystick)
|
|
|
|
def getLeftHori(self):
|
|
return self.js.get_axis(0)
|
|
|
|
def getLeftVert(self):
|
|
return self.js.get_axis(1)
|
|
|
|
def getRightHori(self):
|
|
return self.js.get_axis(3)
|
|
|
|
def getRightVert(self):
|
|
return self.js.get_axis(4)
|
|
|
|
def getLeftTrigger(self):
|
|
return self.js.get_axis(2)
|
|
|
|
def getRightTrigger(self):
|
|
return self.js.get_button(11)
|
|
|
|
class Ps3Controller(Controller):
|
|
|
|
#up 4 _DOWN 6 left 7 right 5 croix 14 rond 13 triangle 12
|
|
|
|
def __init__(self, joystick):
|
|
super(Ps3Controller, self).__init__(joystick)
|
|
|
|
def getLeftHori(self):
|
|
return self.js.get_axis(0)
|
|
|
|
def getLeftVert(self):
|
|
return self.js.get_axis(1)
|
|
|
|
def getRightHori(self):
|
|
return self.js.get_axis(2)
|
|
|
|
def getRightVert(self):
|
|
return self.js.get_axis(3)
|
|
|
|
def getLeftTrigger(self):
|
|
# TODO: Verify
|
|
return self.js.get_button(8)
|
|
|
|
def getRightTrigger(self):
|
|
# TODO: Verify
|
|
return self.js.get_button(9)
|
|
|
|
def getUp(self):
|
|
return self.js.get_button(4)
|
|
|
|
def getDown(self):
|
|
return self.js.get_button(6)
|
|
|
|
def getLeft(self):
|
|
return self.js.get_button(7)
|
|
|
|
def getRight(self):
|
|
return self.js.get_button(5)
|
|
|
|
def getFire1(self):
|
|
return self.js.get_button(14)
|
|
|
|
def getFire2(self):
|
|
return self.js.get_button(13)
|
|
|
|
|
|
class MySaitekController(Controller):
|
|
|
|
def __init__(self, joystick):
|
|
super(MySaitekController, self).__init__(joystick)
|
|
|
|
def getLeftHori(self):
|
|
return self.js.get_axis(0)
|
|
|
|
def getLeftVert(self):
|
|
return self.js.get_axis(1)
|
|
|
|
def getRightHori(self):
|
|
return self.js.get_axis(3)
|
|
|
|
def getRightVert(self):
|
|
return self.js.get_axis(2)
|
|
|
|
def getLeftTrigger(self):
|
|
return self.js.get_button(6)
|
|
|
|
def getRightTrigger(self):
|
|
return self.js.get_button(7)
|
|
|
|
class MyThrustController(Controller):
|
|
|
|
def __init__(self, joystick):
|
|
super(MyThrustController, self).__init__(joystick)
|
|
|
|
def getLeftHori(self):
|
|
return self.js.get_axis(0)
|
|
|
|
def getLeftVert(self):
|
|
return self.js.get_axis(1)
|
|
|
|
def getRightHori(self):
|
|
return self.js.get_axis(2)
|
|
|
|
def getRightVert(self):
|
|
return self.js.get_axis(3)
|
|
|
|
def getLeftTrigger(self):
|
|
return self.js.get_button(5)
|
|
|
|
def getRightTrigger(self):
|
|
return self.js.get_button(7)
|
|
|
|
|
|
class CSLController(Controller):
|
|
|
|
def __init__(self, joystick):
|
|
super(CSLController, self).__init__(joystick)
|
|
|
|
def getLeftHori(self):
|
|
return self.js.get_axis(2)
|
|
|
|
def getLeftVert(self):
|
|
return self.js.get_axis(3)
|
|
|
|
def getRightHori(self):
|
|
return self.js.get_axis(0)
|
|
|
|
def getRightVert(self):
|
|
return self.js.get_axis(1)
|
|
|
|
def getLeftTrigger(self):
|
|
return self.js.get_button(6)
|
|
|
|
def getRightTrigger(self):
|
|
return self.js.get_button(7)
|
|
|
|
def getFire1(self):
|
|
return self.js.get_button(2)
|
|
|
|
def getFire2(self):
|
|
return self.js.get_button(1)
|
|
|
|
class USBController(Controller):
|
|
|
|
|
|
# my USB Joystick
|
|
#up axis 0 -1 DOWN axis 0 1 left axis 1 1 right axis 1 -1 bouton gauche 10 bouton droite 9
|
|
|
|
def __init__(self, joystick):
|
|
super(USBController, self).__init__(joystick)
|
|
|
|
|
|
def getUp(self):
|
|
if self.js.get_axis(0) == -1:
|
|
return 1
|
|
else:
|
|
return 0
|
|
|
|
def getDown(self):
|
|
if self.js.get_axis(0) > 0.9:
|
|
return 1
|
|
else:
|
|
return 0
|
|
|
|
def getLeft(self):
|
|
if self.js.get_axis(1) == 1:
|
|
return 1
|
|
else:
|
|
return 0
|
|
|
|
def getRight(self):
|
|
if self.js.get_axis(1) == -1:
|
|
return 1
|
|
else:
|
|
return 0
|
|
|
|
def getLeftTrigger(self):
|
|
return self.js.get_button(10)
|
|
|
|
def getRightTrigger(self):
|
|
return self.js.get_button(9)
|
|
|
|
def getFire1(self):
|
|
if self.js.get_button(10) == 1:
|
|
print "fire 1"
|
|
return self.js.get_button(10)
|
|
|
|
def getFire2(self):
|
|
if self.js.get_button(9) == 1:
|
|
print "fire 2"
|
|
return self.js.get_button(9)
|
|
|