def load(self): base.cr.renderFrame() base.camLens.setMinFov(CIGlobals.DefaultCameraFov / (4.0 / 3.0)) self.__setupStageToon() self.world = loader.loadModel('phase_9/models/cogHQ/SellbotHQExterior.bam') self.world.reparentTo(base.render) self.world.setPos(0, 227.09, -25.36) self.sky = loader.loadModel('phase_9/models/cogHQ/cog_sky.bam') self.sky.setScale(1) self.sky.reparentTo(base.render) self.sky.find('**/InnerGroup').removeNode() self.fog = Fog('charSelectFog') self.fog.setColor(0.2, 0.2, 0.2) self.fog.setExpDensity(0.003) base.render.setFog(self.fog) self.title = DirectLabel(text=self.TITLE, text_font=CIGlobals.getMickeyFont(), text_fg=(1, 0.9, 0.1, 1), relief=None, text_scale=0.13, pos=(0, 0, 0.82)) self.charNameLabel = OnscreenText(text='', font=CIGlobals.getMickeyFont(), pos=(-0.25, 0.5, 0), fg=(1, 0.9, 0.1, 1.0)) self.charNameLabel.hide() self.playOrCreateButton = DirectButton(text='', pos=(0.8125, 0, -0.735), command=self.__action, geom=CIGlobals.getDefaultBtnGeom(), text_scale=0.06, relief=None, text_pos=(0, -0.01)) self.playOrCreateButton.hide() self.deleteButton = DirectButton(text='Delete', pos=(0.8125, 0, -0.835), command=self.__action, extraArgs=['delete'], geom=CIGlobals.getDefaultBtnGeom(), text_scale=0.06, relief=None, text_pos=(0, -0.01)) self.deleteButton.hide() self.quitButton = DirectButton(text='Quit', pos=(-1.1, 0, -0.925), command=self.__action, extraArgs=['quit'], text_scale=0.06, geom=CIGlobals.getDefaultBtnGeom(), relief=None, text_pos=(0, -0.01)) textRolloverColor = Vec4(1, 1, 0, 1) textDownColor = Vec4(0.5, 0.9, 1, 1) textDisabledColor = Vec4(0.4, 0.8, 0.4, 1) for slot in range(6): if self.avChooser.hasToonInSlot(slot): choice = self.avChooser.getAvChoiceBySlot(slot) text = choice.name else: text = self.NO_TOON btn = DirectButton(relief=None, text=text, text_scale=0.06, text_align=TextNode.ALeft, text1_bg=textDownColor, text2_bg=textRolloverColor, text3_fg=textDisabledColor, textMayChange=0, command=self.__handleCharButton, extraArgs=[slot], text_pos=(0, 0, 0.0)) btn.setPythonTag('slot', slot) self.charButtons.append(btn) btn['state'] = DGG.NORMAL gui = loader.loadModel('phase_3.5/models/gui/friendslist_gui.bam') listXorigin = -0.02 listFrameSizeX = 0.625 listZorigin = -0.96 listFrameSizeZ = 1.04 arrowButtonScale = 1.3 itemFrameXorigin = -0.237 itemFrameZorigin = 0.365 buttonXstart = itemFrameXorigin + 0.293 self.charList = DirectScrolledList(relief=None, pos=(0.75, 0, 0.08), incButton_image=(gui.find('**/FndsLst_ScrollUp'), gui.find('**/FndsLst_ScrollDN'), gui.find('**/FndsLst_ScrollUp_Rllvr'), gui.find('**/FndsLst_ScrollUp')), incButton_relief=None, incButton_scale=(arrowButtonScale, arrowButtonScale, -arrowButtonScale), incButton_pos=(buttonXstart, 0, itemFrameZorigin - 0.999), incButton_image3_color=Vec4(1, 1, 1, 0.2), decButton_image=(gui.find('**/FndsLst_ScrollUp'), gui.find('**/FndsLst_ScrollDN'), gui.find('**/FndsLst_ScrollUp_Rllvr'), gui.find('**/FndsLst_ScrollUp')), decButton_relief=None, decButton_scale=(arrowButtonScale, arrowButtonScale, arrowButtonScale), decButton_pos=(buttonXstart, 0, itemFrameZorigin + 0.125), decButton_image3_color=Vec4(1, 1, 1, 0.2), itemFrame_pos=(itemFrameXorigin, 0, itemFrameZorigin), itemFrame_scale=1.0, itemFrame_relief=DGG.SUNKEN, itemFrame_frameSize=(listXorigin, listXorigin + listFrameSizeX, listZorigin, listZorigin + listFrameSizeZ), itemFrame_frameColor=(0.85, 0.95, 1, 1), itemFrame_borderWidth=(0.01, 0.01), numItemsVisible=15, forceHeight=0.075, items=self.charButtons) base.camera.setPos(75.12, 63.22, -23) base.camera.setHpr(26.57, 9.62, 0) return
def createGui(self): """ Create the GUI that will tell the client how much running power they have. """ self.powerFrame = DirectFrame() self.powerBg = OnscreenImage(image=DGG.getDefaultDialogGeom(), scale=(0.5, 1.0, 0.5), pos=(1.02, 0, 0.7), parent=self.powerFrame, color=CIGlobals.DialogColor) self.powerBar = DirectWaitBar(barColor=(0, 0.7, 0, 1), range=20.0, value=0, parent=self.powerFrame, scale=(0.15, 0, 1.1), pos=(1.02, 0, 0.66)) self.powerBar.setR(-90) self.powerTitle = DirectLabel(text="POWER", text_scale=0.08, pos=(1.02, 0, 0.85), relief=None, parent=self.powerFrame, text_fg=(1, 1, 0, 1), text_font=CIGlobals.getMickeyFont()) self.boostFrame = DirectFrame() self.boostBg = OnscreenImage(image=DGG.getDefaultDialogGeom(), scale=(0.5, 1.0, 0.5), pos=(0.45, 0, 0.7), parent=self.boostFrame, color=CIGlobals.DialogColor) self.boostBar = DirectWaitBar(barColor=self.defaultBoostBarColor, range=10, value=0, parent=self.boostFrame, scale=(0.15, 0, 1.1), pos=(0.45, 0, 0.66)) self.boostBar.setR(-90) self.boostTitle = DirectLabel(text="BOOST", text_scale=0.08, pos=(0.45, 0, 0.85), relief=None, parent=self.boostFrame, text_fg=(1, 1, 0, 1), text_font=CIGlobals.getMickeyFont()) self.boostFullLbl = DirectLabel(text="BOOST READY", text_scale=0.065, pos=(0.45, 0, 0.3), relief=None, parent=self.boostFrame, text_fg=self.fullBoostBarColor, text_shadow=(0.4, 0.4, 0.4, 1.0), text_font=CIGlobals.getToonFont()) self.boostFullLbl.hide()
def setup(self, title='CHOOSE WHAT YOU WANT TO BUY'): font = CIGlobals.getMickeyFont() txtFg = (0, 0, 0, 1) txtScale = 0.05 txtPos = (0, -0.1) buttons = loader.loadModel('phase_3.5/models/gui/QT_buttons.bam') self.window = OnscreenImage(image=self.bgImage, scale=(0.9, 1, 0.7), parent=self) self.title = DirectLabel(text=title, relief=None, pos=(0, 0, 0.5), text_wordwrap=10, text_font=font, text_fg=(1, 1, 0, 1), scale=0.1, parent=self) self.updateTurretCount() self.infoLbl = DirectLabel(text='Welcome!', relief=None, text_scale=0.075, text_fg=txtFg, text_shadow=(0, 0, 0, 0), pos=(0, 0, 0.215)) self.okBtn = DirectButton(geom=CIGlobals.getOkayBtnGeom(), relief=None, text='OK', text_fg=txtFg, text_scale=txtScale, text_pos=txtPos, pos=(-0.1, 0, -0.5), parent=self) self.clBtn = DirectButton(geom=CIGlobals.getCancelBtnGeom(), relief=None, text='Cancel', text_fg=txtFg, text_scale=txtScale, text_pos=txtPos, pos=(0.1, 0, -0.5), parent=self) buttonGeom = (buttons.find('**/QT_back'), buttons.find('**/QT_back'), buttons.find('**/QT_back'), buttons.find('**/QT_back')) self.backBtn = DirectButton(geom=buttonGeom, relief=None, scale=0.05, pos=(-0.3, 0, -0.25), parent=self, command=self.changePage, extraArgs=[0]) self.nextBtn = DirectButton(geom=buttonGeom, relief=None, scale=0.05, pos=(0.3, 0, -0.25), hpr=(0, 0, 180), command=self.changePage, extraArgs=[1], parent=self) self.hideInfo() return
def setupCountdownText(self): tn = TextNode('countdownText') tn.setFont(CIGlobals.getMickeyFont()) tn.setTextColor(VBase4(0.5, 0.5, 0.5, 1.0)) tn.setAlign(TextNode.ACenter) self.countdownTextNP = self.getElevatorModel().attachNewNode(tn) self.countdownTextNP.setScale(2) self.countdownTextNP.setPos(0, 1, 7)
def enterAnnounceGameOver(self): whistleSfx = base.loadSfx("phase_4/audio/sfx/AA_sound_whistle.mp3") whistleSfx.play() del whistleSfx self.gameOverLbl = DirectLabel( text="GAME\nOVER!", relief=None, scale=0.35, text_font=CIGlobals.getMickeyFont(), text_fg=(1, 0, 0, 1) ) return
def enterAnnounceGameOver(self): whistleSfx = base.loadSfx("phase_4/audio/sfx/AA_sound_whistle.ogg") whistleSfx.play() del whistleSfx self.gameOverLbl = DirectLabel(text="GAME\nOVER!", relief=None, scale=0.35, text_font=CIGlobals.getMickeyFont(), text_fg=(1, 0, 0, 1))
def load(self): self.unload() timer = loader.loadModel("phase_3.5/models/gui/clock_gui.bam") self.timer = OnscreenImage(image=timer.find('**/alarm_clock'), pos=(-0.15, 0, -0.15), scale=0.4, parent=base.a2dTopRight) self.timeLbl = DirectLabel(text="0", parent=self.timer, text_scale=0.3, text_pos=(0, -0.13), text_font=CIGlobals.getMickeyFont(), text_fg=(1, 0, 0, 1), relief=None) timer.removeNode() self.timer.setBin('gui-popup', 60) del timer
def generateStation(self): GroupStation.generateStation(self, self.Slots) circleTexture = loader.loadTexture("phase_13/maps/stand_here_cog.png") for circle in self.circles: circle.setTexture(circleTexture, 1) title = DirectLabel(text=self.Title, relief=None, text_fg=(0.5, 0.5, 0.5, 1.0), text_decal=True, text_font=CIGlobals.getMickeyFont(), text_pos = (0, 0), parent=self.sign.find('**/signText_locator'), text_scale=0.3, text_wordwrap=7.0) title.setBillboardAxis(2)
def startCountdown(self): self.countdownLbl = DirectLabel(text='', text_scale=0.3, text_font=CIGlobals.getMickeyFont(), text_fg=(1, 1, 0, 1), pos=(0, 0, 0.5)) Sequence(Func(self.setCountdownText, '3'), Wait(1.0), Func(self.setCountdownText, '2'), Wait(1.0), Func(self.setCountdownText, '1'), Wait(1.0), Func(self.setCountdownText, 'GO!'), Wait(1.5), Func(self.deleteCountdownLabel)).start()
def createTimer(self): self.time = 10 self.timer = DirectLabel(text=str(self.time), relief=None, text_font=CIGlobals.getMickeyFont(), text_scale=1.5, pos=(0, 0, 5.1), text_fg=(1, 0, 0, 1), text_decal=True, parent=self.sign) self.timer.setBillboardAxis(2)
def setupHealthLabel(self): self.healthLabel = DirectLabel(text="", text_fg=CIGlobals.PositiveTextColor, scale=0.75, relief=None, text_decal=True, text_font=CIGlobals.getMickeyFont(), text_align=TextNode.ACenter) self.healthLabel.reparentTo(self) self.healthLabel.setBillboardPointEye() self.healthLabel.stash()
def enterAnnounceGameOver(self): whistleSfx = base.loadSfx("phase_4/audio/sfx/AA_sound_whistle.ogg") whistleSfx.play() del whistleSfx self.gameOverLbl = DirectLabel(text="TIME'S\nUP!", relief=None, scale=0.5, text_font=CIGlobals.getMickeyFont(), text_fg=(1, 0, 0, 1)) self.track = Sequence(Wait(3.0), Func(self.fsm.request, 'finalScores')) self.track.start()
def startCountdown(self): """ Start the countdown to the start of the race. """ self.countdownLbl = DirectLabel(text="", text_scale=0.3, text_font=CIGlobals.getMickeyFont(), text_fg=(1, 1, 0, 1), pos=(0, 0, 0.5)) Sequence(Func(self.setCountdownText, "3"), Wait(1.0), Func(self.setCountdownText, "2"), Wait(1.0), Func(self.setCountdownText, "1"), Wait(1.0), Func(self.setCountdownText, "GO!"), Wait(1.5), Func(self.deleteCountdownLabel)).start()
def setTeam(self, team): self.team = team if self.teamText: self.teamText.removeNode() self.teamText = None textNode = TextNode('teamText') textNode.setAlign(TextNode.ACenter) textNode.setFont(CIGlobals.getMickeyFont()) self.teamText = self.avatar.attachNewNode(textNode) self.teamText.setBillboardAxis() self.teamText.setZ(self.avatar.getNameTag().getZ() + 1.0) self.teamText.setScale(5.0)
def generate(self): DistributedObject.announceGenerate(self) self.trolleyStation = self.cr.playGame.hood.loader.geom.find('**/prop_trolley_station_DNARoot') self.trolleyCar = self.trolleyStation.find('**/trolley_car') self.trolleyKey = self.trolleyStation.find('**/key') tn = TextNode('trolleycountdowntext') tn.setFont(CIGlobals.getMickeyFont()) tn.setTextColor(1, 0, 0, 1) self.countdownText = self.trolleyStation.attachNewNode(tn) self.countdownText.setScale(3.0) self.countdownText.setPos(14.58, 10.77, 11.17) self.acceptOnce('entertrolley_sphere', self.__handleTrolleyTrigger)
def __init__(self, cr): try: self.DistributedMinigame_initialized return except: self.DistributedMinigame_initialized = 1 DistributedObject.DistributedObject.__init__(self, cr) Timer.Timer.__init__(self) self.headPanels = HeadPanels() self.finalScoreUI = FinalScoreGUI() self.fsm = ClassicFSM('DistributedMinigame', [ State('start', self.enterStart, self.exitStart, ['waitForOthers']), State('waitForOthers', self.enterWaitForOthers, self.exitWaitForOthers, ['play']), State('play', self.enterPlay, self.exitPlay, ['gameOver']), State('gameOver', self.enterGameOver, self.exitGameOver, ['off']), State('off', self.enterOff, self.exitOff) ], 'off', 'off') self.fsm.enterInitialState() self.cr = cr self.localAv = base.localAvatar self.localAvId = self.localAv.doId self.musicPath = 'phase_4/audio/bgm/trolley_song.mid' self.winSfx = base.loadSfx('phase_4/audio/sfx/MG_win.ogg') self.loseSfx = base.loadSfx('phase_4/audio/sfx/MG_lose.ogg') self.prizeHigh = base.loadSfx('phase_6/audio/sfx/KART_Applause_1.ogg') self.prizeLow = base.loadSfx('phase_6/audio/sfx/KART_Applause_4.ogg') self.music = None self.description = '' self.descDialog = None self.winnerPrize = 0 self.loserPrize = 0 self.winnerMsg = 'Winner!\nYou have earned: %s Jellybeans' self.loserMsg = 'Loser!\nYou have earned: %s Jellybeans' self.allWinnerMsgs = [ 'Nice try!\nYou have earned: %s', 'Good job!\nYou have earned: %s', 'Way to go!\nYou have earned: %s', 'Awesome!\nYou have earned: %s' ] self.timer = None self.timeLbl = None self.alertText = None self.alertPulse = None self.popupSound = None self.gameOverLbl = OnscreenText(text="TIME'S\nUP!", scale=0.25, font=CIGlobals.getMickeyFont(), fg=(1, 0, 0, 1)) self.gameOverLbl.setBin('gui-popup', 60) self.gameOverLbl.hide() return
def makeSelectionGUI(self): font = CIGlobals.getMickeyFont() box = loader.loadModel('phase_3/models/gui/dialog_box_gui.bam') imp = CIGlobals.getToonFont() geom = CIGlobals.getDefaultBtnGeom() self.container = DirectFrame() self.bg = OnscreenImage(image=box, color=(1, 1, 0.75, 1), scale=(1.9, 1.4, 1.4), parent=self.container) self.title = OnscreenText(text='Join a Team', pos=(0, 0.5, 0), font=font, scale=0.12, parent=self.container, fg=(1, 0.9, 0.3, 1)) self.btnFrame = DirectFrame(parent=self.container, pos=(0.14, 0, 0)) self.team1BtnFrame = DirectFrame(parent=self.btnFrame, pos=(-0.5, 0, 0)) self.team2BtnFrame = DirectFrame(parent=self.btnFrame, pos=(0.22, 0, 0)) self.team1Btn = DirectButton(parent=self.team1BtnFrame, relief=None, pressEffect=0, image=self.team1BtnImg, image_scale=(0.9, 1, 1), scale=0.4, command=self.choseTeam, extraArgs=[TEAM1]) self.team1Plyrs_Lbl = OnscreenText(parent=self.team1BtnFrame, text=str(self.playersByTeam[TEAM1]), pos=(0, -0.46, 0), font=imp) self.team2Btn = DirectButton(parent=self.team2BtnFrame, relief=None, pressEffect=0, image=self.team2BtnImg, image_scale=(0.9, 1, 1), scale=0.4, command=self.choseTeam, extraArgs=[TEAM2]) self.team2Plyrs_Lbl = OnscreenText(parent=self.team2BtnFrame, text=str(self.playersByTeam[TEAM2]), pos=(0, -0.46, 0), font=imp) self.teamFull_Lbl = OnscreenText(parent=self.container, text='', pos=(0, -0.6, 0), font=imp) return
def enter(self, requestStatus): StateData.enter(self) hoodId = requestStatus['hoodId'] zoneId = requestStatus['zoneId'] rootZone = ZoneUtil.getZoneId(hoodId) if base.localAvatar.getLastHood() != rootZone and hoodId != CIGlobals.MinigameArea: base.localAvatar.b_setLastHood(rootZone) if not base.localAvatar.hasDiscoveredHood(rootZone): hoodsDiscovered = list(base.localAvatar.getHoodsDiscovered()) hoodsDiscovered.append(rootZone) base.localAvatar.b_setHoodsDiscovered(hoodsDiscovered) text = self.getHoodText(zoneId) self.titleText = OnscreenText(text, fg=self.titleColor, font=CIGlobals.getMickeyFont(), scale=0.15, pos=(0, -0.65)) self.titleText.hide()
def enterAnnounceTeamWon(self, team): whistleSfx = base.loadSfx("phase_4/audio/sfx/AA_sound_whistle.ogg") whistleSfx.play() del whistleSfx if self.gameMode == GGG.GameModes.KOTH and DistributedToonFPSGame.getKOTHKing( self): text = DistributedToonFPSGame.getKOTHKing(self).getName() else: text = GGG.TeamNameById[team].split(' ')[0] self.gameOverLbl = DirectLabel(text="{0}\nWins!".format(text), relief=None, scale=0.35, text_font=CIGlobals.getMickeyFont(), text_fg=(1, 0, 0, 1)) self.track = Sequence(Wait(3.0), Func(self.fsm.request, 'finalScores')) self.track.start()
def createGui(self): self.deleteGui() uno_gui = loader.loadModel('phase_4/models/minigames/mg_uno_call_btn_gui.egg') gui = loader.loadModel('phase_3/models/gui/quit_button.bam') self.drawBtn = DirectButton(text='Draw', relief=None, text_scale=0.055, scale=1, parent=base.a2dBottomLeft, geom=(gui.find('**/QuitBtn_UP'), gui.find('**/QuitBtn_DN'), gui.find('**/QuitBtn_RLVR'), gui.find('**/QuitBtn_UP')), pos=(0.18, 0, 0.1), geom_scale=(0.6, 1.0, 1.0), command=self.d_requestNewCard) self.callBtn = DirectButton(geom=(uno_gui.find('**/mg_uno_call_btn-idle'), uno_gui.find('**/mg_uno_call_btn-down'), uno_gui.find('**/mg_uno_call_btn-rlvr'), uno_gui.find('**/mg_uno_call_btn-disabled')), relief=None, scale=0.3, parent=base.a2dBottomLeft, pos=(0.18, 0, 0.305), command=self.d_callUno) self.callBtn['state'] = DGG.DISABLED self.playByPlay = OnscreenText(text='', font=CIGlobals.getMickeyFont(), scale=0.1, fg=(0, 0.8, 0, 1), pos=(0, 0.85), wordwrap=15.0) self.cardDeck.generate() self.createTimer() gui.removeNode() del gui return
def loadDNAStore(self): if hasattr(self, 'dnaStore'): self.dnaStore.reset_nodes() self.dnaStore.reset_hood_nodes() self.dnaStore.reset_place_nodes() self.dnaStore.reset_hood() self.dnaStore.reset_fonts() self.dnaStore.reset_DNA_vis_groups() self.dnaStore.reset_textures() self.dnaStore.reset_block_numbers() self.dnaStore.reset_block_zones() self.dnaStore.reset_suit_points() del self.dnaStore self.dnaStore = DNAStorage() loadDNAFile(self.dnaStore, 'phase_4/dna/storage.pdna') self.dnaStore.storeFont('humanist', CIGlobals.getToonFont()) self.dnaStore.storeFont('mickey', CIGlobals.getMickeyFont()) self.dnaStore.storeFont('suit', CIGlobals.getSuitFont()) loadDNAFile(self.dnaStore, 'phase_3.5/dna/storage_interior.pdna')
def setup(self, title = 'CHOOSE WHAT YOU WANT TO BUY'): font = CIGlobals.getMickeyFont() txtFg = (0, 0, 0, 1) txtScale = 0.05 txtPos = (0, -0.1) buttons = loader.loadModel('phase_3.5/models/gui/QT_buttons.bam') self.window = OnscreenImage(image=self.bgImage, scale=(0.9, 1, 0.7), parent=self) self.title = DirectLabel(text=title, relief=None, pos=(0, 0, 0.5), text_wordwrap=10, text_font=font, text_fg=(1, 1, 0, 1), scale=0.1, parent=self) self.infoLbl = DirectLabel(text='Welcome!', relief=None, text_scale=0.075, text_fg=txtFg, text_shadow=(0, 0, 0, 0), pos=(0, 0, 0.215)) self.okBtn = DirectButton(geom=CIGlobals.getOkayBtnGeom(), relief=None, text='OK', text_fg=txtFg, text_scale=txtScale, text_pos=txtPos, pos=(-0.1, 0, -0.5), parent=self) self.clBtn = DirectButton(geom=CIGlobals.getCancelBtnGeom(), relief=None, text='Cancel', text_fg=txtFg, text_scale=txtScale, text_pos=txtPos, pos=(0.1, 0, -0.5), parent=self) buttonGeom = (buttons.find('**/QT_back'), buttons.find('**/QT_back'), buttons.find('**/QT_back'), buttons.find('**/QT_back')) self.backBtn = DirectButton(geom=buttonGeom, relief=None, scale=0.05, pos=(-0.3, 0, -0.25), parent=self, command=self.changePage, extraArgs=[0]) self.nextBtn = DirectButton(geom=buttonGeom, relief=None, scale=0.05, pos=(0.3, 0, -0.25), hpr=(0, 0, 180), command=self.changePage, extraArgs=[1], parent=self) self.hideInfo() return
def enter(self, requestStatus): StateData.enter(self) hoodId = requestStatus['hoodId'] zoneId = requestStatus['zoneId'] rootZone = ZoneUtil.getZoneId(hoodId) if base.localAvatar.getLastHood( ) != rootZone and hoodId != CIGlobals.MinigameArea: base.localAvatar.b_setLastHood(rootZone) if not base.localAvatar.hasDiscoveredHood(rootZone): hoodsDiscovered = list(base.localAvatar.getHoodsDiscovered()) hoodsDiscovered.append(rootZone) base.localAvatar.b_setHoodsDiscovered(hoodsDiscovered) text = self.getHoodText(zoneId) self.titleText = OnscreenText(text, fg=self.titleColor, font=CIGlobals.getMickeyFont(), scale=0.15, pos=(0, -0.65)) self.titleText.hide()
def enterIntermission(self, ts=0): self.intermissionText = DirectLabel( relief=None, text_decal=True, text="", scale=0.7, parent=self.interior.find('**/sign_origin;+s'), text_font=CIGlobals.getMickeyFont(), text_fg=(1, 0.9, 0, 1)) self.movieTrack = Sequence(name=self.uniqueName('intermissionTrack')) for second in range(CinemaGlobals.IntermissionLength + 1): timeRemaining = CinemaGlobals.IntermissionLength - second self.movieTrack.append( Func(self.setIntermissionText, "Next show in:\n%d" % timeRemaining)) self.movieTrack.append(Wait(1.0)) self.movieTrack.setDoneEvent(self.movieTrack.getName()) self.acceptOnce(self.movieTrack.getDoneEvent(), self.fsm.request, ['off']) self.movieTrack.start(ts)
def setTeam(self, team): self.team = team print 'setteam' color = self.mg.getTeamDNAColor(team) if color is not None: print 'changing shit' self.ogHeadColor = self.avatar.headcolor self.ogTorsoColor = self.avatar.torsocolor self.ogLegColor = self.avatar.legcolor self.ogShirtColor = self.avatar.shirtColor self.ogSleeveColor = self.avatar.sleeveColor self.ogShortColor = self.avatar.shortColor self.ogShirt = self.avatar.shirt self.ogSleeve = self.avatar.sleeve self.ogShort = self.avatar.shorts self.avatar.headcolor = color self.avatar.torsocolor = color self.avatar.legcolor = color self.avatar.shirtColor = color self.avatar.sleeveColor = color self.avatar.shortColor = color self.avatar.shirt = self.avatar.shirtDNA2shirt['00'] self.avatar.sleeve = self.avatar.sleeveDNA2sleeve['00'] if self.avatar.gender == 'girl': self.avatar.shorts = self.avatar.shortDNA2short['10'] else: if self.avatar.gender == 'boy': self.avatar.shorts = self.avatar.shortDNA2short['00'] self.avatar.generateDNAStrandWithCurrentStyle() self.dnaWasChanged = True if self.teamText: self.teamText.removeNode() self.teamText = None textNode = TextNode('teamText') textNode.setAlign(TextNode.ACenter) textNode.setFont(CIGlobals.getMickeyFont()) self.teamText = self.avatar.attachNewNode(textNode) self.teamText.setBillboardAxis() self.teamText.setZ(self.avatar.getNameTag().getZ() + 1.0) self.teamText.setScale(5.0) return
def loadWorld(self): self.unloadWorld() self.worldMdl = base.loader.loadModel(self.WORLD_MODEL_PATH) for sectionName in self.BAD_SECTIONS: sectionNode = self.worldMdl.find('**/' + sectionName) if (not sectionNode.isEmpty()): sectionNode.removeNode() self.occluderData = base.loader.loadModel( "phase_9/models/cogHQ/factory_sneak_occluders.egg") for occluderNode in self.occluderData.findAllMatches( '**/+OccluderNode'): base.render.setOccluder(occluderNode) occluderNode.node().setDoubleSided(True) self.worldMdl.flattenMedium() self.alertText = OnscreenText(text='', font=CIGlobals.getMickeyFont(), fg=(1, 0.9, 0.3, 1), pos=(0, 0.8, 0)) self.popupSound = base.loadSfx( 'phase_3/audio/sfx/GUI_balloon_popup.ogg')
def createGui(self): self.deleteGui() uno_gui = loader.loadModel( 'phase_4/models/minigames/mg_uno_call_btn_gui.egg') gui = loader.loadModel('phase_3/models/gui/quit_button.bam') self.drawBtn = DirectButton(text='Draw', relief=None, text_scale=0.055, scale=1, parent=base.a2dBottomLeft, geom=(gui.find('**/QuitBtn_UP'), gui.find('**/QuitBtn_DN'), gui.find('**/QuitBtn_RLVR'), gui.find('**/QuitBtn_UP')), pos=(0.18, 0, 0.1), geom_scale=(0.6, 1.0, 1.0), command=self.d_requestNewCard) self.callBtn = DirectButton( geom=(uno_gui.find('**/mg_uno_call_btn-idle'), uno_gui.find('**/mg_uno_call_btn-down'), uno_gui.find('**/mg_uno_call_btn-rlvr'), uno_gui.find('**/mg_uno_call_btn-disabled')), relief=None, scale=0.3, parent=base.a2dBottomLeft, pos=(0.18, 0, 0.305), command=self.d_callUno) self.callBtn['state'] = DGG.DISABLED self.playByPlay = OnscreenText(text='', font=CIGlobals.getMickeyFont(), scale=0.1, fg=(0, 0.8, 0, 1), pos=(0, 0.85), wordwrap=15.0) self.cardDeck.generate() self.createTimer() gui.removeNode() del gui return
def generateStation(self, game): self.game = game numSlots = self.game2maxPlayers[game] GroupStation.generateStation(self, numSlots) if not base.config.GetBool('show-minigame-dates', False): text = game pos = (0, 0) else: text = game + "\n" + self.game2dateCreated[game] pos = (0, 0.1) title = DirectLabel(text=text, relief=None, text_fg=(0.7, 0.3, 0.5, 1.0), text_decal=True, text_font=CIGlobals.getMickeyFont(), text_pos=pos, parent=self.sign.find('**/signText_locator'), text_scale=0.3, text_wordwrap=7.0) title.setBillboardAxis(2)
def setupClerk(self): self.clerk = Toon(self.cr) self.clerk.setDNAStrand(NPC_DNA['Coach']) self.clerk.setName('Coach') self.clerk.generateToon() self.clerk.reparentTo(self) self.clerk.setupNameTag() self.clerk.animFSM.request('neutral') self.clerk.setH(180) self.clerk.setY(2.2) self.clerk.setZ(1) self.stand = loader.loadModel("phase_4/models/props/bubblestand.egg") self.stand.reparentTo(self) self.stand.setScale(1.1) self.standText = DirectLabel(text="Coach's Battle Shop", text_fg=(0.6, 0, 0, 1), text_decal=True, relief=None, parent=self.stand, pos=(0, -0.875, 5.2), scale=0.45, text_font=CIGlobals.getMickeyFont()) self.snp.setY(-1)
def setupClerk(self): self.clerk = Toon(self.cr) self.clerk.setName('Coach') self.clerk.setDNAStrand(NPC_DNA['Coach']) self.clerk.nametag.setNametagColor( NametagGlobals.NametagColors[NametagGlobals.CCNPC]) self.clerk.nametag.setActive(0) self.clerk.nametag.updateAll() self.clerk.reparentTo(self) self.clerk.animFSM.request('neutral') self.clerk.setH(180) self.clerk.setPos(0, 2.2, 1) self.stand = loader.loadModel('phase_4/models/props/bubblestand.egg') self.stand.reparentTo(self) self.stand.setScale(1.1) self.standText = DirectLabel(text="Coach's Battle Shop", text_fg=(0.6, 0, 0, 1), text_decal=True, relief=None, parent=self.stand, pos=(0, -0.875, 5.2), scale=0.45, text_font=CIGlobals.getMickeyFont()) return
def announceHood(hood): nameLbl = OnscreenText(text='%s\n%s' % (hood, CIGlobals.Playground), scale=0.15, font=CIGlobals.getMickeyFont(), pos=(0, -0.65), fg=(1, 0.3, 0.5, 1.0)) Sequence(Wait(2.5), Func(startFade, nameLbl), Wait(1), Func(nameLbl.destroy)).start()
def setupClerk(self): self.clerk = Toon(self.cr) self.clerk.setName('Coach') self.clerk.setDNAStrand(NPC_DNA['Coach']) self.clerk.reparentTo(self) self.clerk.animFSM.request('neutral') self.clerk.setH(180) self.clerk.setPos(0, 2.2, 1) self.stand = loader.loadModel('phase_4/models/props/bubblestand.egg') self.stand.reparentTo(self) self.stand.setScale(1.1) self.standText = DirectLabel(text="Coach's Battle Shop", text_fg=(0.6, 0, 0, 1), text_decal=True, relief=None, parent=self.stand, pos=(0, -0.875, 5.2), scale=0.45, text_font=CIGlobals.getMickeyFont()) return
def createGui(self): """ Create the GUI that will tell the client how much running power they have. """ self.powerFrame = DirectFrame() self.powerBg = OnscreenImage(image=DGG.getDefaultDialogGeom(), scale=(0.5, 1.0, 0.5), pos=(1.02, 0, 0.7), parent=self.powerFrame, color=CIGlobals.DialogColor) self.powerBar = DirectWaitBar(barColor=(0, 0.7, 0, 1), range=20.0, value=0, parent=self.powerFrame, scale=(0.15, 0, 1.1), pos=(1.02, 0, 0.66)) self.powerBar.setR(-90) self.powerTitle = DirectLabel(text='POWER', text_scale=0.08, pos=(1.02, 0, 0.85), relief=None, parent=self.powerFrame, text_fg=(1, 1, 0, 1), text_font=CIGlobals.getMickeyFont()) self.boostFrame = DirectFrame() self.boostBg = OnscreenImage(image=DGG.getDefaultDialogGeom(), scale=(0.5, 1.0, 0.5), pos=(0.45, 0, 0.7), parent=self.boostFrame, color=CIGlobals.DialogColor) self.boostBar = DirectWaitBar(barColor=self.defaultBoostBarColor, range=10, value=0, parent=self.boostFrame, scale=(0.15, 0, 1.1), pos=(0.45, 0, 0.66)) self.boostBar.setR(-90) self.boostTitle = DirectLabel(text='BOOST', text_scale=0.08, pos=(0.45, 0, 0.85), relief=None, parent=self.boostFrame, text_fg=(1, 1, 0, 1), text_font=CIGlobals.getMickeyFont()) self.boostFullLbl = DirectLabel(text='BOOST READY', text_scale=0.065, pos=(0.45, 0, 0.3), relief=None, parent=self.boostFrame, text_fg=self.fullBoostBarColor, text_shadow=(0.4, 0.4, 0.4, 1.0), text_font=CIGlobals.getToonFont()) self.boostFullLbl.hide() return
def startCountdown(self): """ Start the countdown to the start of the race. """ self.countdownLbl = DirectLabel(text='', text_scale=0.3, text_font=CIGlobals.getMickeyFont(), text_fg=(1, 1, 0, 1), pos=(0, 0, 0.5)) Sequence(Func(self.setCountdownText, '3'), Wait(1.0), Func(self.setCountdownText, '2'), Wait(1.0), Func(self.setCountdownText, '1'), Wait(1.0), Func(self.setCountdownText, 'GO!'), Wait(1.5), Func(self.deleteCountdownLabel)).start()
def generate(self): DistributedObject.announceGenerate(self) self.trolleyStation = self.cr.playGame.hood.loader.geom.find('**/prop_trolley_station_DNARoot') self.trolleyCar = self.trolleyStation.find('**/trolley_car') self.trolleyKey = self.trolleyStation.find('**/key') exitFog = Fog('TrolleyExitFog') exitFog.setColor(0.0, 0.0, 0.0) exitFog.setLinearOnsetPoint(30.0, 14.0, 0.0) exitFog.setLinearOpaquePoint(37.0, 14.0, 0.0) exitFog.setLinearFallback(70.0, 999.0, 1000.0) self.trolleyExitFog = self.trolleyStation.attachNewNode(exitFog) self.trolleyExitFogNode = exitFog enterFog = Fog('TrolleyEnterFog') enterFog.setColor(0.0, 0.0, 0.0) enterFog.setLinearOnsetPoint(0.0, 14.0, 0.0) enterFog.setLinearOpaquePoint(-7.0, 14.0, 0.0) enterFog.setLinearFallback(70.0, 999.0, 1000.0) self.trolleyEnterFog = self.trolleyStation.attachNewNode(enterFog) self.trolleyEnterFogNode = enterFog self.trolleyCar.setFogOff() tn = TextNode('trolleycountdowntext') tn.setFont(CIGlobals.getMickeyFont()) tn.setTextColor(1, 0, 0, 1) tn.setAlign(TextNode.ACenter) self.keys = self.trolleyCar.findAllMatches('**/key') self.numKeys = self.keys.getNumPaths() self.keyInit = [] self.keyRef = [] for i in range(self.numKeys): key = self.keys[i] key.setTwoSided(1) ref = self.trolleyCar.attachNewNode('key' + `i` + 'ref') ref.iPosHpr(key) self.keyRef.append(ref) self.keyInit.append(key.getTransform()) self.frontWheels = self.trolleyCar.findAllMatches('**/front_wheels') self.numFrontWheels = self.frontWheels.getNumPaths() self.frontWheelInit = [] self.frontWheelRef = [] for i in range(self.numFrontWheels): wheel = self.frontWheels[i] ref = self.trolleyCar.attachNewNode('frontWheel' + `i` + 'ref') ref.iPosHpr(wheel) self.frontWheelRef.append(ref) self.frontWheelInit.append(wheel.getTransform()) self.backWheels = self.trolleyCar.findAllMatches('**/back_wheels') self.numBackWheels = self.backWheels.getNumPaths() self.backWheelInit = [] self.backWheelRef = [] for i in range(self.numBackWheels): wheel = self.backWheels[i] ref = self.trolleyCar.attachNewNode('backWheel' + `i` + 'ref') ref.iPosHpr(wheel) self.backWheelRef.append(ref) self.backWheelInit.append(wheel.getTransform()) trolleyAnimationReset = Func(self.resetAnimation) trolleyEnterStartPos = Point3(-20, 14, -1) trolleyEnterEndPos = Point3(15, 14, -1) trolleyEnterPos = Sequence(name='TrolleyEnterPos') trolleyEnterPos.append(Func(self.trolleyCar.setFog, self.trolleyEnterFogNode)) trolleyEnterPos.append(self.trolleyCar.posInterval(TROLLEY_ENTER_TIME, trolleyEnterEndPos, startPos=trolleyEnterStartPos, blendType='easeOut')) trolleyEnterPos.append(Func(self.trolleyCar.setFogOff)) trolleyEnterTrack = Sequence(trolleyAnimationReset, trolleyEnterPos, name='trolleyEnter') keyAngle = round(TROLLEY_ENTER_TIME) * 360 dist = Vec3(trolleyEnterEndPos - trolleyEnterStartPos).length() wheelAngle = dist / (2.0 * math.pi * 0.95) * 360 trolleyEnterAnimateInterval = LerpFunctionInterval(self.animateTrolley, duration=TROLLEY_ENTER_TIME, blendType='easeOut', extraArgs=[keyAngle, wheelAngle], name='TrolleyAnimate') trolleyEnterSoundTrack = SoundInterval(self.trolleyAwaySfx, node=self.trolleyCar) self.trolleyEnterTrack = Parallel(trolleyEnterTrack, trolleyEnterAnimateInterval, trolleyEnterSoundTrack) trolleyExitStartPos = Point3(15, 14, -1) trolleyExitEndPos = Point3(50, 14, -1) trolleyExitPos = Sequence(name='TrolleyExitPos') trolleyExitPos.append(Func(self.trolleyCar.setFog, self.trolleyExitFogNode)) trolleyExitPos.append(self.trolleyCar.posInterval(TROLLEY_EXIT_TIME, trolleyExitEndPos, startPos=trolleyExitStartPos, blendType='easeIn')) trolleyExitPos.append(Func(self.trolleyCar.setFogOff)) trolleyExitStartPos = Point3(15, 14, -1) trolleyExitEndPos = Point3(50, 14, -1) trolleyExitBellInterval = SoundInterval(self.trolleyBellSfx, node=self.trolleyCar) trolleyExitAwayInterval = SoundInterval(self.trolleyAwaySfx, node=self.trolleyCar) keyAngle = round(TROLLEY_EXIT_TIME) * 360 dist = Vec3(trolleyExitEndPos - trolleyExitStartPos).length() wheelAngle = dist / (2.0 * math.pi * 0.95) * 360 trolleyExitAnimateInterval = LerpFunctionInterval(self.animateTrolley, duration=TROLLEY_EXIT_TIME, blendType='easeIn', extraArgs=[keyAngle, wheelAngle], name='TrolleyAnimate') self.trolleyExitTrack = Parallel(trolleyExitPos, trolleyExitBellInterval, trolleyExitAwayInterval, trolleyExitAnimateInterval, name=self.uniqueName('trolleyExit')) self.countdownText = self.trolleyStation.attachNewNode(tn) self.countdownText.setScale(3.0) self.countdownText.setPos(14.58, 10.77, 11.17) self.acceptOnce('entertrolley_sphere', self.__handleTrolleyTrigger)
def enterAnnounceGameOver(self): whistleSfx = base.loadSfx('phase_4/audio/sfx/AA_sound_whistle.mp3') whistleSfx.play() del whistleSfx self.gameOverLbl = DirectLabel(text="TIME'S\nUP!", relief=None, scale=0.35, text_font=CIGlobals.getMickeyFont(), text_fg=(1, 0, 0, 1)) self.track = Sequence(Wait(3.0), Func(self.fsm.request, 'finalScores')) self.track.start() return
def getAlertText(fg=(1, 0.9, 0.3, 1), scale=0.08): return OnscreenText(text='', font=CIGlobals.getMickeyFont(), fg=fg, pos=(0, 0.8, 0), scale=scale)
def generateStation(self, game): self.game = game numSlots = self.game2maxPlayers[game] GroupStation.generateStation(self, numSlots) title = DirectLabel(text=game + '\n' + self.game2dateCreated[game], relief=None, text_fg=(0.7, 0.3, 0.5, 1.0), text_decal=True, text_font=CIGlobals.getMickeyFont(), text_pos=(0, 0.1), parent=self.sign.find('**/signText_locator'), text_scale=0.3, text_wordwrap=7.0) title.setBillboardAxis(2) return
def setupHealthLabel(self): self.healthLabel = DirectLabel(text='', text_fg=CIGlobals.PositiveTextColor, scale=0.75, relief=None, text_decal=True, text_font=CIGlobals.getMickeyFont(), text_align=TextNode.ACenter) self.healthLabel.reparentTo(self) self.healthLabel.setBillboardPointEye() self.healthLabel.stash() return
def enterVoteGameMode(self): render.hide() font = CIGlobals.getMickeyFont() imp = CIGlobals.getToonFont() box = DGG.getDefaultDialogGeom() geom = CIGlobals.getDefaultBtnGeom() self.container = DirectFrame() self.bg = OnscreenImage(image=box, color=(1, 1, 0.75, 1), scale=(2.4, 1.4, 1.4), parent=self.container) self.title = OnscreenText(text="Vote on Game Mode", pos=(0, 0.5, 0), font=font, scale=(0.12), parent=self.container, fg=(1, 0.9, 0.3, 1)) self.btnFrame = DirectFrame(parent=self.container, pos=(0.14, 0, 0)) self.casualFrame = DirectFrame(parent=self.btnFrame, pos=(-0.80, 0, 0)) self.ctfFrame = DirectFrame(parent=self.btnFrame, pos=(-0.125, 0, 0)) self.kothFrame = DirectFrame(parent=self.btnFrame, pos=(0.55, 0, 0)) self.casual = DirectButton(parent=self.casualFrame, relief=None, pressEffect=0, image=('phase_4/maps/casual_neutral.png', 'phase_4/maps/casual_hover.png', 'phase_4/maps/casual_hover.png'), image_scale=(0.9, 1, 1), scale=0.4, command=self.__pickedGameMode, extraArgs=[GGG.GameModes.CASUAL]) self.casual_votesLbl = OnscreenText(parent=self.casualFrame, text="0", pos=(0, -0.46, 0), font=imp) self.ctf = DirectButton(parent=self.ctfFrame, relief=None, pressEffect=0, image=('phase_4/maps/ctf_neutral.png', 'phase_4/maps/ctf_hover.png', 'phase_4/maps/ctf_hover.png'), image_scale=(0.9, 1, 1), scale=0.4, command=self.__pickedGameMode, extraArgs=[GGG.GameModes.CTF]) self.ctf_votesLbl = OnscreenText(parent=self.ctfFrame, text="0", pos=(0, -0.46, 0), font=imp) self.koth = DirectButton(parent=self.kothFrame, relief=None, pressEffect=0, image=('phase_4/maps/koth_neutral.png', 'phase_4/maps/koth_hover.png', 'phase_4/maps/koth_hover.png'), image_scale=(0.9, 1, 1), scale=0.4, command=self.__pickedGameMode, extraArgs=[GGG.GameModes.KOTH]) self.koth_votesLbl = OnscreenText(parent=self.kothFrame, text="0", pos=(0, -0.46, 0), font=imp) self.outcomeLbl = OnscreenText(parent=self.container, text="", pos=(0, -0.6, 0), font=imp, scale=0.1)
toData = 0.1, fromData = 0.12, blendType = 'easeInOut' ) ) sfx = base.loadSfx('phase_3/audio/sfx/GUI_balloon_popup.mp3') music = base.loadMusic('phase_7/audio/bgm/encntr_suit_winning_indoor.ogg') def spot(): pulse.start() base.playSfx(sfx) base.playMusic(music) base.accept('s', spot) """ font = CIGlobals.getMickeyFont() box = loader.loadModel('phase_3/models/gui/dialog_box_gui.bam') imp = CIGlobals.getToonFont() geom = CIGlobals.getDefaultBtnGeom() container = DirectFrame() bg = OnscreenImage(image=box, color=(1, 1, 0.75, 1), scale=(1.9, 1.4, 1.4), parent=container) title = OnscreenText(text="Vote on Game Mode", pos=(0, 0.5, 0), font=font, scale=(0.12), parent=container, fg=(1, 0.9, 0.3, 1)) btnFrame = DirectFrame(parent=container, pos=(0.14, 0, 0))
def getGameText(): return OnscreenText(text='', scale=0.15, fg=(1.0, 0.5, 0.0, 1.0), font=CIGlobals.getMickeyFont())
def generateStation(self): GroupStation.generateStation(self, self.Slots) circleTexture = loader.loadTexture('phase_13/maps/stand_here_cog.png') for circle in self.circles: circle.setTexture(circleTexture, 1) title = DirectLabel(text=self.Title, relief=None, text_fg=(0.5, 0.5, 0.5, 1.0), text_decal=True, text_font=CIGlobals.getMickeyFont(), text_pos=(0, 0), parent=self.sign.find('**/signText_locator'), text_scale=0.3, text_wordwrap=7.0) title.setBillboardAxis(2) return
def announceHood(hood): nameLbl = OnscreenText(text='%s\n%s' % (hood, CIGlobals.Playground), scale=0.15, font=CIGlobals.getMickeyFont(), pos=(0, -0.65), fg=(1, 0.3, 0.5, 1.0)) Sequence(Wait(2.5), Func(startFade, nameLbl), Wait(1), Func(nameLbl.destroy)).start()
def createTimer(self): self.time = 10 self.timer = DirectLabel(text=str(self.time), relief=None, text_font=CIGlobals.getMickeyFont(), text_scale=1.5, pos=(0, 0, 5.1), text_fg=(1, 0, 0, 1), text_decal=True, parent=self.sign) self.timer.setBillboardAxis(2) return
def getGameText(fg=(1.0, 0.5, 0.0, 1.0)): return OnscreenText(text="", scale=0.15, fg=fg, font=CIGlobals.getMickeyFont())
def load(self): self.unload() timer = loader.loadModel('phase_3.5/models/gui/clock_gui.bam') self.timer = OnscreenImage(image=timer.find('**/alarm_clock'), pos=(-0.15, 0, -0.15), scale=0.4, parent=base.a2dTopRight) self.timeLbl = DirectLabel(text='0', parent=self.timer, text_scale=0.3, text_pos=(0, -0.13), text_font=CIGlobals.getMickeyFont(), text_fg=(1, 0, 0, 1), relief=None) timer.removeNode() self.timer.setBin('gui-popup', 60) del timer return
def enterIntermission(self, ts = 0): self.intermissionText = DirectLabel(relief=None, text_decal=True, text='', scale=0.7, parent=self.interior.find('**/sign_origin;+s'), text_font=CIGlobals.getMickeyFont(), text_fg=(1, 0.9, 0, 1)) self.movieTrack = Sequence(name=self.uniqueName('intermissionTrack')) for second in range(CinemaGlobals.IntermissionLength + 1): timeRemaining = CinemaGlobals.IntermissionLength - second self.movieTrack.append(Func(self.setIntermissionText, 'Next show in:\n%d' % timeRemaining)) self.movieTrack.append(Wait(1.0)) self.movieTrack.setDoneEvent(self.movieTrack.getName()) self.acceptOnce(self.movieTrack.getDoneEvent(), self.fsm.request, ['off']) self.movieTrack.start(ts) return