toontown-just-works/toontown/parties/PartyCogActivityInput.py
2024-07-07 18:08:39 -05:00

158 lines
5.3 KiB
Python

from direct.showbase.DirectObject import DirectObject
from pandac.PandaModules import ModifierButtons
ROTATE_LEFT_KEY = 'arrow_left'
ROTATE_RIGHT_KEY = 'arrow_right'
FORWARD_KEY = 'arrow_up'
BACKWARDS_KEY = 'arrow_down'
THROW_PIE_KEYS = ['control', 'delete', 'insert']
class PartyCogActivityInput(DirectObject):
notify = directNotify.newCategory('PartyCogActivityInput')
leftPressed = 0
rightPressed = 0
upPressed = 0
downPressed = 0
throwPiePressed = False
throwPieWasReleased = False
throwPiePressedStartTime = 0
def __init__(self, exitActivityCallback):
DirectObject.__init__(self)
self.exitActivityCallback = exitActivityCallback
self._prevModifierButtons = base.mouseWatcherNode.getModifierButtons()
def enable(self):
self.enableAimKeys()
self.enableThrowPieKeys()
def disable(self):
self.disableAimKeys()
self.disableThrowPieKeys()
def enableExitActivityKeys(self):
self.accept('escape', self.exitActivityCallback)
def disableExitActivityKeys(self):
self.ignore('escape')
def enableThrowPieKeys(self):
for key in THROW_PIE_KEYS:
self.accept(key, self.handleThrowPieKeyPressed, [key])
self.throwPiePressed = False
self.readyToThrowPie = False
def disableThrowPieKeys(self):
for key in THROW_PIE_KEYS:
self.ignore(key)
self.ignore(key + '-up')
def handleThrowPieKeyPressed(self, key):
if self.throwPiePressed:
return
self.throwPiePressed = True
self.accept(key + '-up', self.handleThrowPieKeyReleased, [key])
self.throwPiePressedStartTime = globalClock.getFrameTime()
def handleThrowPieKeyReleased(self, key):
if not self.throwPiePressed:
return
self.ignore(key + '-up')
self.throwPieWasReleased = True
self.throwPiePressed = False
def enableAimKeys(self):
self.leftPressed = 0
self.rightPressed = 0
base.mouseWatcherNode.setModifierButtons(ModifierButtons())
base.buttonThrowers[0].node().setModifierButtons(ModifierButtons())
self.accept(ROTATE_LEFT_KEY, self.__handleLeftKeyPressed)
self.accept(ROTATE_RIGHT_KEY, self.__handleRightKeyPressed)
self.accept(FORWARD_KEY, self.__handleUpKeyPressed)
self.accept(BACKWARDS_KEY, self.__handleDownKeyPressed)
def disableAimKeys(self):
self.ignore(ROTATE_LEFT_KEY)
self.ignore(ROTATE_RIGHT_KEY)
self.ignore(FORWARD_KEY)
self.ignore(BACKWARDS_KEY)
self.leftPressed = 0
self.rightPressed = 0
self.upPressed = 0
self.downPressed = 0
self.ignore(ROTATE_LEFT_KEY + '-up')
self.ignore(ROTATE_RIGHT_KEY + '-up')
self.ignore(FORWARD_KEY + '-up')
self.ignore(BACKWARDS_KEY + '-up')
base.mouseWatcherNode.setModifierButtons(self._prevModifierButtons)
base.buttonThrowers[0].node().setModifierButtons(self._prevModifierButtons)
def __handleLeftKeyPressed(self):
self.ignore(ROTATE_LEFT_KEY)
self.accept(ROTATE_LEFT_KEY + '-up', self.__handleLeftKeyReleased)
self.__leftPressed()
def __handleRightKeyPressed(self):
self.ignore(ROTATE_RIGHT_KEY)
self.accept(ROTATE_RIGHT_KEY + '-up', self.__handleRightKeyReleased)
self.__rightPressed()
def __handleLeftKeyReleased(self):
self.ignore(ROTATE_LEFT_KEY + '-up')
self.accept(ROTATE_LEFT_KEY, self.__handleLeftKeyPressed)
self.__leftReleased()
def __handleRightKeyReleased(self):
self.ignore(ROTATE_RIGHT_KEY + '-up')
self.accept(ROTATE_RIGHT_KEY, self.__handleRightKeyPressed)
self.__rightReleased()
def __handleUpKeyPressed(self):
self.ignore(FORWARD_KEY)
self.accept(FORWARD_KEY + '-up', self.__handleUpKeyReleased)
self.__upPressed()
def __handleUpKeyReleased(self):
self.ignore(FORWARD_KEY + '-up')
self.accept(FORWARD_KEY, self.__handleUpKeyPressed)
self.__upReleased()
def __handleDownKeyPressed(self):
self.ignore(BACKWARDS_KEY)
self.accept(BACKWARDS_KEY + '-up', self.__handleDownKeyReleased)
self.__downPressed()
def __handleDownKeyReleased(self):
self.ignore(BACKWARDS_KEY + '-up')
self.accept(BACKWARDS_KEY, self.__handleDownKeyPressed)
self.__downReleased()
def __leftPressed(self):
self.leftPressed = self.__enterControlActive(self.leftPressed)
def __rightPressed(self):
self.rightPressed = self.__enterControlActive(self.rightPressed)
def __upPressed(self):
self.upPressed = self.__enterControlActive(self.upPressed)
def __downPressed(self):
self.downPressed = self.__enterControlActive(self.downPressed)
def __leftReleased(self):
self.leftPressed = self.__exitControlActive(self.leftPressed)
def __rightReleased(self):
self.rightPressed = self.__exitControlActive(self.rightPressed)
def __upReleased(self):
self.upPressed = self.__exitControlActive(self.upPressed)
def __downReleased(self):
self.downPressed = self.__exitControlActive(self.downPressed)
def __enterControlActive(self, input):
return input + 1
def __exitControlActive(self, input):
return max(0, input - 1)