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
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
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')
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
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()
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()
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")
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')
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)
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
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)
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)
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')
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)
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()
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)
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
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'] = '???'
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
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
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 = []
def setMintId(self, mintId): self.mintId = mintId self.cogTrack = ToontownGlobals.cogHQZoneId2dept(mintId)
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
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()
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)
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)
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)
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
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])
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
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
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)
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
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
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
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
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
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)
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
def handleToonsWon(self, toons): extraMerits = [0, 0, 0, 0] amount = ToontownGlobals.CountryClubCogBuckRewards[ self.level.countryClubId] index = ToontownGlobals.cogHQZoneId2deptIndex(self.level.countryClubId) extraMerits[index] = amount
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)
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)
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