def lose(self, wait=5.0, duration=2.0): if self.lost: return def adjustMusicVol(vol): self.musicManager.setVolume(vol) def adjustSfxVol(vol): self.sfxManagerList[0].setVolume(vol) from direct.gui.DirectGui import OnscreenText, DGG from direct.interval.IntervalGlobal import Parallel, Sequence, Wait, LerpFunc, Func fadeIval = base.transitions.getFadeOutIval(duration) diedText = OnscreenText(text="You failed to save Flippy!\nYou lose!", fg=(1, 1, 1, 1)) diedText.reparentTo(aspect2d, DGG.FADE_SORT_INDEX + 1) diedText.setAlphaScale(0) textFadeIval = diedText.colorScaleInterval(duration, (1, 1, 1, 1), (1, 1, 1, 0)) Sequence( Wait(wait), Parallel( fadeIval, textFadeIval, LerpFunc(adjustMusicVol, duration, self.musicManager.getVolume(), 0.0), LerpFunc(adjustSfxVol, duration, self.sfxManagerList[0].getVolume(), 0.0)), Func(self.leaveGame)).start() self.lost = True
class ModCredits(DirectObject): def __init__(self, menu): base.transitions.fadeScreen(1.0) vfs = VirtualFileSystem.getGlobalPtr() creditsTextStr = str(vfs.readFile("scripts/credits.txt", True)) self.creditsText = OnscreenText(text=creditsTextStr, fg=(1, 1, 1, 1), align=TextNode.ACenter, mayChange=False, scale=0.06) self.creditsText.reparentTo(aspect2d, DGG.FADE_SORT_INDEX + 1) self.creditsText.setZ(-1) self.ival = Sequence( LerpPosInterval(self.creditsText, 20.0, (0, 0, 2.6), (0, 0, -1.0)), Func(self.done)) self.ival.start() self.acceptOnce('space', self.done) self.menu = menu def done(self): self.creditsText.destroy() self.creditsText = None self.ival.pause() self.ival = None base.transitions.irisIn(0.5) self.menu.enableButtons() self.menu = None self.ignore('space')
class TitleScreen(State): def __init__(self): State.__init__(self) options = ['New Game', 'Exit'] self.optState = ['NewGame', 'Exit'] self.menu = Menu() self.menu.addOptions(options) def register(self, render, camera, keys): State.register(self, render, camera, keys) cm = CardMaker('CardMaker-Title') tex = loadTexture('titlescreen.png') cm.setFrame(-1, 1, -1, 1) self.bg = self.node.attachNewNode(cm.generate()) self.bg.setPos(0, 0, 0) self.bg.setTexture(tex) menuActions = {'up': (Menu.previousOpt, self.menu), 'down': (Menu.nextOpt, self.menu), 'action': (self.selectOption, None) } self.menu.registerKeys(keys, menuActions) self.title = OnscreenText(text="", mayChange = True , style=2, fg=(1,1,1,1), pos=(0, 0.75), scale = 0.2) # is this used?? self.text = {} id=0 for opt in self.menu.options: self.text[opt] = OnscreenText(text=opt, mayChange = True , style=2, fg=(1,1,1,1), pos=(0, -0.3 - 0.15*id), scale = .1) id+=1 self.title.reparentTo(self.node) for opt in self.text.keys(): self.text[opt].reparentTo(self.node) State.register(self, render, camera, keys) def iterate(self): State.iterate(self) self.camera.look() for option in self.text.keys(): self.text[option].setScale(0.1) self.text[self.menu.options[self.menu.selected]].setScale(0.12) return self.menu.iterate() def selectOption(self, opt): return self.optState[self.menu.selected]
class Pause(State): def __init__(self): State.__init__(self) # Options in the Pause Menu options = ['Continue', 'Main Menu', 'Exit'] # Here we have the States in the FSM represented by the options self.optState = ['InGame', 'Title', 'Exit'] self.menu = Menu() self.menu.addOptions(options) def register(self, render, camera, keys): State.register(self, render, camera, keys) cm = CardMaker('CardMaker-Pause') cm.setFrame(0.5, -0.5, 0.5, -0.5) cm.setColor(0,0,0, 0.1) self.bg = self.node.attachNewNode(cm.generate()) self.bg.setPos(0, 0, 0) menuActions = {'up': (Menu.previousOpt, self.menu), 'down': (Menu.nextOpt, self.menu), 'action': (self.selectOption, None), 'cancel': (self.selectOption, 0) } self.menu.registerKeys(keys, menuActions) self.title = OnscreenText(text="Game Paused", mayChange = True , style=1, fg=(1,1,1,1), pos=(0,0.35), scale = .1) self.text = {} id=0 for opt in self.menu.options: self.text[opt] = OnscreenText(text=opt, mayChange = True , style=1, fg=(1,1,1,1), pos=(0,0.1 - 0.1*id), scale = .06) id+=1 self.title.reparentTo(self.node) for opt in self.text.keys(): self.text[opt].reparentTo(self.node) def iterate(self): State.iterate(self) self.camera.look() for option in self.text.keys(): self.text[option].setScale(0.06) self.text[self.menu.options[self.menu.selected]].setScale(0.08) return self.menu.iterate() def selectOption(self, param): if param==None: return self.optState[self.menu.selected] else: return self.optState[param]
def makeLoadingScreen(firstTime = False): global LoadingScreen if firstTime: base.transitions.fadeScreen(1.0) from direct.gui.DirectGui import OnscreenText, DGG, OnscreenImage if not firstTime: # Freeze the current frame ss = base.win.getScreenshot() img = OnscreenImage(image = ss) img.reparentTo(render2d, DGG.FADE_SORT_INDEX - 1) base.transitions.fadeScreen(0.5) else: img = None txt = OnscreenText(text = "Loading...", fg = (1, 1, 1, 1), mayChange = False) txt.reparentTo(aspect2d, DGG.NO_FADE_SORT_INDEX) base.renderFrames() LoadingScreen = (img, txt)
def makeDeltaTextEffect(delta, parent, pos): from direct.gui.DirectGui import OnscreenText text = OnscreenText(text = "", font = getMickeyFont()) if delta > 0: text['fg'] = (0, 1, 0, 1) textstr = "+" else: text['fg'] = (1, 0, 0, 1) textstr = "" textstr += str(delta) text['text'] = textstr text.reparentTo(parent) text.setPos(pos[0], pos[2]) text.setTransparency(True, 1) from panda3d.core import Point3 from direct.interval.IntervalGlobal import Sequence, LerpPosInterval, LerpColorScaleInterval, Wait, Parallel seq = Parallel() seq.append(LerpPosInterval(text, 1.0, Point3(pos) + (0, 0, 0.1), pos)) seq.append(Sequence(LerpColorScaleInterval(text, 0.25, (1, 1, 1, 1), (1, 1, 1, 0)), Wait(0.5), LerpColorScaleInterval(text, 0.25, (1, 1, 1, 0), (1, 1, 1, 1)), Func(text.destroy))) seq.start()
class Introduction(DirectObject, FSM): notify = directNotify.newCategory('Introduction') 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 delete(self): if self.presentsTrack is not None: self.presentsTrack.finish() self.presentsTrack = None if self.disclaimerTrack is not None: self.disclaimerTrack.finish() self.disclaimerTrack = None if self.noButton is not None: self.noButton.destroy() self.noButton = None if self.yesButton is not None: self.yesButton.destroy() self.yesButton = None if self.exitButton is not None: self.exitButton.destroy() self.exitButton = None if self.label is not None: self.label.destroy() self.label = None def calcLabelY(self): sy = self.label.getScale()[1] height = self.label.textNode.getHeight() return (height * sy) / 2.0 def enterOff(self): pass def enterDisclaimer(self): self.label.setText(TTLocalizer.IntroDisclaimer) self.label.setPos(0, self.calcLabelY()) self.label.reparentTo(aspect2d) if self.disclaimerTrack is not None: self.disclaimerTrack.finish() self.disclaimerTrack = None self.disclaimerTrack = Sequence( LerpColorScaleInterval(self.label, 2, Vec4(1, 1, 1, 1), Vec4(0, 0, 0, 0), blendType='easeIn'), Wait(3), LerpColorScaleInterval(self.label, 2, Vec4(0, 0, 0, 0), Vec4(1, 1, 1, 1), blendType='easeOut'), ) self.disclaimerTrack.start() def exitDisclaimer(self): if self.disclaimerTrack is not None: self.disclaimerTrack.finish() self.disclaimerTrack = None self.label.reparentTo(hidden) self.label.setPos(0, 0) self.label.setText('') def enterPresents(self): self.label.setText(TTLocalizer.IntroPresents) self.label.setPos(0, self.calcLabelY()) self.label.reparentTo(aspect2d) if self.presentsTrack is not None: self.presentsTrack.finish() self.presentsTrack = None self.presentsTrack = Sequence( LerpColorScaleInterval(self.label, 2, Vec4(1, 1, 1, 1), Vec4(0, 0, 0, 0), blendType='easeIn'), Wait(3), LerpColorScaleInterval(self.label, 2, Vec4(0, 0, 0, 0), Vec4(1, 1, 1, 1), blendType='easeOut'), ) self.presentsTrack.start() def exitPresents(self): if self.presentsTrack is not None: self.presentsTrack.finish() self.presentsTrack = None self.label.reparentTo(hidden) self.label.setPos(0, 0) self.label.setText('') def enterLabel(self, text): self.label.setText(text) self.label.setPos(0, self.calcLabelY()) self.label.reparentTo(aspect2d) self.label.setColorScale(Vec4(1, 1, 1, 1)) def exitLabel(self): self.label.setColorScale(Vec4(0, 0, 0, 0)) self.label.reparentTo(hidden) self.label.setPos(0, 0) self.label.setText('') def enterExitDialog(self, text, exitButtonCommand=None, exitButtonExtraArgs=[]): self.label.setText(text) sy = self.label.getScale()[1] bottom = self.label.textNode.getBottom() * sy lineHeight = self.label.textNode.getLineHeight() * sy self.exitButton.setPos(0, 0, bottom - (lineHeight * 2)) self.exitButton['command'] = exitButtonCommand self.exitButton['extraArgs'] = exitButtonExtraArgs labelY = self.calcLabelY() self.label.setPos(0, labelY) self.exitButton.setZ(self.exitButton, labelY) self.exitButton.reparentTo(aspect2d) self.label.reparentTo(aspect2d) self.label.setColorScale(Vec4(1, 1, 1, 1)) def exitExitDialog(self): self.label.setColorScale(Vec4(0, 0, 0, 0)) self.label.reparentTo(hidden) self.exitButton.reparentTo(hidden) self.label.setPos(0, 0) self.label.setText('') self.exitButton['command'] = None self.exitButton['extraArgs'] = [] self.exitButton.setPos(0, 0, 0) def enterYesNoDialog(self, text, yesButtonCommand=None, yesButtonExtraArgs=[], noButtonCommand=None, noButtonExtraArgs=[]): self.label.setText(text) sy = self.label.getScale()[1] bottom = self.label.textNode.getBottom() * sy lineHeight = self.label.textNode.getLineHeight() * sy self.yesButton.setPos(-0.1, 0, bottom - (lineHeight * 2)) self.yesButton['command'] = yesButtonCommand self.yesButton['extraArgs'] = yesButtonExtraArgs self.noButton.setPos(0.1, 0, bottom - (lineHeight * 2)) self.noButton['command'] = noButtonCommand self.noButton['extraArgs'] = noButtonExtraArgs labelY = self.calcLabelY() self.label.setPos(0, labelY) self.yesButton.setZ(self.yesButton, labelY) self.noButton.setZ(self.noButton, labelY) self.yesButton.reparentTo(aspect2d) self.noButton.reparentTo(aspect2d) self.label.reparentTo(aspect2d) self.label.setColorScale(Vec4(1, 1, 1, 1)) def exitYesNoDialog(self): self.label.setColorScale(Vec4(0, 0, 0, 0)) self.label.reparentTo(hidden) self.noButton.reparentTo(hidden) self.yesButton.reparentTo(hidden) self.label.setPos(0, 0) self.label.setText('') self.noButton['command'] = None self.noButton['extraArgs'] = [] self.noButton.setPos(0, 0, 0) self.yesButton['command'] = None self.yesButton['extraArgs'] = [] self.yesButton.setPos(0, 0, 0) def enterClickToStart(self): base.cr.clickToStart.start() def exitClickToStart(self): base.cr.clickToStart.stop()
class NewGame(State): def __init__(self): State.__init__(self) modeOptions = ['Single-Player', 'Multi-Player'] self.optState = ['single', 'multi'] self.menu = Menu() self.menu.addOptions(modeOptions) self.innerState = "Choosing Mode" def register(self, render, camera, keys): State.register(self, render, camera, keys) cm = CardMaker('CardMaker-NewGame') #tex = loadTexture('titlescreen.png') cm.setFrame(-1, 1, -1, 1) self.bg = self.node.attachNewNode(cm.generate()) self.bg.setPos(0, 0, 0) self.bg.setColor(0, 0, 0) #self.bg.setTexture(tex) menuActions = {'left': (Menu.previousOpt, self.menu), 'right': (Menu.nextOpt, self.menu), 'action': (self.selectOption, None) } self.menu.registerKeys(keys, menuActions) self.title = OnscreenText(text="Game Mode", mayChange = True , style=2, fg=(1,1,1,1), pos=(0, 0.75), scale = 0.15) self.text = {} id=0 for opt in self.menu.options: self.text[opt] = OnscreenText(text=opt, mayChange = True , style=2, fg=(1,1,1,1), pos=(-0.5 + 1*id, -0.3), scale = .1) id+=1 self.title.reparentTo(self.node) for opt in self.text.keys(): self.text[opt].reparentTo(self.node) State.register(self, render, camera, keys) def iterate(self): State.iterate(self) self.camera.look() for option in self.text.keys(): self.text[option].setScale(0.1) self.text[self.menu.options[self.menu.selected]].setScale(0.12) if self.innerState == "Choosing Mode": ret = self.menu.iterate() if ret != None: for opt in self.menu.options: self.text[opt].removeNode() self.title.setText("Choose Player") playerOptions = ['Jackson', 'Jackson2'] self.menu.clearOptions() self.menu.addOptions(playerOptions) id = 0 for opt in self.menu.options: self.text[opt] = OnscreenText(text=opt, mayChange = True , style=2, fg=(1,1,1,1), pos=(-0.5 + 1*id, -0.3), scale = .1) self.text[opt].reparentTo(self.node) id+=1 if ret == "single": self.innerState = "Choosing Single" elif ret == "multi": self.innerState = "Choosing Multi" return None elif self.innerState == "Choosing Single": ret = self.menu.iterate() if ret != None: return 'InGame' elif self.innerState == "Choosing Multi": ret = self.menu.iterate() if ret != None: return 'InGame' def selectOption(self, opt): return self.optState[self.menu.selected]
class Introduction(DirectObject, FSM): notify = directNotify.newCategory('Introduction') 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 delete(self): if self.presentsTrack is not None: self.presentsTrack.finish() self.presentsTrack = None if self.disclaimerTrack is not None: self.disclaimerTrack.finish() self.disclaimerTrack = None if self.noButton is not None: self.noButton.destroy() self.noButton = None if self.yesButton is not None: self.yesButton.destroy() self.yesButton = None if self.exitButton is not None: self.exitButton.destroy() self.exitButton = None if self.label is not None: self.label.destroy() self.label = None def calcLabelY(self): sy = self.label.getScale()[1] height = self.label.textNode.getHeight() return (height * sy) / 2.0 def enterOff(self): pass def enterDisclaimer(self): self.label.setText(TTLocalizer.IntroDisclaimer) self.label.setPos(0, self.calcLabelY()) self.label.reparentTo(aspect2d) if self.disclaimerTrack is not None: self.disclaimerTrack.finish() self.disclaimerTrack = None self.disclaimerTrack = Sequence( LerpColorScaleInterval( self.label, 2, Vec4(1, 1, 1, 1), Vec4(0, 0, 0, 0), blendType='easeIn'), Wait(3), LerpColorScaleInterval( self.label, 2, Vec4(0, 0, 0, 0), Vec4(1, 1, 1, 1), blendType='easeOut'), ) self.disclaimerTrack.start() def exitDisclaimer(self): if self.disclaimerTrack is not None: self.disclaimerTrack.finish() self.disclaimerTrack = None self.label.reparentTo(hidden) self.label.setPos(0, 0) self.label.setText('') def enterPresents(self): self.label.setText(TTLocalizer.IntroPresents) self.label.setPos(0, self.calcLabelY()) self.label.reparentTo(aspect2d) if self.presentsTrack is not None: self.presentsTrack.finish() self.presentsTrack = None self.presentsTrack = Sequence( LerpColorScaleInterval( self.label, 2, Vec4(1, 1, 1, 1), Vec4(0, 0, 0, 0), blendType='easeIn'), Wait(3), LerpColorScaleInterval( self.label, 2, Vec4(0, 0, 0, 0), Vec4(1, 1, 1, 1), blendType='easeOut'), ) self.presentsTrack.start() def exitPresents(self): if self.presentsTrack is not None: self.presentsTrack.finish() self.presentsTrack = None self.label.reparentTo(hidden) self.label.setPos(0, 0) self.label.setText('') def enterLabel(self, text): self.label.setText(text) self.label.setPos(0, self.calcLabelY()) self.label.reparentTo(aspect2d) self.label.setColorScale(Vec4(1, 1, 1, 1)) def exitLabel(self): self.label.setColorScale(Vec4(0, 0, 0, 0)) self.label.reparentTo(hidden) self.label.setPos(0, 0) self.label.setText('') def enterExitDialog(self, text, exitButtonCommand=None, exitButtonExtraArgs=[]): self.label.setText(text) sy = self.label.getScale()[1] bottom = self.label.textNode.getBottom() * sy lineHeight = self.label.textNode.getLineHeight() * sy self.exitButton.setPos(0, 0, bottom - (lineHeight * 2)) self.exitButton['command'] = exitButtonCommand self.exitButton['extraArgs'] = exitButtonExtraArgs labelY = self.calcLabelY() self.label.setPos(0, labelY) self.exitButton.setZ(self.exitButton, labelY) self.exitButton.reparentTo(aspect2d) self.label.reparentTo(aspect2d) self.label.setColorScale(Vec4(1, 1, 1, 1)) def exitExitDialog(self): self.label.setColorScale(Vec4(0, 0, 0, 0)) self.label.reparentTo(hidden) self.exitButton.reparentTo(hidden) self.label.setPos(0, 0) self.label.setText('') self.exitButton['command'] = None self.exitButton['extraArgs'] = [] self.exitButton.setPos(0, 0, 0) def enterYesNoDialog(self, text, yesButtonCommand=None, yesButtonExtraArgs=[], noButtonCommand=None, noButtonExtraArgs=[]): self.label.setText(text) sy = self.label.getScale()[1] bottom = self.label.textNode.getBottom() * sy lineHeight = self.label.textNode.getLineHeight() * sy self.yesButton.setPos(-0.1, 0, bottom - (lineHeight * 2)) self.yesButton['command'] = yesButtonCommand self.yesButton['extraArgs'] = yesButtonExtraArgs self.noButton.setPos(0.1, 0, bottom - (lineHeight * 2)) self.noButton['command'] = noButtonCommand self.noButton['extraArgs'] = noButtonExtraArgs labelY = self.calcLabelY() self.label.setPos(0, labelY) self.yesButton.setZ(self.yesButton, labelY) self.noButton.setZ(self.noButton, labelY) self.yesButton.reparentTo(aspect2d) self.noButton.reparentTo(aspect2d) self.label.reparentTo(aspect2d) self.label.setColorScale(Vec4(1, 1, 1, 1)) def exitYesNoDialog(self): self.label.setColorScale(Vec4(0, 0, 0, 0)) self.label.reparentTo(hidden) self.noButton.reparentTo(hidden) self.yesButton.reparentTo(hidden) self.label.setPos(0, 0) self.label.setText('') self.noButton['command'] = None self.noButton['extraArgs'] = [] self.noButton.setPos(0, 0, 0) self.yesButton['command'] = None self.yesButton['extraArgs'] = [] self.yesButton.setPos(0, 0, 0) def enterClickToStart(self): base.cr.clickToStart.start() def exitClickToStart(self): base.cr.clickToStart.stop()