Пример #1
0
 def __createNametag(self, parent):
     if self.nametagGroup == None:
         self.nametagGroup = NametagGroup()
         self.nametagGroup.setFont(ToontownGlobals.getToonFont())
         self.nametagGroup.setSpeechFont(ToontownGlobals.getToonFont())
         self.nametagGroup.setActive(0)
         self.nametagGroup.setAvatar(self.partyPlannerHead)
         self.nametagGroup.manage(base.marginManager)
         self.nametagGroup.setColorCode(self.nametagGroup.CCNonPlayer)
         self.nametagGroup.getNametag2d().setContents(0)
         self.nametagNode = NametagFloat2d()
         self.nametagNode.setContents(Nametag.CName)
         self.nametagGroup.addNametag(self.nametagNode)
         self.nametagGroup.setName(base.cr.partyManager.getPartyPlannerName())
         self.nametagNP = parent.attachNewNode(self.nametagNode)
         nametagPos = self.gui.find('**/step_01_partymanPeteNametag_locator').getPos()
         self.nametagNP.setPosHprScale(nametagPos[0], 0, nametagPos[2], 0, 0, 0, 0.1, 1, 0.1)
         self.chatNode = NametagFloat2d()
         self.chatNode.setContents(Nametag.CSpeech | Nametag.CThought)
         self.nametagGroup.addNametag(self.chatNode)
         self.nametagGroup.setChat(TTLocalizer.PartyPlannerInstructions, CFSpeech)
         self.chatNP = parent.attachNewNode(self.chatNode)
         chatPos = self.gui.find('**/step_01_partymanPeteText_locator').getPos()
         self.chatNP.setPosHprScale(chatPos[0], 0, chatPos[2], 0, 0, 0, 0.08, 1, 0.08)
     return
Пример #2
0
 def __init__(self, cr):
     DistributedObject.DistributedObject.__init__(self, cr)
     Level.Level.__init__(self)
     self.lastToonZone = None
     self.lastCamZone = 0
     self.titleColor = (1, 1, 1, 1)
     self.titleText = OnscreenText.OnscreenText(
         "",
         fg=self.titleColor,
         shadow=(0, 0, 0, 1),
         font=ToontownGlobals.getSuitFont(),
         pos=(0, -0.5),
         scale=0.16,
         drawOrder=0,
         mayChange=1,
     )
     self.smallTitleText = OnscreenText.OnscreenText(
         "",
         fg=self.titleColor,
         font=ToontownGlobals.getSuitFont(),
         pos=(0.65000000000000002, 0.90000000000000002),
         scale=0.080000000000000002,
         drawOrder=0,
         mayChange=1,
         bg=(0.5, 0.5, 0.5, 0.5),
         align=TextNode.ARight,
     )
     self.zonesEnteredList = []
     self.fColorZones = 0
     self.scenarioIndex = 0
    def __init__(self, version='n/a'):
        DirectObject.__init__(self)

        self.backgroundNodePath = render2d.attachNewNode('background', 0)
        self.backgroundModel = loader.loadModel(
            'phase_3/models/gui/loading-background.bam')
        self.backgroundModel.reparentTo(self.backgroundNodePath)
        self.backgroundNodePath.find('**/fg').removeNode()
        self.backgroundNodePath.setScale(1, 1, 1)

        self.logo = OnscreenImage(
            parent=base.a2dTopCenter, image='phase_3/maps/toontown-logo.png',
            scale=(1.0, 1, 0.5), pos=(0, 0, -0.85))
        self.logo.setTransparency(TransparencyAttrib.MAlpha)

        self.label = OnscreenText(
            TTLocalizer.ClickToStartLabel, parent=base.a2dBottomCenter,
            font=ToontownGlobals.getMinnieFont(), fg=Vec4(1, 1, 1, 1),
            scale=0.1, align=TextNode.ACenter)
        self.label.setZ(0.35)

        self.versionLabel = OnscreenText(
            '\x01white_shadow\x01%s\x02' % version, parent=base.a2dBottomRight,
            font=ToontownGlobals.getMinnieFont(), fg=Vec4(0, 0, 0, 1),
            scale=0.06, align=TextNode.ARight)
        self.versionLabel.setPos(-0.025, 0.025)

        self.setColorScale(Vec4(0, 0, 0, 0))

        self.fadeTrack = None
        self.logoPosTrack = None
        self.logoScaleTrack = None
        self.labelPosTrack = None
        self.labelColorScaleTrack = None
Пример #4
0
 def __init__(self):
     Avatar.Avatar.__init__(self)
     self.setFont(ToontownGlobals.getSuitFont())
     self.nametag.setSpeechFont(ToontownGlobals.getSuitFont())
     self.setPlayerType(NametagGroup.CCSuit)
     self.setPickable(0)
     self.doorA = None
     self.doorB = None
     self.bubbleL = None
     self.bubbleR = None
     self.raised = 1
     self.forward = 1
     self.happy = 1
     self.dizzy = 0
     self.nowRaised = 1
     self.nowForward = 1
     self.nowHappy = 1
     self.currentAnimIval = None
     self.queuedAnimIvals = []
     self.treadsLeftPos = 0
     self.treadsRightPos = 0
     self.healthBar = SuitHealthBar.SuitHealthBar()
     self.animDoneEvent = 'BossCogAnimDone'
     self.animIvalName = 'BossCogAnimIval'
     self.warningSfx = loader.loadSfx('phase_9/audio/sfx/CHQ_GOON_tractor_beam_alarmed.ogg')
Пример #5
0
 def load(self):
     gui = loader.loadModel('phase_3/models/gui/tt_m_gui_mat_mainGui')
     guiBoyUp = gui.find('**/tt_t_gui_mat_boyUp')
     guiBoyDown = gui.find('**/tt_t_gui_mat_boyDown')
     guiGirlUp = gui.find('**/tt_t_gui_mat_girlUp')
     guiGirlDown = gui.find('**/tt_t_gui_mat_girlDown')
     self.boyButton = DirectButton(relief=None, image=(guiBoyUp,
      guiBoyDown,
      guiBoyUp,
      guiBoyDown), image_scale=halfButtonScale, image1_scale=halfButtonHoverScale, image2_scale=halfButtonHoverScale, pos=(-0.4, 0, -0.8), command=self.createRandomBoy, text=('',
      TTLocalizer.GenderShopBoyButtonText,
      TTLocalizer.GenderShopBoyButtonText,
      ''), text_font=ToontownGlobals.getInterfaceFont(), text_scale=0.08, text_pos=(0, 0.19), text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 1))
     self.boyButton.hide()
     self.girlButton = DirectButton(relief=None, image=(guiGirlUp,
      guiGirlDown,
      guiGirlUp,
      guiGirlDown), image_scale=halfButtonScale, image1_scale=halfButtonHoverScale, image2_scale=halfButtonHoverScale, pos=(0.4, 0, -0.8), command=self.createRandomGirl, text=('',
      TTLocalizer.GenderShopGirlButtonText,
      TTLocalizer.GenderShopGirlButtonText,
      ''), text_font=ToontownGlobals.getInterfaceFont(), text_scale=0.08, text_pos=(0, 0.19), text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 1))
     self.girlButton.hide()
     gui.removeNode()
     del gui
     self.toon = None
     return
    def setFromAvatar(self, av):
        rewardIds = []
        for q in av.quests:
            questId, fromNpcId, toNpcId, rewardId, toonProgress = q
            if rewardId == Quests.NA:
                rewardId = Quests.getFinalRewardId(questId, fAll=1)
            rewardIds.append(rewardId)

        self.notify.debug('Ignoring rewards: %s' % rewardIds)
        self.setRewardIndex(av.rewardTier, rewardIds, av.rewardHistory)
        fishHp = int(len(av.fishCollection) / FishGlobals.FISH_PER_BONUS)
        self.notify.debug('Adding %s hp for fish collection' % fishHp)
        self.maxHp += fishHp
        flowerHp = int(len(av.flowerCollection) / GardenGlobals.FLOWERS_PER_BONUS)
        self.notify.debug('Adding %s hp for fish collection' % flowerHp)
        self.maxHp += flowerHp
        HQdepts = (ToontownGlobals.cogHQZoneId2deptIndex(ToontownGlobals.SellbotHQ), ToontownGlobals.cogHQZoneId2deptIndex(ToontownGlobals.LawbotHQ), ToontownGlobals.cogHQZoneId2deptIndex(ToontownGlobals.CashbotHQ))
        levels = av.getCogLevels()
        cogTypes = av.getCogTypes()
        suitHp = 0
        for dept in HQdepts:
            suitHp += levels[dept]

        self.notify.debug('Adding %s hp for cog suits' % suitHp)
        self.maxHp += suitHp
        kartingHp = int(av.kartingTrophies.count(1) / RaceGlobals.TrophiesPerCup)
        self.notify.debug('Adding %s hp for karting trophies' % kartingHp)
        self.maxHp += kartingHp
        golfHp = int(av.golfTrophies.count(True) / GolfGlobals.TrophiesPerCup)
        self.notify.debug('Adding %s hp for golf trophies' % golfHp)
        self.maxHp += golfHp
Пример #7
0
 def __init__(self):
     Avatar.Avatar.__init__(self)
     self.setFont(ToontownGlobals.getSuitFont())
     self.nametag.setSpeechFont(ToontownGlobals.getSuitFont())
     self.setPlayerType(NametagGroup.CCSuit)
     self.setPickable(0)
     self.doorA = None
     self.doorB = None
     self.bubbleL = None
     self.bubbleR = None
     self.raised = 1
     self.forward = 1
     self.happy = 1
     self.dizzy = 0
     self.nowRaised = 1
     self.nowForward = 1
     self.nowHappy = 1
     self.currentAnimIval = None
     self.queuedAnimIvals = []
     self.treadsLeftPos = 0
     self.treadsRightPos = 0
     self.healthBar = None
     self.healthCondition = 0
     self.animDoneEvent = 'BossCogAnimDone'
     self.animIvalName = 'BossCogAnimIval'
     self.attackSpeed = 1
     return
    def createGui(self):
        self.title = DirectLabel(aspect2d, relief=None, text=TTLocalizer.GloveGuiTitle,
                     text_fg=(0, 1, 0, 1), text_scale=0.15, text_font=ToontownGlobals.getSignFont(),
                     pos=(0, 0, -0.30), text_shadow=(1, 1, 1, 1))

        self.notice = DirectLabel(aspect2d, relief=None, text=TTLocalizer.GloveGuiNotice % ToontownGlobals.GloveCost,
                      text_fg=(1, 0, 0, 1), text_scale=0.11, text_font=ToontownGlobals.getSignFont(),
                      pos=(0, 0, -0.45), text_shadow=(1, 1, 1, 1))

        self.color = DirectLabel(aspect2d, relief=None, text='',
                     text_scale=0.11, text_font=ToontownGlobals.getSignFont(),
                     pos=(0, 0, -0.70), text_shadow=(1, 1, 1, 1))

        self.buyButton = DirectButton(aspect2d, relief=None, image=(self.shuffleUp, self.shuffleDown),
                         text=TTLocalizer.GloveGuiBuy, text_font=ToontownGlobals.getInterfaceFont(),
                         text_scale=0.11, text_pos=(0, -0.02), pos=(-0.60, 0, -0.90), text_fg=(1, 1, 1, 1),
                         text_shadow=(0, 0, 0, 1), command=self.handleBuy)

        self.cancelButton = DirectButton(aspect2d, relief=None, image=(self.shuffleUp, self.shuffleDown),
                            text=TTLocalizer.GloveGuiCancel, text_font=ToontownGlobals.getInterfaceFont(),
                            text_scale=0.11, text_pos=(0, -0.02), pos=(0.60, 0, -0.90), text_fg=(1, 1, 1, 1),
                            text_shadow=(0, 0, 0, 1), command=self.leave)

        self.leftButton = DirectButton(aspect2d, relief=None, image=(self.shuffleArrowUp, self.shuffleArrowDown),
                          pos=(-0.60, 0, -0.66), command=self.handleSetIndex, extraArgs=[-1])

        self.rightButton = DirectButton(aspect2d, relief=None, image=(self.shuffleArrowUp, self.shuffleArrowDown),
                           pos=(0.60, 0, -0.66), scale=-1, command=self.handleSetIndex, extraArgs=[1])

        self.updateGuiByIndex()
Пример #9
0
    def setupButtons(self):
        gui = loader.loadModel('phase_3/models/gui/tt_m_gui_mat_mainGui')
        arrowImage = (gui.find('**/tt_t_gui_mat_shuffleArrowUp'), gui.find('**/tt_t_gui_mat_shuffleArrowDown'))
        buttonImage = (gui.find('**/tt_t_gui_mat_shuffleUp'), gui.find('**/tt_t_gui_mat_shuffleDown'))

        self.title = DirectLabel(aspect2d, relief=None, text=TTLocalizer.GloveGuiTitle,
                     text_fg=(0, 1, 0, 1), text_scale=0.15, text_font=ToontownGlobals.getSignFont(),
                     pos=(0, 0, -0.30), text_shadow=(1, 1, 1, 1))

        self.notice = DirectLabel(aspect2d, relief=None, text='', text_fg=(1, 0, 0, 1), text_scale=0.11,
                      text_font=ToontownGlobals.getSignFont(), pos=(0, 0, -0.45), text_shadow=(1, 1, 1, 1))

        self.color = DirectLabel(aspect2d, relief=None, text='', text_scale=0.11, text_font=ToontownGlobals.getSignFont(),
                     pos=(0, 0, -0.70), text_shadow=(1, 1, 1, 1))

        self.buyButton = DirectButton(aspect2d, relief=None, image=buttonImage, text=TTLocalizer.GloveGuiBuy,
                         text_font=ToontownGlobals.getInterfaceFont(), text_scale=0.11, text_pos=(0, -0.02),
                         pos=(-0.60, 0, -0.90), text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 1), command=self.__exit, extraArgs=[GloveNPCGlobals.CHANGE])

        self.cancelButton = DirectButton(aspect2d, relief=None, image=buttonImage, text=TTLocalizer.lCancel,
                            text_font=ToontownGlobals.getInterfaceFont(), text_scale=0.11, text_pos=(0, -0.02),
                            pos=(0.60, 0, -0.90), text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 1), command=self.__exit, extraArgs=[GloveNPCGlobals.USER_CANCEL])

        self.downArrow = DirectButton(aspect2d, relief=None, image=arrowImage, pos=(-0.60, 0, -0.66))
        self.upArrow = DirectButton(aspect2d, relief=None, image=arrowImage, pos=(0.60, 0, -0.66), scale=-1)

        gui.removeNode()
Пример #10
0
 def loadDnaStore(self):
     if not hasattr(self, "dnaStore"):
         self.dnaStore = DNAStorage()
         loader.loadDNAFile(self.dnaStore, "phase_4/dna/storage.dna")
         self.dnaStore.storeFont("humanist", ToontownGlobals.getInterfaceFont())
         self.dnaStore.storeFont("mickey", ToontownGlobals.getSignFont())
         self.dnaStore.storeFont("suit", ToontownGlobals.getSuitFont())
         loader.loadDNAFile(self.dnaStore, "phase_3.5/dna/storage_interior.dna")
Пример #11
0
 def loadDnaStore(self):
     if not hasattr(self, 'dnaStore'):
         self.dnaStore = DNAStorage()
         loader.loadDNAFile(self.dnaStore, 'phase_4/dna/storage.dna')
         self.dnaStore.storeFont('humanist', ToontownGlobals.getInterfaceFont())
         self.dnaStore.storeFont('mickey', ToontownGlobals.getSignFont())
         self.dnaStore.storeFont('suit', ToontownGlobals.getSuitFont())
         loader.loadDNAFile(self.dnaStore, 'phase_3.5/dna/storage_interior.dna')
Пример #12
0
 def loadDnaStore(self):
     if not hasattr(self, 'dnaStore'):
         self.dnaStore = DNAStorage()
         files = ('phase_4/dna/storage.pdna', 'phase_3.5/dna/storage_interior.pdna')
         dnaBulk = DNABulkLoader(self.dnaStore, files)
         dnaBulk.loadDNAFiles()
         self.dnaStore.storeFont('humanist', ToontownGlobals.getInterfaceFont())
         self.dnaStore.storeFont('mickey', ToontownGlobals.getSignFont())
         self.dnaStore.storeFont('suit', ToontownGlobals.getSuitFont())
 def getPicture(self, avatar):
     frame = self.makeFrame()
     if self.nametagStyle == 100:
         inFont = ToontownGlobals.getToonFont()
     else:
         inFont = ToontownGlobals.getNametagFont(self.nametagStyle)
     nameTagDemo = DirectLabel(parent=frame, relief=None, pos=(0, 0, 0.24), scale=0.5, text=localAvatar.getName(), text_fg=(1.0, 1.0, 1.0, 1), text_shadow=(0, 0, 0, 1), text_font=inFont, text_wordwrap=9)
     self.hasPicture = True
     return (frame, None)
Пример #14
0
 def loadDnaStore(self):
     if not hasattr(self, "dnaStore"):
         self.dnaStore = DNAStorage()
         files = ("phase_4/dna/storage.pdna", "phase_3.5/dna/storage_interior.pdna")
         dnaBulk = DNABulkLoader(self.dnaStore, files)
         dnaBulk.loadDNAFiles()
         self.dnaStore.storeFont("humanist", ToontownGlobals.getInterfaceFont())
         self.dnaStore.storeFont("mickey", ToontownGlobals.getSignFont())
         self.dnaStore.storeFont("suit", ToontownGlobals.getSuitFont())
 def loadGUI(self):
     self.gui = loader.loadModel("phase_13/models/parties/trampolineGUI")
     self.gui.reparentTo(base.a2dTopLeft)
     self.gui.setPos(0.115, 0, -1)
     self.gui.hide()
     self.toonIndicator = self.gui.find("**/trampolineGUI_MovingBar")
     jumpLineLocator = self.gui.find("**/jumpLine_locator")
     guiBean = self.gui.find("**/trampolineGUI_GreenJellyBean")
     self.gui.find("**/trampolineGUI_GreenJellyBean").stash()
     self.guiBeans = [
         guiBean.instanceUnderNode(jumpLineLocator, self.uniqueName("guiBean%d" % i))
         for i in range(self.numJellyBeans)
     ]
     self.guiBeans[-1].setScale(1.5)
     heightTextNode = TextNode(self.uniqueName("TrampolineActivity.heightTextNode"))
     heightTextNode.setFont(ToontownGlobals.getSignFont())
     heightTextNode.setAlign(TextNode.ALeft)
     heightTextNode.setText("0.0")
     heightTextNode.setShadow(0.05, 0.05)
     heightTextNode.setShadowColor(0.0, 0.0, 0.0, 1.0)
     heightTextNode.setTextColor(1.0, 1.0, 1.0, 1.0)
     self.heightText = jumpLineLocator.attachNewNode(heightTextNode)
     self.heightText.setX(0.15)
     self.heightText.setScale(0.1)
     self.heightText.setAlphaScale(0.0)
     self.quitEarlyButtonModels = loader.loadModel("phase_3.5/models/gui/inventory_gui")
     quitEarlyUp = self.quitEarlyButtonModels.find("**//InventoryButtonUp")
     quitEarlyDown = self.quitEarlyButtonModels.find("**/InventoryButtonDown")
     quitEarlyRollover = self.quitEarlyButtonModels.find("**/InventoryButtonRollover")
     self.quitEarlyButton = DirectButton(
         parent=base.a2dTopRight,
         relief=None,
         text=TTLocalizer.PartyTrampolineQuitEarlyButton,
         text_fg=(1, 1, 0.65, 1),
         text_pos=(0, -0.23),
         text_scale=0.7,
         image=(quitEarlyUp, quitEarlyDown, quitEarlyRollover),
         image_color=(1, 0, 0, 1),
         image_scale=(20, 1, 11),
         pos=(-0.183, 0, -0.4),
         scale=0.09,
         command=self.leaveTrampoline,
     )
     self.quitEarlyButton.stash()
     self.flashText = OnscreenText(
         text="",
         pos=(0.0, -0.45),
         scale=0.2,
         fg=(1.0, 1.0, 0.65, 1.0),
         align=TextNode.ACenter,
         font=ToontownGlobals.getSignFont(),
         mayChange=True,
     )
     self.timer = PartyUtils.getNewToontownTimer()
     self.timer.posInTopRightCorner()
     return
Пример #16
0
 def loadNextGameTimer(self):
     self.nextGame = DirectLabel(parent=self, relief=None, text='', text_font=ToontownGlobals.getSignFont(), text_scale=TTLocalizer.BCGnextGame * BG.CardImageScale[2], text_fg=(1.0, 1.0, 1.0, 1), pos=(BG.GridXOffset, 0, 4 * BG.CardImageScale[2]))
     self.nextGameTimer = ToontownTimer.ToontownTimer()
     self.nextGameTimer.reparentTo(self.nextGame)
     self.nextGameTimer.setPos(0, 0, -5 * BG.CardImageScale[2])
     self.nextGameTimer.setProp('image', None)
     self.nextGameTimer.setProp('text_font', ToontownGlobals.getSignFont())
     self.nextGameTimer.setProp('text_scale', 0.2 * BG.CardImageScale[2])
     self.nextGameTimer.setFontColor(Vec4(1.0, 1.0, 1.0, 1))
     return
 def getFontByName(self, fontname):
     if fontname == "toon":
         return ToontownGlobals.getToonFont()
     elif fontname == "building":
         return ToontownGlobals.getBuildingNametagFont()
     elif fontname == "minnie":
         return ToontownGlobals.getMinnieFont()
     elif fontname == "suit":
         return ToontownGlobals.getSuitFont()
     else:
         return MagicWordManager.MagicWordManager.getFontByName(self, fontname)
 def getFontByName(self, fontname):
     if fontname == 'toon':
         return ToontownGlobals.getToonFont()
     elif fontname == 'building':
         return ToontownGlobals.getBuildingNametagFont()
     elif fontname == 'minnie':
         return ToontownGlobals.getMinnieFont()
     elif fontname == 'suit':
         return ToontownGlobals.getSuitFont()
     else:
         return MagicWordManager.MagicWordManager.getFontByName(self, fontname)
Пример #19
0
    def loadDnaStore(self):
        if not hasattr(self, 'dnaStore'):
            self.dnaStore = DNAStorage()

            loader.loadDNA('phase_4/dna/storage.xml').store(self.dnaStore)

            self.dnaStore.storeFont(ToontownGlobals.getInterfaceFont(), 'humanist')
            self.dnaStore.storeFont(ToontownGlobals.getSignFont(), 'mickey')
            self.dnaStore.storeFont(ToontownGlobals.getSuitFont(), 'suit')

            loader.loadDNA('phase_3.5/dna/storage_interior.xml').store(self.dnaStore)
    def loadDnaStore(self):
        if not hasattr(self, "dnaStore"):
            self.dnaStore = DNAStorage()

            loader.loadDNA("phase_4/dna/storage.xml").store(self.dnaStore)

            self.dnaStore.storeFont(ToontownGlobals.getInterfaceFont(), "humanist")
            self.dnaStore.storeFont(ToontownGlobals.getSignFont(), "mickey")
            self.dnaStore.storeFont(ToontownGlobals.getSuitFont(), "suit")

            loader.loadDNA("phase_3.5/dna/storage_interior.xml").store(self.dnaStore)
Пример #21
0
    def enableRaceMode(self):
        self.enableSpeedometer()
        self.render2dRoot.show()
        self.raceModeRoot.show()
        self.maxLapHit = min(self.maxLapHit, self.race.lapCount - 1)
        for x in xrange(self.maxLapHit + 1):
            for y in self.timeLabels[x]:
                y.configure(text_font=ToontownGlobals.getSignFont())
                y.show()

        for y in self.timeLabels[self.maxLapHit]:
            y.configure(text_font=ToontownGlobals.getSignFont())
    def __init__(self):
        DirectObject.__init__(self)
        FSM.__init__(self, self.__class__.__name__)

        self.label = OnscreenText(
            '', parent=hidden, font=ToontownGlobals.getMinnieFont(),
            fg=Vec4(1, 1, 1, 1), scale=0.06, align=TextNode.ACenter,
            wordwrap=35)
        self.label.setColorScale(Vec4(0, 0, 0, 0))

        gui = loader.loadModel('phase_3/models/gui/tt_m_gui_mat_mainGui.bam')
        shuffleUp = gui.find('**/tt_t_gui_mat_shuffleUp')
        shuffleDown = gui.find('**/tt_t_gui_mat_shuffleDown')
        okUp = gui.find('**/tt_t_gui_mat_okUp')
        okDown = gui.find('**/tt_t_gui_mat_okDown')
        closeUp = gui.find('**/tt_t_gui_mat_closeUp')
        closeDown = gui.find('**/tt_t_gui_mat_closeDown')
        gui.removeNode()
        del gui

        self.exitButton = DirectButton(
            parent=hidden, relief=None,
            image=(shuffleUp, shuffleDown, shuffleUp),
            image_scale=(0.6, 0.6, 0.6), image1_scale=(0.63, 0.6, 0.6),
            image2_scale=(0.63, 0.6, 0.6),
            text=(TTLocalizer.IntroExitButton, TTLocalizer.IntroExitButton,
                  TTLocalizer.IntroExitButton, ''),
            text_font=ToontownGlobals.getInterfaceFont(),
            text_scale=TTLocalizer.SBshuffleBtn, text_pos=(0, -0.02),
            text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 1))

        self.yesButton = DirectButton(
            parent=hidden, relief=None, image=(okUp, okDown, okUp, okDown),
            image_scale=(0.6, 0.6, 0.6), image1_scale=(0.7, 0.7, 0.7),
            image2_scale=(0.7, 0.7, 0.7),
            text=('', TTLocalizer.IntroYesButton, TTLocalizer.IntroYesButton),
            text_font=ToontownGlobals.getInterfaceFont(), text_scale=0.08,
            text_align=TextNode.ACenter, text_pos=(0, -0.175),
            text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 1))
        self.noButton = DirectButton(
            parent=hidden, relief=None,
            image=(closeUp, closeDown, closeUp, closeDown),
            image_scale=(0.6, 0.6, 0.6), image1_scale=(0.7, 0.7, 0.7),
            image2_scale=(0.7, 0.7, 0.7),
            text=('', TTLocalizer.IntroNoButton, TTLocalizer.IntroNoButton),
            text_font=ToontownGlobals.getInterfaceFont(), text_scale=0.08,
            text_align=TextNode.ACenter, text_pos=(0, -0.175),
            text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 1))

        self.disclaimerTrack = None
        self.presentsTrack = None
 def knockKnockTrack(self, avatar, duration):
     if avatar is None:
         return
     self.rimshot = base.loadSfx("phase_5/audio/sfx/AA_heal_telljoke.ogg")
     self.knockSfx = base.loadSfx("phase_5/audio/sfx/GUI_knock_%s.ogg" % random.randint(1, 4))
     joke = KnockKnockJokes[self.propId % len(KnockKnockJokes)]
     place = base.cr.playGame.getPlace()
     doorName = TTLocalizer.DoorNametag
     self.nametag = None
     self.nametagNP = None
     doorNP = render.find("**/KnockKnockDoorSphere_" + str(self.propId) + ";+s")
     if doorNP.isEmpty():
         self.notify.warning("Could not find KnockKnockDoorSphere_%s" % self.propId)
         return
     self.nametag = NametagGroup()
     self.nametag.setAvatar(doorNP)
     self.nametag.setFont(ToontownGlobals.getToonFont())
     self.nametag.setSpeechFont(ToontownGlobals.getToonFont())
     self.nametag.setName(doorName)
     self.nametag.setActive(0)
     self.nametag.manage(base.marginManager)
     self.nametag.getNametag3d().setBillboardOffset(4)
     nametagNode = self.nametag.getNametag3d()
     self.nametagNP = render.attachNewNode(nametagNode)
     self.nametagNP.setName("knockKnockDoor_nt_" + str(self.propId))
     pos = doorNP.getBounds().getCenter()
     self.nametagNP.setPos(pos + Vec3(0, 0, avatar.getHeight() + 2))
     d = duration * 0.125
     track = Sequence(
         Parallel(
             Sequence(Wait(d * 0.5), SoundInterval(self.knockSfx)),
             Func(self.nametag.setChat, TTLocalizer.DoorKnockKnock, CFSpeech),
             Wait(d),
         ),
         Func(avatar.setChatAbsolute, TTLocalizer.DoorWhosThere, CFSpeech | CFTimeout, openEnded=0),
         Wait(d),
         Func(self.nametag.setChat, joke[0], CFSpeech),
         Wait(d),
         Func(avatar.setChatAbsolute, joke[0] + TTLocalizer.DoorWhoAppendix, CFSpeech | CFTimeout, openEnded=0),
         Wait(d),
         Func(self.nametag.setChat, joke[1], CFSpeech),
     )
     if avatar == base.localAvatar:
         track.append(Func(self.sendUpdate, "requestToonup"))
     track.append(Parallel(SoundInterval(self.rimshot, startTime=2.0), Wait(d * 4)))
     track.append(Func(self.cleanupTrack))
     track.delayDelete = DelayDelete.DelayDelete(avatar, "knockKnockTrack")
     return track
 def load(self, loadModels = 1, arenaModel = 'partyCatchTree'):
     self.notify.info('load()')
     DistributedPartyCatchActivity.notify.debug('PartyCatch: load')
     self.activityFSM = CatchActivityFSM(self)
     self.defineConstants()
     self.treesAndFence = loader.loadModel('phase_13/models/parties/%s' % arenaModel)
     self.treesAndFence.setScale(0.9)
     self.treesAndFence.find('**/fence_floor').setPos(0.0, 0.0, 0.1)
     self.treesAndFence.reparentTo(self.root)
     ground = self.treesAndFence.find('**/groundPlane')
     ground.setBin('ground', 1)
     DistributedPartyActivity.load(self)
     exitText = TextNode('PartyCatchExitText')
     exitText.setCardAsMargin(0.1, 0.1, 0.1, 0.1)
     exitText.setCardDecal(True)
     exitText.setCardColor(1.0, 1.0, 1.0, 0.0)
     exitText.setText(TTLocalizer.PartyCatchActivityExit)
     exitText.setTextColor(0.0, 8.0, 0.0, 0.9)
     exitText.setAlign(exitText.ACenter)
     exitText.setFont(ToontownGlobals.getBuildingNametagFont())
     exitText.setShadowColor(0, 0, 0, 1)
     exitText.setBin('fixed')
     if TTLocalizer.BuildingNametagShadow:
         exitText.setShadow(*TTLocalizer.BuildingNametagShadow)
     exitTextLoc = self.treesAndFence.find('**/loc_exitSignText')
     exitTextNp = exitTextLoc.attachNewNode(exitText)
     exitTextNp.setDepthWrite(0)
     exitTextNp.setScale(4)
     exitTextNp.setZ(-.5)
     self.sign.reparentTo(self.treesAndFence.find('**/loc_eventSign'))
     self.sign.wrtReparentTo(self.root)
     self.avatarNodePath = NodePath('PartyCatchAvatarNodePath')
     self.avatarNodePath.reparentTo(self.root)
     self._avatarNodePathParentToken = 3
     base.cr.parentMgr.registerParent(self._avatarNodePathParentToken, self.avatarNodePath)
     self.toonSDs = {}
     self.dropShadow = loader.loadModelOnce('phase_3/models/props/drop_shadow')
     self.dropObjModels = {}
     if loadModels:
         self.__loadDropModels()
     self.sndGoodCatch = base.loadSfx('phase_4/audio/sfx/SZ_DD_treasure.ogg')
     self.sndOof = base.loadSfx('phase_4/audio/sfx/MG_cannon_hit_dirt.ogg')
     self.sndAnvilLand = base.loadSfx('phase_4/audio/sfx/AA_drop_anvil_miss.ogg')
     self.sndPerfect = base.loadSfx('phase_4/audio/sfx/ring_perfect.ogg')
     self.__textGen = TextNode('partyCatchActivity')
     self.__textGen.setFont(ToontownGlobals.getSignFont())
     self.__textGen.setAlign(TextNode.ACenter)
     self.activityFSM.request('Idle')
Пример #25
0
 def setupNametag(self):
     if not self.wantsNametag():
         return
         
     if self.doorIndex != 0:
         # Avoid duplicated nametags (eg hq doors)
         return
         
     if self.nametag == None:
         self.nametag = NametagGroup()
         self.nametag.setFont(ToontownGlobals.getBuildingNametagFont())
         
         if TTLocalizer.BuildingNametagShadow:
             self.nametag.setShadow(*TTLocalizer.BuildingNametagShadow)
             
         self.nametag.setContents(Nametag.CName)
         self.nametag.setColorCode(NametagGroup.CCToonBuilding)
         self.nametag.setActive(0)
         self.nametag.setAvatar(self.getDoorNodePath())
         self.nametag.setObjectCode(self.block)
         
         name = self.cr.playGame.dnaStore.getTitleFromBlockNumber(self.block)
         self.nametag.setName(name)
         
         self.nametag.manage(base.marginManager)
Пример #26
0
 def doSpawnTitleText(self, text):
     return
     self.titleColor = (1.0, 0.5, 0.4, 1.0)
     self.titleText = OnscreenText.OnscreenText(
         text,
         fg=self.titleColor,
         font=ToontownGlobals.getSignFont(),
         pos=(0, -0.5),
         scale=0.16,
         drawOrder=0,
         mayChange=1,
         wordwrap=16,
     )
     self.titleText.setText(text)
     self.titleText.show()
     self.titleText.setColor(Vec4(*self.titleColor))
     self.titleText.clearColorScale()
     self.titleText.setFg(self.titleColor)
     seq = Sequence(
         Wait(0.1),
         Wait(6.0),
         self.titleText.colorScaleInterval(0.5, Vec4(1.0, 1.0, 1.0, 0.0)),
         Task(self.hideTitleText),
     )
     seq.start()
Пример #27
0
 def attachHostNameToSign(self, locator):
     if self.hostName == "":
         return
     nameText = TextNode("nameText")
     nameText.setCardAsMargin(0.1, 0.1, 0.1, 0.1)
     nameText.setCardDecal(True)
     nameText.setCardColor(1.0, 1.0, 1.0, 0.0)
     r = 232.0 / 255.0
     g = 169.0 / 255.0
     b = 23.0 / 255.0
     nameText.setTextColor(r, g, b, 1)
     nameText.setAlign(nameText.ACenter)
     nameText.setFont(ToontownGlobals.getBuildingNametagFont())
     nameText.setShadowColor(0, 0, 0, 1)
     nameText.setBin("fixed")
     if TTLocalizer.BuildingNametagShadow:
         nameText.setShadow(*TTLocalizer.BuildingNametagShadow)
     nameWordWrap = 11.0
     nameText.setWordwrap(nameWordWrap)
     scaleMult = 0.48
     houseName = self.hostName
     nameText.setText(houseName)
     textWidth = nameText.getWidth()
     xScale = 1.0 * scaleMult
     if textWidth > nameWordWrap:
         xScale = nameWordWrap / textWidth * scaleMult
     sign_origin = locator
     namePlate = sign_origin.attachNewNode(nameText)
     namePlate.setDepthWrite(0)
     namePlate.setPos(0, 0, 0)
     namePlate.setScale(xScale)
Пример #28
0
    def __makeGallery(self):
        self.gallery = hidden.attachNewNode('gallery')
        self.gallery.setDepthWrite(1)
        self.gallery.setDepthTest(1)
        self.suits = []
        self.actors = []
        self.text = TextNode('rogues')
        self.text.setFont(ToontownGlobals.getInterfaceFont())
        self.text.setAlign(TextNode.ACenter)
        self.text.setTextColor(0.0, 0.0, 0.0, 1.0)
        self.rowHeight = 0.0
        self.minXScale = None
        print "rognamestr='", self.rognamestr, "'\n"
        if self.rognamestr == None or len(self.rognamestr) == 0:
            for dept in SuitDNA.suitDepts:
                self.__makeDept(dept)

        else:
            self.suitRow = []
            self.rowWidth = 0.0
            self.__makeSuit(None, None, self.rognamestr)
            self.minXScale = self.xRowSpace / self.rowWidth
            self.suits.append((self.rowWidth, self.suitRow))
            del self.suitRow
        self.__rescaleSuits()
        return
Пример #29
0
 def updatePage(self):
     print 'updating achievements page'
     self.avAchievements = localAvatar.achievements
     
     for achievement in self.achievements:
         achievement.destroy()
     
     del self.achievements
     self.achievements = []
     
     start_pos = LVecBase3(0.72, 1, -0.21)
     seperation = LVecBase3(0.45, 0, 0.4)        
     
     for achievement in xrange(len(AchievementsGlobals.AchievementTitles)):
         achievementFrame = DirectFrame(parent=self.scrollFrame.getCanvas(), image=DGG.getDefaultDialogGeom(), scale=(1.3, 0, 0.32),
                                        relief=None, pos=(start_pos.x, 1, start_pos.z - seperation.z * achievement),
                                        text=AchievementsGlobals.AchievementTitles[achievement], text_scale=(0.05, 0.13),
                                        text_font=ToontownGlobals.getMinnieFont(), text_pos=(0, 0, 0))
         
         self.achievements.append(achievementFrame)
         
         if achievement in  self.avAchievements:
             achievementFrame['text'] = AchievementsGlobals.AchievementTitles[achievement]
             achievementFrame['text_pos'] = (0, 0.2, -0.2)
             
             currentAchievement = AchievementsGlobals.AchievementImages[achievement]
             image = loader.loadModel(currentAchievement[0])
             imageNode = image.find(currentAchievement[1])
             imageNode.setColor(currentAchievement[2])               
             
             img = OnscreenGeom(geom=imageNode, parent=achievementFrame, pos=(-0.3, 0, 0))
         else:
             achievementFrame['text'] = '???'
Пример #30
0
 def __init__(self, genus = None, itemIndex = 0, *extraArgs):
     fishingGui = loader.loadModel('phase_3.5/models/gui/fishingBook')
     albumGui = fishingGui.find('**/photo_frame1').copyTo(hidden)
     albumGui.find('**/picture_frame').reparentTo(albumGui, -1)
     albumGui.find('**/arrows').removeNode()
     optiondefs = (('relief', None, None),
      ('state', DGG.NORMAL, None),
      ('image', albumGui, None),
      ('image_scale', (0.025, 0.025, 0.025), None),
      ('image_pos', (0, 1, 0), None),
      ('text', TTLocalizer.UnknownFish, None),
      ('text_scale', 0.065, None),
      ('text_fg', (0.2, 0.1, 0.0, 1), None),
      ('text_pos', (-0.5, -0.34), None),
      ('text_font', ToontownGlobals.getInterfaceFont(), None),
      ('text_wordwrap', 13.5, None),
      ('text_align', TextNode.ALeft, None))
     self.defineoptions({}, optiondefs)
     DirectFrame.__init__(self)
     self.initialiseoptions(GenusPanel)
     self.fishPanel = None
     self.genus = None
     self.setGenus(int(genus))
     self.setScale(1.2)
     albumGui.removeNode()
     return
Пример #31
0
 def load(self):
     if self.loaded:
         return
     self.loaded = 1
     self.verify = None
     self.pictureFrame = self.attachNewNode('pictureFrame')
     self.pictureFrame.setScale(0.15)
     self.itemIndex = 0
     self.ival = None
     typeCode = self['item'].getTypeCode()
     if self['item'].needsCustomize() and (
             typeCode == CatalogItemTypes.WALLPAPER_ITEM
             or typeCode == CatalogItemTypes.FLOORING_ITEM
             or typeCode == CatalogItemTypes.MOULDING_ITEM
             or typeCode == CatalogItemTypes.FURNITURE_ITEM
             or typeCode == CatalogItemTypes.WAINSCOTING_ITEM
             or typeCode == CatalogItemTypes.TOON_STATUE_ITEM):
         if typeCode == CatalogItemTypes.WALLPAPER_ITEM:
             self.items = getAllWallpapers(self['item'].patternIndex)
         elif typeCode == CatalogItemTypes.FLOORING_ITEM:
             self.items = getAllFloorings(self['item'].patternIndex)
         elif typeCode == CatalogItemTypes.MOULDING_ITEM:
             self.items = getAllMouldings(self['item'].patternIndex)
         elif typeCode == CatalogItemTypes.FURNITURE_ITEM:
             self.items = getAllFurnitures(self['item'].furnitureType)
         elif typeCode == CatalogItemTypes.TOON_STATUE_ITEM:
             self.items = self['item'].getAllToonStatues()
         elif typeCode == CatalogItemTypes.WAINSCOTING_ITEM:
             self.items = getAllWainscotings(self['item'].patternIndex)
         self.numItems = len(self.items)
         if self.numItems > 1:
             guiItems = loader.loadModel('phase_5.5/models/gui/catalog_gui')
             nextUp = guiItems.find('**/arrow_up')
             nextRollover = guiItems.find('**/arrow_Rollover')
             nextDown = guiItems.find('**/arrow_Down')
             prevUp = guiItems.find('**/arrowUp')
             prevDown = guiItems.find('**/arrowDown1')
             prevRollover = guiItems.find('**/arrowRollover')
             self.nextVariant = DirectButton(parent=self,
                                             relief=None,
                                             image=(nextUp, nextDown,
                                                    nextRollover, nextUp),
                                             image3_color=(1, 1, 1, 0.4),
                                             pos=(0.13, 0, 0),
                                             command=self.showNextVariant)
             self.prevVariant = DirectButton(parent=self,
                                             relief=None,
                                             image=(prevUp, prevDown,
                                                    prevRollover, prevUp),
                                             image3_color=(1, 1, 1, 0.4),
                                             pos=(-0.13, 0, 0),
                                             command=self.showPrevVariant,
                                             state=DGG.DISABLED)
             self.variantPictures = [(None, None)] * self.numItems
         else:
             self.variantPictures = [(None, None)]
         self.showCurrentVariant()
     else:
         picture, self.ival = self['item'].getPicture(base.localAvatar)
         if picture:
             picture.reparentTo(self)
             picture.setScale(0.15)
         self.items = [self['item']]
         self.variantPictures = [(picture, self.ival)]
         if self.ival:
             self.ival.loop()
     self.typeLabel = DirectLabel(
         parent=self,
         relief=None,
         pos=(0, 0, 0.24),
         scale=TTLocalizer.CIPtypeLabel,
         text=self['item'].getTypeName(),
         text_fg=(0.95, 0.95, 0, 1),
         text_shadow=(0, 0, 0, 1),
         text_font=ToontownGlobals.getInterfaceFont(),
         text_wordwrap=CATALOG_PANEL_WORDWRAP)
     self.auxText = DirectLabel(parent=self,
                                relief=None,
                                scale=0.05,
                                pos=(-0.2, 0, 0.16))
     self.auxText.setHpr(0, 0, -30)
     self.nameLabel = DirectLabel(
         parent=self,
         relief=None,
         text=self['item'].getDisplayName(),
         text_fg=(0, 0, 0, 1),
         text_font=ToontownGlobals.getInterfaceFont(),
         text_scale=TTLocalizer.CIPnameLabel,
         text_wordwrap=CATALOG_PANEL_WORDWRAP +
         TTLocalizer.CIPwordwrapOffset)
     if self['item'].getTypeCode() == CatalogItemTypes.CHAT_ITEM:
         self.nameLabel['text_wordwrap'] = CATALOG_PANEL_CHAT_WORDWRAP
         numRows = self.nameLabel.component('text0').textNode.getNumRows()
         if numRows == 1:
             namePos = (0, 0, -0.06)
         elif numRows == 2:
             namePos = (0, 0, -0.03)
         else:
             namePos = (0, 0, 0)
         nameScale = 0.063
     elif self['item'].getTypeCode() == CatalogItemTypes.ACCESSORY_ITEM:
         self.nameLabel['text_wordwrap'] = CATALOG_PANEL_ACCESSORY_WORDWRAP
         namePos = (0, 0, -.22)
         nameScale = 0.06
     else:
         namePos = (0, 0, -.22)
         nameScale = 0.06
     self.nameLabel.setPos(*namePos)
     self.nameLabel.setScale(nameScale)
     numericBeanPrice = self['item'].getPrice(self['type'])
     priceStr = str(numericBeanPrice) + ' ' + TTLocalizer.CatalogCurrency
     priceScale = 0.07
     if self['item'].isSaleItem():
         priceStr = TTLocalizer.CatalogSaleItem + priceStr
         priceScale = 0.06
     self.priceLabel = DirectLabel(parent=self,
                                   relief=None,
                                   pos=(0, 0, -0.3),
                                   scale=priceScale,
                                   text=priceStr,
                                   text_fg=(0.95, 0.95, 0, 1),
                                   text_shadow=(0, 0, 0, 1),
                                   text_font=ToontownGlobals.getSignFont(),
                                   text_align=TextNode.ACenter)
     self.createEmblemPrices(numericBeanPrice)
     buttonModels = loader.loadModel('phase_3.5/models/gui/inventory_gui')
     upButton = buttonModels.find('**/InventoryButtonUp')
     downButton = buttonModels.find('**/InventoryButtonDown')
     rolloverButton = buttonModels.find('**/InventoryButtonRollover')
     buyText = TTLocalizer.CatalogBuyText
     buyTextScale = TTLocalizer.CIPbuyButton
     if self['item'].isRental():
         buyText = TTLocalizer.CatalogRentText
     self.buyButton = DirectButton(parent=self,
                                   relief=None,
                                   pos=(0.2, 0, 0.15),
                                   scale=(0.7, 1, 0.8),
                                   text=buyText,
                                   text_scale=buyTextScale,
                                   text_pos=(-0.005, -0.01),
                                   image=(upButton, downButton,
                                          rolloverButton, upButton),
                                   image_color=(1.0, 0.2, 0.2, 1),
                                   image0_color=Vec4(1.0, 0.4, 0.4, 1),
                                   image3_color=Vec4(1.0, 0.4, 0.4, 0.4),
                                   command=self.__handlePurchaseRequest)
     soundIcons = loader.loadModel('phase_5.5/models/gui/catalogSoundIcons')
     soundOn = soundIcons.find('**/sound07')
     soundOff = soundIcons.find('**/sound08')
     self.soundOnButton = DirectButton(
         parent=self,
         relief=None,
         pos=(0.2, 0, -0.15),
         scale=(0.7, 1, 0.8),
         text_scale=buyTextScale,
         text_pos=(-0.005, -0.01),
         image=(upButton, downButton, rolloverButton, upButton),
         image_color=(0.2, 0.5, 0.2, 1),
         image0_color=Vec4(0.4, 0.5, 0.4, 1),
         image3_color=Vec4(0.4, 0.5, 0.4, 0.4),
         command=self.handleSoundOnButton)
     self.soundOnButton.hide()
     soundOn.setScale(0.1)
     soundOn.reparentTo(self.soundOnButton)
     self.soundOffButton = DirectButton(
         parent=self,
         relief=None,
         pos=(0.2, 0, -0.15),
         scale=(0.7, 1, 0.8),
         text_scale=buyTextScale,
         text_pos=(-0.005, -0.01),
         image=(upButton, downButton, rolloverButton, upButton),
         image_color=(0.2, 1.0, 0.2, 1),
         image0_color=Vec4(0.4, 1.0, 0.4, 1),
         image3_color=Vec4(0.4, 1.0, 0.4, 0.4),
         command=self.handleSoundOffButton)
     self.soundOffButton.hide()
     soundOff = self.soundOffButton.attachNewNode('soundOff')
     soundOn.copyTo(soundOff)
     soundOff.reparentTo(self.soundOffButton)
     upGButton = buttonModels.find('**/InventoryButtonUp')
     downGButton = buttonModels.find('**/InventoryButtonDown')
     rolloverGButton = buttonModels.find('**/InventoryButtonRollover')
     self.giftButton = DirectButton(parent=self,
                                    relief=None,
                                    pos=(0.2, 0, 0.15),
                                    scale=(0.7, 1, 0.8),
                                    text=TTLocalizer.CatalogGiftText,
                                    text_scale=buyTextScale,
                                    text_pos=(-0.005, -0.01),
                                    image=(upButton, downButton,
                                           rolloverButton, upButton),
                                    image_color=(1.0, 0.2, 0.2, 1),
                                    image0_color=Vec4(1.0, 0.4, 0.4, 1),
                                    image3_color=Vec4(1.0, 0.4, 0.4, 0.4),
                                    command=self.__handleGiftRequest)
     self.updateButtons()
     return
Пример #32
0
    def load(self):
        self.notify.debug("load")
        DistributedMinigame.load(self)
        # Black screen
        self.raceBoard = loader.loadModel("phase_4/models/minigames/race")
        self.raceBoard.setPosHpr(0, 0, 0, 0, 0, 0)
        self.raceBoard.setScale(0.8)

        self.dice = loader.loadModel("phase_4/models/minigames/dice")
        # These are used to show what each avatar picked
        self.dice1 = self.dice.find("**/dice_button1")
        self.dice2 = self.dice.find("**/dice_button2")
        self.dice3 = self.dice.find("**/dice_button3")
        self.dice4 = self.dice.find("**/dice_button4")
        self.diceList = [self.dice1, self.dice2, self.dice3, self.dice4]

        self.music = base.loadMusic("phase_4/audio/bgm/minigame_race.ogg")
        # The sound that is played when local toon gets a unique choice
        self.posBuzzer = base.loadSfx("phase_4/audio/sfx/MG_pos_buzzer.wav")
        # The sound that is played when local toon gets a bad choice
        self.negBuzzer = base.loadSfx("phase_4/audio/sfx/MG_neg_buzzer.wav")
        self.winSting = base.loadSfx("phase_4/audio/sfx/MG_win.mp3")
        self.loseSting = base.loadSfx("phase_4/audio/sfx/MG_lose.mp3")

        self.diceButtonList = []
        for i in range(1, 5):
            button = self.dice.find("**/dice_button" + str(i))
            button_down = self.dice.find("**/dice_button" + str(i) + "_down")
            button_ro = self.dice.find("**/dice_button" + str(i) + "_ro")
            diceButton = DirectButton(
                image=(button, button_down, button_ro, None),
                relief=None,
                pos=(-0.9 + ((i - 1) * 0.2), 0.0, -0.85),
                scale=0.25,
                command=self.handleInputChoice,
                extraArgs=[i],
            )
            diceButton.hide()
            self.diceButtonList.append(diceButton)

        self.waitingChoicesLabel = DirectLabel(
            text=TTLocalizer.RaceGameWaitingChoices,
            text_fg=VBase4(1, 1, 1, 1),
            relief=None,
            pos=(-0.6, 0, -0.75),
            scale=0.075)
        self.waitingChoicesLabel.hide()

        # load the chance card marker
        self.chanceMarker = loader.loadModel(
            "phase_4/models/minigames/question_mark")

        # load the chance card
        self.chanceCard = loader.loadModel(
            "phase_4/models/minigames/chance_card")

        # chance card text
        self.chanceCardText = OnscreenText(
            "",
            fg=(1.0, 0, 0, 1),
            scale=0.14,
            font=ToontownGlobals.getSignFont(),
            wordwrap=14,
            pos=(0.0, 0.2),
            mayChange=1,
        )
        self.chanceCardText.hide()

        # The sound that is played when chance card is revealed
        self.cardSound = base.loadSfx(
            "phase_3.5/audio/sfx/GUI_stickerbook_turn.mp3")

        self.chanceMarkers = []
Пример #33
0
 def setMintId(self, mintId):
     self.mintId = mintId
     self.cogTrack = ToontownGlobals.cogHQZoneId2dept(mintId)
Пример #34
0
    def load(self):
        self.gui = loader.loadModel('phase_3.5/models/gui/friendslist_gui')
        self.listXorigin = -0.5
        self.listFrameSizeX = 1.5
        self.listZorigin = -0.9
        self.listFrameSizeZ = 1.04
        self.arrowButtonScale = 1.3
        self.itemFrameXorigin = -0.237
        self.itemFrameZorigin = 0.365
        self.labelXstart = self.itemFrameXorigin + 0.293
        self.scrollList = DirectScrolledList(
            parent=self,
            relief=None,
            pos=(0, 0, 0),
            incButton_image=(self.gui.find('**/FndsLst_ScrollUp'),
                             self.gui.find('**/FndsLst_ScrollDN'),
                             self.gui.find('**/FndsLst_ScrollUp_Rllvr'),
                             self.gui.find('**/FndsLst_ScrollUp')),
            incButton_relief=None,
            incButton_scale=(self.arrowButtonScale, self.arrowButtonScale,
                             -self.arrowButtonScale),
            incButton_pos=(self.labelXstart, 0, self.itemFrameZorigin - 0.999),
            incButton_image3_color=Vec4(1, 1, 1, 0.2),
            decButton_image=(self.gui.find('**/FndsLst_ScrollUp'),
                             self.gui.find('**/FndsLst_ScrollDN'),
                             self.gui.find('**/FndsLst_ScrollUp_Rllvr'),
                             self.gui.find('**/FndsLst_ScrollUp')),
            decButton_relief=None,
            decButton_scale=(self.arrowButtonScale, self.arrowButtonScale,
                             self.arrowButtonScale),
            decButton_pos=(self.labelXstart, 0, self.itemFrameZorigin + 0.227),
            decButton_image3_color=Vec4(1, 1, 1, 0.2),
            itemFrame_pos=(self.itemFrameXorigin, 0, self.itemFrameZorigin),
            itemFrame_scale=1.0,
            itemFrame_relief=DGG.SUNKEN,
            itemFrame_frameSize=(self.listXorigin,
                                 self.listXorigin + self.listFrameSizeX,
                                 self.listZorigin,
                                 self.listZorigin + self.listFrameSizeZ),
            itemFrame_frameColor=(0.85, 0.95, 1, 1),
            itemFrame_borderWidth=(0.01, 0.01),
            numItemsVisible=12,
            forceHeight=0.083,
            items=[])
        for courseId in GolfGlobals.CourseInfo:
            courseName = GolfGlobals.getCourseName(courseId)
            frame = DirectFrame(parent=self.scrollList, relief=None)
            courseNameDisplay = DirectLabel(
                parent=frame,
                relief=None,
                pos=(-0.475, 0, 0.05),
                text=courseName,
                text_align=TextNode.ALeft,
                text_scale=0.075,
                text_fg=(0.85, 0.64, 0.13, 1.0),
                text_shadow=(0, 0, 0, 1),
                text_font=ToontownGlobals.getSignFont())
            bestScoreDisplay = DirectLabel(
                parent=frame,
                relief=None,
                pos=(0.9, 0, 0.05),
                text=TTLocalizer.KartRace_Unraced,
                text_scale=0.06,
                text_fg=(0.0, 0.0, 0.0, 1.0),
                text_font=ToontownGlobals.getToonFont())
            self.bestDisplayList.append(bestScoreDisplay)
            self.scrollList.addItem(frame)

        for holeId in GolfGlobals.HoleInfo:
            holeName = GolfGlobals.getHoleName(holeId)
            frame = DirectFrame(parent=self.scrollList, relief=None)
            holeNameDisplay = DirectLabel(
                parent=frame,
                relief=None,
                pos=(-0.475, 0, 0.05),
                text=holeName,
                text_align=TextNode.ALeft,
                text_scale=0.075,
                text_fg=(0.95, 0.95, 0.0, 1.0),
                text_shadow=(0, 0, 0, 1),
                text_font=ToontownGlobals.getSignFont())
            bestScoreDisplay = DirectLabel(
                parent=frame,
                relief=None,
                pos=(0.9, 0, 0.05),
                text=TTLocalizer.KartRace_Unraced,
                text_scale=0.06,
                text_fg=(0.0, 0.0, 0.0, 1.0),
                text_font=ToontownGlobals.getToonFont())
            self.bestDisplayList.append(bestScoreDisplay)
            self.scrollList.addItem(frame)

        return
Пример #35
0
 def load(self):
     normalTextColor = (0.3, 0.25, 0.2, 1)
     self.gui = loader.loadModel('phase_3/models/gui/tt_m_gui_mat_mainGui')
     guiRArrowUp = self.gui.find('**/tt_t_gui_mat_arrowUp')
     guiRArrowRollover = self.gui.find('**/tt_t_gui_mat_arrowUp')
     guiRArrowDown = self.gui.find('**/tt_t_gui_mat_arrowDown')
     guiRArrowDisabled = self.gui.find('**/tt_t_gui_mat_arrowDisabled')
     shuffleFrame = self.gui.find('**/tt_t_gui_mat_shuffleFrame')
     shuffleUp = self.gui.find('**/tt_t_gui_mat_shuffleUp')
     shuffleDown = self.gui.find('**/tt_t_gui_mat_shuffleDown')
     shuffleImage = (self.gui.find('**/tt_t_gui_mat_shuffleArrowUp'),
                     self.gui.find('**/tt_t_gui_mat_shuffleArrowDown'),
                     self.gui.find('**/tt_t_gui_mat_shuffleArrowUp'),
                     self.gui.find('**/tt_t_gui_mat_shuffleArrowDisabled'))
     bookModel = loader.loadModel('phase_3.5/models/gui/stickerbook_gui')
     poster = bookModel.find('**/questCard')
     self.parentFrame = self.getNewFrame()
     self.childProofingText = DirectLabel(
         parent=aspect2d,
         relief=None,
         text=
         'WARNING: UBER MODE IS IRREVERSIBLE\nONLY CLICK NEXT IF YOU ARE SURE\nOTHERWISE, CHANGE BACK TO NORMAL MODE',
         text_scale=0.15,
         text_fg=(1, 0, 0, 1))
     self.uberFrame = DirectFrame(parent=self.parentFrame,
                                  image=shuffleFrame,
                                  image_scale=halfButtonInvertScale,
                                  relief=None,
                                  pos=(0, 0, -0.7),
                                  hpr=(0, 0, 3),
                                  scale=1.1,
                                  frameColor=(1, 1, 1, 1),
                                  text='',
                                  text_scale=0.0625,
                                  text_pos=(-0.001, -0.015),
                                  text_fg=(1, 1, 1, 1))
     self.uberLButton = DirectButton(parent=self.uberFrame,
                                     relief=None,
                                     image=shuffleImage,
                                     image_scale=halfButtonScale,
                                     image1_scale=halfButtonHoverScale,
                                     image2_scale=halfButtonHoverScale,
                                     pos=(-0.2, 0, 0),
                                     command=self.__swapUberStatus,
                                     extraArgs=[-1])
     self.uberRButton = DirectButton(
         parent=self.uberFrame,
         relief=None,
         image=shuffleImage,
         image_scale=halfButtonInvertScale,
         image1_scale=halfButtonInvertHoverScale,
         image2_scale=halfButtonInvertHoverScale,
         pos=(0.2, 0, 0),
         command=self.__swapUberStatus,
         extraArgs=[1])
     self.uberInfo = DirectFrame(
         parent=self.uberFrame,
         relief=None,
         image=poster,
         image_scale=(0.5, 0.5, 0.7),
         image_pos=(0, 0, -0.15),
         text='',
         text_font=ToontownGlobals.getInterfaceFont(),
         text_fg=normalTextColor,
         text_scale=0.05,
         text_wordwrap=8.0,
         pos=(-0.5, 0, 0.5))
     self.__swapUberStatus(0)
     self.parentFrame.hide()
Пример #36
0
    def loadPlaceGeom(self, zoneId):
        self.notify.info('loadPlaceGeom: %s' % zoneId)
        zoneId = zoneId - zoneId % 100
        if zoneId == ToontownGlobals.SellbotHQ:
            self.geom = loader.loadModel(self.cogHQExteriorModelPath)
            dgLinkTunnel = self.geom.find('**/Tunnel1')
            dgLinkTunnel.setName('linktunnel_dg_5316_DNARoot')
            factoryLinkTunnel = self.geom.find('**/Tunnel2')
            factoryLinkTunnel.setName('linktunnel_sellhq_11200_DNARoot')
            cogSignModel = loader.loadModel(
                'phase_4/models/props/sign_sellBotHeadHQ')
            cogSign = cogSignModel.find('**/sign_sellBotHeadHQ')
            cogSignSF = 23
            dgSign = cogSign.copyTo(dgLinkTunnel)
            dgSign.setPosHprScale(0.0, -291.5, 29, 180.0, 0.0, 0.0, cogSignSF,
                                  cogSignSF, cogSignSF * aspectSF)
            dgSign.node().setEffect(DecalEffect.make())
            dgText = DirectGui.OnscreenText(text=TTLocalizer.DaisyGardens[-1],
                                            font=ToontownGlobals.getSuitFont(),
                                            pos=(0, -0.3),
                                            scale=TTLocalizer.SCHQLdgText,
                                            mayChange=False,
                                            parent=dgSign)
            dgText.setDepthWrite(0)
            factorySign = cogSign.copyTo(factoryLinkTunnel)
            factorySign.setPosHprScale(148.625, -155, 27, -90.0, 0.0, 0.0,
                                       cogSignSF, cogSignSF,
                                       cogSignSF * aspectSF)
            factorySign.node().setEffect(DecalEffect.make())
            factoryTypeText = DirectGui.OnscreenText(
                text=TTLocalizer.Sellbot,
                font=ToontownGlobals.getSuitFont(),
                pos=TTLocalizer.SellbotFactoryPosPart1,
                scale=TTLocalizer.SellbotFactoryScalePart1,
                mayChange=False,
                parent=factorySign)
            factoryTypeText.setDepthWrite(0)
            factoryText = DirectGui.OnscreenText(
                text=TTLocalizer.Factory,
                font=ToontownGlobals.getSuitFont(),
                pos=TTLocalizer.SellbotFactoryPosPart2,
                scale=TTLocalizer.SellbotFactoryScalePart2,
                mayChange=False,
                parent=factorySign)
            factoryText.setDepthWrite(0)
            doors = self.geom.find('**/doors')
            door0 = doors.find('**/door_0')
            door1 = doors.find('**/door_1')
            door2 = doors.find('**/door_2')
            door3 = doors.find('**/door_3')
            index = 0
            for door in [door0, door1, door2, door3]:
                doorFrame = door.find('**/doorDoubleFlat/+GeomNode')
                door.find('**/doorFrameHoleLeft').wrtReparentTo(doorFrame)
                door.find('**/doorFrameHoleRight').wrtReparentTo(doorFrame)
                doorFrame.node().setEffect(DecalEffect.make())
                index += 1

        elif zoneId == ToontownGlobals.SellbotFactoryExt:
            self.geom = loader.loadModel(self.factoryExteriorModelPath)
            factoryLinkTunnel = self.geom.find('**/tunnel_group2')
            factoryLinkTunnel.setName('linktunnel_sellhq_11000_DNARoot')
            factoryLinkTunnel.find('**/tunnel_sphere').setName(
                'tunnel_trigger')
            cogSignModel = loader.loadModel(
                'phase_4/models/props/sign_sellBotHeadHQ')
            cogSign = cogSignModel.find('**/sign_sellBotHeadHQ')
            cogSignSF = 23
            elevatorSignSF = 15
            hqSign = cogSign.copyTo(factoryLinkTunnel)
            hqSign.setPosHprScale(0.0, -353, 27.5, -180.0, 0.0, 0.0, cogSignSF,
                                  cogSignSF, cogSignSF * aspectSF)
            hqSign.node().setEffect(DecalEffect.make())
            hqTypeText = DirectGui.OnscreenText(
                text=TTLocalizer.Sellbot,
                font=ToontownGlobals.getSuitFont(),
                pos=(0, -0.25),
                scale=0.075,
                mayChange=False,
                parent=hqSign)
            hqTypeText.setDepthWrite(0)
            hqText = DirectGui.OnscreenText(text=TTLocalizer.Headquarters,
                                            font=ToontownGlobals.getSuitFont(),
                                            pos=(0, -0.34),
                                            scale=0.1,
                                            mayChange=False,
                                            parent=hqSign)
            hqText.setDepthWrite(0)
            frontDoor = self.geom.find('**/doorway1')
            fdSign = cogSign.copyTo(frontDoor)
            fdSign.setPosHprScale(62.74, -87.99, 17.26, 2.72, 0.0, 0.0,
                                  elevatorSignSF, elevatorSignSF,
                                  elevatorSignSF * aspectSF)
            fdSign.node().setEffect(DecalEffect.make())
            fdTypeText = DirectGui.OnscreenText(
                text=TTLocalizer.Factory,
                font=ToontownGlobals.getSuitFont(),
                pos=(0, -0.25),
                scale=TTLocalizer.SCHQLfdTypeText,
                mayChange=False,
                parent=fdSign)
            fdTypeText.setDepthWrite(0)
            fdText = DirectGui.OnscreenText(
                text=TTLocalizer.SellbotFrontEntrance,
                font=ToontownGlobals.getSuitFont(),
                pos=(0, -0.34),
                scale=TTLocalizer.SCHQLdgText,
                mayChange=False,
                parent=fdSign)
            fdText.setDepthWrite(0)
            sideDoor = self.geom.find('**/doorway2')
            sdSign = cogSign.copyTo(sideDoor)
            sdSign.setPosHprScale(-164.78, 26.28, 17.25, -89.89, 0.0, 0.0,
                                  elevatorSignSF, elevatorSignSF,
                                  elevatorSignSF * aspectSF)
            sdSign.node().setEffect(DecalEffect.make())
            sdTypeText = DirectGui.OnscreenText(
                text=TTLocalizer.Factory,
                font=ToontownGlobals.getSuitFont(),
                pos=(0, -0.25),
                scale=0.075,
                mayChange=False,
                parent=sdSign)
            sdTypeText.setDepthWrite(0)
            sdText = DirectGui.OnscreenText(
                text=TTLocalizer.SellbotSideEntrance,
                font=ToontownGlobals.getSuitFont(),
                pos=(0, -0.34),
                scale=0.1,
                mayChange=False,
                parent=sdSign)
            sdText.setDepthWrite(0)
        elif zoneId == ToontownGlobals.SellbotLobby:
            if config.GetBool('want-qa-regression', 0):
                self.notify.info('QA-REGRESSION: COGHQ: Visit SellbotLobby')
            self.geom = loader.loadModel(self.cogHQLobbyModelPath)
            front = self.geom.find('**/frontWall')
            front.node().setEffect(DecalEffect.make())
            door = self.geom.find('**/door_0')
            parent = door.getParent()
            door.wrtReparentTo(front)
            doorFrame = door.find('**/doorDoubleFlat/+GeomNode')
            door.find('**/doorFrameHoleLeft').wrtReparentTo(doorFrame)
            door.find('**/doorFrameHoleRight').wrtReparentTo(doorFrame)
            doorFrame.node().setEffect(DecalEffect.make())
            door.find('**/leftDoor').wrtReparentTo(parent)
            door.find('**/rightDoor').wrtReparentTo(parent)
        else:
            self.notify.warning('loadPlaceGeom: unclassified zone %s' % zoneId)
        CogHQLoader.CogHQLoader.loadPlaceGeom(self, zoneId)
Пример #37
0
 def setStageId(self, stageId):
     """call this w/ stageId as soon as you have it"""
     self.stageId = stageId
     # stageIds are 'logical' zoneIds (we don't actually go to the stageId
     # zone)
     self.cogTrack = ToontownGlobals.cogHQZoneId2dept(stageId)
Пример #38
0
 def load(self):
     gui = loader.loadModel('phase_3/models/gui/tt_m_gui_mat_mainGui')
     shuffleFrame = gui.find('**/tt_t_gui_mat_shuffleFrame')
     shuffleUp = gui.find('**/tt_t_gui_mat_shuffleUp')
     shuffleDown = gui.find('**/tt_t_gui_mat_shuffleDown')
     shuffleArrowUp = gui.find('**/tt_t_gui_mat_shuffleArrowUp')
     shuffleArrowDown = gui.find('**/tt_t_gui_mat_shuffleArrowDown')
     shuffleArrowDisabled = gui.find('**/tt_t_gui_mat_shuffleArrowDisabled')
     gui.removeNode()
     del gui
     self.parentFrame = DirectFrame(parent=self.parent.parentFrame,
                                    relief=DGG.RAISED,
                                    pos=(0, 0, -1),
                                    frameColor=(1, 0, 0, 0))
     self.shuffleFrame = DirectFrame(parent=self.parentFrame,
                                     image=shuffleFrame,
                                     image_scale=halfButtonInvertScale,
                                     relief=None,
                                     frameColor=(1, 1, 1, 1))
     self.shuffleFrame.hide()
     self.shuffleBtn = DirectButton(
         parent=self.parentFrame,
         relief=None,
         image=(shuffleUp, shuffleDown, shuffleUp),
         image_scale=halfButtonInvertScale,
         image1_scale=(-0.63, 0.6, 0.6),
         image2_scale=(-0.63, 0.6, 0.6),
         text=(TTLocalizer.ShuffleButton, TTLocalizer.ShuffleButton,
               TTLocalizer.ShuffleButton, ''),
         text_font=ToontownGlobals.getInterfaceFont(),
         text_scale=TTLocalizer.SBshuffleBtn,
         text_pos=(0, -0.02),
         text_fg=(1, 1, 1, 1),
         text_shadow=(0, 0, 0, 1),
         command=self.chooseRandom)
     self.incBtn = DirectButton(parent=self.parentFrame,
                                relief=None,
                                image=(shuffleArrowUp, shuffleArrowDown,
                                       shuffleArrowUp,
                                       shuffleArrowDisabled),
                                image_scale=halfButtonInvertScale,
                                image1_scale=halfButtonInvertHoverScale,
                                image2_scale=halfButtonInvertHoverScale,
                                pos=(0.202, 0, 0),
                                command=self.__goFrontHistory)
     self.incBtn.hide()
     self.decBtn = DirectButton(parent=self.parentFrame,
                                relief=None,
                                image=(shuffleArrowUp, shuffleArrowDown,
                                       shuffleArrowUp,
                                       shuffleArrowDisabled),
                                image_scale=halfButtonScale,
                                image1_scale=halfButtonHoverScale,
                                image2_scale=halfButtonHoverScale,
                                pos=(-0.202, 0, 0),
                                command=self.__goBackHistory)
     self.decBtn.hide()
     self.lerpDuration = 0.5
     self.showLerp = None
     self.frameShowLerp = LerpColorInterval(self.shuffleFrame,
                                            self.lerpDuration,
                                            Vec4(1, 1, 1, 1),
                                            Vec4(1, 1, 1, 0))
     self.incBtnShowLerp = LerpColorInterval(self.incBtn, self.lerpDuration,
                                             Vec4(1, 1, 1, 1),
                                             Vec4(1, 1, 1, 0))
     self.decBtnShowLerp = LerpColorInterval(self.decBtn, self.lerpDuration,
                                             Vec4(1, 1, 1, 1),
                                             Vec4(1, 1, 1, 0))
     self.__updateArrows()
     return
    def load(self):
        self.notify.debug('load')
        DistributedMinigame.load(self)
        self.timer = ToontownTimer.ToontownTimer()
        self.timer.posInTopRightCorner()
        self.timer.hide()
        self.room = loader.loadModel('phase_4/models/minigames/matching_room')
        self.buttonSounds = []
        for soundName in self.ButtonSoundNames:
            self.buttonSounds.append(base.loader.loadSfx(soundName))

        self.correctSound = base.loader.loadSfx(
            'phase_4/audio/sfx/MG_pos_buzzer.ogg')
        self.incorrectSound = base.loader.loadSfx(
            'phase_4/audio/sfx/MG_neg_buzzer.ogg')
        self.perfectSound = base.loader.loadSfx('phase_4/audio/sfx/MG_win.ogg')
        self.fallSound = base.loader.loadSfx('phase_4/audio/sfx/MG_Tag_A.ogg')
        self.music = base.loader.loadMusic(self.bgm)
        self.waitingText = DirectLabel(text=self.strPleaseWait,
                                       text_fg=(0.9, 0.9, 0.9, 1.0),
                                       frameColor=(1, 1, 1, 0),
                                       text_font=ToontownGlobals.getSignFont(),
                                       pos=(0, 0, -.78),
                                       scale=0.12)
        self.roundText = DirectLabel(text=self.strRound % 1,
                                     text_fg=self.normalTextColor,
                                     frameColor=(1, 1, 1, 0),
                                     text_font=ToontownGlobals.getSignFont(),
                                     pos=(0.014, 0, -.84),
                                     scale=0.12)
        self.roundText.hide()
        self.waitingText.hide()
        matchingGameGui = loader.loadModel(
            'phase_3.5/models/gui/matching_game_gui')
        minnieArrow = matchingGameGui.find('**/minnieArrow')
        minnieX = matchingGameGui.find('**/minnieX')
        minnieCircle = matchingGameGui.find('**/minnieCircle')
        self.arrows = [None] * 5
        for x in range(0, 5):
            self.arrows[x] = minnieArrow.copyTo(hidden)
            self.arrows[x].hide()

        self.xs = [None] * 5
        for x in range(0, 5):
            self.xs[x] = minnieX.copyTo(hidden)
            self.xs[x].hide()

        self.statusBalls = []
        self.totalMoves = PatternGameGlobals.INITIAL_ROUND_LENGTH + PatternGameGlobals.ROUND_LENGTH_INCREMENT * (
            PatternGameGlobals.NUM_ROUNDS - 1)
        for x in range(0, 4):
            self.statusBalls.append([None] * self.totalMoves)

        for x in range(0, 4):
            for y in range(0, self.totalMoves):
                self.statusBalls[x][y] = minnieCircle.copyTo(hidden)
                self.statusBalls[x][y].hide()

        minnieArrow.removeNode()
        minnieX.removeNode()
        minnieCircle.removeNode()
        matchingGameGui.removeNode()
        self.minnie = Char.Char()
        m = self.minnie
        dna = CharDNA.CharDNA()
        dna.newChar('mn')
        m.setDNA(dna)
        m.setName(TTLocalizer.Minnie)
        m.reparentTo(hidden)
        self.backRowHome = Point3(3, 11, 0)
        self.backRowXSpacing = 1.8
        self.frontRowHome = Point3(0, 18, 0)
        self.frontRowXSpacing = 3.0
        self.stdNumDanceStepPingFrames = self.minnie.getNumFrames(
            self.minnieAnimNames[0])
        self.stdNumDanceStepPingPongFrames = self.__numPingPongFrames(
            self.stdNumDanceStepPingFrames)
        self.buttonPressDelayPercent = (self.stdNumDanceStepPingFrames - 1.0
                                        ) / self.stdNumDanceStepPingPongFrames
        self.animPlayRates = []
        animPlayRate = 1.4
        animPlayRateMult = 1.06
        for i in range(PatternGameGlobals.NUM_ROUNDS):
            self.animPlayRates.append(animPlayRate)
            animPlayRate *= animPlayRateMult

        return
    def __init__(self, parent=aspect2dp, rotateCard=False, **kw):
        optiondefs = (('NPCID', 'Uninitialized', None), ('relief', None, None),
                      ('doneEvent', None, None))
        self.defineoptions(kw, optiondefs)
        DirectFrame.__init__(self, parent=parent)
        self.initialiseoptions(NPCFriendCard)
        cardModel = loader.loadModel('phase_3.5/models/gui/playingCard')
        self.front = DirectFrame(parent=self,
                                 relief=None,
                                 image=cardModel.find('**/card_front'))
        self.front.hide()
        self.back = DirectFrame(parent=self,
                                relief=None,
                                image=cardModel.find('**/card_back'),
                                geom=cardModel.find('**/logo'))
        callButtonPosZ = -0.90000000000000002
        textWordWrap = 16.0
        textScale = 0.34999999999999998
        textPosZ = 1.1499999999999999
        nameScale = 0.40000000000000002
        namePosZ = -0.45000000000000001
        rarityScale = 0.20000000000000001
        rarityPosZ = -1.2
        self.NPCHeadDim = 1.2
        self.NPCHeadPosZ = 0.45000000000000001
        self.sosCountInfoPosZ = -0.90000000000000002
        self.sosCountInfoScale = 0.40000000000000002
        self.sosCountInfo2PosZ = -0.90000000000000002
        self.sosCountInfo2Scale = 0.5
        if rotateCard:
            self.front.component('image0').configure(pos=(0, 0, 0.22),
                                                     hpr=(0, 0, -90),
                                                     scale=1.3500000000000001)
            self.back.component('image0').configure(hpr=(0, 0, -90),
                                                    scale=(-1.3500000000000001,
                                                           1.3500000000000001,
                                                           1.3500000000000001))
            callButtonPosZ = -2.1000000000000001
            textWordWrap = 7.0
            textScale = 0.5
            textPosZ = 2.0
            nameScale = 0.5
            namePosZ = -0.89000000000000001
            rarityScale = 0.25
            rarityPosZ = -2.3999999999999999
            self.NPCHeadDim = 1.8
            self.NPCHeadPosZ = 0.40000000000000002
            self.sosCountInfoPosZ = -2.1000000000000001
            self.sosCountInfoScale = 0.40000000000000002
            self.sosCountInfo2PosZ = -2.0
            self.sosCountInfo2Scale = 0.55000000000000004

        self.sosTypeInfo = DirectLabel(
            parent=self.front,
            relief=None,
            text='',
            text_font=ToontownGlobals.getMinnieFont(),
            text_fg=self.normalTextColor,
            text_scale=textScale,
            text_align=TextNode.ACenter,
            text_wordwrap=textWordWrap,
            pos=(0, 0, textPosZ))
        self.NPCHead = None
        self.NPCName = DirectLabel(parent=self.front,
                                   relief=None,
                                   text='',
                                   text_fg=self.normalTextColor,
                                   text_scale=nameScale,
                                   text_align=TextNode.ACenter,
                                   text_wordwrap=8.0,
                                   pos=(0, 0, namePosZ))
        buttonModels = loader.loadModel('phase_3.5/models/gui/inventory_gui')
        upButton = buttonModels.find('**/InventoryButtonUp')
        downButton = buttonModels.find('**/InventoryButtonDown')
        rolloverButton = buttonModels.find('**/InventoryButtonRollover')
        self.sosCallButton = DirectButton(
            parent=self.front,
            relief=None,
            text=TTLocalizer.NPCCallButtonLabel,
            text_fg=self.normalTextColor,
            text_scale=0.28000000000000003,
            text_align=TextNode.ACenter,
            image=(upButton, downButton, rolloverButton, upButton),
            image_color=(1.0, 0.20000000000000001, 0.20000000000000001, 1),
            image0_color=Vec4(1.0, 0.40000000000000002, 0.40000000000000002,
                              1),
            image3_color=Vec4(1.0, 0.40000000000000002, 0.40000000000000002,
                              0.40000000000000002),
            image_scale=(4.4000000000000004, 1, 3.6000000000000001),
            image_pos=Vec3(0, 0, 0.080000000000000002),
            pos=(-1.1499999999999999, 0, callButtonPosZ),
            scale=1.25,
            command=self._NPCFriendCard__chooseNPCFriend)
        self.sosCallButton.hide()
        self.sosCountInfo = DirectLabel(parent=self.front,
                                        relief=None,
                                        text='',
                                        text_fg=self.normalTextColor,
                                        text_scale=0.75,
                                        text_align=TextNode.ALeft,
                                        textMayChange=1,
                                        pos=(0.0, 0, -1.0))
        star = loader.loadModel('phase_3.5/models/gui/name_star')
        self.rarityStars = []
        for i in range(self.maxRarity):
            label = DirectLabel(parent=self.front,
                                relief=None,
                                image=star,
                                image_scale=rarityScale,
                                image_color=Vec4(0.502, 0.251, 0.251, 1.0),
                                pos=(1.1000000000000001 -
                                     i * 0.23999999999999999, 0, rarityPosZ))
            label.hide()
            self.rarityStars.append(label)
Пример #41
0
    def load(self):
        gui = loader.loadModel('phase_3/models/gui/tt_m_gui_mat_mainGui')
        gui.flattenMedium()
        guiAcceptUp = gui.find('**/tt_t_gui_mat_okUp')
        guiAcceptUp.flattenStrong()
        guiAcceptDown = gui.find('**/tt_t_gui_mat_okDown')
        guiAcceptDown.flattenStrong()
        guiCancelUp = gui.find('**/tt_t_gui_mat_closeUp')
        guiCancelUp.flattenStrong()
        guiCancelDown = gui.find('**/tt_t_gui_mat_closeDown')
        guiCancelDown.flattenStrong()
        guiNextUp = gui.find('**/tt_t_gui_mat_nextUp')
        guiNextUp.flattenStrong()
        guiNextDown = gui.find('**/tt_t_gui_mat_nextDown')
        guiNextDown.flattenStrong()
        guiNextDisabled = gui.find('**/tt_t_gui_mat_nextDisabled')
        guiNextDisabled.flattenStrong()
        skipTutorialUp = gui.find('**/tt_t_gui_mat_skipUp')
        skipTutorialUp.flattenStrong()
        skipTutorialDown = gui.find('**/tt_t_gui_mat_skipDown')
        skipTutorialDown.flattenStrong()
        rotateUp = gui.find('**/tt_t_gui_mat_arrowRotateUp')
        rotateUp.flattenStrong()
        rotateDown = gui.find('**/tt_t_gui_mat_arrowRotateDown')
        rotateDown.flattenStrong()
        self.guiTopBar = DirectFrame(relief=None,
                                     text=TTLocalizer.CreateYourToon,
                                     text_font=ToontownGlobals.getSignFont(),
                                     text_fg=(0.0, 0.65, 0.35, 1),
                                     text_scale=0.18,
                                     text_pos=(0, -0.03),
                                     pos=(0, 0, 0.86))
        self.guiTopBar.hide()
        self.guiBottomBar = DirectFrame(relief=None,
                                        image_scale=(1.25, 1, 1),
                                        pos=(0.01, 0, -0.86))
        self.guiBottomBar.hide()
        self.guiCheckButton = DirectButton(
            parent=self.guiBottomBar,
            relief=None,
            image=(guiAcceptUp, guiAcceptDown, guiAcceptUp, guiAcceptDown),
            image_scale=halfButtonScale,
            image1_scale=halfButtonHoverScale,
            image2_scale=halfButtonHoverScale,
            pos=(1.165, 0, -0.018),
            command=self.__handleNext,
            text=('', TTLocalizer.MakeAToonDone, TTLocalizer.MakeAToonDone),
            text_font=ToontownGlobals.getInterfaceFont(),
            text_scale=0.08,
            text_align=TextNode.ARight,
            text_pos=(0.075, 0.13),
            text_fg=(1, 1, 1, 1),
            text_shadow=(0, 0, 0, 1))
        self.guiCheckButton.setPos(-0.13, 0, 0.13)
        self.guiCheckButton.reparentTo(base.a2dBottomRight)
        self.guiCheckButton.hide()
        self.guiCancelButton = DirectButton(
            parent=self.guiBottomBar,
            relief=None,
            image=(guiCancelUp, guiCancelDown, guiCancelUp, guiCancelDown),
            image_scale=halfButtonScale,
            image1_scale=halfButtonHoverScale,
            image2_scale=halfButtonHoverScale,
            pos=(-1.179, 0, -0.011),
            command=self.__handleCancel,
            text=('', TTLocalizer.MakeAToonCancel,
                  TTLocalizer.MakeAToonCancel),
            text_font=ToontownGlobals.getInterfaceFont(),
            text_scale=TTLocalizer.MATguiCancelButton,
            text_pos=(0, 0.115),
            text_fg=(1, 1, 1, 1),
            text_shadow=(0, 0, 0, 1))
        self.guiCancelButton.setPos(0.13, 0, 0.13)
        self.guiCancelButton.reparentTo(base.a2dBottomLeft)
        self.guiCancelButton.hide()
        self.guiNextButton = DirectButton(
            parent=self.guiBottomBar,
            relief=None,
            image=(guiNextUp, guiNextDown, guiNextUp, guiNextDisabled),
            image_scale=(0.3, 0.3, 0.3),
            image1_scale=(0.35, 0.35, 0.35),
            image2_scale=(0.35, 0.35, 0.35),
            pos=(1.165, 0, -0.018),
            command=self.__handleNext,
            text=('', TTLocalizer.MakeAToonNext, TTLocalizer.MakeAToonNext,
                  ''),
            text_font=ToontownGlobals.getInterfaceFont(),
            text_scale=TTLocalizer.MATguiNextButton,
            text_pos=(0, 0.115),
            text_fg=(1, 1, 1, 1),
            text_shadow=(0, 0, 0, 1))
        self.guiNextButton.setPos(-0.13, 0, 0.13)
        self.guiNextButton.reparentTo(base.a2dBottomRight)
        self.guiNextButton.hide()
        self.guiLastButton = DirectButton(
            parent=self.guiBottomBar,
            relief=None,
            image=(guiNextUp, guiNextDown, guiNextUp, guiNextDown),
            image3_color=Vec4(0.5, 0.5, 0.5, 0.75),
            image_scale=(-0.3, 0.3, 0.3),
            image1_scale=(-0.35, 0.35, 0.35),
            image2_scale=(-0.35, 0.35, 0.35),
            pos=(0.825, 0, -0.018),
            command=self.__handleLast,
            text=('', TTLocalizer.MakeAToonLast, TTLocalizer.MakeAToonLast,
                  ''),
            text_font=ToontownGlobals.getInterfaceFont(),
            text_scale=0.08,
            text_pos=(0, 0.115),
            text_fg=(1, 1, 1, 1),
            text_shadow=(0, 0, 0, 1))
        self.guiLastButton.setPos(-0.37, 0, 0.13)
        self.guiLastButton.reparentTo(base.a2dBottomRight)
        self.guiLastButton.hide()
        self.rotateLeftButton = DirectButton(parent=self.guiBottomBar,
                                             relief=None,
                                             image=(rotateUp, rotateDown,
                                                    rotateUp, rotateDown),
                                             image_scale=(-0.4, 0.4, 0.4),
                                             image1_scale=(-0.5, 0.5, 0.5),
                                             image2_scale=(-0.5, 0.5, 0.5),
                                             pos=(-0.355, 0, 0.36))
        self.rotateLeftButton.flattenMedium()
        self.rotateLeftButton.reparentTo(base.a2dBottomCenter)
        self.rotateLeftButton.hide()
        self.rotateLeftButton.bind(DGG.B1PRESS, self.rotateToonLeft)
        self.rotateLeftButton.bind(DGG.B1RELEASE, self.stopToonRotateLeftTask)
        self.rotateRightButton = DirectButton(parent=self.guiBottomBar,
                                              relief=None,
                                              image=(rotateUp, rotateDown,
                                                     rotateUp, rotateDown),
                                              image_scale=(0.4, 0.4, 0.4),
                                              image1_scale=(0.5, 0.5, 0.5),
                                              image2_scale=(0.5, 0.5, 0.5),
                                              pos=(0.355, 0, 0.36))
        self.rotateRightButton.flattenStrong()
        self.rotateRightButton.reparentTo(base.a2dBottomCenter)
        self.rotateRightButton.hide()
        self.rotateRightButton.bind(DGG.B1PRESS, self.rotateToonRight)
        self.rotateRightButton.bind(DGG.B1RELEASE,
                                    self.stopToonRotateRightTask)
        gui.removeNode()
        self.roomDropActor = Actor()
        self.roomDropActor.loadModel('phase_3/models/makeatoon/roomAnim_model')
        self.roomDropActor.loadAnims(
            {'drop': 'phase_3/models/makeatoon/roomAnim_roomDrop'})
        self.roomDropActor.reparentTo(render)
        self.dropJoint = self.roomDropActor.find('**/droppingJoint')
        self.roomSquishActor = Actor()
        self.roomSquishActor.loadModel(
            'phase_3/models/makeatoon/roomAnim_model')
        self.roomSquishActor.loadAnims(
            {'squish': 'phase_3/models/makeatoon/roomAnim_roomSquish'})
        self.roomSquishActor.reparentTo(render)
        self.squishJoint = self.roomSquishActor.find('**/scalingJoint')
        self.propSquishActor = Actor()
        self.propSquishActor.loadModel(
            'phase_3/models/makeatoon/roomAnim_model')
        self.propSquishActor.loadAnims(
            {'propSquish': 'phase_3/models/makeatoon/roomAnim_propSquish'})
        self.propSquishActor.reparentTo(render)
        self.propSquishActor.pose('propSquish', 0)
        self.propJoint = self.propSquishActor.find('**/propJoint')
        self.spotlightActor = Actor()
        self.spotlightActor.loadModel(
            'phase_3/models/makeatoon/roomAnim_model')
        self.spotlightActor.loadAnims({
            'spotlightShake':
            'phase_3/models/makeatoon/roomAnim_spotlightShake'
        })
        self.spotlightActor.reparentTo(render)
        self.spotlightJoint = self.spotlightActor.find('**/spotlightJoint')
        ee = DirectFrame(pos=(-1, 1, 1),
                         frameSize=(-.01, 0.01, -.01, 0.01),
                         frameColor=(0, 0, 0, 0.05),
                         state='normal')
        ee.bind(DGG.B1PRESS, lambda x, ee=ee: self.toggleSlide())
        self.eee = ee
        self.room = loader.loadModel(
            'phase_3/models/makeatoon/tt_m_ara_mat_room')
        self.room.flattenMedium()
        self.genderWalls = self.room.find('**/genderWalls')
        self.genderWalls.flattenStrong()
        self.genderProps = self.room.find('**/genderProps')
        self.genderProps.flattenStrong()
        self.bodyWalls = self.room.find('**/bodyWalls')
        self.bodyWalls.flattenStrong()
        self.bodyProps = self.room.find('**/bodyProps')
        self.bodyProps.flattenStrong()
        self.colorWalls = self.room.find('**/colorWalls')
        self.colorWalls.flattenStrong()
        self.colorProps = self.room.find('**/colorProps')
        self.colorProps.flattenStrong()
        self.clothesWalls = self.room.find('**/clothWalls')
        self.clothesWalls.flattenMedium()
        self.clothesProps = self.room.find('**/clothProps')
        self.clothesProps.flattenMedium()
        self.nameWalls = self.room.find('**/nameWalls')
        self.nameWalls.flattenStrong()
        self.nameProps = self.room.find('**/nameProps')
        self.nameProps.flattenStrong()
        self.background = self.room.find('**/background')
        self.background.flattenStrong()
        self.background.reparentTo(render)
        self.floor = self.room.find('**/floor')
        self.floor.flattenStrong()
        self.floor.reparentTo(render)
        self.spotlight = self.room.find('**/spotlight')
        self.spotlight.reparentTo(self.spotlightJoint)
        self.spotlight.setColor(1, 1, 1, 0.3)
        self.spotlight.setPos(1.18, -1.27, 0.41)
        self.spotlight.setScale(2.6)
        self.spotlight.setHpr(0, 0, 0)
        smokeSeqNode = SequenceNode('smoke')
        smokeModel = loader.loadModel(
            'phase_3/models/makeatoon/tt_m_ara_mat_smoke')
        smokeFrameList = list(smokeModel.findAllMatches('**/smoke_*'))
        smokeFrameList.reverse()
        for smokeFrame in smokeFrameList:
            smokeSeqNode.addChild(smokeFrame.node())

        smokeSeqNode.setFrameRate(12)
        self.smoke = render.attachNewNode(smokeSeqNode)
        self.smoke.setScale(1, 1, 0.75)
        self.smoke.hide()
        if self.warp:
            self.dna = ToonDNA.ToonDNA()
            self.dna.makeFromNetString(self.namelessPotAv.dna)
            self.toon = Toon.Toon()
            self.toon.setDNA(self.dna)
            self.toon.useLOD(1000)
            self.toon.setNameVisible(0)
            self.toon.startBlink()
            self.toon.startLookAround()
        self.gs.load()
        self.bs.load()
        self.cos.load()
        self.cls.load()
        self.ns.load()
        self.music = base.loader.loadMusic(
            'phase_3/audio/bgm/create_a_toon.ogg')
        self.musicVolume = base.config.GetFloat('makeatoon-music-volume', 1)
        self.sfxVolume = base.config.GetFloat('makeatoon-sfx-volume', 1)
        self.soundBack = base.loader.loadSfx(
            'phase_3/audio/sfx/GUI_create_toon_back.ogg')
        self.crashSounds = list(
            map(base.loader.loadSfx, [
                'phase_3/audio/sfx/tt_s_ara_mat_crash_boing.ogg',
                'phase_3/audio/sfx/tt_s_ara_mat_crash_glassBoing.ogg',
                'phase_3/audio/sfx/tt_s_ara_mat_crash_wood.ogg',
                'phase_3/audio/sfx/tt_s_ara_mat_crash_woodBoing.ogg',
                'phase_3/audio/sfx/tt_s_ara_mat_crash_woodGlass.ogg'
            ]))
    def makeFriendButton(self, friendTuple, colorChoice=None, bold=0):
        playerName = None
        toonName = None
        if len(friendTuple) == 2:
            (avId, flags) = friendTuple
            playerId = None
            showType = 0
        elif len(friendTuple) == 3:
            (avId, flags, playerId) = friendTuple
            showType = 0
        elif len(friendTuple) == 4:
            (avId, flags, playerId, showType) = friendTuple

        command = self._FriendsListPanel__choseFriend
        playerName = None
        if playerId:
            playerInfo = base.cr.playerFriendsManager.playerId2Info.get(
                playerId, None)
            if playerInfo:
                playerName = playerInfo.playerName

        toonName = None
        hasManager = hasattr(base.cr, 'playerFriendsManager')
        handle = base.cr.identifyFriend(avId)
        if not handle and hasManager:
            handle = base.cr.playerFriendsManager.getAvHandleFromId(avId)

        if handle:
            toonName = handle.getName()

        if showType == 1 and playerId:
            if not playerName:
                return None
                print 'ABORTING!!!'

            friendName = playerName
            rolloverName = toonName
        elif not toonName:
            base.cr.fillUpFriendsMap()
            return None

        friendName = toonName
        if playerName:
            rolloverName = playerName
        else:
            rolloverName = 'Unknown'
        if playerId:
            command = self._FriendsListPanel__chosePlayerFriend
            thing = playerId
        else:
            thing = avId
        fg = ToontownGlobals.ColorNoChat
        if flags & ToontownGlobals.FriendChat:
            fg = ToontownGlobals.ColorAvatar

        if playerId:
            fg = ToontownGlobals.ColorPlayer

        if colorChoice:
            fg = colorChoice

        fontChoice = ToontownGlobals.getToonFont()
        fontScale = 0.040000000000000001
        bg = None
        if colorChoice and bold:
            fontScale = 0.040000000000000001
            colorS = 0.69999999999999996
            bg = (colorChoice[0] * colorS, colorChoice[1] * colorS,
                  colorChoice[2] * colorS, colorChoice[3])

        db = DirectButton(relief=None,
                          text=friendName,
                          text_scale=fontScale,
                          text_align=TextNode.ALeft,
                          text_fg=fg,
                          text_shadow=bg,
                          text1_bg=self.textDownColor,
                          text2_bg=self.textRolloverColor,
                          text3_fg=self.textDisabledColor,
                          text_font=fontChoice,
                          textMayChange=0,
                          command=command,
                          extraArgs=[thing, showType])
        if playerId:
            accountName = DirectLabel(parent=db,
                                      pos=Vec3(-0.02, 0, 0),
                                      text=rolloverName,
                                      text_fg=(0, 0, 0, 1),
                                      text_bg=(1, 1, 1, 1),
                                      text_pos=(0, 0),
                                      text_scale=0.044999999999999998,
                                      text_align=TextNode.ARight)
            accountName.reparentTo(db.stateNodePath[2])

        return db
Пример #43
0
    def __init__(self):
        background = loader.loadModel('phase_3/models/gui/dialog_box_gui.bam')
        DirectFrame.__init__(self,
                             relief=None,
                             image=background,
                             image_scale=(1.5, 1, 1.45),
                             frameSize=(0.4, -1.2, 0.8, -0.8),
                             image_pos=(-0.39, 0, 0.075))
        self.initialiseoptions(CustomStatePanel)

        self._font = ToontownGlobals.getToonFont()
        gui = loader.loadModel('phase_3/models/gui/tt_m_gui_mat_nameShop')
        self.squareUp = gui.find('**/tt_t_gui_mat_namePanelSquareUp')
        self.squareDown = gui.find('**/tt_t_gui_mat_namePanelSquareDown')
        self.squareHover = gui.find('**/tt_t_gui_mat_namePanelSquareHover')

        self.title = OnscreenText(parent=self,
                                  text=T_TITLE,
                                  pos=(-.4, .7),
                                  scale=.085,
                                  font=self._font)
        self.screen1 = self.attachNewNode('screen1')

        self.__hood = -1
        self.__trackChoice = [-1, -1]

        DirectButton(parent=self.screen1,
                     text_scale=.075,
                     text=T_HELP,
                     pos=(-.4, 0, .6),
                     relief=None,
                     text_font=self._font,
                     image=(self.squareUp, self.squareDown, self.squareHover,
                            self.squareUp),
                     text_pos=(0, -.02),
                     command=self.__help)
        DirectButton(parent=self.screen1,
                     scale=.075,
                     text=T_TTC,
                     pos=(-.8, 0, .45),
                     relief=None,
                     text_font=self._font,
                     command=self.__hoodChosen,
                     extraArgs=[0])
        DirectButton(parent=self.screen1,
                     scale=.075,
                     text=T_DD,
                     pos=(0, 0, .45),
                     relief=None,
                     text_font=self._font,
                     command=self.__hoodChosen,
                     extraArgs=[1])
        DirectButton(parent=self.screen1,
                     scale=.075,
                     text=T_DG,
                     pos=(-.8 if config.GetBool('csp-want-mm', False) else -.4,
                          0, -.2),
                     relief=None,
                     text_font=self._font,
                     command=self.__hoodChosen,
                     extraArgs=[2])
        if config.GetBool('csp-want-mm', False):
            DirectButton(parent=self.screen1,
                         scale=.075,
                         text=T_MM,
                         pos=(0, 0, -.2),
                         relief=None,
                         text_font=self._font,
                         command=self.__hoodChosen,
                         extraArgs=[3])
Пример #44
0
 def createEmblemPrices(self, numericBeanPrice):
     priceScale = 0.07
     emblemPrices = self['item'].getEmblemPrices()
     if emblemPrices:
         if numericBeanPrice:
             self.priceLabel.hide()
             beanModel = loader.loadModel(
                 'phase_5.5/models/estate/jellyBean')
             beanModel.setColorScale(1, 0, 0, 1)
             self.beanPriceLabel = DirectLabel(
                 parent=self,
                 relief=None,
                 pos=(0, 0, -0.3),
                 scale=priceScale,
                 image=beanModel,
                 image_pos=(-0.4, 0, 0.4),
                 text=str(numericBeanPrice),
                 text_fg=(0.95, 0.95, 0, 1),
                 text_shadow=(0, 0, 0, 1),
                 text_font=ToontownGlobals.getSignFont(),
                 text_align=TextNode.ALeft)
         else:
             self.priceLabel.hide()
         goldPrice = 0
         silverPrice = 0
         emblemIcon = loader.loadModel(
             'phase_3.5/models/gui/tt_m_gui_gen_emblemIcons')
         silverModel = emblemIcon.find('**/tt_t_gui_gen_emblemSilver')
         goldModel = emblemIcon.find('**/tt_t_gui_gen_emblemGold')
         if ToontownGlobals.EmblemTypes.Silver < len(emblemPrices):
             silverPrice = emblemPrices[ToontownGlobals.EmblemTypes.Silver]
             if silverPrice:
                 self.silverPriceLabel = DirectLabel(
                     parent=self,
                     relief=None,
                     pos=(0, 0, -0.3),
                     scale=priceScale,
                     image=silverModel,
                     image_pos=(-0.4, 0, 0.4),
                     text=str(silverPrice),
                     text_fg=(0.95, 0.95, 0, 1),
                     text_shadow=(0, 0, 0, 1),
                     text_font=ToontownGlobals.getSignFont(),
                     text_align=TextNode.ALeft)
         if ToontownGlobals.EmblemTypes.Gold < len(emblemPrices):
             goldPrice = emblemPrices[ToontownGlobals.EmblemTypes.Gold]
             if goldPrice:
                 self.goldPriceLabel = DirectLabel(
                     parent=self,
                     relief=None,
                     pos=(0, 0, -0.3),
                     scale=priceScale,
                     image=goldModel,
                     image_pos=(-0.4, 0, 0.4),
                     text=str(goldPrice),
                     text_fg=(0.95, 0.95, 0, 1),
                     text_shadow=(0, 0, 0, 1),
                     text_font=ToontownGlobals.getSignFont(),
                     text_align=TextNode.ALeft)
         numPrices = 0
         if numericBeanPrice:
             numPrices += 1
         if silverPrice:
             numPrices += 1
         if goldPrice:
             numPrices += 1
         if numPrices == 2:
             if not numericBeanPrice:
                 self.silverPriceLabel.setX(-0.15)
                 self.goldPriceLabel.setX(0.15)
             if not silverPrice:
                 self.goldPriceLabel.setX(-0.15)
                 self.beanPriceLabel.setX(0.15)
             if not goldPrice:
                 self.silverPriceLabel.setX(-0.15)
                 self.beanPriceLabel.setX(0.15)
         elif numPrices == 3:
             self.silverPriceLabel.setX(-0.2)
             self.goldPriceLabel.setX(0)
             self.beanPriceLabel.setX(0.15)
     return
Пример #45
0
    def __makeGui(self):
        if config.GetBool('want-qa-regression', 0):
            self.notify.info('QA-REGRESSION: FISHING: ZoneId: %s' %
                             self.pond.getArea())
        if self.madeGui:
            return
        self.timer = ToontownTimer.ToontownTimer()
        self.timer.posInTopRightCorner()
        self.timer.hide()
        self.castGui = loader.loadModel('phase_4/models/gui/fishingGui')
        self.castGui.setScale(0.67)
        self.castGui.setPos(0, 1, 0)
        for nodeName in ('bucket', 'jar', 'display_bucket', 'display_jar'):
            self.castGui.find('**/' + nodeName).reparentTo(self.castGui)

        self.exitButton = DirectButton(
            parent=self.castGui,
            relief=None,
            text=('', TTLocalizer.FishingExit, TTLocalizer.FishingExit),
            text_align=TextNode.ACenter,
            text_scale=0.1,
            text_fg=Vec4(1, 1, 1, 1),
            text_shadow=Vec4(0, 0, 0, 1),
            text_pos=(0.0, -0.12),
            pos=(1.75, 0, -1.33),
            textMayChange=0,
            image=(self.castGui.find('**/exit_buttonUp'),
                   self.castGui.find('**/exit_buttonDown'),
                   self.castGui.find('**/exit_buttonRollover')),
            command=self.__userExit)
        self.castGui.find('**/exitButton').removeNode()
        self.castButton = DirectButton(
            parent=self.castGui,
            relief=None,
            text=TTLocalizer.FishingCast,
            text_align=TextNode.ACenter,
            text_scale=(3, 3 * 0.75, 3 * 0.75),
            text_fg=Vec4(1, 1, 1, 1),
            text_shadow=Vec4(0, 0, 0, 1),
            text_pos=(0, -4),
            image=self.castGui.find('**/castButton'),
            image0_color=(1, 0, 0, 1),
            image1_color=(0, 1, 0, 1),
            image2_color=(1, 1, 0, 1),
            image3_color=(0.8, 0.5, 0.5, 1),
            pos=(0, -0.05, -0.666),
            scale=(0.036, 1, 0.048))
        self.castGui.find('**/castButton').removeNode()
        self.arrow = self.castGui.find('**/arrow')
        self.arrowTip = self.arrow.find('**/arrowTip')
        self.arrowTail = self.arrow.find('**/arrowTail')
        self.arrow.reparentTo(self.castGui)
        self.arrow.setColorScale(0.9, 0.9, 0.1, 0.7)
        self.arrow.hide()
        self.jar = DirectLabel(parent=self.castGui,
                               relief=None,
                               text=str(self.av.getMoney()),
                               text_scale=0.16,
                               text_fg=(0.95, 0.95, 0, 1),
                               text_font=ToontownGlobals.getSignFont(),
                               pos=(-1.12, 0, -1.3))
        self.bucket = DirectLabel(parent=self.castGui,
                                  relief=None,
                                  text='',
                                  text_scale=0.09,
                                  text_fg=(0.95, 0.95, 0, 1),
                                  text_shadow=(0, 0, 0, 1),
                                  pos=(1.14, 0, -1.33))
        self.__updateFishTankGui()
        self.itemGui = NodePath('itemGui')
        self.itemFrame = DirectFrame(
            parent=self.itemGui,
            relief=None,
            geom=DGG.getDefaultDialogGeom(),
            geom_color=ToontownGlobals.GlobalDialogColor,
            geom_scale=(1, 1, 0.6),
            text=TTLocalizer.FishingItemFound,
            text_pos=(0, 0.2),
            text_scale=0.08,
            pos=(0, 0, 0.587))
        self.itemLabel = DirectLabel(parent=self.itemFrame,
                                     text='',
                                     text_scale=0.06,
                                     pos=(0, 0, -0.25))
        buttons = loader.loadModel('phase_3/models/gui/dialog_box_buttons_gui')
        self.itemGuiCloseButton = DirectButton(
            parent=self.itemFrame,
            pos=(0.44, 0, -0.24),
            relief=None,
            image=(buttons.find('**/CloseBtn_UP'),
                   buttons.find('**/CloseBtn_DN'),
                   buttons.find('**/CloseBtn_Rllvr')),
            image_scale=(0.7, 1, 0.7),
            command=self.__itemGuiClose)
        buttons.removeNode()
        jarGui = loader.loadModel('phase_3.5/models/gui/jar_gui')
        bootGui = loader.loadModel('phase_4/models/gui/fishing_boot')
        packageGui = loader.loadModel(
            'phase_3.5/models/gui/stickerbook_gui').find('**/package')
        self.itemJellybean = DirectFrame(parent=self.itemFrame,
                                         relief=None,
                                         image=jarGui,
                                         scale=0.5)
        self.itemBoot = DirectFrame(parent=self.itemFrame,
                                    relief=None,
                                    image=bootGui,
                                    scale=0.2)
        self.itemPackage = DirectFrame(parent=self.itemFrame,
                                       relief=None,
                                       image=packageGui,
                                       scale=0.25)
        self.itemJellybean.hide()
        self.itemBoot.hide()
        self.itemPackage.hide()
        self.failureDialog = TTDialog.TTGlobalDialog(
            dialogName=self.uniqueName('failureDialog'),
            doneEvent=self.uniqueName('failureDialog'),
            command=self.__userExit,
            message=TTLocalizer.FishingFailure,
            style=TTDialog.CancelOnly,
            cancelButtonText=TTLocalizer.FishingExit)
        self.failureDialog.hide()
        self.sellFishDialog = TTDialog.TTGlobalDialog(
            dialogName=self.uniqueName('sellFishDialog'),
            doneEvent=self.uniqueName('sellFishDialog'),
            command=self.__sellFish,
            message=TTLocalizer.FishBingoOfferToSellFish,
            style=TTDialog.YesNo)
        self.sellFishDialog.hide()
        self.sellFishConfirmDialog = TTDialog.TTGlobalDialog(
            dialogName=self.uniqueName('sellFishConfirmDialog'),
            doneEvent=self.uniqueName('sellFishConfirmDialog'),
            command=self.__sellFishConfirm,
            message=TTLocalizer.STOREOWNER_TROPHY,
            style=TTDialog.Acknowledge)
        self.sellFishConfirmDialog.hide()
        self.brokeDialog = TTDialog.TTGlobalDialog(
            dialogName=self.uniqueName('brokeDialog'),
            doneEvent=self.uniqueName('brokeDialog'),
            command=self.__userExit,
            message=TTLocalizer.FishingBroke,
            style=TTDialog.CancelOnly,
            cancelButtonText=TTLocalizer.FishingExit)
        self.brokeDialog.hide()
        self.howToDialog = TTDialog.TTGlobalDialog(
            dialogName=self.uniqueName('howToDialog'),
            doneEvent=self.uniqueName('howToDialog'),
            fadeScreen=0,
            message=TTLocalizer.FishingHowToFailed,
            style=TTDialog.Acknowledge)
        self.howToDialog['command'] = self.__hideHowTo
        self.howToDialog.setPos(-0.3, 0, 0.5)
        self.howToDialog.hide()
        self.madeGui = 1
        return
Пример #46
0
    def __init__(self, picnicFunction, menuType):

        self.picnicFunction = picnicFunction
        DirectFrame.__init__(
            self,
            pos=(0.0, 0.0, 0.85),
            image_color=ToontownGlobals.GlobalDialogColor,
            image_scale=(1.8, 0.9, 0.13),
            text="",
            text_scale=0.05,
        )
        self['image'] = DGG.getDefaultDialogGeom()

        if menuType == 1:  #menu selected is picking a tutorial
            self.title = DirectLabel(
                self,
                relief=None,
                text=TTLocalizer.PicnicTableMenuTutorial,
                text_pos=(0.0, -0.038),
                text_fg=(1, 0, 0, 1),
                text_scale=0.09,
                text_font=ToontownGlobals.getSignFont(),
                text_shadow=(1, 1, 1, 1),
            )
        elif menuType == 2:  #menu selected is picking a game
            self.title = DirectLabel(
                self,
                relief=None,
                text=TTLocalizer.PicnicTableMenuSelect,
                text_pos=(0.0, -0.04),
                text_fg=(1, 0, 0, 1),
                text_scale=0.09,
                text_font=ToontownGlobals.getSignFont(),
                #text_shadow = (1, 1, 1, 1),
            )
        self.selectionButtons = loader.loadModel(
            "phase_6/models/golf/picnic_game_menu.bam")
        btn1 = self.selectionButtons.find("**/Btn1")
        btn2 = self.selectionButtons.find("**/Btn2")
        btn3 = self.selectionButtons.find("**/Btn3")

        self.ChineseCheckers = DirectButton(
            self,
            image=(btn1.find("**/checkersBtnUp"),
                   btn1.find("**/checkersBtnDn"),
                   btn1.find("**/checkersBtnHi"),
                   btn1.find("**/checkersBtnUp")),
            scale=.36,
            #scale = .45,
            relief=0,
            pos=(0, 0, -0.7),
            command=self.checkersSelected,
        )

        self.Checkers = DirectButton(
            self,
            image=(btn2.find("**/regular_checkersBtnUp"),
                   btn2.find("**/regular_checkersBtnDn"),
                   btn2.find("**/regular_checkersBtnHi"),
                   btn2.find("**/regular_checkersBtnUp")),
            scale=.36,
            relief=0,
            pos=(.8, 0, -0.7),
            command=self.regCheckersSelected,
        )
        self.FindFour = DirectButton(
            self,
            image=(btn3.find("**/findfourBtnUp"),
                   btn3.find("**/findfourBtnDn"),
                   btn3.find("**/findfourBtnHi"),
                   btn3.find("**/findfourBtnUp")),
            scale=.36,
            relief=0,
            pos=(-0.8, 0, -0.7),
            #color = (.7,.7,.7,.7),
            command=self.findFourSelected,
        )
        if not ConfigVariableBool('want-chinese', 0).getValue():
            self.ChineseCheckers['command'] = self.doNothing
            self.ChineseCheckers.setColor(.7, .7, .7, .7)
        if not ConfigVariableBool('want-checkers', 0).getValue():
            self.Checkers['command'] = self.doNothing
            self.Checkers.setColor(.7, .7, .7, .7)
        if not ConfigVariableBool('want-findfour', 0).getValue():
            self.FindFour['command'] = self.doNothing
            self.FindFour.setColor(.7, .7, .7, .7)

        self.chineseText = OnscreenText(text=TTLocalizer.ChineseCheckers,
                                        pos=(0, .56, -0.8),
                                        scale=0.15,
                                        fg=Vec4(1, 1, 1, 1),
                                        align=TextNode.ACenter,
                                        font=ToontownGlobals.getMinnieFont(),
                                        wordwrap=7,
                                        shadow=(0, 0, 0, 0.8),
                                        shadowOffset=(-0.1, -0.1),
                                        mayChange=True)
        self.chineseText.setR(-8)

        self.checkersText = OnscreenText(text=TTLocalizer.RegularCheckers,
                                         pos=(0.81, -.1, -0.8),
                                         scale=0.15,
                                         fg=Vec4(1, 1, 1, 1),
                                         align=TextNode.ACenter,
                                         font=ToontownGlobals.getMinnieFont(),
                                         wordwrap=7,
                                         shadow=(0, 0, 0, 0.8),
                                         shadowOffset=(0.1, -0.1),
                                         mayChange=True)
        self.findFourText = OnscreenText(text=TTLocalizer.FindFour,
                                         pos=(-0.81, -.08, -0.8),
                                         scale=0.15,
                                         fg=Vec4(1, 1, 1, 1),
                                         align=TextNode.ACenter,
                                         font=ToontownGlobals.getMinnieFont(),
                                         wordwrap=8,
                                         shadow=(0, 0, 0, .8),
                                         shadowOffset=(-0.1, -0.1),
                                         mayChange=True)
        self.findFourText.setR(-8)
        self.checkersText.setR(8)
Пример #47
0
    def load(self):
        self.notify.debug('load')
        DistributedMinigame.load(self)
        self.sky = loader.loadModel('phase_3.5/models/props/TT_sky')
        self.ground = loader.loadModel(
            'phase_4/models/minigames/toon_cannon_gameground')
        self.tower = loader.loadModel(
            'phase_4/models/minigames/toon_cannon_water_tower')
        self.cannon = loader.loadModel('phase_4/models/minigames/toon_cannon')
        self.dropShadow = loader.loadModel('phase_3/models/props/drop_shadow')
        self.hill = loader.loadModel('phase_4/models/minigames/cannon_hill')
        self.sky.setScale(WORLD_SCALE)
        self.ground.setScale(GROUND_SCALE)
        self.cannon.setScale(CANNON_SCALE)
        self.dropShadow.setColor(0, 0, 0, 0.5)
        self.ground.setColor(0.85, 0.85, 0.85, 1.0)
        self.hill.setScale(1, 1, CANNON_Z / 20.0)
        self.dropShadow.setBin('fixed', 0, 1)
        self.splash = Splash.Splash(render)
        self.dustCloud = DustCloud.DustCloud(render)
        purchaseModels = loader.loadModel('phase_4/models/gui/purchase_gui')
        self.jarImage = purchaseModels.find('**/Jar')
        self.jarImage.reparentTo(hidden)
        self.rewardPanel = DirectLabel(parent=hidden,
                                       relief=None,
                                       pos=(-0.173, 0.0, -0.55),
                                       scale=0.65,
                                       text='',
                                       text_scale=0.2,
                                       text_fg=(0.95, 0.95, 0, 1),
                                       text_pos=(0, -.13),
                                       text_font=ToontownGlobals.getSignFont(),
                                       image=self.jarImage)
        self.rewardPanelTitle = DirectLabel(parent=self.rewardPanel,
                                            relief=None,
                                            pos=(0, 0, 0.06),
                                            scale=0.08,
                                            text=TTLocalizer.CannonGameReward,
                                            text_fg=(0.95, 0.95, 0, 1),
                                            text_shadow=(0, 0, 0, 1))
        self.music = base.loadMusic('phase_4/audio/bgm/MG_cannon_game.ogg')
        self.sndCannonMove = base.loadSfx(
            'phase_4/audio/sfx/MG_cannon_adjust.ogg')
        self.sndCannonFire = base.loadSfx(
            'phase_4/audio/sfx/MG_cannon_fire_alt.ogg')
        self.sndHitGround = base.loadSfx(
            'phase_4/audio/sfx/MG_cannon_hit_dirt.ogg')
        self.sndHitTower = base.loadSfx(
            'phase_4/audio/sfx/MG_cannon_hit_tower.ogg')
        self.sndHitWater = base.loadSfx(
            'phase_4/audio/sfx/MG_cannon_splash.ogg')
        self.sndWhizz = base.loadSfx('phase_4/audio/sfx/MG_cannon_whizz.ogg')
        self.sndWin = base.loadSfx('phase_4/audio/sfx/MG_win.ogg')
        self.sndRewardTick = base.loadSfx(
            'phase_3.5/audio/sfx/tick_counter.ogg')
        guiModel = 'phase_4/models/gui/cannon_game_gui'
        cannonGui = loader.loadModel(guiModel)
        self.aimPad = DirectFrame(image=cannonGui.find('**/CannonFire_PAD'),
                                  relief=None,
                                  pos=(0.7, 0, -0.553333),
                                  scale=0.8)
        cannonGui.removeNode()
        self.aimPad.hide()
        self.fireButton = DirectButton(parent=self.aimPad,
                                       image=((guiModel, '**/Fire_Btn_UP'),
                                              (guiModel, '**/Fire_Btn_DN'),
                                              (guiModel, '**/Fire_Btn_RLVR')),
                                       relief=None,
                                       pos=(0.0115741, 0, 0.00505051),
                                       scale=1.0,
                                       command=self.__firePressed)
        self.upButton = DirectButton(parent=self.aimPad,
                                     image=((guiModel, '**/Cannon_Arrow_UP'),
                                            (guiModel, '**/Cannon_Arrow_DN'),
                                            (guiModel,
                                             '**/Cannon_Arrow_RLVR')),
                                     relief=None,
                                     pos=(0.0115741, 0, 0.221717))
        self.downButton = DirectButton(parent=self.aimPad,
                                       image=((guiModel, '**/Cannon_Arrow_UP'),
                                              (guiModel, '**/Cannon_Arrow_DN'),
                                              (guiModel,
                                               '**/Cannon_Arrow_RLVR')),
                                       relief=None,
                                       pos=(0.0136112, 0, -0.210101),
                                       image_hpr=(0, 0, 180))
        self.leftButton = DirectButton(parent=self.aimPad,
                                       image=((guiModel, '**/Cannon_Arrow_UP'),
                                              (guiModel, '**/Cannon_Arrow_DN'),
                                              (guiModel,
                                               '**/Cannon_Arrow_RLVR')),
                                       relief=None,
                                       pos=(-0.199352, 0, -0.000505269),
                                       image_hpr=(0, 0, -90))
        self.rightButton = DirectButton(
            parent=self.aimPad,
            image=((guiModel, '**/Cannon_Arrow_UP'),
                   (guiModel, '**/Cannon_Arrow_DN'), (guiModel,
                                                      '**/Cannon_Arrow_RLVR')),
            relief=None,
            pos=(0.219167, 0, -0.00101024),
            image_hpr=(0, 0, 90))
        self.aimPad.setColor(1, 1, 1, 0.9)

        def bindButton(button, upHandler, downHandler):
            button.bind(DGG.B1PRESS, lambda x, handler=upHandler: handler())
            button.bind(DGG.B1RELEASE,
                        lambda x, handler=downHandler: handler())

        bindButton(self.upButton, self.__upPressed, self.__upReleased)
        bindButton(self.downButton, self.__downPressed, self.__downReleased)
        bindButton(self.leftButton, self.__leftPressed, self.__leftReleased)
        bindButton(self.rightButton, self.__rightPressed, self.__rightReleased)
        self.timer = ToontownTimer.ToontownTimer()
        self.timer.posInTopRightCorner()
        self.timer.hide()
        self.DEBUG_TOWER_RANGE = 0
        self.DEBUG_CANNON_FAR_LEFT = 0
        self.DEBUG_TOWER_NEAR = 1
        self.DEBUG_TOWER_FAR_LEFT = 1
        return
Пример #48
0
class DistributedCannonGame(DistributedMinigame):
    notify = DirectNotifyGlobal.directNotify.newCategory('DistributedMinigame')
    font = ToontownGlobals.getToonFont()
    LOCAL_CANNON_MOVE_TASK = 'localCannonMoveTask'
    REWARD_COUNTDOWN_TASK = 'cannonGameRewardCountdown'
    HIT_GROUND = 0
    HIT_TOWER = 1
    HIT_WATER = 2
    FIRE_KEY = 'control'
    UP_KEY = 'arrow_up'
    DOWN_KEY = 'arrow_down'
    LEFT_KEY = 'arrow_left'
    RIGHT_KEY = 'arrow_right'
    INTRO_TASK_NAME = 'CannonGameIntro'
    INTRO_TASK_NAME_CAMERA_LERP = 'CannonGameIntroCamera'

    def __init__(self, cr):
        DistributedMinigame.__init__(self, cr)
        self.gameFSM = ClassicFSM.ClassicFSM('DistributedCannonGame', [
            State.State('off', self.enterOff, self.exitOff, ['aim']),
            State.State('aim', self.enterAim, self.exitAim,
                        ['shoot', 'waitForToonsToLand', 'cleanup']),
            State.State('shoot', self.enterShoot, self.exitShoot,
                        ['aim', 'waitForToonsToLand', 'cleanup']),
            State.State('waitForToonsToLand', self.enterWaitForToonsToLand,
                        self.exitWaitForToonsToLand, ['cleanup']),
            State.State('cleanup', self.enterCleanup, self.exitCleanup, [])
        ], 'off', 'cleanup')
        self.addChildGameFSM(self.gameFSM)
        self.cannonLocationDict = {}
        self.cannonPositionDict = {}
        self.cannonDict = {}
        self.toonModelDict = {}
        self.dropShadowDict = {}
        self.toonHeadDict = {}
        self.toonScaleDict = {}
        self.toonIntervalDict = {}
        self.leftPressed = 0
        self.rightPressed = 0
        self.upPressed = 0
        self.downPressed = 0
        self.cannonMoving = 0
        self.modelCount = 14

    def getTitle(self):
        return TTLocalizer.CannonGameTitle

    def getInstructions(self):
        return TTLocalizer.CannonGameInstructions

    def getMaxDuration(self):
        return CannonGameGlobals.GameTime

    def load(self):
        self.notify.debug('load')
        DistributedMinigame.load(self)
        self.sky = loader.loadModel('phase_3.5/models/props/TT_sky')
        self.ground = loader.loadModel(
            'phase_4/models/minigames/toon_cannon_gameground')
        self.tower = loader.loadModel(
            'phase_4/models/minigames/toon_cannon_water_tower')
        self.cannon = loader.loadModel('phase_4/models/minigames/toon_cannon')
        self.dropShadow = loader.loadModel('phase_3/models/props/drop_shadow')
        self.hill = loader.loadModel('phase_4/models/minigames/cannon_hill')
        self.sky.setScale(WORLD_SCALE)
        self.ground.setScale(GROUND_SCALE)
        self.cannon.setScale(CANNON_SCALE)
        self.dropShadow.setColor(0, 0, 0, 0.5)
        self.ground.setColor(0.85, 0.85, 0.85, 1.0)
        self.hill.setScale(1, 1, CANNON_Z / 20.0)
        self.dropShadow.setBin('fixed', 0, 1)
        self.splash = Splash.Splash(render)
        self.dustCloud = DustCloud.DustCloud(render)
        purchaseModels = loader.loadModel('phase_4/models/gui/purchase_gui')
        self.jarImage = purchaseModels.find('**/Jar')
        self.jarImage.reparentTo(hidden)
        self.rewardPanel = DirectLabel(parent=hidden,
                                       relief=None,
                                       pos=(-0.173, 0.0, -0.55),
                                       scale=0.65,
                                       text='',
                                       text_scale=0.2,
                                       text_fg=(0.95, 0.95, 0, 1),
                                       text_pos=(0, -.13),
                                       text_font=ToontownGlobals.getSignFont(),
                                       image=self.jarImage)
        self.rewardPanelTitle = DirectLabel(parent=self.rewardPanel,
                                            relief=None,
                                            pos=(0, 0, 0.06),
                                            scale=0.08,
                                            text=TTLocalizer.CannonGameReward,
                                            text_fg=(0.95, 0.95, 0, 1),
                                            text_shadow=(0, 0, 0, 1))
        self.music = base.loadMusic('phase_4/audio/bgm/MG_cannon_game.ogg')
        self.sndCannonMove = base.loadSfx(
            'phase_4/audio/sfx/MG_cannon_adjust.ogg')
        self.sndCannonFire = base.loadSfx(
            'phase_4/audio/sfx/MG_cannon_fire_alt.ogg')
        self.sndHitGround = base.loadSfx(
            'phase_4/audio/sfx/MG_cannon_hit_dirt.ogg')
        self.sndHitTower = base.loadSfx(
            'phase_4/audio/sfx/MG_cannon_hit_tower.ogg')
        self.sndHitWater = base.loadSfx(
            'phase_4/audio/sfx/MG_cannon_splash.ogg')
        self.sndWhizz = base.loadSfx('phase_4/audio/sfx/MG_cannon_whizz.ogg')
        self.sndWin = base.loadSfx('phase_4/audio/sfx/MG_win.ogg')
        self.sndRewardTick = base.loadSfx(
            'phase_3.5/audio/sfx/tick_counter.ogg')
        guiModel = 'phase_4/models/gui/cannon_game_gui'
        cannonGui = loader.loadModel(guiModel)
        self.aimPad = DirectFrame(image=cannonGui.find('**/CannonFire_PAD'),
                                  relief=None,
                                  pos=(0.7, 0, -0.553333),
                                  scale=0.8)
        cannonGui.removeNode()
        self.aimPad.hide()
        self.fireButton = DirectButton(parent=self.aimPad,
                                       image=((guiModel, '**/Fire_Btn_UP'),
                                              (guiModel, '**/Fire_Btn_DN'),
                                              (guiModel, '**/Fire_Btn_RLVR')),
                                       relief=None,
                                       pos=(0.0115741, 0, 0.00505051),
                                       scale=1.0,
                                       command=self.__firePressed)
        self.upButton = DirectButton(parent=self.aimPad,
                                     image=((guiModel, '**/Cannon_Arrow_UP'),
                                            (guiModel, '**/Cannon_Arrow_DN'),
                                            (guiModel,
                                             '**/Cannon_Arrow_RLVR')),
                                     relief=None,
                                     pos=(0.0115741, 0, 0.221717))
        self.downButton = DirectButton(parent=self.aimPad,
                                       image=((guiModel, '**/Cannon_Arrow_UP'),
                                              (guiModel, '**/Cannon_Arrow_DN'),
                                              (guiModel,
                                               '**/Cannon_Arrow_RLVR')),
                                       relief=None,
                                       pos=(0.0136112, 0, -0.210101),
                                       image_hpr=(0, 0, 180))
        self.leftButton = DirectButton(parent=self.aimPad,
                                       image=((guiModel, '**/Cannon_Arrow_UP'),
                                              (guiModel, '**/Cannon_Arrow_DN'),
                                              (guiModel,
                                               '**/Cannon_Arrow_RLVR')),
                                       relief=None,
                                       pos=(-0.199352, 0, -0.000505269),
                                       image_hpr=(0, 0, -90))
        self.rightButton = DirectButton(
            parent=self.aimPad,
            image=((guiModel, '**/Cannon_Arrow_UP'),
                   (guiModel, '**/Cannon_Arrow_DN'), (guiModel,
                                                      '**/Cannon_Arrow_RLVR')),
            relief=None,
            pos=(0.219167, 0, -0.00101024),
            image_hpr=(0, 0, 90))
        self.aimPad.setColor(1, 1, 1, 0.9)

        def bindButton(button, upHandler, downHandler):
            button.bind(DGG.B1PRESS, lambda x, handler=upHandler: handler())
            button.bind(DGG.B1RELEASE,
                        lambda x, handler=downHandler: handler())

        bindButton(self.upButton, self.__upPressed, self.__upReleased)
        bindButton(self.downButton, self.__downPressed, self.__downReleased)
        bindButton(self.leftButton, self.__leftPressed, self.__leftReleased)
        bindButton(self.rightButton, self.__rightPressed, self.__rightReleased)
        self.timer = ToontownTimer.ToontownTimer()
        self.timer.posInTopRightCorner()
        self.timer.hide()
        self.DEBUG_TOWER_RANGE = 0
        self.DEBUG_CANNON_FAR_LEFT = 0
        self.DEBUG_TOWER_NEAR = 1
        self.DEBUG_TOWER_FAR_LEFT = 1
        return

    def unload(self):
        self.notify.debug('unload')
        DistributedMinigame.unload(self)
        self.sky.removeNode()
        del self.sky
        self.ground.removeNode()
        del self.ground
        self.tower.removeNode()
        del self.tower
        self.cannon.removeNode()
        del self.cannon
        del self.dropShadowDict
        self.dropShadow.removeNode()
        del self.dropShadow
        self.splash.destroy()
        del self.splash
        self.dustCloud.destroy()
        del self.dustCloud
        self.hill.removeNode()
        del self.hill
        self.rewardPanel.destroy()
        del self.rewardPanel
        self.jarImage.removeNode()
        del self.jarImage
        del self.music
        del self.sndCannonMove
        del self.sndCannonFire
        del self.sndHitGround
        del self.sndHitTower
        del self.sndHitWater
        del self.sndWhizz
        del self.sndWin
        del self.sndRewardTick
        self.aimPad.destroy()
        del self.aimPad
        del self.fireButton
        del self.upButton
        del self.downButton
        del self.leftButton
        del self.rightButton
        for avId in self.toonHeadDict.keys():
            head = self.toonHeadDict[avId]
            head.stopBlink()
            head.stopLookAroundNow()
            av = self.getAvatar(avId)
            if av:
                av.loop('neutral')
                av.setPlayRate(1.0, 'run')
                av.nametag.removeNametag(head.tag)
            head.delete()

        del self.toonHeadDict
        for model in self.toonModelDict.values():
            model.removeNode()

        del self.toonModelDict
        del self.toonScaleDict
        for interval in self.toonIntervalDict.values():
            interval.finish()

        del self.toonIntervalDict
        for avId in self.avIdList:
            self.cannonDict[avId][0].removeNode()
            del self.cannonDict[avId][0]

        del self.cannonDict
        self.timer.destroy()
        del self.timer
        del self.cannonLocationDict
        self.removeChildGameFSM(self.gameFSM)
        del self.gameFSM

    def onstage(self):
        self.notify.debug('onstage')
        DistributedMinigame.onstage(self)
        self.__createCannons()
        for avId in self.avIdList:
            self.cannonDict[avId][0].reparentTo(render)

        self.towerPos = self.getTowerPosition()
        self.tower.setPos(self.towerPos)
        self.tower.reparentTo(render)
        self.sky.reparentTo(render)
        self.ground.reparentTo(render)
        self.hill.setPosHpr(0, CANNON_Y + 2.33, 0, 0, 0, 0)
        self.hill.reparentTo(render)
        self.splash.reparentTo(render)
        self.dustCloud.reparentTo(render)
        self.__createToonModels(self.localAvId)
        camera.reparentTo(render)
        self.__oldCamFar = base.camLens.getFar()
        base.camLens.setFar(FAR_PLANE_DIST)
        self.__startIntro()
        base.transitions.irisIn(0.4)
        base.playMusic(self.music, looping=1, volume=0.8)

    def offstage(self):
        self.notify.debug('offstage')
        self.sky.reparentTo(hidden)
        self.ground.reparentTo(hidden)
        self.hill.reparentTo(hidden)
        self.tower.reparentTo(hidden)
        for avId in self.avIdList:
            self.cannonDict[avId][0].reparentTo(hidden)
            if self.dropShadowDict.has_key(avId):
                self.dropShadowDict[avId].reparentTo(hidden)
            av = self.getAvatar(avId)
            if av:
                av.dropShadow.show()
                av.resetLOD()

        self.splash.reparentTo(hidden)
        self.splash.stop()
        self.dustCloud.reparentTo(hidden)
        self.dustCloud.stop()
        self.__stopIntro()
        base.camLens.setFar(self.__oldCamFar)
        self.timer.reparentTo(hidden)
        self.rewardPanel.reparentTo(hidden)
        DistributedMinigame.offstage(self)

    def getTowerPosition(self):
        yRange = TOWER_Y_RANGE
        yMin = yRange * 0.3
        yMax = yRange
        if self.DEBUG_TOWER_RANGE:
            if self.DEBUG_TOWER_NEAR:
                y = yMin
            else:
                y = yMax
        else:
            y = self.randomNumGen.randint(yMin, yMax)
        xRange = TOWER_X_RANGE
        if self.DEBUG_TOWER_RANGE:
            if self.DEBUG_TOWER_FAR_LEFT:
                x = 0
            else:
                x = xRange
        else:
            x = self.randomNumGen.randint(0, xRange)
        x -= int(xRange / 2.0)
        if base.wantMinigameDifficulty:
            diff = self.getDifficulty()
            scale = 0.5 + 0.5 * diff
            x *= scale
            yCenter = (yMin + yMax) / 2.0
            y = (y - yCenter) * scale + yCenter
        x = float(x) * (float(y) / float(yRange))
        y -= int(yRange / 2.0)
        self.notify.debug('getTowerPosition: ' + str(x) + ', ' + str(y))
        return Point3(x, y, 0.0)

    def __createCannons(self):
        for avId in self.avIdList:
            cannon = self.cannon.copyTo(hidden)
            barrel = cannon.find('**/cannon')
            self.cannonDict[avId] = [cannon, barrel]

        numAvs = self.numPlayers
        for i in range(numAvs):
            avId = self.avIdList[i]
            self.cannonLocationDict[avId] = Point3(
                i * CANNON_X_SPACING - (numAvs - 1) * CANNON_X_SPACING / 2,
                CANNON_Y, CANNON_Z)
            if self.DEBUG_TOWER_RANGE:
                if self.DEBUG_CANNON_FAR_LEFT:
                    self.cannonLocationDict[avId] = Point3(
                        0 * CANNON_X_SPACING - (4 - 1) * CANNON_X_SPACING / 2,
                        CANNON_Y, CANNON_Z)
                else:
                    self.cannonLocationDict[avId] = Point3(
                        3 * CANNON_X_SPACING - (4 - 1) * CANNON_X_SPACING / 2,
                        CANNON_Y, CANNON_Z)
            self.cannonPositionDict[avId] = [
                0, CannonGameGlobals.CANNON_ANGLE_MIN
            ]
            self.cannonDict[avId][0].setPos(self.cannonLocationDict[avId])
            self.__updateCannonPosition(avId)

    def setGameReady(self):
        if not self.hasLocalToon:
            return
        self.notify.debug('setGameReady')
        if DistributedMinigame.setGameReady(self):
            return
        for avId in self.avIdList:
            if avId != self.localAvId:
                self.__createToonModels(avId)

    def __createToonModels(self, avId):
        toon = self.getAvatar(avId)
        self.toonScaleDict[avId] = toon.getScale()
        toon.useLOD(1000)
        toonParent = render.attachNewNode('toonOriginChange')
        toon.reparentTo(toonParent)
        toon.setPosHpr(0, 0, -(toon.getHeight() / 2.0), 0, 0, 0)
        self.toonModelDict[avId] = toonParent
        head = ToonHead.ToonHead()
        head.setupHead(self.getAvatar(avId).style)
        head.reparentTo(hidden)
        self.toonHeadDict[avId] = head
        toon = self.getAvatar(avId)
        tag = NametagFloat3d()
        tag.setContents(Nametag.CSpeech | Nametag.CThought)
        tag.setBillboardOffset(0)
        tag.setAvatar(head)
        toon.nametag.addNametag(tag)
        tagPath = head.attachNewNode(tag)
        tagPath.setPos(0, 0, 1)
        head.tag = tag
        self.__loadToonInCannon(avId)
        self.getAvatar(avId).dropShadow.hide()
        self.dropShadowDict[avId] = self.dropShadow.copyTo(hidden)

    def setGameStart(self, timestamp):
        if not self.hasLocalToon:
            return
        self.notify.debug('setGameStart')
        DistributedMinigame.setGameStart(self, timestamp)
        self.__stopIntro()
        self.__putCameraBehindCannon()
        if not config.GetBool('endless-cannon-game', 0):
            self.timer.show()
            self.timer.countdown(CannonGameGlobals.GameTime,
                                 self.__gameTimerExpired)
        self.rewardPanel.reparentTo(base.a2dTopRight)
        self.scoreMult = MinigameGlobals.getScoreMult(self.cr.playGame.hood.id)
        self.__startRewardCountdown()
        self.airborneToons = 0
        self.clockStopTime = None
        self.gameFSM.request('aim')
        return

    def __gameTimerExpired(self):
        self.notify.debug('game timer expired')
        self.gameOver()

    def __playing(self):
        return self.gameFSM.getCurrentState() != self.gameFSM.getFinalState()

    def updateCannonPosition(self, avId, zRot, angle):
        if not self.hasLocalToon:
            return
        if not self.__playing():
            return
        if avId != self.localAvId:
            self.cannonPositionDict[avId] = [zRot, angle]
            self.__updateCannonPosition(avId)

    def setCannonWillFire(self, avId, fireTime, zRot, angle):
        if not self.hasLocalToon:
            return
        if not self.__playing():
            return
        self.notify.debug('setCannonWillFire: ' + str(avId) + ': zRot=' +
                          str(zRot) + ', angle=' + str(angle) + ', time=' +
                          str(fireTime))
        self.cannonPositionDict[avId][0] = zRot
        self.cannonPositionDict[avId][1] = angle
        self.__updateCannonPosition(avId)
        task = Task(self.__fireCannonTask)
        task.avId = avId
        task.fireTime = fireTime
        timeToWait = task.fireTime - self.getCurrentGameTime()
        if timeToWait > 0.0:
            fireTask = Task.sequence(Task.pause(timeToWait), task)
        else:
            fireTask = task
        fireTask = task
        taskMgr.add(fireTask, 'fireCannon' + str(avId))
        self.airborneToons += 1

    def announceToonWillLandInWater(self, avId, landTime):
        if not self.hasLocalToon:
            return
        self.notify.debug('announceToonWillLandInWater: ' + str(avId) +
                          ': time=' + str(landTime))
        if self.clockStopTime == None:
            self.clockStopTime = landTime
        return

    def enterOff(self):
        self.notify.debug('enterOff')

    def exitOff(self):
        pass

    def enterAim(self):
        self.notify.debug('enterAim')
        self.__enableAimInterface()
        self.__putCameraBehindCannon()

    def exitAim(self):
        self.__disableAimInterface()

    def enterShoot(self):
        self.notify.debug('enterShoot')
        self.__broadcastLocalCannonPosition()
        self.sendUpdate('setCannonLit', [
            self.cannonPositionDict[self.localAvId][0],
            self.cannonPositionDict[self.localAvId][1]
        ])

    def exitShoot(self):
        pass

    def __somebodyWon(self, avId):
        if avId == self.localAvId:
            base.playSfx(self.sndWin)
        self.__killRewardCountdown()
        self.timer.stop()
        self.gameFSM.request('waitForToonsToLand')

    def enterWaitForToonsToLand(self):
        self.notify.debug('enterWaitForToonsToLand')
        if not self.airborneToons:
            self.gameOver()

    def exitWaitForToonsToLand(self):
        pass

    def enterCleanup(self):
        self.notify.debug('enterCleanup')
        self.music.stop()
        self.__killRewardCountdown()
        if hasattr(self, 'jarIval'):
            self.jarIval.finish()
            del self.jarIval
        for avId in self.avIdList:
            taskMgr.remove('fireCannon' + str(avId))
            taskMgr.remove('flyingToon' + str(avId))

    def exitCleanup(self):
        pass

    def __enableAimInterface(self):
        self.aimPad.show()
        self.accept(self.FIRE_KEY, self.__fireKeyPressed)
        self.accept(self.UP_KEY, self.__upKeyPressed)
        self.accept(self.DOWN_KEY, self.__downKeyPressed)
        self.accept(self.LEFT_KEY, self.__leftKeyPressed)
        self.accept(self.RIGHT_KEY, self.__rightKeyPressed)
        self.__spawnLocalCannonMoveTask()

    def __disableAimInterface(self):
        self.aimPad.hide()
        self.ignore(self.FIRE_KEY)
        self.ignore(self.UP_KEY)
        self.ignore(self.DOWN_KEY)
        self.ignore(self.LEFT_KEY)
        self.ignore(self.RIGHT_KEY)
        self.ignore(self.FIRE_KEY + '-up')
        self.ignore(self.UP_KEY + '-up')
        self.ignore(self.DOWN_KEY + '-up')
        self.ignore(self.LEFT_KEY + '-up')
        self.ignore(self.RIGHT_KEY + '-up')
        self.__killLocalCannonMoveTask()

    def __fireKeyPressed(self):
        self.ignore(self.FIRE_KEY)
        self.accept(self.FIRE_KEY + '-up', self.__fireKeyReleased)
        self.__firePressed()

    def __upKeyPressed(self):
        self.ignore(self.UP_KEY)
        self.accept(self.UP_KEY + '-up', self.__upKeyReleased)
        self.__upPressed()

    def __downKeyPressed(self):
        self.ignore(self.DOWN_KEY)
        self.accept(self.DOWN_KEY + '-up', self.__downKeyReleased)
        self.__downPressed()

    def __leftKeyPressed(self):
        self.ignore(self.LEFT_KEY)
        self.accept(self.LEFT_KEY + '-up', self.__leftKeyReleased)
        self.__leftPressed()

    def __rightKeyPressed(self):
        self.ignore(self.RIGHT_KEY)
        self.accept(self.RIGHT_KEY + '-up', self.__rightKeyReleased)
        self.__rightPressed()

    def __fireKeyReleased(self):
        self.ignore(self.FIRE_KEY + '-up')
        self.accept(self.FIRE_KEY, self.__fireKeyPressed)
        self.__fireReleased()

    def __leftKeyReleased(self):
        self.ignore(self.LEFT_KEY + '-up')
        self.accept(self.LEFT_KEY, self.__leftKeyPressed)
        self.__leftReleased()

    def __rightKeyReleased(self):
        self.ignore(self.RIGHT_KEY + '-up')
        self.accept(self.RIGHT_KEY, self.__rightKeyPressed)
        self.__rightReleased()

    def __upKeyReleased(self):
        self.ignore(self.UP_KEY + '-up')
        self.accept(self.UP_KEY, self.__upKeyPressed)
        self.__upReleased()

    def __downKeyReleased(self):
        self.ignore(self.DOWN_KEY + '-up')
        self.accept(self.DOWN_KEY, self.__downKeyPressed)
        self.__downReleased()

    def __firePressed(self):
        self.notify.debug('fire pressed')
        self.gameFSM.request('shoot')

    def __upPressed(self):
        self.notify.debug('up pressed')
        self.upPressed = self.__enterControlActive(self.upPressed)

    def __downPressed(self):
        self.notify.debug('down pressed')
        self.downPressed = self.__enterControlActive(self.downPressed)

    def __leftPressed(self):
        self.notify.debug('left pressed')
        self.leftPressed = self.__enterControlActive(self.leftPressed)

    def __rightPressed(self):
        self.notify.debug('right pressed')
        self.rightPressed = self.__enterControlActive(self.rightPressed)

    def __upReleased(self):
        self.notify.debug('up released')
        self.upPressed = self.__exitControlActive(self.upPressed)

    def __downReleased(self):
        self.notify.debug('down released')
        self.downPressed = self.__exitControlActive(self.downPressed)

    def __leftReleased(self):
        self.notify.debug('left released')
        self.leftPressed = self.__exitControlActive(self.leftPressed)

    def __rightReleased(self):
        self.notify.debug('right released')
        self.rightPressed = self.__exitControlActive(self.rightPressed)

    def __enterControlActive(self, control):
        return control + 1

    def __exitControlActive(self, control):
        return max(0, control - 1)

    def __spawnLocalCannonMoveTask(self):
        self.leftPressed = 0
        self.rightPressed = 0
        self.upPressed = 0
        self.downPressed = 0
        self.cannonMoving = 0
        task = Task(self.__localCannonMoveTask)
        task.lastPositionBroadcastTime = 0.0
        taskMgr.add(task, self.LOCAL_CANNON_MOVE_TASK)

    def __killLocalCannonMoveTask(self):
        taskMgr.remove(self.LOCAL_CANNON_MOVE_TASK)
        if self.cannonMoving:
            self.sndCannonMove.stop()

    def __localCannonMoveTask(self, task):
        pos = self.cannonPositionDict[self.localAvId]
        oldRot = pos[0]
        oldAng = pos[1]
        rotVel = 0
        if self.leftPressed:
            rotVel += CannonGameGlobals.CANNON_ROTATION_VEL
        if self.rightPressed:
            rotVel -= CannonGameGlobals.CANNON_ROTATION_VEL
        pos[0] += rotVel * globalClock.getDt()
        if pos[0] < CannonGameGlobals.CANNON_ROTATION_MIN:
            pos[0] = CannonGameGlobals.CANNON_ROTATION_MIN
        elif pos[0] > CannonGameGlobals.CANNON_ROTATION_MAX:
            pos[0] = CannonGameGlobals.CANNON_ROTATION_MAX
        angVel = 0
        if self.upPressed:
            angVel += CannonGameGlobals.CANNON_ANGLE_VEL
        if self.downPressed:
            angVel -= CannonGameGlobals.CANNON_ANGLE_VEL
        pos[1] += angVel * globalClock.getDt()
        if pos[1] < CannonGameGlobals.CANNON_ANGLE_MIN:
            pos[1] = CannonGameGlobals.CANNON_ANGLE_MIN
        elif pos[1] > CannonGameGlobals.CANNON_ANGLE_MAX:
            pos[1] = CannonGameGlobals.CANNON_ANGLE_MAX
        if oldRot != pos[0] or oldAng != pos[1]:
            if self.cannonMoving == 0:
                self.cannonMoving = 1
                base.playSfx(self.sndCannonMove, looping=1)
            self.__updateCannonPosition(self.localAvId)
            if task.time - task.lastPositionBroadcastTime > CANNON_MOVE_UPDATE_FREQ:
                task.lastPositionBroadcastTime = task.time
                self.__broadcastLocalCannonPosition()
        elif self.cannonMoving:
            self.cannonMoving = 0
            self.sndCannonMove.stop()
            self.__broadcastLocalCannonPosition()
        return Task.cont

    def __broadcastLocalCannonPosition(self):
        self.sendUpdate('setCannonPosition', [
            self.cannonPositionDict[self.localAvId][0],
            self.cannonPositionDict[self.localAvId][1]
        ])

    def __updateCannonPosition(self, avId):
        self.cannonDict[avId][0].setHpr(self.cannonPositionDict[avId][0], 0.0,
                                        0.0)
        self.cannonDict[avId][1].setHpr(0.0, self.cannonPositionDict[avId][1],
                                        0.0)

    def __getCameraPositionBehindCannon(self):
        return Point3(self.cannonLocationDict[self.localAvId][0],
                      CANNON_Y - 25.0, CANNON_Z + 7)

    def __putCameraBehindCannon(self):
        camera.setPos(self.__getCameraPositionBehindCannon())
        camera.setHpr(0, 0, 0)

    def __loadToonInCannon(self, avId):
        self.toonModelDict[avId].detachNode()
        head = self.toonHeadDict[avId]
        head.startBlink()
        head.startLookAround()
        head.reparentTo(self.cannonDict[avId][1])
        head.setPosHpr(0, 6, 0, 0, -45, 0)
        sc = self.toonScaleDict[avId]
        head.setScale(render, sc[0], sc[1], sc[2])

    def __toRadians(self, angle):
        return angle * 2.0 * math.pi / 360.0

    def __toDegrees(self, angle):
        return angle * 360.0 / (2.0 * math.pi)

    def __calcFlightResults(self, avId, launchTime):
        head = self.toonHeadDict[avId]
        startPos = head.getPos(render)
        startHpr = head.getHpr(render)
        hpr = self.cannonDict[avId][1].getHpr(render)
        towerPos = self.tower.getPos(render)
        rotation = self.__toRadians(hpr[0])
        angle = self.__toRadians(hpr[1])
        horizVel = INITIAL_VELOCITY * math.cos(angle)
        xVel = horizVel * -math.sin(rotation)
        yVel = horizVel * math.cos(rotation)
        zVel = INITIAL_VELOCITY * math.sin(angle)
        startVel = Vec3(xVel, yVel, zVel)
        trajectory = Trajectory.Trajectory(launchTime, startPos, startVel)
        towerList = [
            towerPos + Point3(0, 0, BUCKET_HEIGHT), TOWER_RADIUS,
            TOWER_HEIGHT - BUCKET_HEIGHT
        ]
        self.notify.debug(
            'calcFlightResults(%s): rotation(%s), angle(%s), horizVel(%s), xVel(%s), yVel(%s), zVel(%s), startVel(%s), trajectory(%s), towerList(%s)'
            % (avId, rotation, angle, horizVel, xVel, yVel, zVel, startVel,
               trajectory, towerList))
        timeOfImpact, hitWhat = self.__calcToonImpact(trajectory, towerList)
        return startPos, startHpr, startVel, trajectory, timeOfImpact, hitWhat

    def __fireCannonTask(self, task):
        launchTime = task.fireTime
        avId = task.avId
        self.notify.debug('FIRING CANNON FOR AVATAR ' + str(avId))
        startPos, startHpr, startVel, trajectory, timeOfImpact, hitWhat = self.__calcFlightResults(
            avId, launchTime)

        self.notify.debug('start position: ' + str(startPos))
        self.notify.debug('start velocity: ' + str(startVel))
        self.notify.debug('time of launch: ' + str(launchTime))
        self.notify.debug('time of impact: ' + str(timeOfImpact))
        self.notify.debug('location of impact: ' +
                          str(trajectory.getPos(timeOfImpact)))
        if hitWhat == self.HIT_WATER:
            self.notify.debug('toon will land in the water')
        elif hitWhat == self.HIT_TOWER:
            self.notify.debug('toon will hit the tower')
        else:
            self.notify.debug('toon will hit the ground')
        head = self.toonHeadDict[avId]
        head.stopBlink()
        head.stopLookAroundNow()
        head.reparentTo(hidden)
        av = self.toonModelDict[avId]
        av.reparentTo(render)
        av.setPos(startPos)
        av.setHpr(startHpr)
        avatar = self.getAvatar(avId)
        avatar.loop('swim')
        avatar.setPosHpr(0, 0, -(avatar.getHeight() / 2.0), 0, 0, 0)
        shootTask = Task(self.__shootTask)
        flyTask = Task(self.__flyTask)
        seqDoneTask = Task(self.__flySequenceDoneTask)
        info = {
            'avId':
            avId,
            'trajectory':
            trajectory,
            'launchTime':
            launchTime,
            'timeOfImpact':
            timeOfImpact,
            'hitWhat':
            hitWhat,
            'toon':
            self.toonModelDict[avId],
            'hRot':
            self.cannonPositionDict[avId][0],
            'haveWhistled':
            0,
            'maxCamPullback':
            CAMERA_PULLBACK_MIN,
            'timeEnterTowerXY':
            trajectory.calcEnterAndLeaveCylinderXY(self.tower.getPos(render),
                                                   TOWER_RADIUS)[0],
            'timeExitTowerXY':
            trajectory.calcEnterAndLeaveCylinderXY(self.tower.getPos(render),
                                                   TOWER_RADIUS)[1]
        }
        shootTask.info = info
        flyTask.info = info
        seqDoneTask.info = info
        seqTask = Task.sequence(shootTask, flyTask, Task.pause(LAND_TIME),
                                seqDoneTask)
        taskMgr.add(seqTask, 'flyingToon' + str(avId))
        if avId == self.localAvId:
            if info['hitWhat'] == self.HIT_WATER:
                self.sendUpdate('setToonWillLandInWater',
                                [info['timeOfImpact']])
        return Task.done

    def __calcToonImpact(self, trajectory, waterTower):
        self.notify.debug('trajectory: %s' % trajectory)
        self.notify.debug('waterTower: %s' % waterTower)
        waterDiscCenter = Point3(waterTower[0])
        waterDiscCenter.setZ(waterDiscCenter[2] + waterTower[2])
        t_waterImpact = trajectory.checkCollisionWithDisc(
            waterDiscCenter, waterTower[1])
        self.notify.debug('t_waterImpact: %s' % t_waterImpact)
        if t_waterImpact > 0:
            return t_waterImpact, self.HIT_WATER
        t_towerImpact = trajectory.checkCollisionWithCylinderSides(
            waterTower[0], waterTower[1], waterTower[2])
        self.notify.debug('t_towerImpact: %s' % t_towerImpact)
        if t_towerImpact > 0:
            return t_towerImpact, self.HIT_TOWER
        t_groundImpact = trajectory.checkCollisionWithGround()
        self.notify.debug('t_groundImpact: %s' % t_groundImpact)
        if t_groundImpact >= trajectory.getStartTime():
            return t_groundImpact, self.HIT_GROUND
        else:
            self.notify.error('__calcToonImpact: toon never impacts ground?')
            return self.startTime, self.HIT_GROUND

    def __shootTask(self, task):
        base.playSfx(self.sndCannonFire)
        self.dropShadowDict[task.info['avId']].reparentTo(render)
        return Task.done

    def __flyTask(self, task):
        curTime = task.time + task.info['launchTime']
        t = min(curTime, task.info['timeOfImpact'])
        pos = task.info['trajectory'].getPos(t)
        task.info['toon'].setPos(pos)
        shadowPos = Point3(pos)
        if task.info['timeEnterTowerXY'] <= t <= task.info[
                'timeExitTowerXY'] and pos[2] >= self.tower.getPos(
                    render)[2] + TOWER_HEIGHT:
            shadowPos.setZ(
                self.tower.getPos(render)[2] + TOWER_HEIGHT + SHADOW_Z_OFFSET)
        else:
            shadowPos.setZ(SHADOW_Z_OFFSET)
        self.dropShadowDict[task.info['avId']].setPos(shadowPos)
        vel = task.info['trajectory'].getVel(t)
        run = math.sqrt(vel[0] * vel[0] + vel[1] * vel[1])
        rise = vel[2]
        theta = self.__toDegrees(math.atan(rise / run))
        task.info['toon'].setHpr(task.info['hRot'], -90 + theta, 0)
        if task.info['avId'] == self.localAvId:
            lookAt = self.tower.getPos(render)
            lookAt.setZ(lookAt.getZ() - TOWER_HEIGHT / 2.0)
            towerPos = Point3(self.towerPos)
            towerPos.setZ(TOWER_HEIGHT)
            ttVec = Vec3(pos - towerPos)
            toonTowerDist = ttVec.length()
            multiplier = 0.0
            if toonTowerDist < TOON_TOWER_THRESHOLD:
                up = Vec3(0.0, 0.0, 1.0)
                perp = up.cross(vel)
                perp.normalize()
                if ttVec.dot(perp) > 0.0:
                    perp = Vec3(-perp[0], -perp[1], -perp[2])
                a = 1.0 - toonTowerDist / TOON_TOWER_THRESHOLD
                a_2 = a * a
                multiplier = -2.0 * a_2 * a + 3 * a_2
                lookAt += perp * (multiplier * MAX_LOOKAT_OFFSET)
            foo = Vec3(pos - lookAt)
            foo.normalize()
            task.info['maxCamPullback'] = max(
                task.info['maxCamPullback'], CAMERA_PULLBACK_MIN + multiplier *
                (CAMERA_PULLBACK_MAX - CAMERA_PULLBACK_MIN))
            foo = foo * task.info['maxCamPullback']
            camPos = pos + Point3(foo)
            camera.setPos(camPos)
            camera.lookAt(pos)
        if task.info['haveWhistled'] == 0:
            if -vel[2] > WHISTLE_SPEED:
                if t < task.info['timeOfImpact'] - 0.5:
                    task.info['haveWhistled'] = 1
                    base.playSfx(self.sndWhizz)
        if t == task.info['timeOfImpact']:
            if task.info['haveWhistled']:
                self.sndWhizz.stop()
            self.dropShadowDict[task.info['avId']].reparentTo(hidden)
            avatar = self.getAvatar(task.info['avId'])
            if task.info['hitWhat'] == self.HIT_WATER:
                avatar.loop('neutral')
                self.splash.setPos(task.info['toon'].getPos())
                self.splash.setScale(2)
                self.splash.play()
                base.playSfx(self.sndHitWater)
                task.info['toon'].setHpr(task.info['hRot'], 0, 0)
                self.__somebodyWon(task.info['avId'])
            elif task.info['hitWhat'] == self.HIT_TOWER:
                toon = task.info['toon']
                pos = toon.getPos()
                ttVec = Vec3(pos - self.towerPos)
                ttVec.setZ(0)
                ttVec.normalize()
                h = rad2Deg(math.asin(ttVec[0]))
                toon.setHpr(h, 94, 0)
                deltaZ = TOWER_HEIGHT - BUCKET_HEIGHT
                sf = min(max(pos[2] - BUCKET_HEIGHT, 0), deltaZ) / deltaZ
                hitPos = pos + Point3(ttVec * (0.75 * sf))
                toon.setPos(hitPos)
                hitPos.setZ(hitPos[2] - 1.0)
                s = Sequence(
                    Wait(0.5),
                    toon.posInterval(duration=LAND_TIME - 0.5,
                                     pos=hitPos,
                                     blendType='easeIn'))
                self.toonIntervalDict[task.info['avId']] = s
                s.start()
                avatar.iPos()
                avatar.pose('slip-forward', 25)
                base.playSfx(self.sndHitTower)
            elif task.info['hitWhat'] == self.HIT_GROUND:
                task.info['toon'].setP(render, -150.0)
                self.dustCloud.setPos(task.info['toon'], 0, 0, -2.5)
                self.dustCloud.setScale(0.35)
                self.dustCloud.play()
                base.playSfx(self.sndHitGround)
                avatar.setPlayRate(2.0, 'run')
                avatar.loop('run')
            return Task.done
        return Task.cont

    def __flySequenceDoneTask(self, task):
        self.airborneToons -= 1
        if self.gameFSM.getCurrentState().getName() == 'waitForToonsToLand':
            if 0 == self.airborneToons:
                self.gameOver()
        else:
            self.__loadToonInCannon(task.info['avId'])
            if task.info['avId'] == self.localAvId:
                self.gameFSM.request('aim')
        return Task.done

    def __startRewardCountdown(self):
        taskMgr.remove(self.REWARD_COUNTDOWN_TASK)
        taskMgr.add(self.__updateRewardCountdown, self.REWARD_COUNTDOWN_TASK)

    def __killRewardCountdown(self):
        taskMgr.remove(self.REWARD_COUNTDOWN_TASK)

    def __updateRewardCountdown(self, task):
        if not hasattr(self, 'rewardPanel'):
            return Task.cont
        curTime = self.getCurrentGameTime()
        if self.clockStopTime is not None:
            if self.clockStopTime < curTime:
                self.__killRewardCountdown()
                curTime = self.clockStopTime
        score = int(self.scoreMult * CannonGameGlobals.calcScore(curTime) +
                    0.5)
        if not hasattr(task, 'curScore'):
            task.curScore = score
        self.rewardPanel['text'] = str(score)
        if task.curScore != score:
            if hasattr(self, 'jarIval'):
                self.jarIval.finish()
            s = self.rewardPanel.getScale()
            self.jarIval = Parallel(Sequence(
                self.rewardPanel.scaleInterval(0.15,
                                               s * 3.0 / 4.0,
                                               blendType='easeOut'),
                self.rewardPanel.scaleInterval(0.15, s, blendType='easeIn')),
                                    SoundInterval(self.sndRewardTick),
                                    name='cannonGameRewardJarThrob')
            self.jarIval.start()
        task.curScore = score
        return Task.cont

    def __startIntro(self):
        self.T_WATER = 1
        self.T_WATER2LONGVIEW = 1
        self.T_LONGVIEW = 1
        self.T_LONGVIEW2TOONHEAD = 2
        self.T_TOONHEAD = 2
        self.T_TOONHEAD2CANNONBACK = 2
        self.__introCameraInterval = None
        taskLookInWater = Task(self.__taskLookInWater)
        taskPullBackFromWater = Task(self.__taskPullBackFromWater)
        taskFlyUpToToon = Task(self.__flyUpToToon)
        taskFlyToBackOfCannon = Task(self.__flyToBackOfCannon)
        commonData = {}
        taskLookInWater.data = commonData
        taskPullBackFromWater.data = commonData
        taskFlyUpToToon.data = commonData
        taskFlyToBackOfCannon.data = commonData
        introTask = Task.sequence(
            taskLookInWater, Task.pause(self.T_WATER), taskPullBackFromWater,
            Task.pause(self.T_WATER2LONGVIEW + self.T_LONGVIEW),
            taskFlyUpToToon,
            Task.pause(self.T_LONGVIEW2TOONHEAD + self.T_TOONHEAD),
            taskFlyToBackOfCannon)
        taskMgr.add(introTask, self.INTRO_TASK_NAME)

    def __stopIntro(self):
        taskMgr.remove(self.INTRO_TASK_NAME)
        if self.__introCameraInterval:
            self.__introCameraInterval.finish()
        camera.wrtReparentTo(render)

    def __spawnCameraLookAtLerp(self, targetPos, targetLookAt, duration):
        oldPos = camera.getPos()
        oldHpr = camera.getHpr()
        camera.setPos(targetPos)
        camera.lookAt(targetLookAt)
        targetQuat = Quat()
        targetQuat.setHpr(camera.getHpr())
        camera.setPos(oldPos)
        camera.setHpr(oldHpr)
        if self.__introCameraInterval:
            self.__introCameraInterval.finish()
        self.__introCameraInterval = camera.posQuatInterval(
            duration, Point3(targetPos), targetQuat, blendType='easeInOut')
        self.__introCameraInterval.start()

    def __taskLookInWater(self, task):
        task.data['cannonCenter'] = Point3(0, CANNON_Y, CANNON_Z)
        task.data['towerWaterCenter'] = Point3(self.towerPos +
                                               Point3(0, 0, TOWER_HEIGHT))
        task.data['vecTowerToCannon'] = Point3(task.data['cannonCenter'] -
                                               task.data['towerWaterCenter'])
        vecAwayFromCannons = Vec3(
            Point3(0, 0, 0) - task.data['vecTowerToCannon'])
        vecAwayFromCannons.setZ(0.0)
        vecAwayFromCannons.normalize()
        camLoc = Point3(vecAwayFromCannons * 20) + Point3(0, 0, 20)
        camLoc = camLoc + task.data['towerWaterCenter']
        camera.setPos(camLoc)
        camera.lookAt(task.data['towerWaterCenter'])
        task.data['vecAwayFromCannons'] = vecAwayFromCannons
        return Task.done

    def __taskPullBackFromWater(self, task):
        camLoc = Point3(task.data['vecAwayFromCannons'] * 40) + Point3(
            0, 0, 20)
        camLoc = camLoc + task.data['towerWaterCenter']
        lookAt = task.data['cannonCenter']
        self.__spawnCameraLookAtLerp(camLoc, lookAt, self.T_WATER2LONGVIEW)
        return Task.done

    def __flyUpToToon(self, task):
        headPos = self.toonHeadDict[self.localAvId].getPos(render)
        camLoc = headPos + Point3(0, 5, 0)
        lookAt = Point3(headPos)
        self.__spawnCameraLookAtLerp(camLoc, lookAt, self.T_LONGVIEW2TOONHEAD)
        return Task.done

    def __flyToBackOfCannon(self, task):
        lerpNode = hidden.attachNewNode('CannonGameCameraLerpNode')
        lerpNode.reparentTo(render)
        lerpNode.setPos(self.cannonLocationDict[self.localAvId] +
                        Point3(0, 1, 0))
        relCamPos = camera.getPos(lerpNode)
        relCamHpr = camera.getHpr(lerpNode)
        startRotation = lerpNode.getHpr()
        endRotation = Point3(-180, 0, 0)
        lerpNode.setHpr(endRotation)
        camera.setPos(self.__getCameraPositionBehindCannon())
        endPos = camera.getPos(lerpNode)
        lerpNode.setHpr(startRotation)
        camera.reparentTo(lerpNode)
        camera.setPos(relCamPos)
        camera.setHpr(relCamHpr)
        if self.__introCameraInterval:
            self.__introCameraInterval.finish()
        self.__introCameraInterval = Parallel(
            lerpNode.hprInterval(self.T_TOONHEAD2CANNONBACK,
                                 endRotation,
                                 blendType='easeInOut'),
            camera.posInterval(self.T_TOONHEAD2CANNONBACK,
                               endPos,
                               blendType='easeInOut'))
        self.__introCameraInterval.start()
        return Task.done
 def knockKnockTrack(self, avatar, duration):
     if avatar == None:
         return
     self.rimshot = base.loader.loadSfx(
         'phase_5/audio/sfx/AA_heal_telljoke.ogg')
     self.knockSfx = base.loader.loadSfx(
         'phase_5/audio/sfx/GUI_knock_3.ogg')
     joke = KnockKnockJokes[self.propId % len(KnockKnockJokes)]
     place = base.cr.playGame.getPlace()
     if place:
         zone = place.getZoneId()
         branch = ZoneUtil.getBranchZone(zone)
         if branch == ToontownGlobals.Zones.SillyStreet:
             if self.propId == 44:
                 joke = KnockKnockContestJokes[
                     ToontownGlobals.Zones.SillyStreet]
         elif branch == ToontownGlobals.Zones.LoopyLane:
             if self.propId in KnockKnockContestJokes[
                     ToontownGlobals.Zones.LoopyLane].keys():
                 joke = KnockKnockContestJokes[
                     ToontownGlobals.Zones.LoopyLane][self.propId]
         elif branch == ToontownGlobals.Zones.PunchlinePlace:
             if self.propId == 1:
                 joke = KnockKnockContestJokes[
                     ToontownGlobals.Zones.PunchlinePlace]
         elif branch == ToontownGlobals.Zones.PolarPlace:
             if self.propId in KnockKnockContestJokes[
                     ToontownGlobals.Zones.PolarPlace].keys():
                 joke = KnockKnockContestJokes[
                     ToontownGlobals.Zones.PolarPlace][self.propId]
     self.nametag = None
     self.nametagNP = None
     doorNP = render.find('**/KnockKnockDoorSphere_' + str(self.propId) +
                          ';+s')
     if doorNP.isEmpty():
         self.notify.warning('Could not find KnockKnockDoorSphere_%s' %
                             self.propId)
         return
     self.nametag = NametagGroup()
     self.nametag.setAvatar(doorNP)
     self.nametag.setFont(ToontownGlobals.getToonFont())
     self.nametag.setName(TTLocalizer.DoorNametag)
     self.nametag.setActive(0)
     self.nametag.manage(base.marginManager)
     self.nametag.getNametag3d().setBillboardOffset(4)
     nametagNode = self.nametag.getNametag3d().upcastToPandaNode()
     self.nametagNP = render.attachNewNode(nametagNode)
     self.nametagNP.setName('knockKnockDoor_nt_' + str(self.propId))
     pos = doorNP.node().getSolid(0).getCenter()
     self.nametagNP.setPos(pos + Vec3(0, 0, avatar.getHeight() + 2))
     d = duration * 0.125
     track = Sequence(
         Parallel(
             Sequence(Wait(d * 0.5), SoundInterval(self.knockSfx)),
             Func(self.nametag.setChat, TTLocalizer.DoorKnockKnock,
                  CFSpeech), Wait(d)),
         Func(avatar.setChatAbsolute,
              TTLocalizer.DoorWhosThere,
              CFSpeech | CFTimeout,
              openEnded=0), Wait(d),
         Func(self.nametag.setChat, joke[0], CFSpeech), Wait(d),
         Func(avatar.setChatAbsolute,
              joke[0] + TTLocalizer.DoorWhoAppendix,
              CFSpeech | CFTimeout,
              openEnded=0), Wait(d),
         Func(self.nametag.setChat, joke[1], CFSpeech),
         Parallel(SoundInterval(self.rimshot, startTime=2.0), Wait(d * 4)),
         Func(self.cleanupTrack))
     track.delayDelete = DelayDelete.DelayDelete(avatar, 'knockKnockTrack')
     return track
Пример #50
0
    def load(self, isPaid):
        if self.isLoaded == 1:
            return None
        self.isPaid = isPaid
        gui = loader.loadModel('phase_3/models/gui/pick_a_toon_gui')
        gui.flattenMedium()
        gui2 = loader.loadModel('phase_3/models/gui/quit_button')
        gui2.flattenMedium()
        newGui = loader.loadModel('phase_3/models/gui/tt_m_gui_pat_mainGui')
        newGui.flattenMedium()
        self.pickAToonBG = newGui.find('**/tt_t_gui_pat_background')
        self.pickAToonBG.flattenStrong()
        self.pickAToonBG.reparentTo(hidden)
        self.pickAToonBG.setPos(0.0, 2.73, 0.0)
        self.pickAToonBG.setScale(1.5, 1, 2)
        self.title = OnscreenText(TTLocalizer.AvatarChooserPickAToon, scale=TTLocalizer.ACtitle, parent=hidden, font=ToontownGlobals.getSignFont(), fg=(1, 0.9, 0.1, 1), pos=(0.0, 0.82))
        self.title.flattenStrong()
        def titleLerp1():
            LerpHprInterval(self.title, 2, (360, 0, 0), (0,0,0)).start()
        def titleSeq():
            seq = Sequence()
            seq.append(Func(titleLerp1))
            seq.append(Wait(8))
            seq.loop()
        titleSeq()
        quitHover = gui.find('**/QuitBtn_RLVR')
        self.quitButton = DirectButton(image=(quitHover, quitHover, quitHover), relief=None, text=TTLocalizer.AvatarChooserQuit, text_font=ToontownGlobals.getSignFont(), text_fg=(0.977, 0.816, 0.133, 1), text_pos=TTLocalizer.ACquitButtonPos, text_scale=TTLocalizer.ACquitButton, image_scale=1, image1_scale=1.05, image2_scale=1.05, scale=1.05, pos=(-0.25, 0, 0.075), command=self.__handleQuit)
        self.quitButton.flattenMedium()
        self.quitButton.reparentTo(base.a2dBottomRight)
        self.logoutButton = DirectButton(relief=None, image=(quitHover, quitHover, quitHover), text=TTLocalizer.OptionsPageLogout, text_font=ToontownGlobals.getSignFont(), text_fg=(0.977, 0.816, 0.133, 1), text_scale=TTLocalizer.AClogoutButton, text_pos=(0, -0.035), pos=(0.15, 0, 0.05), image_scale=1.15, image1_scale=1.15, image2_scale=1.18, scale=0.5, command=self.__handleLogoutWithoutConfirm)
        self.logoutButton.reparentTo(base.a2dBottomLeft)
        self.logoutButton.flattenMedium()
        self.logoutButton.hide()
        gui.removeNode()
        gui2.removeNode()
        newGui.removeNode()
        self.panelList = []
        used_position_indexs = []
        for av in self.avatarList:
            if base.cr.isPaid():
                okToLockout = 0
            else:
                okToLockout = 1
                if av.position in AvatarChoice.AvatarChoice.OLD_TRIALER_OPEN_POS:
                    okToLockout = 0
            panel = AvatarChoice.AvatarChoice(av, position=av.position, paid=isPaid, okToLockout=okToLockout)
            panel.setPos(POSITIONS[av.position])
            used_position_indexs.append(av.position)
            self.panelList.append(panel)

        for panelNum in xrange(0, MAX_AVATARS):
            if panelNum not in used_position_indexs:
                panel = AvatarChoice.AvatarChoice(position=panelNum, paid=isPaid)
                panel.setPos(POSITIONS[panelNum])
                self.panelList.append(panel)

        if len(self.avatarList) > 0:
            self.initLookAtInfo()
        self.isLoaded = 1
Пример #51
0
 def load(self):
     gui = loader.loadModel('phase_3/models/gui/laff_o_meter')
     if self.isToon:
         hType = self.style.getType()
         if hType == 'dog':
             headModel = gui.find('**/doghead')
         elif hType == 'cat':
             headModel = gui.find('**/cathead')
         elif hType == 'mouse':
             headModel = gui.find('**/mousehead')
         elif hType == 'horse':
             headModel = gui.find('**/horsehead')
         elif hType == 'rabbit':
             headModel = gui.find('**/bunnyhead')
         elif hType == 'duck':
             headModel = gui.find('**/duckhead')
         elif hType == 'monkey':
             headModel = gui.find('**/monkeyhead')
         elif hType == 'bear':
             headModel = gui.find('**/bearhead')
         elif hType == 'pig':
             headModel = gui.find('**/pighead')
         else:
             raise StandardError('unknown toon species: ', hType)
         self.color = self.style.getHeadColor()
         self.container['image'] = headModel
         self.container['image_color'] = self.color
         self.resetFrameSize()
         self.setScale(0.1)
         self.frown = DirectFrame(parent=self.container, relief=None, image=gui.find('**/frown'))
         self.smile = DirectFrame(parent=self.container, relief=None, image=gui.find('**/smile'))
         self.eyes = DirectFrame(parent=self.container, relief=None, image=gui.find('**/eyes'))
         self.openSmile = DirectFrame(parent=self.container, relief=None, image=gui.find('**/open_smile'))
         self.tooth1 = DirectFrame(parent=self.openSmile, relief=None, image=gui.find('**/tooth_1'))
         self.tooth2 = DirectFrame(parent=self.openSmile, relief=None, image=gui.find('**/tooth_2'))
         self.tooth3 = DirectFrame(parent=self.openSmile, relief=None, image=gui.find('**/tooth_3'))
         self.tooth4 = DirectFrame(parent=self.openSmile, relief=None, image=gui.find('**/tooth_4'))
         self.tooth5 = DirectFrame(parent=self.openSmile, relief=None, image=gui.find('**/tooth_5'))
         self.tooth6 = DirectFrame(parent=self.openSmile, relief=None, image=gui.find('**/tooth_6'))
         self.maxLabel = DirectLabel(parent=self.eyes, relief=None, pos=(0.442, 0, 0.051), text='120', text_scale=0.4, text_font=ToontownGlobals.getInterfaceFont())
         self.hpLabel = DirectLabel(parent=self.eyes, relief=None, pos=(-0.398, 0, 0.051), text='120', text_scale=0.4, text_font=ToontownGlobals.getInterfaceFont())
         self.teeth = [self.tooth6,
          self.tooth5,
          self.tooth4,
          self.tooth3,
          self.tooth2,
          self.tooth1]
         self.fractions = [0.0,
          0.166666,
          0.333333,
          0.5,
          0.666666,
          0.833333]
     gui.removeNode()
     return
Пример #52
0
 def load(self):
     self.weight = DirectLabel(parent=self, pos=(0, 0, -0.28), relief=None, state=DGG.NORMAL, text='', text_scale=0.05, text_fg=(0, 0, 0, 1), text_pos=(0, 0.0, 0), text_font=ToontownGlobals.getInterfaceFont(), text_wordwrap=10.5)
     self.value = DirectLabel(parent=self, pos=(0, 0, -0.35), relief=None, state=DGG.NORMAL, text='', text_scale=0.05, text_fg=(0, 0, 0, 1), text_pos=(0, 0, 0), text_font=ToontownGlobals.getInterfaceFont(), text_wordwrap=10.5)
     self.mystery = DirectLabel(parent=self, pos=(-0.025, 0, -0.055), relief=None, state=DGG.NORMAL, text='?', text_scale=0.25, text_fg=(0, 0, 0, 1), text_pos=(0, 0, 0), text_font=ToontownGlobals.getInterfaceFont(), text_wordwrap=10.5)
     self.extraLabel = DirectLabel(parent=self, relief=None, state=DGG.NORMAL, text='', text_fg=(0.2, 0.8, 0.4, 1), text_font=ToontownGlobals.getSignFont(), text_scale=0.08, pos=(0, 0, 0.26))
     buttons = loader.loadModel('phase_3/models/gui/dialog_box_buttons_gui')
     self.cancel = DirectButton(parent=self, pos=(0.275, 0, -0.375), relief=None, state=DGG.NORMAL, image=(buttons.find('**/CloseBtn_UP'), buttons.find('**/CloseBtn_DN'), buttons.find('**/CloseBtn_Rllvr')), image_scale=(0.6, 1, 0.6), command=self.handleCancel)
     buttons.removeNode()
     self.photo = FishPhoto.FishPhoto(parent=self)
     self.update(self.fish)
     return
Пример #53
0
 def __doneVictory(self, avIds):
     self.d_setBattleExperience()
     self.b_setState('Reward')
     BattleExperienceAI.assignRewards(self.involvedToons, self.toonSkillPtsGained, self.suitsKilled, ToontownGlobals.dept2cogHQ(self.dept), self.helpfulToons)
     preferredDept = random.randrange(len(SuitDNA.suitDepts))
     typeWeights = ['single'] * 70 + ['building'] * 27 + ['invasion'] * 3
     preferredSummonType = random.choice(typeWeights)
     for toonId in self.involvedToons:
         toon = self.air.doId2do.get(toonId)
         if toon:
             self.giveCogSummonReward(toon, preferredDept, preferredSummonType)
             toon.b_promote(self.deptIndex)
Пример #54
0
 def updateBuyButton(self):
     if not self.loaded:
         return
     if not base.cr.isPaid():
         self.buyButton['command'] = self.getTeaserPanel()
     self.buyButton.show()
     typeCode = self['item'].getTypeCode()
     orderCount = base.localAvatar.onOrder.count(self['item'])
     if orderCount > 0:
         if orderCount > 1:
             auxText = '%d %s' % (orderCount,
                                  TTLocalizer.CatalogOnOrderText)
         else:
             auxText = TTLocalizer.CatalogOnOrderText
     else:
         auxText = ''
     isNameTag = typeCode == CatalogItemTypes.NAMETAG_ITEM
     if isNameTag and not base.localAvatar.getGameAccess(
     ) == OTPGlobals.AccessFull:
         if self['item'].nametagStyle == 100:
             if base.localAvatar.getFont() == ToontownGlobals.getToonFont():
                 auxText = TTLocalizer.CatalogCurrent
                 self.buyButton['state'] = DGG.DISABLED
         elif self['item'].getPrice(
                 self['type']
         ) > base.localAvatar.getMoney() + base.localAvatar.getBankMoney():
             self.buyButton['state'] = DGG.DISABLED
     elif isNameTag and self[
             'item'].nametagStyle == base.localAvatar.getNametagStyle():
         auxText = TTLocalizer.CatalogCurrent
         self.buyButton['state'] = DGG.DISABLED
     elif self['item'].reachedPurchaseLimit(base.localAvatar):
         max = self['item'].getPurchaseLimit()
         if max <= 1:
             auxText = TTLocalizer.CatalogPurchasedText
             if self['item'].hasBeenGifted(base.localAvatar):
                 auxText = TTLocalizer.CatalogGiftedText
         else:
             auxText = TTLocalizer.CatalogPurchasedMaxText
         self.buyButton['state'] = DGG.DISABLED
     elif hasattr(self['item'], 'noGarden') and self['item'].noGarden(
             base.localAvatar):
         auxText = TTLocalizer.NoGarden
         self.buyButton['state'] = DGG.DISABLED
     elif hasattr(self['item'],
                  'isSkillTooLow') and self['item'].isSkillTooLow(
                      base.localAvatar):
         auxText = TTLocalizer.SkillTooLow
         self.buyButton['state'] = DGG.DISABLED
     elif hasattr(self['item'], 'getDaysToGo') and self['item'].getDaysToGo(
             base.localAvatar):
         auxText = TTLocalizer.DaysToGo % self['item'].getDaysToGo(
             base.localAvatar)
         self.buyButton['state'] = DGG.DISABLED
     elif self['item'].getEmblemPrices(
     ) and not base.localAvatar.isEnoughMoneyAndEmblemsToBuy(
             self['item'].getPrice(self['type']),
             self['item'].getEmblemPrices()):
         self.buyButton['state'] = DGG.DISABLED
     elif self['item'].getPrice(
             self['type']
     ) <= base.localAvatar.getMoney() + base.localAvatar.getBankMoney():
         self.buyButton['state'] = DGG.NORMAL
         self.buyButton.show()
     else:
         self.buyButton['state'] = DGG.DISABLED
         self.buyButton.show()
     self.auxText['text'] = auxText
 def getFont(self):
     return ToontownGlobals.getToonFont()
    def updatePage(self):
        self.avAchievements = localAvatar.achievements
        for achievement in self.achievements:
            achievement.destroy()

        self.achievements = []
        self.categories = [[], [], [], [], [], [], [], []]
        engageModulusMode = False
        setNum = 0
        start_pos = LVecBase3(0.4, 1, -0.26)
        seperation = LVecBase3(0, 0, 0.7)
        possibleAchievementTypes = Achievements.type2AchievementIds.keys()
        for type in xrange(len(possibleAchievementTypes)):
            for achievement in Achievements.AchievementsDict:
                if isinstance(achievement, possibleAchievementTypes[type]):
                    cat = Achievements.type2Category.get(achievement.__class__)
                    self.categories[cat].append(
                        Achievements.AchievementsDict.index(achievement))

        if len(self.categories[self.index]) > 4:
            self.setFrame.show()
        else:
            self.setFrame.hide()
        for achievement in xrange(self.offset, self.offset + 4):
            try:
                achievementFrame = DirectFrame(
                    parent=self.achievementsPageNode,
                    image=DGG.getDefaultDialogGeom(),
                    scale=(0.55, 0, 0.55),
                    relief=None,
                    pos=POSITIONS[achievement % 4],
                    text=TTLocalizer.Achievements[self.categories[self.index]
                                                  [achievement]],
                    text_scale=0.08,
                    text_font=ToontownGlobals.getMinnieFont(),
                    text_wordwrap=10,
                    text_pos=(0, 0, 0))
            except:
                return

            self.achievements.append(achievementFrame)
            if self.categories[self.index][achievement] in self.avAchievements:
                achievementFrame['text'] = TTLocalizer.Achievements[
                    self.categories[self.index][achievement]]
                achievementFrame['text_pos'] = (0, 0.4, 0)
                currentAchievement = AchievementsGlobals.AchievementImages[
                    self.categories[self.index][achievement]]
                img = OnscreenImage(image=currentAchievement,
                                    parent=achievementFrame,
                                    scale=(0.2, 1, 0.2))
                img.setTransparency(TransparencyAttrib.MAlpha)
                experience = OnscreenText(
                    parent=achievementFrame,
                    text=TTLocalizer.AchievementsDesc[self.categories[
                        self.index][achievement]],
                    scale=0.06,
                    wordwrap=10,
                    font=ToontownGlobals.getMinnieFont(),
                    pos=(0, -0.3))
            else:
                achievementFrame['text'] = TTLocalizer.LockedAchievement
Пример #57
0
 def handleToonsWon(self, toons):
     extraMerits = [0, 0, 0, 0]
     amount = ToontownGlobals.CountryClubCogBuckRewards[
         self.level.countryClubId]
     index = ToontownGlobals.cogHQZoneId2deptIndex(self.level.countryClubId)
     extraMerits[index] = amount
Пример #58
0
 def __init__(self, doneEvent, allowWithdraw=1):
     backGeom = loader.loadModel('phase_3/models/gui/tt_m_gui_ups_panelBg')
     DirectFrame.__init__(self,
                          relief=None,
                          geom=backGeom,
                          geom_color=ToontownGlobals.GlobalDialogColor,
                          geom_scale=(1.66, 1, 1.4),
                          pos=(0, 0, 0))
     self.initialiseoptions(BankGUI)
     self.doneEvent = doneEvent
     self.__transactionAmount = 0
     bankGuiModel = loader.loadModel('phase_3/models/gui/bank_GUI')
     jarGui = bankGuiModel.find('**/jar')
     arrowGui = loader.loadModel('phase_3/models/gui/create_a_toon_gui')
     bankModel = bankGuiModel.find('**/vault')
     okImageList = (bankGuiModel.find('**/Ok_UP'),
                    bankGuiModel.find('**/Ok_DN'),
                    bankGuiModel.find('**/Ok_RLVR'))
     cancelImageList = (bankGuiModel.find('**/Cancel_UP'),
                        bankGuiModel.find('**/Cancel_DN'),
                        bankGuiModel.find('**/Cancel_RLVR'))
     arrowImageList = (arrowGui.find('**/CrtATn_R_Arrow_UP'),
                       arrowGui.find('**/CrtATn_R_Arrow_DN'),
                       arrowGui.find('**/CrtATn_R_Arrow_RLVR'),
                       arrowGui.find('**/CrtATn_R_Arrow_UP'))
     self.cancelButton = DirectButton(parent=self,
                                      relief=None,
                                      image=cancelImageList,
                                      pos=(-0.2, 0, -0.4),
                                      text=TTLocalizer.BankGuiCancel,
                                      text_scale=0.06,
                                      text_pos=(0, -0.1),
                                      image_scale=0.6,
                                      command=self.__cancel)
     self.okButton = DirectButton(parent=self,
                                  relief=None,
                                  image=okImageList,
                                  pos=(0.2, 0, -0.4),
                                  text=TTLocalizer.BankGuiOk,
                                  text_scale=0.06,
                                  text_pos=(0, -0.1),
                                  image_scale=0.6,
                                  command=self.__requestTransaction)
     self.jarDisplay = DirectLabel(parent=self,
                                   relief=None,
                                   pos=(-0.4, 0, 0),
                                   scale=0.7,
                                   text=str(base.localAvatar.getMoney()),
                                   text_scale=0.2,
                                   text_fg=(0.95, 0.95, 0, 1),
                                   text_shadow=(0, 0, 0, 1),
                                   text_pos=(0, -0.1, 0),
                                   image=jarGui,
                                   text_font=ToontownGlobals.getSignFont())
     self.bankDisplay = DirectLabel(parent=self,
                                    relief=None,
                                    pos=(0.4, 0, 0),
                                    scale=0.9,
                                    text=str(
                                        base.localAvatar.getBankMoney()),
                                    text_scale=0.2,
                                    text_fg=(0.95, 0.95, 0, 1),
                                    text_shadow=(0, 0, 0, 1),
                                    text_pos=(0, -0.1, 0),
                                    image=bankModel,
                                    image_pos=(0.025, 0, 0),
                                    image_scale=0.8,
                                    text_font=ToontownGlobals.getSignFont())
     self.depositArrow = DirectButton(parent=self,
                                      relief=None,
                                      image=arrowImageList,
                                      image_scale=(1, 1, 1),
                                      image3_color=Vec4(
                                          0.6, 0.6, 0.6, 0.25),
                                      pos=(0.01, 0, 0.15))
     self.withdrawArrow = DirectButton(parent=self,
                                       relief=None,
                                       image=arrowImageList,
                                       image_scale=(-1, 1, 1),
                                       image3_color=Vec4(
                                           0.6, 0.6, 0.6, 0.25),
                                       pos=(-0.01, 0, -0.15))
     self.depositArrow.bind(DGG.B1PRESS, self.__depositButtonDown)
     self.depositArrow.bind(DGG.B1RELEASE, self.__depositButtonUp)
     self.withdrawArrow.bind(DGG.B1PRESS, self.__withdrawButtonDown)
     self.withdrawArrow.bind(DGG.B1RELEASE, self.__withdrawButtonUp)
     self.accept('bankAsleep', self.__cancel)
     self.accept(localAvatar.uniqueName('moneyChange'), self.__moneyChange)
     self.accept(localAvatar.uniqueName('bankMoneyChange'),
                 self.__bankMoneyChange)
     if allowWithdraw:
         self.depositArrow.setPos(0.01, 0, 0.15)
         self.withdrawArrow.setPos(-0.01, 0, -0.15)
     else:
         self.depositArrow.setPos(0, 0, 0)
         self.withdrawArrow.hide()
     jarGui.removeNode()
     arrowGui.removeNode()
     bankGuiModel.removeNode()
     self.__updateTransaction(0)
Пример #59
0
class NameGenerator:
    text = TextNode('text')
    if process == 'client':
        text.setFont(ToontownGlobals.getInterfaceFont())
    notify = DirectNotifyGlobal.directNotify.newCategory('NameGenerator')
    boyTitles = []
    girlTitles = []
    neutralTitles = []
    boyFirsts = []
    girlFirsts = []
    neutralFirsts = []
    capPrefixes = []
    lastPrefixes = []
    lastSuffixes = []

    def __init__(self):
        self.generateLists()

    def generateLists(self):
        self.boyTitles = []
        self.girlTitles = []
        self.neutralTitles = []
        self.boyFirsts = []
        self.girlFirsts = []
        self.neutralFirsts = []
        self.capPrefixes = []
        self.lastPrefixes = []
        self.lastSuffixes = []
        self.nameDictionary = {}
        searchPath = DSearchPath()
        if __debug__:
            searchPath.appendDirectory(Filename('./resources/phase_3/etc'))
        searchPath.appendDirectory(Filename('/phase_3/etc'))
        filename = Filename(TTLocalizer.NameShopNameMaster)
        found = vfs.resolveFilename(filename, searchPath)
        if not found:
            self.notify.error("NameGenerator: Error opening name list text file '%s.'" % TTLocalizer.NameShopNameMaster)
        input = StreamReader(vfs.openReadFile(filename, 1), 1)
        currentLine = input.readline().strip()
        while currentLine:
            if currentLine.lstrip()[0:1] != '#':
                a1 = currentLine.find('*')
                a2 = currentLine.find('*', a1 + 1)
                self.nameDictionary[int(currentLine[0:a1])] = (int(currentLine[a1 + 1:a2]), currentLine[a2 + 1:len(currentLine)])
            currentLine = input.readline().strip()

        masterList = [self.boyTitles,
         self.girlTitles,
         self.neutralTitles,
         self.boyFirsts,
         self.girlFirsts,
         self.neutralFirsts,
         self.capPrefixes,
         self.lastPrefixes,
         self.lastSuffixes]
        for tu in self.nameDictionary.values():
            masterList[tu[0]].append(tu[1])

        return 1

    def _getNameParts(self, cat2part):
        nameParts = [{},
         {},
         {},
         {}]
        for id, tpl in self.nameDictionary.iteritems():
            cat, str = tpl
            if cat in cat2part:
                nameParts[cat2part[cat]][str] = id

        return nameParts

    def getMaleNameParts(self):
        return self._getNameParts({0: 0,
         2: 0,
         3: 1,
         5: 1,
         6: 2,
         7: 2,
         8: 3})

    def getFemaleNameParts(self):
        return self._getNameParts({1: 0,
         2: 0,
         4: 1,
         5: 1,
         6: 2,
         7: 2,
         8: 3})

    def getLastNamePrefixesCapped(self):
        return self.capPrefixes

    def returnUniqueID(self, name, listnumber):
        newtu = [(), (), ()]
        if listnumber == 0:
            newtu[0] = (0, name)
            newtu[1] = (1, name)
            newtu[2] = (2, name)
        elif listnumber == 1:
            newtu[0] = (3, name)
            newtu[1] = (4, name)
            newtu[2] = (5, name)
        elif listnumber == 2:
            newtu[0] = (6, name)
            newtu[1] = (7, name)
        else:
            newtu[0] = (8, name)
        for tu in self.nameDictionary.items():
            for g in newtu:
                if tu[1] == g:
                    return tu[0]

        return -1

    def findWidestInList(self, text, nameList):
        maxWidth = 0
        maxName = ''
        for name in nameList:
            width = text.calcWidth(name)
            if width > maxWidth:
                maxWidth = text.calcWidth(name)
                maxName = name

        print maxName + ' ' + str(maxWidth)
        return maxName

    def findWidestName(self):
        longestBoyTitle = self.findWidestInList(self.text, self.boyTitles + self.neutralTitles)
        longestGirlTitle = self.findWidestInList(self.text, self.girlTitles + self.neutralTitles)
        longestBoyFirst = self.findWidestInList(self.text, self.boyFirsts + self.neutralFirsts)
        longestGirlFirst = self.findWidestInList(self.text, self.girlFirsts + self.neutralFirsts)
        longestLastPrefix = self.findWidestInList(self.text, self.lastPrefixes)
        longestLastSuffix = self.findWidestInList(self.text, self.lastSuffixes)
        longestBoyFront = self.findWidestInList(self.text, [longestBoyTitle, longestBoyFirst])
        longestGirlFront = self.findWidestInList(self.text, [longestGirlTitle, longestGirlFirst])
        longestBoyName = longestBoyTitle + ' ' + longestBoyFirst + ' ' + longestLastPrefix + longestLastSuffix
        longestGirlName = longestGirlTitle + ' ' + longestGirlFirst + ' ' + longestLastPrefix + longestLastSuffix
        longestName = self.findWidestInList(self.text, [longestBoyName, longestGirlName])
        return longestName

    def findWidestTitleFirst(self):
        longestBoyTitle = self.findWidestInList(self.text, self.boyTitles + self.neutralTitles)
        longestGirlTitle = self.findWidestInList(self.text, self.girlTitles + self.neutralTitles)
        longestBoyFirst = self.findWidestInList(self.text, self.boyFirsts + self.neutralFirsts)
        longestGirlFirst = self.findWidestInList(self.text, self.girlFirsts + self.neutralFirsts)
        longestBoyName = longestBoyTitle + ' ' + longestBoyFirst
        longestGirlName = longestGirlTitle + ' ' + longestGirlFirst
        longestName = self.findWidestInList(self.text, [longestBoyName, longestGirlName])

    def findWidestTitle(self):
        widestTitle = self.findWidestInList(self.text, self.neutralTitles + self.boyTitles + self.girlTitles)
        return widestTitle

    def findWidestFirstName(self):
        widestFirst = self.findWidestInList(self.text, self.neutralFirsts + self.boyFirsts + self.girlFirsts)
        return widestFirst

    def findWidestLastName(self):
        longestLastPrefix = self.findWidestInList(self.text, self.lastPrefixes)
        longestLastSuffix = self.findWidestInList(self.text, self.lastSuffixes)
        longestLastName = longestLastPrefix + longestLastSuffix
        return longestLastName

    def findWidestNameWord(self):
        widestWord = self.findWidestInList(self.text, [self.findWidestTitle(), self.findWidestFirstName(), self.findWidestLastName()])
        return widestWord

    def findWidestNameWidth(self):
        name = self.findWidestName()
        return self.text.calcWidth(name)

    def printWidestName(self):
        name = self.findWidestName()
        width = self.text.calcWidth(name)
        widthStr = str(width)
        print 'The widest name is: ' + name + ' (' + widthStr + ' units)'

    def printWidestLastName(self):
        name = self.findWidestLastName()
        width = self.text.calcWidth(name)
        widthStr = str(width)
        print 'The widest last name is: ' + name + ' (' + widthStr + ' units)'

    def randomName(self, boy = 0, girl = 0):
        if boy and girl:
            self.error("A name can't be both boy and girl!")
        if not boy and not girl:
            boy = random.choice([0, 1])
            girl = not boy
        uberFlag = random.choice(['title-first',
         'title-last',
         'first',
         'last',
         'first-last',
         'title-first-last'])
        titleFlag = 0
        if uberFlag == 'title-first' or uberFlag == 'title-last' or uberFlag == 'title-first-last':
            titleFlag = 1
        firstFlag = 0
        if uberFlag == 'title-first' or uberFlag == 'first' or uberFlag == 'first-last' or uberFlag == 'title-first-last':
            firstFlag = 1
        lastFlag = 0
        if uberFlag == 'title-last' or uberFlag == 'last' or uberFlag == 'first-last' or uberFlag == 'title-first-last':
            lastFlag = 1
        retString = ''
        if titleFlag:
            titleList = self.neutralTitles[:]
            if boy:
                titleList += self.boyTitles
            elif girl:
                titleList += self.girlTitles
            else:
                self.error('Must be boy or girl.')
            retString += random.choice(titleList) + ' '
        if firstFlag:
            firstList = self.neutralFirsts[:]
            if boy:
                firstList += self.boyFirsts
            elif girl:
                firstList += self.girlFirsts
            else:
                self.error('Must be boy or girl.')
            retString += random.choice(firstList)
            if lastFlag:
                retString += ' '
        if lastFlag:
            lastPrefix = random.choice(self.lastPrefixes)
            lastSuffix = random.choice(self.lastSuffixes)
            if lastPrefix in self.capPrefixes:
                lastSuffix = lastSuffix.capitalize()
            retString += lastPrefix + lastSuffix
        return retString

    def randomNameMoreinfo(self, boy = 0, girl = 0):
        if boy and girl:
            self.error("A name can't be both boy and girl!")
        if not boy and not girl:
            boy = random.choice([0, 1])
            girl = not boy
        uberFlag = random.choice(['title-first',
         'title-last',
         'first',
         'last',
         'first-last',
         'title-first-last'])
        titleFlag = 0
        if uberFlag == 'title-first' or uberFlag == 'title-last' or uberFlag == 'title-first-last':
            titleFlag = 1
        firstFlag = 0
        if uberFlag == 'title-first' or uberFlag == 'first' or uberFlag == 'first-last' or uberFlag == 'title-first-last':
            firstFlag = 1
        lastFlag = 0
        if uberFlag == 'title-last' or uberFlag == 'last' or uberFlag == 'first-last' or uberFlag == 'title-first-last':
            lastFlag = 1
        retString = ''
        uberReturn = [0,
         0,
         0,
         '',
         '',
         '',
         '']
        uberReturn[0] = titleFlag
        uberReturn[1] = firstFlag
        uberReturn[2] = lastFlag
        titleList = self.neutralTitles[:]
        if boy:
            titleList += self.boyTitles
        elif girl:
            titleList += self.girlTitles
        else:
            self.error('Must be boy or girl.')
        uberReturn[3] = random.choice(titleList)
        firstList = self.neutralFirsts[:]
        if boy:
            firstList += self.boyFirsts
        elif girl:
            firstList += self.girlFirsts
        else:
            self.error('Must be boy or girl.')
        uberReturn[4] = random.choice(firstList)
        lastPrefix = random.choice(self.lastPrefixes)
        lastSuffix = random.choice(self.lastSuffixes)
        if lastPrefix in self.capPrefixes:
            lastSuffix = lastSuffix.capitalize()
        uberReturn[5] = lastPrefix
        uberReturn[6] = lastSuffix
        if titleFlag:
            retString += uberReturn[3] + ' '
        if firstFlag:
            retString += uberReturn[4]
            if lastFlag:
                retString += ' '
        if lastFlag:
            retString += uberReturn[5] + uberReturn[6]
        uberReturn.append(retString)
        return uberReturn

    def printRandomNames(self, boy = 0, girl = 0, total = 1):
        i = 0
        origBoy = boy
        origGirl = girl
        while i < total:
            if not origBoy and not origGirl:
                boy = random.choice([0, 1])
                girl = not boy
            name = self.randomName(boy, girl)
            width = self.text.calcWidth(name)
            widthStr = str(width)
            if boy:
                print 'Boy: ' + name + ' (' + widthStr + ' units)'
            if girl:
                print 'Girl: ' + name + ' (' + widthStr + ' units)'
            i += 1

    def percentOver(self, limit = 9.0, samples = 1000):
        i = 0
        over = 0
        while i < samples:
            name = self.randomName()
            width = self.text.calcWidth(name)
            if width > limit:
                over += 1
            i += 1

        percent = float(over) / float(samples) * 100
        print 'Samples: ' + str(samples) + ' Over: ' + str(over) + ' Percent: ' + str(percent)

    def totalNames(self):
        firsts = len(self.boyFirsts) + len(self.girlFirsts) + len(self.neutralFirsts)
        print 'Total firsts: ' + str(firsts)
        lasts = len(self.lastPrefixes) * len(self.lastSuffixes)
        print 'Total lasts: ' + str(lasts)
        neutralTitleFirsts = len(self.neutralTitles) * len(self.neutralFirsts)
        boyTitleFirsts = len(self.boyTitles) * (len(self.neutralFirsts) + len(self.boyFirsts)) + len(self.neutralTitles) * len(self.boyFirsts)
        girlTitleFirsts = len(self.girlTitles) * (len(self.neutralFirsts) + len(self.girlFirsts)) + len(self.neutralTitles) * len(self.girlFirsts)
        totalTitleFirsts = neutralTitleFirsts + boyTitleFirsts + girlTitleFirsts
        print 'Total title firsts: ' + str(totalTitleFirsts)
        neutralTitleLasts = len(self.neutralTitles) * lasts
        boyTitleLasts = len(self.boyTitles) * lasts
        girlTitleLasts = len(self.girlTitles) * lasts
        totalTitleLasts = neutralTitleLasts + boyTitleFirsts + girlTitleLasts
        print 'Total title lasts: ' + str(totalTitleLasts)
        neutralFirstLasts = len(self.neutralFirsts) * lasts
        boyFirstLasts = len(self.boyFirsts) * lasts
        girlFirstLasts = len(self.girlFirsts) * lasts
        totalFirstLasts = neutralFirstLasts + boyFirstLasts + girlFirstLasts
        print 'Total first lasts: ' + str(totalFirstLasts)
        neutralTitleFirstLasts = neutralTitleFirsts * lasts
        boyTitleFirstLasts = boyTitleFirsts * lasts
        girlTitleFirstLasts = girlTitleFirsts * lasts
        totalTitleFirstLasts = neutralTitleFirstLasts + boyTitleFirstLasts + girlTitleFirstLasts
        print 'Total title first lasts: ' + str(totalTitleFirstLasts)
        totalNames = firsts + lasts + totalTitleFirsts + totalTitleLasts + totalFirstLasts + totalTitleFirstLasts
        print 'Total Names: ' + str(totalNames)
Пример #60
0
    def load(self):
        self.trophies = base.localAvatar.getGolfTrophies()[:]
        self.cups = base.localAvatar.getGolfCups()[:]
        xStart = -0.76
        yStart = 0.475
        xOffset = 0.17
        yOffset = 0.23
        for j in range(GolfGlobals.NumCups):
            for i in range(GolfGlobals.TrophiesPerCup):
                trophyPanel = DirectLabel(
                    parent=self,
                    relief=None,
                    pos=(xStart + i * xOffset, 0.0, yStart - j * yOffset),
                    state=DGG.NORMAL,
                    image=DGG.getDefaultDialogGeom(),
                    image_scale=(0.75, 1, 1),
                    image_color=(0.8, 0.8, 0.8, 1),
                    text=TTLocalizer.SuitPageMystery[0],
                    text_scale=0.45,
                    text_fg=(0, 0, 0, 1),
                    text_pos=(0, 0, -0.25),
                    text_font=ToontownGlobals.getInterfaceFont(),
                    text_wordwrap=5.5)
                trophyPanel.scale = 0.2
                trophyPanel.setScale(trophyPanel.scale)
                self.trophyPanels.append(trophyPanel)

        xStart = -0.25
        yStart = -0.38
        xOffset = 0.25
        for i in range(GolfGlobals.NumCups):
            cupPanel = DirectLabel(
                parent=self,
                relief=None,
                pos=(xStart + i * xOffset, 0.0, yStart),
                state=DGG.NORMAL,
                image=DGG.getDefaultDialogGeom(),
                image_scale=(0.75, 1, 1),
                image_color=(0.8, 0.8, 0.8, 1),
                text=TTLocalizer.SuitPageMystery[0],
                text_scale=0.45,
                text_fg=(0, 0, 0, 1),
                text_pos=(0, 0, -0.25),
                text_font=ToontownGlobals.getInterfaceFont(),
                text_wordwrap=5.5)
            cupPanel.scale = 0.3
            cupPanel.setScale(cupPanel.scale)
            self.cupPanels.append(cupPanel)

        self.currentHistory = DirectLabel(parent=self,
                                          relief=None,
                                          text='',
                                          text_scale=0.05,
                                          text_fg=(0, 0, 0.95, 1.0),
                                          text_pos=(0, -0.65))
        self.trophyTextDisplay = DirectLabel(
            parent=self,
            relief=None,
            text='',
            text_scale=0.07,
            text_fg=(1, 0, 0, 1),
            text_shadow=(0, 0, 0, 0),
            text_pos=(0.0, -0.175),
            text_font=ToontownGlobals.getInterfaceFont())
        self.updateTrophies()
        return