from panda3d.core import * from direct.gui.DirectGui import * from direct.gui import DirectGuiGlobals from panda3d.core import * from direct.directnotify import DirectNotifyGlobal from . import TTDialog 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() 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) 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): self._parent = parent optiondefs = (('parent', self._parent, None), ('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