mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-23 11:42:39 -06:00
118 lines
4 KiB
Python
118 lines
4 KiB
Python
|
from panda3d.core import *
|
||
|
from direct.showbase.DirectObject import DirectObject
|
||
|
from direct.gui.DirectGui import DirectButton
|
||
|
from direct.gui.OnscreenText import OnscreenText
|
||
|
from direct.task import Task
|
||
|
from toontown.toonbase import ToontownGlobals
|
||
|
from toontown.parties.KeyCodes import KeyCodes, KEYCODE_TIMEOUT_SECONDS
|
||
|
KEY_TO_INDEX = {'u': 0,
|
||
|
'r': 1,
|
||
|
'd': 2,
|
||
|
'l': 3}
|
||
|
|
||
|
class KeyCodesGui(DirectObject):
|
||
|
notify = directNotify.newCategory('KeyCodesGui')
|
||
|
TIMEOUT_TASK = 'KeyCodeGui_TIMEOUT_TASK'
|
||
|
|
||
|
def __init__(self, keyCodes, yOffset = 0.55, keyToIndex = KEY_TO_INDEX):
|
||
|
self._keyCodes = keyCodes
|
||
|
self._keyToIndex = keyToIndex
|
||
|
self._arrowWidth = 0.18
|
||
|
self._arrowSpaceInBetween = 0.05
|
||
|
self._yOffset = yOffset
|
||
|
self._danceMoveLabel = None
|
||
|
self._arrowNodes = []
|
||
|
self.timeoutTask = None
|
||
|
return
|
||
|
|
||
|
def load(self):
|
||
|
matchingGameGui = loader.loadModel('phase_3.5/models/gui/matching_game_gui')
|
||
|
minnieArrow = matchingGameGui.find('**/minnieArrow')
|
||
|
minnieArrow.setScale(0.6)
|
||
|
minnieArrow.setZ(self._yOffset + 0.2)
|
||
|
maxLength = self._keyCodes.getLargestPatternLength()
|
||
|
for i in xrange(maxLength):
|
||
|
arrow = minnieArrow.copyTo(hidden)
|
||
|
self._arrowNodes.append(arrow)
|
||
|
|
||
|
matchingGameGui.removeNode()
|
||
|
self._danceMoveLabel = OnscreenText(parent=aspect2d, text='', pos=(0, self._yOffset), scale=0.15, align=TextNode.ACenter, font=ToontownGlobals.getSignFont(), fg=Vec4(1, 1, 1, 1), mayChange=True)
|
||
|
self._danceMoveLabel.hide()
|
||
|
self.enable()
|
||
|
|
||
|
def unload(self):
|
||
|
self.disable()
|
||
|
for arrow in self._arrowNodes:
|
||
|
arrow.removeNode()
|
||
|
arrow = None
|
||
|
|
||
|
self._arrowNodes = []
|
||
|
if self._danceMoveLabel is not None:
|
||
|
self._danceMoveLabel.removeNode()
|
||
|
self._danceMoveLabel = None
|
||
|
return
|
||
|
|
||
|
def enable(self):
|
||
|
self.notify.debug('KeyCodeGui enabled.')
|
||
|
self.accept(KeyCodes.KEY_DOWN_EVENT, self.__handleKeyDown)
|
||
|
self.accept(KeyCodes.CLEAR_CODE_EVENT, self.hideAll)
|
||
|
|
||
|
def disable(self):
|
||
|
self.notify.debug('KeyCodeGui disabled.')
|
||
|
self.__stopTimeout()
|
||
|
self.ignoreAll()
|
||
|
|
||
|
def hideArrows(self, startIndex = 0):
|
||
|
length = len(self._arrowNodes)
|
||
|
if startIndex < length:
|
||
|
for i in xrange(startIndex, length):
|
||
|
self._arrowNodes[i].reparentTo(hidden)
|
||
|
|
||
|
def hideAll(self, startIndex = 0):
|
||
|
self.hideArrows(startIndex)
|
||
|
if self._danceMoveLabel:
|
||
|
self._danceMoveLabel.hide()
|
||
|
|
||
|
def showArrow(self, index, key):
|
||
|
self._arrowNodes[index].setR(-(90 - 90 * self._keyToIndex[key]))
|
||
|
self._arrowNodes[index].setColor(1, 1, 1, 1)
|
||
|
self.__centerArrows()
|
||
|
self._arrowNodes[index].reparentTo(aspect2d)
|
||
|
self.hideAll(index + 1)
|
||
|
self.__startTimeout()
|
||
|
|
||
|
def showText(self, text = ''):
|
||
|
self.notify.debug('"Showing text "%s"' % text)
|
||
|
self._danceMoveLabel['text'] = text
|
||
|
self._danceMoveLabel.show()
|
||
|
|
||
|
def setColor(self, r, g, b):
|
||
|
for arrow in self._arrowNodes:
|
||
|
arrow.setColor(r, g, b)
|
||
|
|
||
|
self._danceMoveLabel.setColorScale(r, g, b, 1)
|
||
|
|
||
|
def __startTimeout(self):
|
||
|
self.__stopTimeout()
|
||
|
self.timeoutTask = taskMgr.doMethodLater(KEYCODE_TIMEOUT_SECONDS, self.__handleTimeoutTask, KeyCodesGui.TIMEOUT_TASK)
|
||
|
|
||
|
def __stopTimeout(self):
|
||
|
if self.timeoutTask is not None:
|
||
|
taskMgr.remove(self.timeoutTask)
|
||
|
self.timeoutTask = None
|
||
|
return
|
||
|
|
||
|
def __handleTimeoutTask(self, task):
|
||
|
self.hideAll()
|
||
|
return Task.done
|
||
|
|
||
|
def __centerArrows(self):
|
||
|
length = self._keyCodes.getCurrentInputLength()
|
||
|
for i in xrange(length):
|
||
|
x = -(length * self._arrowWidth * 0.5) + self._arrowWidth * (i + 0.5)
|
||
|
self._arrowNodes[i].setX(x)
|
||
|
|
||
|
def __handleKeyDown(self, key, index):
|
||
|
if index >= 0:
|
||
|
self.showArrow(index, key)
|