def createHighScoreFrame(self): highScoreFrame=DirectScrolledFrame(frameColor=(0.5,0.5,1,0), canvasSize = (-0.3,0.2,-2,1), frameSize = (-0.3,1.1,-0.8,0.3),pos=(0.2,0,0.2)) highScoreFrame['verticalScroll_thumb_frameColor']=(1,1,1,0.3) highScoreFrame['verticalScroll_incButton_frameColor']=(1,1,1,0) highScoreFrame['verticalScroll_decButton_frameColor']=(1,1,1,0) highScoreFrame['verticalScroll_frameColor']=(0.5,0.5,1,0) highScoreTitle1=DirectLabel(frameSize=(-0.6,0.6,-0.2,.2),pos=(0,0,0.9), text='Music',frameColor=(0,0,0,0), text_align=TextNode.ALeft,text_scale=0.08,text_fg=(1,1,1,1)) highScoreTitle2=DirectLabel(frameSize=(-0.6,0.6,-0.6,.6),pos=(0.4,0,0.9), text='Highest Score',text_fg=(1,1,1,1),frameColor=(0,0,0,0), text_align=TextNode.ALeft,text_scale=0.08) highScoreTitle1.reparentTo(highScoreFrame.getCanvas()) highScoreTitle2.reparentTo(highScoreFrame.getCanvas()) for i in range(len(self.musicNames)): scoreLabel=DirectButton(frameSize=(-0.3,0.3,-0.2,.2),pos=(0,0,0.7-i*0.2), text='%s: %d'%(self.musicNames[i],self.highestScores[self.musicNames[i]]), text_align=TextNode.ALeft,text_scale=0.08,frameColor=(0,0,0,0), text_fg=(1,1,1,1)) scoreLabel.reparentTo(highScoreFrame.getCanvas()) return highScoreFrame
def _construir_hud(self): # boton crear mesh btn_crear_mesh = DirectButton(text="crear mesh", scale=0.075, pos=Vec3(0.95, 0.9), command=self._crear_mesh) btn_crear_mesh.reparentTo(self.aspect2d) # check smooth chk_smooth = DirectCheckButton(text="smooth", scale=0.075, pos=Vec3(0.95, 0.8), command=self._establecer_smooth) chk_smooth.reparentTo(self.aspect2d) # boton eliminar mesh btn_eliminar_mesh = DirectButton(text="eliminar mesh", scale=0.075, pos=Vec3(0.95, 0.7), command=self._eliminar_mesh) btn_eliminar_mesh.reparentTo(self.aspect2d)
def configureMainMenu(self): self.mainMenuBackground = OnscreenImage(parent=render2dp, image='../textures/BGM_ORG_text.jpg') self.songList = DirectScrolledFrame(canvasSize = (-0.3,0.2,-1,1), frameSize = (-0.45,0.55,-0.2,0.2)) self.songList['frameColor']=(0.5,0.5,1,0) self.songList.setPos(0, 0, -0.3) self.songList['verticalScroll_thumb_frameColor']=(1,1,1,0.3) self.songList['verticalScroll_incButton_frameColor']=(1,1,1,0) self.songList['verticalScroll_decButton_frameColor']=(1,1,1,0) self.songList['verticalScroll_frameColor']=(0.5,0.5,1,0) for i in range(len(self.musicNames)): defaultSong=DirectButton(pos=(0, 0, 0.9-i*0.15), text=( self.musicNames[i],'clicked', self.musicNames[i],self.musicNames[i]), scale=.1, pad=(.2, .2), frameColor=(0.058,0.294,0.545,0.7), text_pos=(1.3,-0.3),text_scale=(0.8,0.8), text_fg=(0.88,0.98,1,1), rolloverSound=None, clickSound=None, command=self.preInitDance,extraArgs=(i,)) defaultSong['frameSize']=(-4,6,-0.7,0.7) defaultSong.reparentTo(self.songList.getCanvas()) importButton=DirectButton(pos=(0,0,-0.6),text='+ IMPORT NEW MUSIC ', scale=0.1,pad=(.2,.2),frameColor=(0.058,.294,0.545,0.7), text_fg=(0.88,0.98,1,1),frameSize=(-6.5,6.5,-0.8,0.8), text_scale=(0.85,0.85), text_pos=(0.5,-0.4),rolloverSound=None, clickSound=None, command= lambda: self.switchPanel('mainMenu','import')) backToOptionButton=DirectButton(text='<<BACK TO MENU', pos=(-1,0,0.8),scale=.1,pad=(.2, .2), frameColor=(1,1,1,0), text_pos=(1.3,-0.3),text_scale=(0.8,0.8), text_fg=(0.88,0.98,1,1), rolloverSound=None, clickSound=None, command=lambda: self.switchPanel('mainMenu','options')) self.setPanel('mainMenu', Panel(self.mainMenuBackground, {'songs': self.songList, 'import': importButton, 'back': backToOptionButton})) self.disableMouse()
def load(args): """Sets up the GUI for the main menu. Arguments: This takes no arguments. """ global backFrame global menuFrame global pauseText global backButton font_digital = loader.loadFont('digital.egg') backFrame = DirectFrame() backFrame['frameColor'] = (0, 0, 0, .5) backFrame['frameSize'] = (2, -2, 2, -2) backFrame.setPos(0, 0, 0) menuFrame = DirectFrame() menuFrame.reparentTo(backFrame) menuFrame['frameColor'] = (1, 1, 1, .5) menuFrame['frameSize'] = (.5, -.5, .5, -.5) menuFrame.setPos(0, 0, 0) pauseText = OnscreenText() pauseText['text'] = ('PAUSED') pauseText['scale'] = (.1) pauseText['font'] = (font_digital) pauseText['fg'] = (1, 1, 1, 1) pauseText.setPos(0, .9) backButton = DirectButton() backButton.reparentTo(menuFrame) backButton['text'] = ('Back') backButton['text_scale'] = (.1) backButton['text_pos'] = (0, -0.03) backButton['frameVisibleScale'] = (2, 0.5, 0) backButton['frameColor'] = (1, 1, 1, 0) backButton['command'] = (messenger.send) backButton['extraArgs'] = ("switch_gui", [gui.menu.pause_options, gui.menu.pause]) backButton.setPos(0, 0, 0)
def configureStartMenu(self): optionBackground = OnscreenImage(parent=render2dp, image= '../textures/MENU_ORG_text.jpg') settingButton = DirectButton(pos=(0.1, 0, 0), text=" Setting", scale=.08, pad=(.2, .2), frameColor=(0.02,0.3,0.5,0.4), text_fg=(0,0.4,0.7,1), text_align=TextNode.ALeft,frameSize=(-4.3,4,-0.6,1), text_pos=(-1,0,0), rolloverSound=None, clickSound=None, command=lambda:self.switchPanel('options','setting')) settingButton.resetFrameSize() playButton = DirectButton(pos=(0.1, 0, .15), text="Start", scale=.08, pad=(.2, .2),frameColor=(0.02,0.3,0.5,0.4), text_fg=(0.1,0.4,0.7,1), text_align=TextNode.ALeft, frameSize=(-3,4,-0.6,1), rolloverSound=None, clickSound=None, command=lambda: self.switchPanel('options','mainMenu')) scoreBoardButton= DirectButton(pos=(0, 0, -.15), text="HighScore", scale=.08, pad=(.2, .2),frameColor=(0.02,0.3,0.5,0.4), text_pos=(-1,0,0), text_fg=(0.1,0.4,0.7,1),text_align=TextNode.ALeft,frameSize=(-5,5.3,-0.6,1), rolloverSound=None, clickSound=None, command=lambda: self.switchPanel('options','scoreBoard')) optionsList=DirectFrame(frameSize=(-0.3,0.3,-0.2,0.2),pos=(0.8,0,-0.5),frameColor=(0,0,0,0)) settingButton.reparentTo(optionsList) playButton.reparentTo(optionsList) scoreBoardButton.reparentTo(optionsList) self.setPanel('options', Panel(optionBackground, {'optionList': optionsList}))
def updateSongs(self): name = self.musicNames[-1] path=self.musicPathes[name] idx = len(self.musicNames)-1 song = DirectButton(text=name, pos=(0, 0,0.9-0.15*idx), scale=.1, pad=(.2, .2), frameColor=(0.058,.294,0.545,0.7), text_pos=(1.3,-0.3),text_scale=(0.8,0.8), text_fg=(0.88,0.98,1,1), frameSize=(-4,6,-0.7,0.7), rolloverSound=None, clickSound=None, command=self.preInitDance,extraArgs= (-1,)) self.highestScores[name]=0 song.reparentTo(self.songList.getCanvas()) scoreLabel=DirectButton(frameSize=(-0.3,0.3,-0.2,.2),pos=(0,0,0-idx*0.2), text='%s: %d'%(name,self.highestScores[name]), text_align=TextNode.ALeft,text_scale=0.08,frameColor=(0,0,0,0), text_fg=(1,1,1,1)) scoreLabel.reparentTo(self.getPanel('scoreBoard').getItem('frame').getCanvas())
def load(args): """Sets up the GUI for the in game pause menu. Arguments: args[0] -- The function for the 'resume' button. args[1] -- The function for the 'settings' button. args[2] -- The function for the 'exit' button. """ # GUI should do what they are told, they should get data sent to them, not request it. global pauseText global backFrame global menuFrame global resumeButton font_digital = loader.loadFont("digital.egg") backFrame = DirectFrame() backFrame["frameSize"] = (2, -2, 2, -2) backFrame.setPos(0, 0, 0) backFrame["frameColor"] = (0, 0, 0, 0.5) menuFrame = DirectFrame() menuFrame.reparentTo(backFrame) menuFrame["frameColor"] = (1, 1, 1, 0.5) menuFrame["frameSize"] = (0.5, -0.5, 0.5, -0.5) menuFrame.setPos(0, 0, 0) buttonClickSound = loader.loadSfx("sound/buttonClick.wav") buttonRollSound = loader.loadSfx("sound/buttonRoll.wav") resumeButton = DirectButton() resumeButton.reparentTo(menuFrame) resumeButton["text"] = "Resume" resumeButton["text_scale"] = 0.1 resumeButton["text_pos"] = (0, -0.03) resumeButton["frameVisibleScale"] = (2, 0.5, 0) resumeButton["frameColor"] = (1, 1, 1, 0) resumeButton["command"] = resume resumeButton["rolloverSound"] = buttonRollSound resumeButton["clickSound"] = buttonClickSound resumeButton.setPos(0, 0, 0.4) settingsButton = DirectButton() settingsButton.reparentTo(menuFrame) settingsButton["text"] = "Settings" settingsButton["text_scale"] = 0.1 settingsButton["text_pos"] = (0, -0.03) settingsButton["frameVisibleScale"] = (2, 0.5, 0) settingsButton["frameColor"] = (1, 1, 1, 0) settingsButton["rolloverSound"] = buttonRollSound settingsButton["clickSound"] = buttonClickSound settingsButton["command"] = messenger.send # Command to run settingsButton["extraArgs"] = ("switch_gui", [gui.menu.pause, gui.menu.pause_options]) # Args to send settingsButton.setPos(0, 0, 0.2) exitButton = DirectButton() exitButton.reparentTo(menuFrame) exitButton["text"] = "Exit" exitButton["text_scale"] = 0.1 exitButton["text_pos"] = (0, -0.03) exitButton["frameVisibleScale"] = (2, 0.5, 0) exitButton["frameColor"] = (1, 1, 1, 0) exitButton["rolloverSound"] = buttonRollSound exitButton["clickSound"] = buttonClickSound exitButton["command"] = exit exitButton.setPos(0, 0, 0) pauseText = OnscreenText() pauseText["text"] = "PAUSED" pauseText["scale"] = 0.1 pauseText["font"] = font_digital pauseText["fg"] = (1, 1, 1, 1) pauseText.setPos(0, 0.9)
class NewsPageButtonManager(FSM.FSM): notify = DirectNotifyGlobal.directNotify.newCategory( 'NewsPageButtonManager') def __init__(self): FSM.FSM.__init__(self, 'NewsPageButtonManager') self.buttonsLoaded = False self.clearGoingToNewsInfo() self.__blinkIval = None self.load() return def load(self): btnGui = loader.loadModel( 'phase_3.5/models/gui/tt_m_gui_ign_newsBtnGui') bookModel = loader.loadModel( 'phase_3.5/models/gui/tt_m_gui_ign_shtickerBook') self.openNewNewsUp = btnGui.find('**/tt_t_gui_ign_new') self.openNewNewsUpBlink = btnGui.find('**/tt_t_gui_ign_newBlink') self.openNewNewsHover = btnGui.find('**/tt_t_gui_ign_newHover') self.openOldNewsUp = btnGui.find('**/tt_t_gui_ign_oldNews') self.openOldNewsHover = btnGui.find('**/tt_t_gui_ign_oldHover') self.closeNewsUp = bookModel.find('**/tt_t_gui_sbk_newsPage1') self.closeNewsHover = bookModel.find('**/tt_t_gui_sbk_newsPage2') btnGui.removeNode() bookModel.removeNode() oldScale = 0.5 newScale = 0.9 shtickerBookScale = 0.305 newPos = VBase3(-0.436, 1.0, -0.14) shtickerBookPos = VBase3(-0.158, 0, 0.17) textScale = 0.06 self.newIssueButton = DirectButton( relief=None, sortOrder=DGG.BACKGROUND_SORT_INDEX - 1, image=(self.openNewNewsUp, self.openNewNewsHover, self.openNewNewsHover), text=('', TTLocalizer.EventsPageNewsTabName, TTLocalizer.EventsPageNewsTabName), text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 1), text_scale=textScale, text_font=ToontownGlobals.getInterfaceFont(), pos=newPos, scale=newScale, command=self.__handleGotoNewsButton) self.newIssueButton.reparentTo(base.a2dTopRight, DGG.BACKGROUND_SORT_INDEX - 1) self.gotoPrevPageButton = DirectButton( relief=None, image=(self.closeNewsUp, self.closeNewsHover, self.closeNewsHover), text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 1), text_scale=textScale, text_font=ToontownGlobals.getInterfaceFont(), parent=base.a2dBottomRight, pos=shtickerBookPos, scale=shtickerBookScale, command=self.__handleGotoPrevPageButton) self.goto3dWorldButton = DirectButton( relief=None, image=(self.closeNewsUp, self.closeNewsHover, self.closeNewsHover), text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 1), text_scale=textScale, text_font=ToontownGlobals.getInterfaceFont(), parent=base.a2dBottomRight, pos=shtickerBookPos, scale=shtickerBookScale, command=self.__handleGoto3dWorldButton) self.hideNewIssueButton() self.gotoPrevPageButton.hide() self.goto3dWorldButton.hide() self.accept('newIssueOut', self.handleNewIssueOut) bounce1Pos = VBase3(newPos.getX(), newPos.getY(), newPos.getZ() + 0.022) bounce2Pos = VBase3(newPos.getX(), newPos.getY(), newPos.getZ() + 0.015) bounceIval = Sequence( LerpPosInterval(self.newIssueButton, 0.1, bounce1Pos, blendType='easeOut'), LerpPosInterval(self.newIssueButton, 0.1, newPos, blendType='easeIn'), LerpPosInterval(self.newIssueButton, 0.07, bounce2Pos, blendType='easeOut'), LerpPosInterval(self.newIssueButton, 0.07, newPos, blendType='easeIn')) self.__blinkIval = Sequence(Func(self.__showOpenEyes), Wait(2), bounceIval, Wait(0.5), Func(self.__showClosedEyes), Wait(0.1), Func(self.__showOpenEyes), Wait(0.1), Func(self.__showClosedEyes), Wait(0.1)) self.__blinkIval.loop() self.__blinkIval.pause() self.buttonsLoaded = True return def __showOpenEyes(self): self.newIssueButton['image'] = (self.openNewNewsUp, self.openNewNewsHover, self.openNewNewsHover) def __showClosedEyes(self): self.newIssueButton['image'] = (self.openNewNewsUpBlink, self.openNewNewsHover, self.openNewNewsHover) def clearGoingToNewsInfo(self): self.goingToNewsPageFrom3dWorld = False self.setGoingToNewsPageFromStickerBook(False) def __handleGotoNewsButton(self): currentState = base.localAvatar.animFSM.getCurrentState().getName() if currentState == 'jumpAirborne': return from toontown.toon import LocalToon if not LocalToon.WantNewsPage: return if base.cr and base.cr.playGame and base.cr.playGame.getPlace( ) and base.cr.playGame.getPlace().fsm: fsm = base.cr.playGame.getPlace().fsm curState = fsm.getCurrentState().getName() if curState == 'walk': if hasattr(localAvatar, 'newsPage'): base.cr.centralLogger.writeClientEvent( 'news gotoNewsButton clicked') localAvatar.book.setPage(localAvatar.newsPage) fsm.request('stickerBook') self.goingToNewsPageFrom3dWorld = True elif curState == 'stickerBook': if hasattr(localAvatar, 'newsPage'): base.cr.centralLogger.writeClientEvent( 'news gotoNewsButton clicked') fsm.request('stickerBook') if hasattr(localAvatar, 'newsPage') and localAvatar.newsPage: localAvatar.book.goToNewsPage(localAvatar.newsPage) def __handleGotoPrevPageButton(self): self.clearGoingToNewsInfo() localAvatar.book.setPageBeforeNews() self.showAppropriateButton() self.ignoreEscapeKeyPress() def __handleGoto3dWorldButton(self): localAvatar.book.closeBook() def hideNewIssueButton(self): if hasattr(self, 'newIssueButton') and self.newIssueButton: self.newIssueButton.hide() localAvatar.clarabelleNewsPageCollision(False) def __showNewIssueButton(self): self.newIssueButton.show() localAvatar.clarabelleNewsPageCollision(True) def hideAllButtons(self): if not self.buttonsLoaded: return self.gotoPrevPageButton.hide() self.goto3dWorldButton.hide() self.hideNewIssueButton() self.__blinkIval.pause() def isNewIssueButtonShown(self): if not config.GetBool('want-news-tab', 1): return False if localAvatar.getLastTimeReadNews( ) < base.cr.inGameNewsMgr.getLatestIssue(): return True return False def enterHidden(self): self.hideAllButtons() def exitHidden(self): pass def enterNormalWalk(self): if not self.buttonsLoaded: return if localAvatar.getLastTimeReadNews( ) < base.cr.inGameNewsMgr.getLatestIssue(): self.__showNewIssueButton() self.__blinkIval.resume() else: self.hideNewIssueButton() self.gotoPrevPageButton.hide() self.goto3dWorldButton.hide() def exitNormalWalk(self): if not self.buttonsLoaded: return self.hideAllButtons() def enterGotoWorld(self): if not self.buttonsLoaded: return self.hideAllButtons() self.goto3dWorldButton.show() def exitGotoWorld(self): if not self.buttonsLoaded: return self.hideAllButtons() localAvatar.book.setPageBeforeNews(enterPage=False) self.clearGoingToNewsInfo() def enterPrevPage(self): if not self.buttonsLoaded: return self.hideAllButtons() self.gotoPrevPageButton.show() def exitPrevPage(self): if not self.buttonsLoaded: return self.hideAllButtons() def showAppropriateButton(self): self.notify.debugStateCall(self) from toontown.toon import LocalToon if not LocalToon.WantNewsPage: return if not self.buttonsLoaded: return if base.cr and base.cr.playGame and base.cr.playGame.getPlace( ) and hasattr(base.cr.playGame.getPlace(), 'fsm') and base.cr.playGame.getPlace().fsm: fsm = base.cr.playGame.getPlace().fsm curState = fsm.getCurrentState().getName() book = localAvatar.book if curState == 'walk': if localAvatar.tutorialAck and not localAvatar.isDisguised and not isinstance( base.cr.playGame.getPlace(), CogHQBossBattle.CogHQBossBattle): self.request('NormalWalk') else: self.request('Hidden') elif curState == 'stickerBook': if self.goingToNewsPageFrom3dWorld: if localAvatar.tutorialAck: self.request('GotoWorld') else: self.request('Hidden') elif self.goingToNewsPageFromStickerBook or hasattr( localAvatar, 'newsPage') and localAvatar.book.isOnPage( localAvatar.newsPage): if localAvatar.tutorialAck: self.request('PrevPage') else: self.request('Hidden') elif localAvatar.tutorialAck: self.request('NormalWalk') else: self.request('Hidden') def setGoingToNewsPageFromStickerBook(self, newVal): self.goingToNewsPageFromStickerBook = newVal def enterOff(self): self.ignoreAll() if not self.buttonsLoaded: return if self.__blinkIval: self.__blinkIval.finish() self.__blinkIval = None self.newIssueButton.destroy() self.gotoPrevPageButton.destroy() self.goto3dWorldButton.destroy() del self.openNewNewsUp del self.openNewNewsUpBlink del self.openNewNewsHover del self.openOldNewsUp del self.openOldNewsHover del self.closeNewsUp del self.closeNewsHover return def exitOff(self): self.notify.warning( 'Should not get here. NewsPageButtonManager.exitOff') def simulateEscapeKeyPress(self): if self.goingToNewsPageFrom3dWorld: self.__handleGoto3dWorldButton() if self.goingToNewsPageFromStickerBook: self.__handleGotoPrevPageButton() def handleNewIssueOut(self): if localAvatar.isReadingNews(): pass else: self.showAppropriateButton() def acceptEscapeKeyPress(self): self.accept(ToontownGlobals.StickerBookHotkey, self.simulateEscapeKeyPress) self.accept(ToontownGlobals.OptionsPageHotkey, self.simulateEscapeKeyPress) def ignoreEscapeKeyPress(self): self.ignore(ToontownGlobals.StickerBookHotkey) self.ignore(ToontownGlobals.OptionsPageHotkey)
def __init__(self, base, handler): """ Set up trigger, get movement directions and create event handling. """ super().__init__() # Save handler instance to update debug mode self.handler = handler # Trigger to tell where the camera is supposed to go self.forward_trig = 0 self.right_trig = 0 self.up_trig = 0 self.heading_trig = 0 self.pitch_trig = 0 # Store the movement needed to go in each direction (updated in task) self.forward = 0 self.right = 0 self.up = 0 # Event handling for key down events self.accept('w', self.set_forward_trig, [1]) self.accept('s', self.set_forward_trig, [-1]) self.accept('a', self.set_right_trig, [-1]) self.accept('d', self.set_right_trig, [1]) self.accept('shift', self.set_up_trig, [1]) self.accept('control', self.set_up_trig, [-1]) self.accept('q', self.set_heading_trig, [1]) self.accept('e', self.set_heading_trig, [-1]) self.accept('r', self.set_pitch_trig, [1]) self.accept('f', self.set_pitch_trig, [-1]) self.accept('f1', self.debug) # Event handling for key up events self.accept('w-up', self.set_forward_trig, [0]) self.accept('s-up', self.set_forward_trig, [0]) self.accept('a-up', self.set_right_trig, [0]) self.accept('d-up', self.set_right_trig, [0]) self.accept('shift-up', self.set_up_trig, [0]) self.accept('control-up', self.set_up_trig, [0]) self.accept('q-up', self.set_heading_trig, [0]) self.accept('e-up', self.set_heading_trig, [0]) self.accept('r-up', self.set_pitch_trig, [0]) self.accept('f-up', self.set_pitch_trig, [0]) # Start task to move camera in desired direction base.taskMgr.add(self.cam_move_task, "CamMoveTask", extraArgs=[base], appendTask=True) # Create button to reset camera position and orientation frame = DirectFrame(frameColor=(.1, .1, .1, .7), frameSize=(-.22, .22, -.05, .08), pos=(-1.1, 0, -0.94)) button = DirectButton(text="Reset Camera", frameSize=(-4, 4, -.5, 1), scale=.05, command=reset_camera, extraArgs=[base]) button.reparentTo(frame)