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

137 lines
5.5 KiB
Python

from pandac.PandaModules import TextNode
from direct.gui.DirectButton import DirectButton
from direct.gui.OnscreenText import OnscreenText
from direct.task.Task import Task
from toontown.toonbase import ToontownGlobals
from toontown.toonbase import TTLocalizer
from toontown.parties import PartyUtils
from toontown.parties import PartyGlobals
class TeamActivityGui:
COUNTDOWN_TASK_NAME = 'updateCountdownTask'
timer = None
statusText = None
countdownText = None
exitButton = None
switchButton = None
def __init__(self, activity):
self.activity = activity
def load(self):
buttonModels = loader.loadModel('phase_3.5/models/gui/inventory_gui')
upButton = buttonModels.find('**//InventoryButtonUp')
downButton = buttonModels.find('**/InventoryButtonDown')
rolloverButton = buttonModels.find('**/InventoryButtonRollover')
self.exitButton = DirectButton(relief=None, text=TTLocalizer.PartyTeamActivityExitButton, text_fg=(1, 1, 0.65, 1), text_pos=(0, -0.15), text_scale=0.5, image=(upButton, downButton, rolloverButton), image_color=(1, 0, 0, 1), image_scale=(14.5, 1, 9), pos=(0, 0, 0.8), scale=0.15, command=self.handleExitButtonClick)
self.exitButton.hide()
if self.activity.toonsCanSwitchTeams():
self.switchButton = DirectButton(relief=None, text=TTLocalizer.PartyTeamActivitySwitchTeamsButton, text_fg=(1, 1, 1, 1), text_pos=(0, 0.1), text_scale=0.5, image=(upButton, downButton, rolloverButton), image_color=(0, 1, 0, 1), image_scale=(15, 1, 15), pos=(0, 0, 0.5), scale=0.15, command=self.handleSwitchButtonClick)
self.switchButton.hide()
else:
self.switchButton = None
buttonModels.removeNode()
self.countdownText = OnscreenText(text='', pos=(0.0, -0.2), scale=PartyGlobals.TeamActivityTextScale * 1.2, fg=(1.0, 1.0, 0.65, 1.0), align=TextNode.ACenter, font=ToontownGlobals.getSignFont(), mayChange=True)
self.countdownText.hide()
self.statusText = OnscreenText(text='', pos=(0.0, 0.0), scale=PartyGlobals.TeamActivityTextScale, fg=PartyGlobals.TeamActivityStatusColor, align=TextNode.ACenter, font=ToontownGlobals.getSignFont(), mayChange=True)
self.statusText.hide()
self.timer = PartyUtils.getNewToontownTimer()
self.timer.hide()
return
def unload(self):
self.hideWaitToStartCountdown()
if self.exitButton is not None:
self.exitButton.destroy()
self.exitButton = None
if self.switchButton is not None:
self.switchButton.destroy()
self.switchButton = None
if self.countdownText is not None:
self.countdownText.destroy()
self.countdownText.removeNode()
self.countdownText = None
if self.statusText is not None:
self.statusText.destroy()
self.statusText.removeNode()
self.statusText = None
if self.timer is not None:
self.timer.destroy()
del self.timer
return
def showStatus(self, text):
self.statusText.setText(text)
self.statusText.show()
def hideStatus(self):
self.statusText.hide()
def enableExitButton(self):
self.exitButton.show()
def disableExitButton(self):
self.exitButton.hide()
def handleExitButtonClick(self):
self.disableExitButton()
self.disableSwitchButton()
self.activity.d_toonExitRequest()
def enableSwitchButton(self):
self.switchButton.show()
def disableSwitchButton(self):
if self.switchButton is not None:
self.switchButton.hide()
return
def handleSwitchButtonClick(self):
self.disableSwitchButton()
self.disableExitButton()
self.activity.d_toonSwitchTeamRequest()
def showWaitToStartCountdown(self, duration, waitToStartTimestamp, almostDoneCallback = None):
self._countdownAlmostDoneCallback = almostDoneCallback
currentTime = globalClock.getRealTime()
waitTimeElapsed = currentTime - waitToStartTimestamp
if duration - waitTimeElapsed > 1.0:
countdownTask = Task(self._updateCountdownTask)
countdownTask.duration = duration - waitTimeElapsed
self.countdownText.setText(str(int(countdownTask.duration)))
self.countdownText.show()
taskMgr.remove(TeamActivityGui.COUNTDOWN_TASK_NAME)
taskMgr.add(countdownTask, TeamActivityGui.COUNTDOWN_TASK_NAME)
def hideWaitToStartCountdown(self):
taskMgr.remove(TeamActivityGui.COUNTDOWN_TASK_NAME)
self._countdownAlmostDoneCallback = None
if self.countdownText is not None:
self.countdownText.hide()
return
def _updateCountdownTask(self, task):
countdownTime = int(task.duration - task.time)
seconds = str(countdownTime)
if self.countdownText['text'] != seconds:
self.countdownText['text'] = seconds
if countdownTime == 3 and self._countdownAlmostDoneCallback is not None:
self._countdownAlmostDoneCallback()
self._countdownAlmostDoneCallback = None
if task.time >= task.duration:
return Task.done
else:
return Task.cont
return
def showTimer(self, duration):
self.timer.setTime(duration)
self.timer.countdown(duration, self._handleTimerExpired)
self.timer.show()
def hideTimer(self):
self.timer.hide()
self.timer.stop()
def _handleTimerExpired(self):
self.activity.handleGameTimerExpired()