oldschool-toontown/toontown/parties/TeamActivityGui.py

138 lines
5.5 KiB
Python
Raw Normal View History

from panda3d.core import TextNode
2019-11-02 17:27:54 -05:00
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()