2022-12-16 18:40:57 -06:00
|
|
|
from panda3d.core import *
|
2019-11-02 17:27:54 -05:00
|
|
|
from direct.gui.DirectGui import *
|
|
|
|
from direct.gui import DirectGuiGlobals
|
2022-12-16 18:40:57 -06:00
|
|
|
from panda3d.core import *
|
2019-11-02 17:27:54 -05:00
|
|
|
from direct.directnotify import DirectNotifyGlobal
|
2019-12-30 00:07:56 -06:00
|
|
|
from . import TTDialog
|
2019-11-02 17:27:54 -05:00
|
|
|
from toontown.toonbase import TTLocalizer
|
|
|
|
from direct.showbase import PythonUtil
|
|
|
|
from direct.showbase.DirectObject import DirectObject
|
|
|
|
from otp.login import LeaveToPayDialog
|
|
|
|
Pages = {'otherHoods': (TTLocalizer.TeaserOtherHoods,),
|
|
|
|
'typeAName': (TTLocalizer.TeaserTypeAName,),
|
|
|
|
'sixToons': (TTLocalizer.TeaserSixToons,),
|
|
|
|
'otherGags': (TTLocalizer.TeaserOtherGags,),
|
|
|
|
'clothing': (TTLocalizer.TeaserClothing,),
|
|
|
|
'cogHQ': (TTLocalizer.TeaserCogHQ,),
|
|
|
|
'secretChat': (TTLocalizer.TeaserSecretChat,),
|
|
|
|
'quests': (TTLocalizer.TeaserQuests,),
|
|
|
|
'emotions': (TTLocalizer.TeaserEmotions,),
|
|
|
|
'minigames': (TTLocalizer.TeaserMinigames,),
|
|
|
|
'karting': (TTLocalizer.TeaserKarting,),
|
|
|
|
'kartingAccessories': (TTLocalizer.TeaserKartingAccessories,),
|
|
|
|
'gardening': (TTLocalizer.TeaserGardening,),
|
|
|
|
'tricks': (TTLocalizer.TeaserTricks,),
|
|
|
|
'species': (TTLocalizer.TeaserSpecies,),
|
|
|
|
'golf': (TTLocalizer.TeaserGolf,),
|
|
|
|
'fishing': (TTLocalizer.TeaserFishing,),
|
|
|
|
'parties': (TTLocalizer.TeaserParties,),
|
|
|
|
'plantGags': (TTLocalizer.TeaserPlantGags,),
|
|
|
|
'pickGags': (TTLocalizer.TeaserPickGags,),
|
|
|
|
'restockGags': (TTLocalizer.TeaserRestockGags,),
|
|
|
|
'getGags': (TTLocalizer.TeaserGetGags,),
|
|
|
|
'useGags': (TTLocalizer.TeaserUseGags,)}
|
|
|
|
PageOrder = ['sixToons',
|
|
|
|
'typeAName',
|
|
|
|
'species',
|
|
|
|
'otherHoods',
|
|
|
|
'otherGags',
|
|
|
|
'clothing',
|
|
|
|
'parties',
|
|
|
|
'tricks',
|
|
|
|
'cogHQ',
|
|
|
|
'secretChat',
|
|
|
|
'quests',
|
|
|
|
'emotions',
|
|
|
|
'minigames',
|
|
|
|
'karting',
|
|
|
|
'kartingAccessories',
|
|
|
|
'gardening',
|
|
|
|
'golf',
|
|
|
|
'fishing',
|
|
|
|
'plantGags',
|
|
|
|
'pickGags',
|
|
|
|
'restockGags',
|
|
|
|
'getGags',
|
|
|
|
'useGags']
|
|
|
|
|
|
|
|
class TeaserPanel(DirectObject):
|
|
|
|
notify = DirectNotifyGlobal.directNotify.newCategory('TeaserPanel')
|
|
|
|
|
|
|
|
def __init__(self, pageName, doneFunc = None):
|
|
|
|
self.doneFunc = doneFunc
|
|
|
|
if not hasattr(self, 'browser'):
|
|
|
|
self.browser = FeatureBrowser()
|
|
|
|
self.browser.load()
|
|
|
|
self.browser.setPos(0, 0, TTLocalizer.TPbrowserPosZ)
|
|
|
|
self.browser.setScale(0.75)
|
|
|
|
self.browser.reparentTo(hidden)
|
|
|
|
self.upsellBackground = loader.loadModel('phase_3/models/gui/tt_m_gui_ups_panelBg')
|
|
|
|
self.leaveDialog = None
|
|
|
|
self.showPage(pageName)
|
|
|
|
self.ignore('exitingStoppedState')
|
|
|
|
self.accept('exitingStoppedState', self.cleanup)
|
|
|
|
return
|
|
|
|
|
|
|
|
def __handleDone(self, choice = 0):
|
|
|
|
self.cleanup()
|
|
|
|
self.unload()
|
|
|
|
if choice == 1:
|
|
|
|
self.__handlePay()
|
|
|
|
else:
|
|
|
|
self.__handleContinue()
|
|
|
|
|
|
|
|
def __handleContinue(self):
|
|
|
|
if self.doneFunc:
|
|
|
|
self.notify.debug('calling doneFunc')
|
|
|
|
self.doneFunc()
|
|
|
|
|
|
|
|
def __handlePay(self):
|
|
|
|
if base.cr.isWebPlayToken() or __dev__:
|
|
|
|
if self.leaveDialog == None:
|
|
|
|
self.notify.debug('making LTP')
|
|
|
|
self.leaveDialog = LeaveToPayDialog.LeaveToPayDialog(0, doneFunc=self.doneFunc)
|
|
|
|
self.notify.debug('showing LTP')
|
|
|
|
self.leaveDialog.show()
|
|
|
|
else:
|
|
|
|
self.notify.error('You should not have a TeaserPanel without a PlayToken')
|
|
|
|
return
|
|
|
|
|
|
|
|
def destroy(self):
|
|
|
|
self.cleanup()
|
|
|
|
|
|
|
|
def cleanup(self):
|
|
|
|
if hasattr(self, 'browser'):
|
|
|
|
self.browser.reparentTo(hidden)
|
|
|
|
self.browser.ignoreAll()
|
|
|
|
if hasattr(self, 'dialog'):
|
|
|
|
base.transitions.noTransitions()
|
|
|
|
self.dialog.cleanup()
|
|
|
|
del self.dialog
|
|
|
|
if self.leaveDialog:
|
|
|
|
self.leaveDialog.destroy()
|
|
|
|
self.leaveDialog = None
|
|
|
|
self.ignoreAll()
|
|
|
|
return
|
|
|
|
|
|
|
|
def unload(self):
|
|
|
|
if hasattr(self, 'browser'):
|
|
|
|
self.browser.destroy()
|
|
|
|
del self.browser
|
|
|
|
|
|
|
|
def showPage(self, pageName):
|
|
|
|
if pageName not in PageOrder:
|
|
|
|
self.notify.error("unknown page '%s'" % pageName)
|
|
|
|
base.cr.centralLogger.writeClientEvent('velvetRope: %s' % pageName)
|
|
|
|
self.browser.scrollTo(PageOrder.index(pageName))
|
|
|
|
self.cleanup()
|
2019-11-10 20:25:06 -06:00
|
|
|
self.dialog = TTDialog.TTDialog(parent=aspect2dp, text=TTLocalizer.TeaserTop, text_scale=TTLocalizer.TPdialog, text_align=TextNode.ACenter, text_wordwrap=TTLocalizer.TPdialogWordwrap, topPad=-0.15, midPad=1.25, sidePad=0.25, pad=(0.25, 0.25), command=self.__handleDone, fadeScreen=0.5, style=TTDialog.TwoChoice, buttonTextList=[TTLocalizer.TeaserSubscribe, TTLocalizer.TeaserContinue], button_text_scale=TTLocalizer.TPbuttonTextList, buttonPadSF=5.5, sortOrder=DGG.NO_FADE_SORT_INDEX, image=self.upsellBackground)
|
2019-11-02 17:27:54 -05:00
|
|
|
self.dialog.setPos(0, 0, 0.75)
|
|
|
|
self.browser.reparentTo(self.dialog)
|
|
|
|
base.transitions.fadeScreen(0.5)
|
|
|
|
if base.config.GetBool('want-teaser-scroll-keys', 0):
|
|
|
|
self.accept('arrow_right', self.showNextPage)
|
|
|
|
self.accept('arrow_left', self.showPrevPage)
|
|
|
|
self.accept('stoppedAsleep', self.__handleDone)
|
|
|
|
|
|
|
|
def showNextPage(self):
|
|
|
|
self.notify.debug('show next')
|
|
|
|
self.browser.scrollBy(1)
|
|
|
|
|
|
|
|
def showPrevPage(self):
|
|
|
|
self.notify.debug('show prev')
|
|
|
|
self.browser.scrollBy(-1)
|
|
|
|
|
|
|
|
def showPay(self):
|
|
|
|
self.dialog.buttonList[0].show()
|
|
|
|
|
|
|
|
def hidePay(self):
|
|
|
|
self.dialog.buttonList[0].hide()
|
|
|
|
|
|
|
|
def removed(self):
|
|
|
|
if hasattr(self, 'dialog') and self.dialog:
|
|
|
|
return self.dialog.removed()
|
|
|
|
elif hasattr(self, 'leaveDialog') and self.leaveDialog:
|
|
|
|
return self.leaveDialog.removed()
|
|
|
|
else:
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
|
|
|
class FeatureBrowser(DirectScrolledList):
|
|
|
|
|
|
|
|
def __init__(self, parent = aspect2dp, **kw):
|
2019-12-02 17:29:08 -06:00
|
|
|
self._parent = parent
|
|
|
|
optiondefs = (('parent', self._parent, None),
|
2019-11-02 17:27:54 -05:00
|
|
|
('relief', None, None),
|
|
|
|
('numItemsVisible', 1, None),
|
|
|
|
('items', [], None))
|
|
|
|
self.defineoptions(kw, optiondefs)
|
|
|
|
DirectScrolledList.__init__(self, parent)
|
|
|
|
self.incButton.hide()
|
|
|
|
self.decButton.hide()
|
|
|
|
self.initialiseoptions(FeatureBrowser)
|
|
|
|
return
|
|
|
|
|
|
|
|
def destroy(self):
|
|
|
|
DirectScrolledList.destroy(self)
|
|
|
|
|
|
|
|
def load(self):
|
|
|
|
guiModel = loader.loadModel('phase_3/models/gui/tt_m_gui_ups_logo_noText')
|
|
|
|
leftLocator = guiModel.find('**/bubbleLeft_locator')
|
|
|
|
rightLocator = guiModel.find('**/bubbleRight_locator')
|
|
|
|
haveFunNode = TextNode('Have Fun')
|
|
|
|
haveFunNode.setText(TTLocalizer.TeaserHaveFun)
|
|
|
|
haveFunNode.setTextColor(0, 0, 0, 1)
|
|
|
|
haveFunNode.setWordwrap(6)
|
|
|
|
haveFunNode.setAlign(TextNode.ACenter)
|
|
|
|
haveFunNode.setFont(DirectGuiGlobals.getDefaultFont())
|
|
|
|
haveFun = NodePath(haveFunNode)
|
|
|
|
haveFun.reparentTo(rightLocator)
|
|
|
|
haveFun.setScale(TTLocalizer.TPhaveFun)
|
|
|
|
JoinUsNode = TextNode('Join Us')
|
|
|
|
JoinUsNode.setText(TTLocalizer.TeaserJoinUs)
|
|
|
|
JoinUsNode.setTextColor(0, 0, 0, 1)
|
|
|
|
JoinUsNode.setWordwrap(6)
|
|
|
|
JoinUsNode.setAlign(TextNode.ACenter)
|
|
|
|
JoinUsNode.setFont(DirectGuiGlobals.getDefaultFont())
|
|
|
|
JoinUs = NodePath(JoinUsNode)
|
|
|
|
JoinUs.reparentTo(leftLocator)
|
|
|
|
JoinUs.setPos(0, 0, -0.025)
|
|
|
|
JoinUs.setScale(TTLocalizer.TPjoinUs)
|
|
|
|
for page in PageOrder:
|
|
|
|
textInfo = Pages.get(page)
|
|
|
|
textInfo = textInfo[0] + TTLocalizer.TeaserDefault
|
|
|
|
panel = DirectFrame(parent=self, relief=None, image=guiModel, image_scale=(0.65, 0.65, 0.65), image_pos=(0, 0, 0.0), text_align=TextNode.ACenter, text=textInfo, text_scale=TTLocalizer.TPpanel, text_pos=TTLocalizer.TPpanelPos)
|
|
|
|
self.addItem(panel)
|
|
|
|
|
|
|
|
guiModel.removeNode()
|
|
|
|
return
|