toontown-just-works/toontown/toon/BoardingGroupInviterPanels.py
2024-07-07 18:08:39 -05:00

166 lines
6.3 KiB
Python

from panda3d.core import *
from toontown.toonbase.ToontownGlobals import *
from direct.showbase import DirectObject
from direct.directnotify import DirectNotifyGlobal
from toontown.toontowngui import TTDialog
from otp.otpbase import OTPLocalizer
from toontown.toontowngui import ToonHeadDialog
from direct.gui.DirectGui import DGG
from otp.otpbase import OTPGlobals
from toontown.toonbase import TTLocalizer
class BoardingGroupInviterPanels:
notify = DirectNotifyGlobal.directNotify.newCategory('BoardingGroupInviterPanels')
def __init__(self):
self.__invitingPanel = None
self.__invitationRejectedPanel = None
return
def cleanup(self):
self.destroyInvitingPanel()
self.destroyInvitationRejectedPanel()
def createInvitingPanel(self, boardingParty, inviteeId, **kw):
self.destroyInvitingPanel()
self.destroyInvitationRejectedPanel()
self.notify.debug('Creating Inviting Panel.')
self.__invitingPanel = BoardingGroupInvitingPanel(boardingParty, inviteeId, **kw)
def createInvitationRejectedPanel(self, boardingParty, inviteeId, **kw):
self.destroyInvitingPanel()
self.destroyInvitationRejectedPanel()
self.notify.debug('Creating Invititation Rejected Panel.')
self.__invitationRejectedPanel = BoardingGroupInvitationRejectedPanel(boardingParty, inviteeId, **kw)
def destroyInvitingPanel(self):
if self.isInvitingPanelUp():
self.__invitingPanel.cleanup()
self.__invitingPanel = None
return
def destroyInvitationRejectedPanel(self):
if self.isInvitationRejectedPanelUp():
self.__invitationRejectedPanel.cleanup()
self.__invitationRejectedPanel = None
return
def isInvitingPanelIdCorrect(self, inviteeId):
if self.isInvitingPanelUp():
if inviteeId == self.__invitingPanel.avId:
return True
else:
self.notify.warning('Got a response back from an invitee, but a different invitee panel was open. Maybe lag?')
return False
def isInvitingPanelUp(self):
if self.__invitingPanel:
if not self.__invitingPanel.isEmpty():
return True
self.__invitingPanel = None
return False
def isInvitationRejectedPanelUp(self):
if self.__invitationRejectedPanel:
if not self.__invitationRejectedPanel.isEmpty():
return True
self.__invitationRejectedPanel = None
return False
def forceCleanup(self):
if self.isInvitingPanelUp():
self.__invitingPanel.forceCleanup()
self.__invitingPanel = None
if self.isInvitationRejectedPanelUp():
self.__invitationRejectedPanel.forceCleanup()
self.__invitationRejectedPanel = None
return
class BoardingGroupInviterPanelBase(ToonHeadDialog.ToonHeadDialog):
notify = DirectNotifyGlobal.directNotify.newCategory('BoardingGroupInviterPanelBase')
def __init__(self, boardingParty, inviteeId, **kw):
self.boardingParty = boardingParty
self.avId = inviteeId
avatar = base.cr.doId2do.get(self.avId)
self.avatarName = ''
if avatar:
self.avatar = avatar
self.avatarName = avatar.getName()
avatarDNA = avatar.getStyle()
self.defineParams()
command = self.handleButton
optiondefs = (('dialogName', self.dialogName, None),
('text', self.inviterText, None),
('style', self.panelStyle, None),
('buttonTextList', self.buttonTextList, None),
('command', command, None),
('image_color', (1.0, 0.89, 0.77, 1.0), None),
('geom_scale', 0.2, None),
('geom_pos', (-0.1, 0, -0.025), None),
('pad', (0.075, 0.075), None),
('topPad', 0, None),
('midPad', 0, None),
('pos', (0.45, 0, 0.75), None),
('scale', 0.75, None))
self.defineoptions(kw, optiondefs)
ToonHeadDialog.ToonHeadDialog.__init__(self, avatarDNA)
self.show()
return
def defineParams(self):
self.notify.error('setupParams: This method should not be called from the base class. Derived class should override this method')
def cleanup(self):
self.notify.debug('Destroying Panel.')
ToonHeadDialog.ToonHeadDialog.cleanup(self)
def forceCleanup(self):
self.handleButton(0)
def handleButton(self, value):
self.cleanup()
class BoardingGroupInvitingPanel(BoardingGroupInviterPanelBase):
notify = DirectNotifyGlobal.directNotify.newCategory('BoardingGroupInvitingPanel')
def __init__(self, boardingParty, inviteeId, **kw):
BoardingGroupInviterPanelBase.__init__(self, boardingParty, inviteeId, **kw)
self.initialiseoptions(BoardingGroupInvitingPanel)
self.setupUnexpectedExitHooks()
def defineParams(self):
self.dialogName = 'BoardingGroupInvitingPanel'
self.inviterText = TTLocalizer.BoardingInvitingMessage % self.avatarName
self.panelStyle = TTDialog.CancelOnly
self.buttonTextList = [OTPLocalizer.lCancel]
def handleButton(self, value):
self.boardingParty.requestCancelInvite(self.avId)
BoardingGroupInviterPanelBase.cleanup(self)
def setupUnexpectedExitHooks(self):
if self.avId in base.cr.doId2do:
toon = base.cr.doId2do[self.avId]
self.unexpectedExitEventName = toon.uniqueName('disable')
self.accept(self.unexpectedExitEventName, self.forceCleanup)
def forceCleanup(self):
self.ignore(self.unexpectedExitEventName)
BoardingGroupInviterPanelBase.forceCleanup(self)
class BoardingGroupInvitationRejectedPanel(BoardingGroupInviterPanelBase):
notify = DirectNotifyGlobal.directNotify.newCategory('BoardingGroupInvitationRejectedPanel')
def __init__(self, boardingParty, inviteeId, **kw):
BoardingGroupInviterPanelBase.__init__(self, boardingParty, inviteeId, **kw)
self.initialiseoptions(BoardingGroupInvitationRejectedPanel)
def defineParams(self):
self.dialogName = 'BoardingGroupInvitationRejectedPanel'
self.inviterText = TTLocalizer.BoardingInvitationRejected % self.avatarName
self.panelStyle = TTDialog.Acknowledge
self.buttonTextList = [OTPLocalizer.lOK]