class GUI: def __init__(self, rootParent=None): self.pg202 = DirectFrame( frameColor=(1.0, 1.0, 1.0, 0.0), frameSize=(-1, 1, -1, 1), hpr=LVecBase3f(0, 0, 0), image='chapter3/overlay.png', sortOrder=200, pos=LPoint3f(0, 0, 0), image_scale=LVecBase3f(0.8, 1, 0.8), image_pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.pg202.setTransparency(1) def show(self): self.pg202.show() def hide(self): self.pg202.hide() def destroy(self): self.pg202.destroy()
class GUI: def __init__(self, rootParent=None): self.frmMain = DirectFrame( frameColor=(0.0, 0.0, 0.0, 0.5), frameSize=(-1, 1, -1, 1), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmMain.setTransparency(0) self.lblVictory = DirectLabel( frameColor=(0.0, 0.0, 0.0, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), scale=LVecBase3f(0.2, 0.2, 0.2), text='Won Fight', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblVictory.setTransparency(0) def show(self): self.frmMain.show() def hide(self): self.frmMain.hide() def destroy(self): self.frmMain.destroy()
class GUI: def __init__(self, rootParent=None): self.frmMain = DirectFrame( frameColor=(0.0, 0.0, 0.0, 0.75), frameSize=(-1, 1, -1, 1), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmMain.setTransparency(1) self.btnQuit = DirectButton( hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.75), scale=LVecBase3f(0.1, 0.1, 0.1), text='Quit', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, command=base.messenger.send, extraArgs=["quitRoom"], pressEffect=1, ) self.btnQuit.setTransparency(0) self.lblMessage = DirectLabel( frameColor=(0.0, 0.0, 0.0, 0.0), frameSize=(-2.981, 3.106, -0.325, 0.725), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), scale=LVecBase3f(0.2, 0.2, 0.2), text='Player A Won', text_align=TextNode.A_center, text_scale=(1.0, 1.0), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblMessage.setTransparency(0) def show(self): self.frmMain.show() def hide(self): self.frmMain.hide() def destroy(self): self.frmMain.destroy()
class GUI: def __init__(self, rootParent=None): self.frmMain = DirectFrame( frameColor=(1, 1, 1, 1), frameSize=(-1, 1, -1, 1), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmMain.setTransparency(0) self.waitbar = DirectWaitBar( barColor=(0.0, 0.0, 1.0, 1.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), state='normal', text='0%', value=50.0, text_align=TextNode.A_center, text_scale=(0.1, 0.1), text_pos=(0, -0.025), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.waitbar.setTransparency(0) def show(self): self.frmMain.show() def hide(self): self.frmMain.hide() def destroy(self): self.frmMain.destroy()
class Menu(object): def __init__(self,main): self.main=main wx = base.win.get_x_size() wy = base.win.get_y_size() kx = 1920 ky = 1080 self.myFrame = DirectFrame(frameColor=(1,1,1,1), frameSize=(0, kx,0, ky)) menu_tex = loader.loadTexture("res/menu.png") menu_tex.set_minfilter(SamplerState.FT_nearest) menu_tex.set_magfilter(SamplerState.FT_linear) self.myFrame["frameTexture"] = menu_tex self.myFrame.reparentTo(base.pixel2d) self.myFrame.set_pos( (wx-kx) / 2, 0, -(wy+ky) / 2) self.myFrame.set_transparency(True) self.startButton = DirectButton( text = "", text_scale=1.0, text_fg=(0.2,0.2,0.2,1), frameTexture="res/start_game.png", frameColor=(1,1,1,1), frameSize=(-64, 64, -20, 20), command=self.main.startGame, relief=DGG.FLAT, rolloverSound=None, clickSound=None, parent=self.myFrame, scale=2.0, pos=(wx/2 + 160, 0, wy/2 + 50) ) self.startButton.setTransparency(1) self.exitButton = DirectButton( text = ("Exit Game"), pos=(0,0,-.8), text_scale=.1, frameColor=(0,0,0,0), relief=1, frameVisibleScale=(2,3), command=exit, rolloverSound=None, clickSound=None, parent=self.myFrame, ) self.exitButton.setTransparency(1) self.resumeButton = DirectButton( text = ("Resume"), pos=(.0,0,.3), text_scale=.1, frameColor=(0,0,0,0), relief=1, frameVisibleScale=(2,3), command=self.main.resumeGame, rolloverSound=None, clickSound=None, parent=self.myFrame, ) self.resumeButton.setTransparency(1) self.resumeButton.hide() self.selectFrame= DirectFrame( frameColor=(1,1,1,1) , frameSize=(-64, 64, -20, 20) , frameTexture="res/select.png") self.selectFrame.setTransparency(1) self.selectFrame.reparentTo(self.startButton) self.entries = [self.exitButton,self.startButton,self.resumeButton] self.activeEntry = 1 def clearKeys(self): base.ignore("arrow_up") base.ignore("arrow_down") base.ignore("arrow_left") base.ignore("arrow_right") base.ignore("escape") base.ignore("enter") def execSelection(self): self.entries[self.activeEntry]["command"]() def selectDown(self): if self.activeEntry == 0: self.activeEntry = len(self.entries)-1 else: self.activeEntry -=1 if self.entries[self.activeEntry].isHidden(): self.selectDown() return self.selectFrame.reparentTo(self.entries[self.activeEntry]) def selectUp(self): if self.activeEntry == len(self.entries)-1: self.activeEntry=0 else: self.activeEntry +=1 if self.entries[self.activeEntry].isHidden() : self.selectUp() return self.selectFrame.reparentTo(self.entries[self.activeEntry]) def hideMenu(self): self.clearKeys() self.main.gui.show() seq= Sequence( LerpColorScaleInterval(self.myFrame, 0.4 ,(1,1,1,0)) , Func(self.myFrame.hide) ) seq.start() def hideResume(self): seq= Sequence( LerpColorScaleInterval(self.resumeButton, .5 ,(1,1,1,0)) , Func(self.resumeButton.hide)) seq.start() def showResume(self): self.resumeButton.show() #seq= Sequence( LerpColorScaleInterval(self.resumeButton, 1 ,(1,1,1,1)) ) #seq.start() def showMenu(self): self.clearKeys() base.accept("arrow_up" , self.selectUp ) base.accept("arrow_down" , self.selectDown ) base.accept("escape", exit) base.accept("enter",self.execSelection) self.myFrame.show() self.main.gui.hide() seq= Sequence( LerpColorScaleInterval(self.myFrame, .5 ,(1,1,1,1)) ) seq.start()
class GUI: def __init__(self, rootParent=None): self.frmMain = DirectFrame( frameColor=(1, 1, 1, 1), frameSize=(-1, 1, -1, 1), hpr=LVecBase3f(0, 0, 0), image='menu/background.png', pos=LPoint3f(0, 0, 0), image_scale=LVecBase3f(1, 1, 1), image_pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmMain.setTransparency(0) self.btnStart = DirectButton( frameColor=(1.0, 1.0, 0.5, 0.1), frameSize=(-1.9, 1.8, -0.6, 0.6), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.46), relief=1, scale=LVecBase3f(0.1, 0.1, 0.1), text='Start Game', text_align=TextNode.A_center, text_scale=(0.42, 0.4), text_pos=(0.03, -0.45), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmMain, command=base.messenger.send, extraArgs=["startGame"], pressEffect=1, ) self.btnStart.setTransparency(0) self.btnOptions = DirectButton( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-1.825, 1.925, -0.437, 0.85), hpr=LVecBase3f(35, -28, 20), pos=LPoint3f(0.6, 0, -0.125), relief=1, scale=LVecBase3f(0.1, 0.1, 0.1), text='Options', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0.7, 0.7, 0.7, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmMain, command=base.messenger.send, extraArgs=["options"], pressEffect=0, ) self.btnOptions.setTransparency(0) self.btnExit = DirectButton( frameColor=(0.1, 0.7, 0.1, 1.0), frameSize=(-1.5249999523162843, 1.6499999523162843, -0.21250001192092896, 0.8250000238418579), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.45, 0, -0.6), relief=1, scale=LVecBase3f(0.1, 0.1, 0.1), text='EXIT', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0.9, 0.9, 0.9, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmMain, command=base.messenger.send, extraArgs=["exit"], pressEffect=0, ) self.btnExit.setTransparency(0) def show(self): self.frmMain.show() def hide(self): self.frmMain.hide() def destroy(self): self.frmMain.destroy()
class GUI: def __init__(self, rootParent=None): self.frmMain = DirectFrame( borderWidth=(2, 2), frameColor=(1, 1, 1, 1), frameSize=(-300.0, 300.0, -250.0, 250.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmMain.setTransparency(0) self.frmHeader = DirectFrame( borderWidth=(2, 2), frameColor=(0.25, 0.25, 0.25, 1.0), frameSize=(-300.0, 300.0, -20.0, 20.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 230), parent=self.frmMain, ) self.frmHeader.setTransparency(0) self.lblHeader = DirectLabel( borderWidth=(2, 2), frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-295, 0, -5), scale=LVecBase3f(1, 1, 1), text='Settings', text_align=TextNode.A_left, text_scale=(16.0, 16.0), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmHeader, ) self.lblHeader.setTransparency(0) self.btnOk = DirectButton( borderWidth=(2, 2), frameSize=(-45.0, 45.0, -6.0, 14.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(120, 0, -220), relief=1, scale=LVecBase3f(1, 1, 1), text='OK', text_align=TextNode.A_center, text_scale=(12.0, 12.0), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, command=messenger.send, extraArgs=["Settings_OK"], ) self.btnOk.setTransparency(0) self.btnCancel = DirectButton( borderWidth=(2, 2), frameSize=(-45.0, 45.0, -6.0, 14.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(230, 0, -220), relief=1, scale=LVecBase3f(1, 1, 1), text='Cancel', text_align=TextNode.A_center, text_scale=(12.0, 12.0), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, command=messenger.send, extraArgs=["Settings_CANCEL"], ) self.btnCancel.setTransparency(0) self.lblCustomWidgets = DirectLabel( borderWidth=(2, 2), frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-260, 0, 5), scale=LVecBase3f(1, 1, 1), text='Custom widgets path:', text_align=TextNode.A_left, text_scale=(12.0, 12.0), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblCustomWidgets.setTransparency(0) self.txtCustomWidgetsPath = DirectEntry( borderWidth=(0.167, 0.167), hpr=LVecBase3f(0, 0, 0), overflow=1, pos=LPoint3f(-50, 0, 5), scale=LVecBase3f(12, 1, 12), width=18.0, text_align=TextNode.A_left, text_scale=(1.0, 1.0), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.txtCustomWidgetsPath.setTransparency(0) self.lblAskForQuit = DirectLabel( borderWidth=(2, 2), frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-260, 0, 140), scale=LVecBase3f(1, 1, 1), text='Ask before quit:', text_align=TextNode.A_left, text_scale=(12.0, 12.0), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblAskForQuit.setTransparency(0) self.cbAskForQuit = DirectCheckButton( borderWidth=(2, 2), frameColor=(1.0, 1.0, 1.0, 1.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(110, 0, 145), scale=LVecBase3f(1, 1, 1), text='', indicator_borderWidth=(2, 2), indicator_hpr=LVecBase3f(0, 0, 0), indicator_pos=LPoint3f(-11, 0, -7.2), indicator_relief='sunken', indicator_text_align=TextNode.A_center, indicator_text_scale=(24, 24), indicator_text_pos=(0, -0.2), indicator_text_fg=LVecBase4f(0, 0, 0, 1), indicator_text_bg=LVecBase4f(0, 0, 0, 0), text_align=TextNode.A_left, text_scale=(12.0, 12.0), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.cbAskForQuit.setTransparency(0) self.lblExecutableScripts = DirectLabel( borderWidth=(2, 2), frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-260, 0, 95), scale=LVecBase3f(1, 1, 1), text='Create executable Scripts:', text_align=TextNode.A_left, text_scale=(12.0, 12.0), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblExecutableScripts.setTransparency(0) self.cbExecutableScripts = DirectCheckButton( borderWidth=(2, 2), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(110, 0, 100), scale=LVecBase3f(1, 1, 1), text='', indicator_borderWidth=(2, 2), indicator_hpr=LVecBase3f(0, 0, 0), indicator_pos=LPoint3f(-11, 0, -7.2), indicator_relief='sunken', indicator_text_align=TextNode.A_center, indicator_text_scale=(24, 24), indicator_text_pos=(0, -0.2), indicator_text_fg=LVecBase4f(0, 0, 0, 1), indicator_text_bg=LVecBase4f(0, 0, 0, 0), text_align=TextNode.A_center, text_scale=(12.0, 12.0), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.cbExecutableScripts.setTransparency(0) self.btnBrowseWidgetPath = DirectButton( borderWidth=(2, 2), frameSize=(-45.25, 45.25, -6.0, 14.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(230, 0, 5), relief=1, scale=LVecBase3f(1, 1, 1), text='Browse', text_align=TextNode.A_center, text_scale=(12.0, 12.0), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.btnBrowseWidgetPath.setTransparency(0) self.lblShowToolbar = DirectLabel( borderWidth=(2, 2), frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-260, 0, 50), scale=LVecBase3f(1, 1, 1), text='Show toolbar', text_align=TextNode.A_left, text_scale=(12.0, 12.0), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblShowToolbar.setTransparency(0) self.cbShowToolbar = DirectCheckButton( borderWidth=(2, 2), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(110, 0, 55), scale=LVecBase3f(1, 1, 1), text='', indicator_borderWidth=(2, 2), indicator_hpr=LVecBase3f(0, 0, 0), indicator_pos=LPoint3f(-11, 0, -7.2), indicator_relief='sunken', indicator_text_align=TextNode.A_center, indicator_text_scale=(24, 24), indicator_text_pos=(0, -0.2), indicator_text_fg=LVecBase4f(0, 0, 0, 1), indicator_text_bg=LVecBase4f(0, 0, 0, 0), text_align=TextNode.A_center, text_scale=(12.0, 12.0), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.cbShowToolbar.setTransparency(0) self.lblSearchPath = DirectLabel( borderWidth=(2, 2), frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-260, 0, -45), scale=LVecBase3f(1, 1, 1), text='Search paths', text_align=TextNode.A_left, text_scale=(12.0, 12.0), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblSearchPath.setTransparency(0) self.txtSearchPaths = DirectEntry( borderWidth=(0.167, 0.167), frameSize=(-0.167, 18.167, -0.463, 1.155), hpr=LVecBase3f(0, 0, 0), overflow=1, pos=LPoint3f(-50, 0, -45), scale=LVecBase3f(12, 1, 12), width=18.0, text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.txtSearchPaths.setTransparency(0) self.btnBrowseSearchPaths = DirectButton( borderWidth=(2, 2), frameSize=(-45.25, 45.25, -6.0, 14.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(230, 0, -45), relief=1, scale=LVecBase3f(1, 1, 1), text='Browse', text_align=TextNode.A_center, text_scale=(12.0, 12.0), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.btnBrowseSearchPaths.setTransparency(0) self.lblWorkDir = DirectLabel( borderWidth=(2, 2), frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-260, 0, -95), scale=LVecBase3f(1, 1, 1), text='Default work directory', text_align=TextNode.A_left, text_scale=(12.0, 12.0), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblWorkDir.setTransparency(0) self.txtWorkDir = DirectEntry( borderWidth=(0.08333333333333333, 0.08333333333333333), hpr=LVecBase3f(0, 0, 0), overflow=1, pos=LPoint3f(-50, 0, -95), scale=LVecBase3f(12, 1, 12), width=18.0, text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.txtWorkDir.setTransparency(0) self.btnBrowseWorkDir = DirectButton( borderWidth=(2, 2), frameSize=(-45.25, 45.25, -6.0, 14.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(230, 0, -95), relief=1, scale=LVecBase3f(1, 1, 1), text='Browse', text_align=TextNode.A_center, text_scale=(12.0, 12.0), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, pressEffect=1, ) self.btnBrowseWorkDir.setTransparency(0) self.spinAutosaveDealy = DirectSpinBox( frameSize=(-2.1, 1.0, -0.742, 0.742), hpr=LVecBase3f(0, 0, 0), maxValue=3600, minValue=10, pos=LPoint3f(105, 0, -140), value=60, scale=LVecBase3f(12, 1, 12), decButton_hpr=LVecBase3f(0, 0, 0), decButton_pos=LPoint3f(0.583333, 0, -0.533333), decButton_text='6', decButton_text0_align=TextNode.A_center, decButton_text0_scale=(1, 1), decButton_text0_pos=(0, 0), decButton_text0_fg=LVecBase4f(0, 0, 0, 1), decButton_text0_bg=LVecBase4f(0, 0, 0, 0), decButton_text0_wordwrap=None, decButton_text1_align=TextNode.A_center, decButton_text1_scale=(1, 1), decButton_text1_pos=(0, 0), decButton_text1_fg=LVecBase4f(0, 0, 0, 1), decButton_text1_bg=LVecBase4f(0, 0, 0, 0), decButton_text1_wordwrap=None, decButton_text2_align=TextNode.A_center, decButton_text2_scale=(1, 1), decButton_text2_pos=(0, 0), decButton_text2_fg=LVecBase4f(0, 0, 0, 1), decButton_text2_bg=LVecBase4f(0, 0, 0, 0), decButton_text2_wordwrap=None, decButton_text3_align=TextNode.A_center, decButton_text3_scale=(1, 1), decButton_text3_pos=(0, 0), decButton_text3_fg=LVecBase4f(0, 0, 0, 1), decButton_text3_bg=LVecBase4f(0, 0, 0, 0), decButton_text3_wordwrap=None, incButton_hpr=LVecBase3f(0, 0, 0), incButton_pos=LPoint3f(0.583333, 0, -0.016667), incButton_text='5', incButton_text0_align=TextNode.A_center, incButton_text0_scale=(1, 1), incButton_text0_pos=(0, 0), incButton_text0_fg=LVecBase4f(0, 0, 0, 1), incButton_text0_bg=LVecBase4f(0, 0, 0, 0), incButton_text0_wordwrap=None, incButton_text1_align=TextNode.A_center, incButton_text1_scale=(1, 1), incButton_text1_pos=(0, 0), incButton_text1_fg=LVecBase4f(0, 0, 0, 1), incButton_text1_bg=LVecBase4f(0, 0, 0, 0), incButton_text1_wordwrap=None, incButton_text2_align=TextNode.A_center, incButton_text2_scale=(1, 1), incButton_text2_pos=(0, 0), incButton_text2_fg=LVecBase4f(0, 0, 0, 1), incButton_text2_bg=LVecBase4f(0, 0, 0, 0), incButton_text2_wordwrap=None, incButton_text3_align=TextNode.A_center, incButton_text3_scale=(1, 1), incButton_text3_pos=(0, 0), incButton_text3_fg=LVecBase4f(0, 0, 0, 1), incButton_text3_bg=LVecBase4f(0, 0, 0, 0), incButton_text3_wordwrap=None, valueEntry_hpr=LVecBase3f(0, 0, 0), valueEntry_initialText='60', valueEntry_pos=LPoint3f(0, 0, -0.345625), valueEntry_text_align=TextNode.A_right, valueEntry_text_scale=(1, 1), valueEntry_text_pos=(0, 0), valueEntry_text_fg=LVecBase4f(0, 0, 0, 1), valueEntry_text_bg=LVecBase4f(0, 0, 0, 0), valueEntry_text_wordwrap=None, parent=self.frmMain, ) self.spinAutosaveDealy.setTransparency(0) self.lblAutosaveDelay = DirectLabel( borderWidth=(2, 2), frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=LVecBase4f(0.3, 84.45, -3.9, 8.7), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-260, 0, -140), scale=LVecBase3f(1, 1, 1), text='Autosave delay in seconds', text0_align=TextNode.A_left, text0_scale=(12.0, 12.0), text0_pos=(0, 0), text0_fg=LVecBase4f(0, 0, 0, 1), text0_bg=LVecBase4f(0, 0, 0, 0), text0_wordwrap=None, parent=self.frmMain, ) self.lblAutosaveDelay.setTransparency(0) def show(self): self.frmMain.show() def hide(self): self.frmMain.hide() def destroy(self): self.frmMain.destroy()
class GUI: def __init__(self, rootParent=None): self.frmMain = DirectFrame( frameColor=(1.0, 1.0, 1.0, 0.0), frameSize=(-0.436, 0.45, -0.5, 0.5), hpr=LVecBase3f(0, 0, 0), image='./assets/inventory/InventoryPlate.png', pos=LPoint3f(-0.4, 0, 0.52), image_scale=LVecBase3f(0.436, 1, 0.5), image_pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmMain.setTransparency(1) self.frmWeapon = DirectFrame( frameColor=(1.0, 0.0, 1.0, 0.0), frameSize=(-0.09, 0.09, -0.242, 0.242), hpr=LVecBase3f(0, 0, 0), image='./assets/inventory/thief/weapon1.png', pos=LPoint3f(-0.165, 0, 0.15), image_scale=LVecBase3f(0.09, 0, 0.242), image_pos=LPoint3f(0, 0, 0), parent=self.frmMain, ) self.frmWeapon.setTransparency(1) self.frmArmor = DirectFrame( frameColor=(1.0, 0.0, 1.0, 0.0), frameSize=(-0.09, 0.09, -0.242, 0.242), hpr=LVecBase3f(0, 0, 0), image='./assets/inventory/thief/weapon1.png', pos=LPoint3f(0.18, 0, 0.15), image_scale=LVecBase3f(0.09, 0, 0.242), image_pos=LPoint3f(0, 0, 0), parent=self.frmMain, ) self.frmArmor.setTransparency(1) self.frmPotion1 = DirectFrame( frameColor=(0.0, 1.0, 1.0, 0.0), frameSize=(-0.1, 0.1, -0.1, 0.1), hpr=LVecBase3f(0, 0, 0), image='./assets/inventory/potions/Potion1.png', pos=LPoint3f(-0.23, 0, -0.315), image_scale=LVecBase3f(0.09, 0.09, 0.09), image_pos=LPoint3f(0, 0, 0), parent=self.frmMain, ) self.frmPotion1.setTransparency(1) self.frmPotion2 = DirectFrame( frameColor=(0.0, 1.0, 1.0, 0.0), frameSize=(-0.1, 0.1, -0.1, 0.1), hpr=LVecBase3f(0, 0, 0), image='./assets/inventory/potions/Potion2.png', pos=LPoint3f(0, 0, -0.325), image_scale=LVecBase3f(0.09, 0.09, 0.09), image_pos=LPoint3f(0, 0, 0), parent=self.frmMain, ) self.frmPotion2.setTransparency(1) self.frmPotion3 = DirectFrame( frameColor=(0.0, 1.0, 1.0, 0.0), frameSize=(-0.1, 0.1, -0.1, 0.1), hpr=LVecBase3f(0, 0, 0), image='./assets/inventory/potions/Potion3.png', pos=LPoint3f(0.25, 0, -0.315), image_scale=LVecBase3f(0.09, 0.1, 0.09), image_pos=LPoint3f(0, 0, 0), parent=self.frmMain, ) self.frmPotion3.setTransparency(1) self.btnToggleInventory = DirectButton( frameColor=(0.15, 0.15, 0.15, 1.0), frameSize=(-0.4, 0.4, -0.02, 0.05), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.4, 0, 0.02), relief=1, scale=LVecBase3f(1, 1, 1), text='Toggle Inventory', text_align=TextNode.A_center, text_scale=(0.05, 0.05), text_pos=(0, 0), text_fg=LVecBase4f(0.8, 0.8, 0.8, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=rootParent, command=base.messenger.send, extraArgs=["toggleInventory"], pressEffect=1, ) self.btnToggleInventory.setTransparency(0) def show(self): self.frmMain.show() self.btnToggleInventory.show() def hide(self): self.frmMain.hide() self.btnToggleInventory.hide() def destroy(self): self.frmMain.destroy() self.btnToggleInventory.destroy()
class GUI: def __init__(self, rootParent=None): self.frmCreateRoom = DirectFrame( borderWidth=(0.01, 0.01), frameColor=(1, 1, 1, 1), frameSize=(-0.65, 0.65, -0.55, 0.55), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), relief=5, parent=rootParent, ) self.frmCreateRoom.setTransparency(0) self.btnOk = DirectButton( hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.425, 0, -0.45), scale=LVecBase3f(0.1, 0.1, 0.1), text='OK', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmCreateRoom, command=base.messenger.send, extraArgs=["createRoom_Ok"], ) self.btnOk.setTransparency(0) self.btnCancel = DirectButton( hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.4, 0, -0.45), scale=LVecBase3f(0.1, 0.1, 0.1), text='Cancel', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmCreateRoom, command=base.messenger.send, extraArgs=["createRoom_Cancel"], ) self.btnCancel.setTransparency(0) self.pg1640 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.425), scale=LVecBase3f(0.1, 0.1, 0.1), text='Create New Room', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmCreateRoom, ) self.pg1640.setTransparency(0) self.pg2148 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.05, 0, 0.24), scale=LVecBase3f(0.1, 0.1, 0.1), text='Room Name', text_align=TextNode.A_right, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmCreateRoom, ) self.pg2148.setTransparency(0) self.pg2173 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.05, 0, 0.065), scale=LVecBase3f(0.1, 0.1, 0.1), text='# of Players', text_align=TextNode.A_right, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmCreateRoom, ) self.pg2173.setTransparency(0) self.pg2201 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.05, 0, -0.115), scale=LVecBase3f(0.1, 0.1, 0.1), text='Game Type', text_align=TextNode.A_right, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmCreateRoom, ) self.pg2201.setTransparency(0) self.entryRoomName = DirectEntry( hpr=LVecBase3f(0, 0, 0), overflow=1, pos=LPoint3f(0.08, 0, 0.25), scale=LVecBase3f(0.05, 0.1, 0.05), width=8.0, text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmCreateRoom, ) self.entryRoomName.setTransparency(0) self.optionNumPlayers = DirectOptionMenu( items=['item1'], frameSize=(0.07500000298023224, 3.012500149011612, -0.11250001192092896, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.175, 0, 0.06), scale=LVecBase3f(0.1, 0.1, 0.1), text='item1', cancelframe_frameSize=(-1, 1, -1, 1), cancelframe_hpr=LVecBase3f(0, 0, 0), cancelframe_pos=LPoint3f(0, 0, 0), cancelframe_relief=None, item_frameSize=(0.07500000298023224, 2.4125001430511475, -0.11250001192092896, 0.75), item_hpr=LVecBase3f(0, 0, 0), item_pos=LPoint3f(-0.075, 0, -0.75), item_text='item1', item0_text_align=TextNode.A_left, item0_text_scale=(1, 1), item0_text_pos=(0, 0), item0_text_fg=LVecBase4f(0, 0, 0, 1), item0_text_bg=LVecBase4f(0, 0, 0, 0), popupMarker_frameSize=(-0.5, 0.5, -0.2, 0.2), popupMarker_hpr=LVecBase3f(0, 0, 0), popupMarker_pos=LPoint3f(2.7125, 0, 0.31875), popupMarker_relief=2, popupMarker_scale=LVecBase3f(0.4, 0.4, 0.4), popupMenu_frameSize=(0, 2.3375001400709152, -0.862500011920929, 0), popupMenu_hpr=LVecBase3f(0, 0, 0), popupMenu_pos=LPoint3f(0, 0, 0), popupMenu_relief='raised', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmCreateRoom, ) self.optionNumPlayers.setTransparency(0) self.optionGameType = DirectOptionMenu( items=['item1'], frameSize=(0.07500000298023224, 3.012500149011612, -0.11250001192092896, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.175, 0, -0.125), scale=LVecBase3f(0.1, 0.1, 0.1), text='item1', cancelframe_frameSize=(-1, 1, -1, 1), cancelframe_hpr=LVecBase3f(0, 0, 0), cancelframe_pos=LPoint3f(0, 0, 0), cancelframe_relief=None, item_frameSize=(0.07500000298023224, 2.4125001430511475, -0.11250001192092896, 0.75), item_hpr=LVecBase3f(0, 0, 0), item_pos=LPoint3f(-0.075, 0, -0.75), item_text='item1', item0_text_align=TextNode.A_left, item0_text_scale=(1, 1), item0_text_pos=(0, 0), item0_text_fg=LVecBase4f(0, 0, 0, 1), item0_text_bg=LVecBase4f(0, 0, 0, 0), popupMarker_frameSize=(-0.5, 0.5, -0.2, 0.2), popupMarker_hpr=LVecBase3f(0, 0, 0), popupMarker_pos=LPoint3f(2.7125, 0, 0.31875), popupMarker_relief=2, popupMarker_scale=LVecBase3f(0.4, 0.4, 0.4), popupMenu_frameSize=(0, 2.3375001400709152, -0.862500011920929, 0), popupMenu_hpr=LVecBase3f(0, 0, 0), popupMenu_pos=LPoint3f(0, 0, 0), popupMenu_relief='raised', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmCreateRoom, ) self.optionGameType.setTransparency(0) self.pg629 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-1.15, 1.25, -0.113, 0.725), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.055, 0, -0.3), scale=LVecBase3f(0.1, 0.1, 0.1), text='Difficulty', text_align=TextNode.A_right, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmCreateRoom, ) self.pg629.setTransparency(0) self.optionDifficulty = DirectOptionMenu( items=['item1'], frameSize=(0.1, 3.013, -0.113, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.175, 0, -0.305), scale=LVecBase3f(0.1, 0.1, 0.1), text='item1', cancelframe_frameSize=(-1, 1, -1, 1), cancelframe_hpr=LVecBase3f(0, 0, 0), cancelframe_pos=LPoint3f(0, 0, 0), cancelframe_relief=None, item_frameSize=(0.07500000298023224, 2.4125001430511475, -0.11250001192092896, 0.75), item_hpr=LVecBase3f(0, 0, 0), item_pos=LPoint3f(-0.075, 0, -0.75), item_text='item1', item0_text_align=TextNode.A_left, item0_text_scale=(1, 1), item0_text_pos=(0, 0), item0_text_fg=LVecBase4f(0, 0, 0, 1), item0_text_bg=LVecBase4f(0, 0, 0, 0), popupMarker_frameSize=(-0.5, 0.5, -0.2, 0.2), popupMarker_hpr=LVecBase3f(0, 0, 0), popupMarker_pos=LPoint3f(2.7125, 0, 0.31875), popupMarker_relief=2, popupMarker_scale=LVecBase3f(0.4, 0.4, 0.4), popupMenu_frameSize=(0, 2.3375001400709152, -0.862500011920929, 0), popupMenu_hpr=LVecBase3f(0, 0, 0), popupMenu_pos=LPoint3f(0, 0, 0), popupMenu_relief='raised', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmCreateRoom, ) self.optionDifficulty.setTransparency(0) def show(self): self.frmCreateRoom.show() def hide(self): self.frmCreateRoom.hide() def destroy(self): self.frmCreateRoom.destroy()
class GUI: def __init__(self, rootParent=None): self.frmChat = DirectFrame( frameColor=(0.25, 0.25, 0.25, 1.0), frameSize=(-0.4, 0.4, -1.25, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmChat.setTransparency(0) self.frmMessages = DirectScrolledFrame( borderWidth=(0.005, 0.005), canvasSize=(-0.38, 0.34, -1.2, 0.0), frameColor=(1, 1, 1, 1), frameSize=(-0.38, 0.38, -1.0, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.1), relief=3, scrollBarWidth=0.03, state='normal', horizontalScroll_borderWidth=(0.01, 0.01), horizontalScroll_frameSize=(-0.05, 0.05, -0.015, 0.015), horizontalScroll_hpr=LVecBase3f(0, 0, 0), horizontalScroll_pos=LPoint3f(0, 0, 0), horizontalScroll_decButton_borderWidth=(0.01, 0.01), horizontalScroll_decButton_frameSize=(-0.05, 0.05, -0.04, 0.04), horizontalScroll_decButton_hpr=LVecBase3f(0, 0, 0), horizontalScroll_decButton_pos=LPoint3f(0, 0, 0), horizontalScroll_incButton_borderWidth=(0.01, 0.01), horizontalScroll_incButton_frameSize=(-0.05, 0.05, -0.04, 0.04), horizontalScroll_incButton_hpr=LVecBase3f(0, 0, 0), horizontalScroll_incButton_pos=LPoint3f(0, 0, 0), horizontalScroll_thumb_borderWidth=(0.01, 0.01), horizontalScroll_thumb_hpr=LVecBase3f(0, 0, 0), horizontalScroll_thumb_pos=LPoint3f(0, 0, 0), verticalScroll_borderWidth=(0.01, 0.01), verticalScroll_frameSize=(-0.015, 0.015, -0.05, 0.05), verticalScroll_hpr=LVecBase3f(0, 0, 0), verticalScroll_pos=LPoint3f(0, 0, 0), verticalScroll_decButton_borderWidth=(0.01, 0.01), verticalScroll_decButton_frameSize=(-0.04, 0.04, -0.05, 0.05), verticalScroll_decButton_hpr=LVecBase3f(0, 0, 0), verticalScroll_decButton_pos=LPoint3f(0.36, 0, -0.02), verticalScroll_incButton_borderWidth=(0.01, 0.01), verticalScroll_incButton_frameSize=(-0.04, 0.04, -0.05, 0.05), verticalScroll_incButton_hpr=LVecBase3f(0, 0, 0), verticalScroll_incButton_pos=LPoint3f(0.36, 0, -0.98), verticalScroll_thumb_borderWidth=(0.01, 0.01), verticalScroll_thumb_hpr=LVecBase3f(0, 0, 0), verticalScroll_thumb_pos=LPoint3f(0.36, 0, -0.418625), parent=self.frmChat, ) self.frmMessages.setTransparency(0) self.txtMessage = DirectEntry( borderWidth=(0.005, 0.005), frameColor=(1.0, 1.0, 1.0, 1.0), hpr=LVecBase3f(0, 0, 0), overflow=1, pos=LPoint3f(-0.375, 0, -1.195), relief=3, scale=LVecBase3f(0.045, 0.045, 0.045), width=14.0, text_align=TextNode.A_left, text_scale=(1.0, 1.0), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmChat, ) self.txtMessage.setTransparency(0) self.btnSend = DirectButton( frameColor=(0.0, 0.0, 0.0, 0.0), frameSize=(-0.4, 0.4, -0.4, 0.4), hpr=LVecBase3f(0, 0, 0), image='assets/chat/ChatSend.png', pos=LPoint3f(0.33, 0, -1.18), relief=1, scale=LVecBase3f(0.1, 0.1, 0.1), text='', image_scale=LVecBase3f(0.4, 1, 0.4), image_pos=LPoint3f(0, 0, 0), text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmChat, command=base.messenger.send, extraArgs=["sendMessage"], ) self.btnSend.setTransparency(1) self.btnToggleChat = DirectButton( frameColor=(0.15, 0.15, 0.15, 1.0), frameSize=(-0.4, 0.4, -0.02, 0.05), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.05), relief=1, scale=LVecBase3f(1, 1, 1), text='Toggle Chat', text_align=TextNode.A_center, text_scale=(0.05, 0.05), text_pos=(0, 0), text_fg=LVecBase4f(0.8, 0.8, 0.8, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=rootParent, command=base.messenger.send, extraArgs=["toggleChat"], ) self.btnToggleChat.setTransparency(0) def show(self): self.frmChat.show() self.btnToggleChat.show() def hide(self): self.frmChat.hide() self.btnToggleChat.hide() def destroy(self): self.frmChat.destroy() self.btnToggleChat.destroy()
class GUI: def __init__(self, rootParent=None): self.frmBack = DirectFrame( frameColor=(0.0, 0.0, 0.0, 1.0), frameSize=(-0.8, 0.8, -0.8, 0.8), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmBack.setTransparency(0) self.pg671 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-0.893750011920929, 1.0187499523162842, -0.11250001192092896, 0.7124999761581421), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.5), scale=LVecBase3f(0.2, 0.2, 0.2), text='END', text_align=TextNode.A_center, text_scale=(1.0, 1.0), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmBack, ) self.pg671.setTransparency(0) self.lblEnding = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-8.0, 8.0, -0.325, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.025, 0, -0.675), scale=LVecBase3f(0.1, 0.1, 0.1), text="You've found ending x/x", text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmBack, ) self.lblEnding.setTransparency(0) self.pg6340 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-0.893750011920929, 1.0187499523162842, -0.11250001192092896, 0.7124999761581421), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.125, 0, 0.65), scale=LVecBase3f(0.05, 0.05, 0.05), text='the', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmBack, ) self.pg6340.setTransparency(0) self.pg1228 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-8.0, 8.0, -0.325, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.35), scale=LVecBase3f(0.05, 0.1, 0.056), text='A Game By', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmBack, ) self.pg1228.setTransparency(0) self.pg1785 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-8.0, 8.0, -0.325, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.275), scale=LVecBase3f(0.08, 0.1, 0.08), text='Fireclaw', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmBack, ) self.pg1785.setTransparency(0) self.pg4435 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-8.0, 8.0, -0.325, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.175), scale=LVecBase3f(0.05, 0.1, 0.056), text='Music from Jamendo by Golden Antelope', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmBack, ) self.pg4435.setTransparency(0) self.pg5320 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-8.0, 8.0, -0.325, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.1), scale=LVecBase3f(0.05, 0.1, 0.056), text='Audio from freesound by reinsamba', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmBack, ) self.pg5320.setTransparency(0) def show(self): self.frmBack.show() def hide(self): self.frmBack.hide() def destroy(self): self.frmBack.destroy()
class GUI: def __init__(self, rootParent=None): self.frmMain = DirectFrame( frameColor=(1, 1, 1, 1), frameSize=(-1.777, 1.777, -1.0, 1.0), hpr=LVecBase3f(0, 0, 0), image='assets/menu/Background.png', pos=LPoint3f(0, 0, 0), image_scale=LVecBase3f(1.77778, 0, 1.1638), image_pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmMain.setTransparency(0) self.lblptions = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.8), scale=LVecBase3f(0.1, 0.1, 0.1), text='Options', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblptions.setTransparency(0) self.lblServer = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.75, 0, 0.175), scale=LVecBase3f(1, 1, 1), text='Game Server URL:', text_align=TextNode.A_left, text_scale=(0.05, 0.05), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblServer.setTransparency(0) self.btnOk = DirectButton( hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.375, 0, -0.775), relief=1, scale=LVecBase3f(0.1, 0.1, 0.1), text='Ok', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, command=base.messenger.send, extraArgs=["options_ok"], pressEffect=1, ) self.btnOk.setTransparency(0) self.btnCancel = DirectButton( hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.275, 0, -0.775), relief=1, scale=LVecBase3f(0.1, 0.1, 0.1), text='Cancel', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, command=base.messenger.send, extraArgs=["options_cancel"], pressEffect=1, ) self.btnCancel.setTransparency(0) self.txtServer = DirectEntry( borderWidth=(0.01, 0.01), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.15, 0, 0.17), scale=LVecBase3f(1, 1, 1), width=25.0, text_align=TextNode.A_left, text_scale=(0.05, 0.05), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.txtServer.setTransparency(0) self.cbMusic = DirectCheckButton( frameSize=(-3.0, 2.0, -0.3, 1.0), hpr=LVecBase3f(0, 0, 0), indicatorValue=1, pos=LPoint3f(0, 0, -0.21), scale=LVecBase3f(0.05, 0.1, 0.05), text='Music', indicator_hpr=LVecBase3f(0, 0, 0), indicator_pos=LPoint3f(-2.625, 0, 0.05), indicator_relief='sunken', indicator_text_align=TextNode.A_center, indicator_text_scale=(1, 1), indicator_text_pos=(0, -0.2), indicator_text_fg=LVecBase4f(0, 0, 0, 1), indicator_text_bg=LVecBase4f(0, 0, 0, 0), text_align=TextNode.A_center, text_scale=(1.0, 1.0), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.cbMusic.setTransparency(0) self.cbSFX = DirectCheckButton( frameSize=(-3.0, 2.0, -0.3, 1.0), hpr=LVecBase3f(0, 0, 0), indicatorValue=1, pos=LPoint3f(0, 0, -0.315), scale=LVecBase3f(0.05, 0.1, 0.05), text='SFX', indicator_hpr=LVecBase3f(0, 0, 0), indicator_pos=LPoint3f(-2.625, 0, 0.05), indicator_relief='sunken', indicator_text_align=TextNode.A_center, indicator_text_scale=(1, 1), indicator_text_pos=(0, -0.2), indicator_text_fg=LVecBase4f(0, 0, 0, 1), indicator_text_bg=LVecBase4f(0, 0, 0, 0), text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.cbSFX.setTransparency(0) self.lblAudio = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.1), scale=LVecBase3f(0.1, 0.1, 0.1), text='Audio', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblAudio.setTransparency(0) self.lblConnection = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.3), scale=LVecBase3f(0.1, 0.1, 0.1), text='Connection', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblConnection.setTransparency(0) def show(self): self.frmMain.show() def hide(self): self.frmMain.hide() def destroy(self): self.frmMain.destroy()
class GUI: def __init__(self, rootParent=None): self.frmInventory = DirectFrame( frameColor=(0.2, 0.2, 0.2, 1.0), frameSize=(-0.3, 0.3, -0.5, 0.5), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.725, 0, 0.2), parent=rootParent, ) self.frmInventory.setTransparency(0) self.frmContent = DirectScrolledFrame( canvasSize=(-0.8, 0.8, -0.8, 0.8), frameColor=(0.2, 0.2, 0.2, 1.0), frameSize=(-0.8, 0.8, -0.8, 0.8), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.475, 0, 0.1), scrollBarWidth=0.08, state='normal', horizontalScroll_borderWidth=(0.01, 0.01), horizontalScroll_frameSize=(-0.05, 0.05, -0.04, 0.04), horizontalScroll_hpr=LVecBase3f(0, 0, 0), horizontalScroll_pos=LPoint3f(0, 0, 0), horizontalScroll_decButton_borderWidth=(0.01, 0.01), horizontalScroll_decButton_frameSize=(-0.05, 0.05, -0.04, 0.04), horizontalScroll_decButton_hpr=LVecBase3f(0, 0, 0), horizontalScroll_decButton_pos=LPoint3f(0, 0, 0), horizontalScroll_incButton_borderWidth=(0.01, 0.01), horizontalScroll_incButton_frameSize=(-0.05, 0.05, -0.04, 0.04), horizontalScroll_incButton_hpr=LVecBase3f(0, 0, 0), horizontalScroll_incButton_pos=LPoint3f(0, 0, 0), horizontalScroll_thumb_borderWidth=(0.01, 0.01), horizontalScroll_thumb_hpr=LVecBase3f(0, 0, 0), horizontalScroll_thumb_pos=LPoint3f(0, 0, 0), verticalScroll_borderWidth=(0.01, 0.01), verticalScroll_frameSize=(-0.04, 0.04, -0.05, 0.05), verticalScroll_hpr=LVecBase3f(0, 0, 0), verticalScroll_pos=LPoint3f(0, 0, 0), verticalScroll_decButton_borderWidth=(0.01, 0.01), verticalScroll_decButton_frameSize=(-0.04, 0.04, -0.05, 0.05), verticalScroll_decButton_hpr=LVecBase3f(0, 0, 0), verticalScroll_decButton_pos=LPoint3f(0, 0, 0), verticalScroll_incButton_borderWidth=(0.01, 0.01), verticalScroll_incButton_frameSize=(-0.04, 0.04, -0.05, 0.05), verticalScroll_incButton_hpr=LVecBase3f(0, 0, 0), verticalScroll_incButton_pos=LPoint3f(0, 0, 0), verticalScroll_thumb_borderWidth=(0.01, 0.01), verticalScroll_thumb_hpr=LVecBase3f(0, 0, 0), verticalScroll_thumb_pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmContent.setTransparency(1) self.btnQuit = DirectButton( frameSize=(-3.0, 3.0, -0.3, 0.9), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.725, 0, -0.85), scale=LVecBase3f(0.1, 0.1, 0.1), text='Quit', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, command=base.messenger.send, extraArgs=["quitGame"], pressEffect=1, ) self.btnQuit.setTransparency(0) self.btnAudioToggle = DirectButton( frameSize=(-3.0, 3.0, -0.3, 0.9), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.725, 0, -0.7), scale=LVecBase3f(0.1, 0.1, 0.1), text='Audio On', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, command=base.messenger.send, extraArgs=["toggleAudio"], pressEffect=1, ) self.btnAudioToggle.setTransparency(0) self.frmBorderOverlay = DirectFrame( frameColor=(1.0, 1.0, 1.0, 0.0), frameSize=(-0.8, 0.8, -0.8, 0.8), hpr=LVecBase3f(0, 0, 0), image='gameScreen/border.png', pos=LPoint3f(-0.475, 0, 0.1), image_scale=LVecBase3f(0.8, 1, 0.8), image_pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmBorderOverlay.setTransparency(1) self.lblInventory = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.725, 0, 0.775), scale=LVecBase3f(0.1, 0.1, 0.1), text='Inventory', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0.9, 0.9, 0.9, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, ) self.lblInventory.setTransparency(0) self.lblStory = DirectLabel( frameSize=(-0.125, 12.0, -0.313, 0.925), hpr=LVecBase3f(0, 0, 0), pad=(0.2, 0.2), pos=LPoint3f(-1.26, 0, -0.845), scale=LVecBase3f(0.1, 0.1, 0.1), text='', text_align=TextNode.A_left, text_scale=(0.4, 0.4), text_pos=(0.0, 0.4), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=29.8, parent=rootParent, ) self.lblStory.setTransparency(0) self.btnContinue = DirectButton( frameSize=(-1.8, 1.8, -0.3, 0.9), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.145, 0, -0.845), scale=LVecBase3f(0.1, 0.1, 0.1), text='Cont.', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, command=base.messenger.send, extraArgs=["story_continue"], pressEffect=1, ) self.btnContinue.setTransparency(0) self.frmFadeOverlay = DirectFrame( frameColor=(0.0, 0.0, 0.0, 1.0), frameSize=(-0.8, 0.8, -0.8, 0.8), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.475, 0, 0.1), parent=rootParent, ) self.frmFadeOverlay.setTransparency(1) def show(self): self.frmInventory.show() self.frmContent.show() self.btnQuit.show() self.btnAudioToggle.show() self.frmBorderOverlay.show() self.lblInventory.show() self.lblStory.show() self.btnContinue.show() self.frmFadeOverlay.show() def hide(self): self.frmInventory.hide() self.frmContent.hide() self.btnQuit.hide() self.btnAudioToggle.hide() self.frmBorderOverlay.hide() self.lblInventory.hide() self.lblStory.hide() self.btnContinue.hide() self.frmFadeOverlay.hide() def destroy(self): self.frmInventory.destroy() self.frmContent.destroy() self.btnQuit.destroy() self.btnAudioToggle.destroy() self.frmBorderOverlay.destroy() self.lblInventory.destroy() self.lblStory.destroy() self.btnContinue.destroy() self.frmFadeOverlay.destroy()
class GUI: def __init__(self, rootParent=None): self.frmMain = DirectFrame( frameColor=(1, 1, 1, 1), frameSize=(-1.777778, 1.77777778, -1.1638, 1.1638), hpr=LVecBase3f(0, 0, 0), image='assets/menu/Background.png', pos=LPoint3f(0, 0, 0), image_scale=LVecBase3f(1.77778, 1, 1.1638), image_pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmMain.setTransparency(0) self.frmMenu = DirectFrame( frameColor=(1, 1, 1, 1), frameSize=(-0.4, 0.4, -0.5, 0.5), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), parent=self.frmMain, ) self.frmMenu.setTransparency(0) self.btnSingleplayer = DirectButton( frameSize=(-4.0, 4.0, -0.4, 1.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.2), scale=LVecBase3f(0.1, 0.1, 0.1), text='Singleplayer', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMenu, command=base.messenger.send, extraArgs=["menu_singleplayer"], ) self.btnSingleplayer.setTransparency(0) self.btnMultiplayer = DirectButton( frameSize=(-4.0, 4.0, -0.4, 1.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.025), scale=LVecBase3f(0.1, 0.1, 0.1), text='Multiplayer', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMenu, command=base.messenger.send, extraArgs=["menu_multiplayer"], ) self.btnMultiplayer.setTransparency(0) self.btnOptions = DirectButton( frameSize=(-4.0, 4.0, -0.4, 1.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.15), scale=LVecBase3f(0.1, 0.1, 0.1), text='Options', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMenu, command=base.messenger.send, extraArgs=["menu_options"], ) self.btnOptions.setTransparency(0) self.btnQuit = DirectButton( frameSize=(-4.0, 4.0, -0.4, 1.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.325), scale=LVecBase3f(0.1, 0.1, 0.1), text='Quit', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMenu, command=base.messenger.send, extraArgs=["menu_quit"], ) self.btnQuit.setTransparency(0) self.lblLogo = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-6.0, 6.0, -1.5, 1.5), hpr=LVecBase3f(0, 0, 0), image='./assets/menu/Banner.png', pos=LPoint3f(0, 0, 0.475), scale=LVecBase3f(0.1, 0.1, 0.1), text='', image_scale=LVecBase3f(6, 1, 1.5), image_pos=LPoint3f(0, 0, 0), text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMenu, ) self.lblLogo.setTransparency(1) def show(self): self.frmMain.show() def hide(self): self.frmMain.hide() def destroy(self): self.frmMain.destroy()
class Chapter2(ChapterBase): def __init__(self, rootParent): ChapterBase.__init__(self, "chapter2/warehouse.png", rootParent) self.startPos = (-0.7, 0, -0.5) self.overlay = Overlay(rootParent) self.flashlightLight = DirectFrame( frameColor=(0.0, 0.0, 0.0, 1.0), frameSize=(-3.5, 3.5, -3.5, 3.5), image='chapter2/flashlightLight.png', image_scale=(3.5, 1, 3.5), parent=rootParent, ) self.flashlightLight.setTransparency(1) self.flashLightActive = False self.accept("inventory_flashlight", self.activateFlashlight) self.accept("box1", self.box1) self.accept("box2", self.box2) self.accept("box3", self.box3) self.accept("mike", self.talkMike) base.messenger.send("animateChar", ["idle", "r", 3, True]) base.messenger.send("showNote", ["I should turn on my flashlight"]) base.taskMgr.add(self.flashlightTask, "flaslightLightTask") def destroy(self): base.taskMgr.remove("flaslightLightTask") ChapterBase.destroy(self) def talkMike(self): if self.flashLightActive: base.messenger.send("showNote", ["Wow! Such light. Much bright! ... Now I can check all the boxes!"]) else: base.messenger.send("showNote", ["Yeah, who needs a lamp, I can just feel my way around here... Ouch my toe! Guess I should power up that lamp."]) def activateFlashlight(self): if self.flashLightActive: self.flashlightLight["frameColor"] = (0,0,0,1) base.messenger.send("showNote", ["Without light, I won't see much in here..."]) else: self.flashlightLight["frameColor"] = (0,0,0,0) base.messenger.send("showNote", ["That's better, now let's use that lightspot to search around this warehouse. (Light follows cursor)"]) self.flashLightActive = not self.flashLightActive def flashlightTask(self, task): mwn = base.mouseWatcherNode if mwn.hasMouse(): vMouse2render2d = Point3(mwn.getMouse()[0], 0, mwn.getMouse()[1]) self.flashlightLight.setPos(render2d, vMouse2render2d) return task.cont def box1(self): base.messenger.send("addInventory", ["fakeID", "chapter2/fakeID.png"]) base.messenger.send("showNote", ["O. Mike: Hey, look at that, fake ID cards of secret agents. This may be bigger than I thought..."]) base.messenger.send("moveChar", [(-0.25, 0, -0.3)]) def box2(self): base.messenger.send("showNote", ["O. Mike: A box full of weapons. Interesting, I'll better call the reinforcement to pick them up."]) def box3(self): self.accept("continue", base.messenger.send, extraArgs=["switchToChapter", ["chapter3"]]) base.messenger.send("moveChar", [(0.15, 0, -0.35)]) base.messenger.send("showText", [STORY_BOX.copy()])
class GUI: def __init__(self, rootParent=None): self.btnBox1 = DirectButton( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-1.0, 1.0, -1.0, 1.0), hpr=LVecBase3f(0, 0, 0), image='chapter2/box1.png', pos=LPoint3f(-0.25, 0, -0.35), relief=1, scale=LVecBase3f(0.05, 0.08, 0.05), text='', image_scale=LVecBase3f(1, 1, 1), image_pos=LPoint3f(0, 0, 0), text_align=TextNode.A_center, text_scale=(1.0, 1.0), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, command=base.messenger.send, extraArgs=["box1"], pressEffect=0, ) self.btnBox1.setTransparency(1) self.btnBox2 = DirectButton( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-1.0, 1.0, -1.0, 1.0), hpr=LVecBase3f(0, 0, 0), image='chapter2/box2.png', pos=LPoint3f(0.4, 0, 0.16), relief=1, scale=LVecBase3f(0.05, 0.08, 0.05), text='', image_scale=LVecBase3f(1, 1, 1), image_pos=LPoint3f(0, 0, 0), text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, command=base.messenger.send, extraArgs=["box2"], pressEffect=0, ) self.btnBox2.setTransparency(1) self.btnBox3 = DirectButton( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-1.0, 1.0, -1.0, 1.0), hpr=LVecBase3f(0, 0, 0), image='chapter2/box3.png', pos=LPoint3f(0.305, 0, -0.435), relief=1, scale=LVecBase3f(0.08, 0.1, 0.08), text='', image_scale=LVecBase3f(1, 1, 1), image_pos=LPoint3f(0, 0, 0), text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, command=base.messenger.send, extraArgs=["box3"], pressEffect=0, ) self.btnBox3.setTransparency(1) self.overlay = DirectFrame( frameColor=(1.0, 1.0, 1.0, 0.0), frameSize=(-0.8, 0.8, -0.8, 0.8), hpr=LVecBase3f(0, 0, 0), image='chapter2/overlay.png', pos=LPoint3f(0, 0, 0), image_scale=LVecBase3f(0.8, 1, 0.8), image_pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.overlay.setTransparency(1) def show(self): self.btnBox1.show() self.btnBox2.show() self.btnBox3.show() self.overlay.show() def hide(self): self.btnBox1.hide() self.btnBox2.hide() self.btnBox3.hide() self.overlay.hide() def destroy(self): self.btnBox1.destroy() self.btnBox2.destroy() self.btnBox3.destroy() self.overlay.destroy()
class GUI: def __init__(self, rootParent=None): self.frmMain = DirectFrame( frameColor=(1, 1, 1, 1), frameSize=(-1.777778, 1.77777778, -1.1638, 1.1638), hpr=LVecBase3f(0, 0, 0), image='assets/menu/Background.png', pos=LPoint3f(0, 0, 0), image_scale=LVecBase3f(1.77778, 1, 1.1638), image_pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmMain.setTransparency(0) self.frmSinglePlayerCreateGame = DirectFrame( borderWidth=(0.01, 0.01), frameColor=(1, 1, 1, 1), frameSize=(-0.65, 0.65, -0.55, 0.55), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.425, 0, 0), relief=5, parent=self.frmMain, ) self.frmSinglePlayerCreateGame.setTransparency(0) self.lblHeader = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.425), scale=LVecBase3f(0.1, 0.1, 0.1), text='Singleplayer Game', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmSinglePlayerCreateGame, ) self.lblHeader.setTransparency(0) self.lblGameType = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.6, 0, 0.225), scale=LVecBase3f(0.1, 0.1, 0.1), text='Game Type', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmSinglePlayerCreateGame, ) self.lblGameType.setTransparency(0) self.lblNumNPCs = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.6, 0, -0.125), scale=LVecBase3f(0.1, 0.1, 0.1), text='Number of NPCs ', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmSinglePlayerCreateGame, ) self.lblNumNPCs.setTransparency(0) self.optionNumNPCs = DirectOptionMenu( items=['item1'], frameSize=(0.07500000298023224, 3.012500149011612, -0.11250001192092896, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.2, 0, -0.115), scale=LVecBase3f(0.1, 0.1, 0.1), text='item1', cancelframe_frameSize=(-1, 1, -1, 1), cancelframe_hpr=LVecBase3f(0, 0, 0), cancelframe_pos=LPoint3f(0, 0, 0), cancelframe_relief=None, item_frameSize=(0.07500000298023224, 2.4125001430511475, -0.11250001192092896, 0.75), item_hpr=LVecBase3f(0, 0, 0), item_pos=LPoint3f(-0.075, 0, -0.75), item_text='item1', item0_text_align=TextNode.A_left, item0_text_scale=(1, 1), item0_text_pos=(0, 0), item0_text_fg=LVecBase4f(0, 0, 0, 1), item0_text_bg=LVecBase4f(0, 0, 0, 0), item0_text_wordwrap=None, popupMarker_frameSize=(-0.5, 0.5, -0.2, 0.2), popupMarker_hpr=LVecBase3f(0, 0, 0), popupMarker_pos=LPoint3f(2.7125, 0, 0.31875), popupMarker_relief=2, popupMarker_scale=LVecBase3f(0.4, 0.4, 0.4), popupMenu_frameSize=(0, 2.3375001400709152, -0.862500011920929, 0), popupMenu_hpr=LVecBase3f(0, 0, 0), popupMenu_pos=LPoint3f(0, 0, 0), popupMenu_relief='raised', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmSinglePlayerCreateGame, ) self.optionNumNPCs.setTransparency(0) self.optionGameType = DirectOptionMenu( items=['item1'], frameSize=(0.07500000298023224, 3.012500149011612, -0.11250001192092896, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.2, 0, 0.22), scale=LVecBase3f(0.1, 0.1, 0.1), text='item1', cancelframe_frameSize=(-1, 1, -1, 1), cancelframe_hpr=LVecBase3f(0, 0, 0), cancelframe_pos=LPoint3f(0, 0, 0), cancelframe_relief=None, item_frameSize=(0.07500000298023224, 2.4125001430511475, -0.11250001192092896, 0.75), item_hpr=LVecBase3f(0, 0, 0), item_pos=LPoint3f(-0.075, 0, -0.75), item_text='item1', item0_text_align=TextNode.A_left, item0_text_scale=(1, 1), item0_text_pos=(0, 0), item0_text_fg=LVecBase4f(0, 0, 0, 1), item0_text_bg=LVecBase4f(0, 0, 0, 0), item0_text_wordwrap=None, popupMarker_frameSize=(-0.5, 0.5, -0.2, 0.2), popupMarker_hpr=LVecBase3f(0, 0, 0), popupMarker_pos=LPoint3f(2.7125, 0, 0.31875), popupMarker_relief=2, popupMarker_scale=LVecBase3f(0.4, 0.4, 0.4), popupMenu_frameSize=(0, 2.3375001400709152, -0.862500011920929, 0), popupMenu_hpr=LVecBase3f(0, 0, 0), popupMenu_pos=LPoint3f(0, 0, 0), popupMenu_relief='raised', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmSinglePlayerCreateGame, ) self.optionGameType.setTransparency(0) self.btnStart = DirectButton( hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.35, 0, -0.45), scale=LVecBase3f(0.1, 0.1, 0.1), text='Start', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmSinglePlayerCreateGame, command=base.messenger.send, extraArgs=["singlePlayerCreateGame_start"], ) self.btnStart.setTransparency(0) self.lblPlayerClass = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.6, 0, 0.05), scale=LVecBase3f(0.1, 0.1, 0.1), text='Player Class', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmSinglePlayerCreateGame, ) self.lblPlayerClass.setTransparency(0) self.optionPlayerClass = DirectOptionMenu( items=['item1'], frameSize=(0.07500000298023224, 3.012500149011612, -0.11250001192092896, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.2, 0, 0.055), scale=LVecBase3f(0.1, 0.1, 0.1), text='item1', cancelframe_frameSize=(-1, 1, -1, 1), cancelframe_hpr=LVecBase3f(0, 0, 0), cancelframe_pos=LPoint3f(0, 0, 0), cancelframe_relief=None, item_frameSize=(0.07500000298023224, 2.4125001430511475, -0.11250001192092896, 0.75), item_hpr=LVecBase3f(0, 0, 0), item_pos=LPoint3f(-0.075, 0, -0.75), item_text='item1', item0_text_align=TextNode.A_left, item0_text_scale=(1, 1), item0_text_pos=(0, 0), item0_text_fg=LVecBase4f(0, 0, 0, 1), item0_text_bg=LVecBase4f(0, 0, 0, 0), item0_text_wordwrap=None, popupMarker_frameSize=(-0.5, 0.5, -0.2, 0.2), popupMarker_hpr=LVecBase3f(0, 0, 0), popupMarker_pos=LPoint3f(2.7125, 0, 0.31875), popupMarker_relief=2, popupMarker_scale=LVecBase3f(0.4, 0.4, 0.4), popupMenu_frameSize=(0, 2.3375001400709152, -0.862500011920929, 0), popupMenu_hpr=LVecBase3f(0, 0, 0), popupMenu_pos=LPoint3f(0, 0, 0), popupMenu_relief='raised', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmSinglePlayerCreateGame, ) self.optionPlayerClass.setTransparency(0) self.btnCancel = DirectButton( hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.325, 0, -0.45), scale=LVecBase3f(0.1, 0.1, 0.1), text='Cancel', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmSinglePlayerCreateGame, command=base.messenger.send, extraArgs=["singlePlayerCreateGame_back"], ) self.btnCancel.setTransparency(0) self.lblDifficulty = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.6, 0, -0.29), scale=LVecBase3f(0.1, 0.1, 0.1), text='Difficulty', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmSinglePlayerCreateGame, ) self.lblDifficulty.setTransparency(0) self.optionDifficulty = DirectOptionMenu( items=['item1'], frameSize=(0.07500000298023224, 3.012500149011612, -0.11250001192092896, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.2, 0, -0.29), scale=LVecBase3f(0.1, 0.1, 0.1), text='item1', cancelframe_frameSize=(-1, 1, -1, 1), cancelframe_hpr=LVecBase3f(0, 0, 0), cancelframe_pos=LPoint3f(0, 0, 0), cancelframe_relief=None, item_frameSize=(0.07500000298023224, 2.4125001430511475, -0.11250001192092896, 0.75), item_hpr=LVecBase3f(0, 0, 0), item_pos=LPoint3f(-0.075, 0, -0.75), item_text='item1', item0_text_align=TextNode.A_left, item0_text_scale=(1, 1), item0_text_pos=(0, 0), item0_text_fg=LVecBase4f(0, 0, 0, 1), item0_text_bg=LVecBase4f(0, 0, 0, 0), item0_text_wordwrap=None, popupMarker_frameSize=(-0.5, 0.5, -0.2, 0.2), popupMarker_hpr=LVecBase3f(0, 0, 0), popupMarker_pos=LPoint3f(2.7125, 0, 0.31875), popupMarker_relief=2, popupMarker_scale=LVecBase3f(0.4, 0.4, 0.4), popupMenu_frameSize=(0, 2.3375001400709152, -0.862500011920929, 0), popupMenu_hpr=LVecBase3f(0, 0, 0), popupMenu_pos=LPoint3f(0, 0, 0), popupMenu_relief='raised', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmSinglePlayerCreateGame, ) self.optionDifficulty.setTransparency(0) self.frmPlayerInfo = DirectFrame( borderWidth=(0.01, 0.01), frameColor=(1, 1, 1, 1), frameSize=(-0.5, 0.5, -0.55, 0.55), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.765, 0, 0), relief=3, parent=self.frmMain, ) self.frmPlayerInfo.setTransparency(0) self.lblInfoHeader = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.45), scale=LVecBase3f(0.1, 0.1, 0.1), text='Info', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmPlayerInfo, ) self.lblInfoHeader.setTransparency(0) self.frmImageHero = DirectFrame( frameColor=(1, 1, 1, 1), frameSize=(-0.15, 0.15, -0.2, 0.2), hpr=LVecBase3f(0, 0, 0), image= '/home/fireclaw/workspace/Ankandora/AnkandoraLight/design/guiGraphics/heroArcher.png', pos=LPoint3f(-0.275, 0, 0.195), image_scale=LVecBase3f(0.15, 1, 0.2), image_pos=LPoint3f(0, 0, 0), parent=self.frmPlayerInfo, ) self.frmImageHero.setTransparency(1) self.lblClassDescription = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.12, 0, 0.31), scale=LVecBase3f(0.1, 0.1, 0.1), text='The archer shoots from afar and gains the first-strike', text_align=TextNode.A_left, text_scale=(0.6, 0.6), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=10.0, parent=self.frmPlayerInfo, ) self.lblClassDescription.setTransparency(0) self.lblHealth = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.28, 0, -0.1), scale=LVecBase3f(0.1, 0.1, 0.1), text='Health', text_align=TextNode.A_center, text_scale=(0.7, 0.7), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmPlayerInfo, ) self.lblHealth.setTransparency(0) self.lblAttack = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.275, 0, -0.285), scale=LVecBase3f(0.1, 0.1, 0.1), text='Attack', text_align=TextNode.A_center, text_scale=(0.7, 0.7), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmPlayerInfo, ) self.lblAttack.setTransparency(0) self.lblHealthValue = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.275, 0, -0.17), scale=LVecBase3f(0.1, 0.1, 0.1), text='7', text_align=TextNode.A_center, text_scale=(0.6, 0.6), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmPlayerInfo, ) self.lblHealthValue.setTransparency(0) self.lblAttackValue = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.275, 0, -0.36), scale=LVecBase3f(0.1, 0.1, 0.1), text='4', text_align=TextNode.A_center, text_scale=(0.6, 0.6), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmPlayerInfo, ) self.lblAttackValue.setTransparency(0) def show(self): self.frmMain.show() def hide(self): self.frmMain.hide() def destroy(self): self.frmMain.destroy()
class GUI: def __init__(self, rootParent=None): self.frmStats = DirectFrame( frameColor=(1, 1, 1, 1), frameSize=(-0.55, 0.55, -0.1, 0.1), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmStats.setTransparency(0) self.lblName = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.3, 0, 0.05), scale=LVecBase3f(0.05, 0.05, 0.05), text='Name: ', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmStats, ) self.lblName.setTransparency(0) self.lblAttack = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.3, 0, -0.01), scale=LVecBase3f(0.05, 0.05, 0.05), text='Attack:', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmStats, ) self.lblAttack.setTransparency(0) self.lblDefense = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.3, 0, -0.075), scale=LVecBase3f(0.05, 0.05, 0.05), text='Defense:', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmStats, ) self.lblDefense.setTransparency(0) self.imgPlayer = DirectLabel( frameSize=(-0.9, 0.9, -0.9, 0.9), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.445, 0, 0), scale=LVecBase3f(0.1, 0.1, 0.1), text='', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmStats, ) self.imgPlayer.setTransparency(0) self.lblNameValue = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.075, 0, 0.05), scale=LVecBase3f(0.05, 0.05, 0.05), text='Player Name', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmStats, ) self.lblNameValue.setTransparency(0) self.lblAttackValue = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.075, 0, -0.01), scale=LVecBase3f(0.05, 0.05, 0.05), text='5', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmStats, ) self.lblAttackValue.setTransparency(0) self.lblDefenseValue = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.075, 0, -0.075), scale=LVecBase3f(0.05, 0.05, 0.05), text='10', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmStats, ) self.lblDefenseValue.setTransparency(0) self.lblHealtPotions = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.12, 0, -0.075), scale=LVecBase3f(0.05, 0.05, 0.05), text='Potions:', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmStats, ) self.lblHealtPotions.setTransparency(0) self.lblHealthPotionsValue = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.325, 0, -0.075), scale=LVecBase3f(0.05, 0.05, 0.05), text='3', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmStats, ) self.lblHealthPotionsValue.setTransparency(0) self.lblHit = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.125), scale=LVecBase3f(0.5, 0.5, 0.5), text='5', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmStats, ) self.lblHit.setTransparency(0) def show(self): self.frmStats.show() def hide(self): self.frmStats.hide() def destroy(self): self.frmStats.destroy()
class SocketBase: def __init__(self, node, name): self.socketID = uuid4() self.node = node self.name = name self.height = 0.2 self.type = None self.value = None self.connected = False self.frame = None self.allowMultiConnect = False def enable(self): """Enable any elements on the node""" pass def disable(self): """Disable any elements on the node that could possbily interfer with the mouse watcher and the drag/drop feature""" pass def getValue(self): """Returns a string serializable value stored in this node""" return self.value def setValue(self, value): self.value = value def createPlug(self, parent): self.plug = DirectFrame( state=DGG.NORMAL, image="icons/Plug.png", image_scale=.05, frameColor=(0, 0, 0, 0), frameSize=(-0.05, 0.05, -0.05, 0.05), parent=parent, ) self.plug.setTransparency(TransparencyAttrib.M_multisample) self.setupBind() def setupBind(self): self.plug.bind(DGG.B1PRESS, self.startPlug) self.plug.bind(DGG.B1RELEASE, self.releasePlug) self.plug.bind(DGG.ENTER, self.endPlug) def startPlug(self, event): base.messenger.send("startPlug", [self]) base.messenger.send("startLineDrawing", [self.plug.getPos(render2d)]) def endPlug(self, event): taskMgr.remove("delayedPlugRelease") base.messenger.send("endPlug", [self]) base.messenger.send("connectPlugs") def releasePlug(self, event): base.messenger.send("stopLineDrawing") taskMgr.doMethodLater(0.2, base.messenger.send, "delayedPlugRelease", extraArgs=["cancelPlug"]) def updateConnectedNodes(self, *args): base.messenger.send("updateConnectedNodes", [self.node]) def setConnected(self, connected): self.connected = connected if self.connected: self.plug["image"] = "icons/PlugConnectedGood.png" else: self.plug["image"] = "icons/Plug.png"
class GUI: def __init__(self, rootParent=None): self.frmMain = DirectFrame( frameColor=(0.25, 0.25, 0.25, 1.0), frameSize=(0.0, 2.0, -0.1, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmMain.setTransparency(0) self.btnLeave = DirectButton( hpr=LVecBase3f(0, 0, 0), pad=(0.1, 0.1), pos=LPoint3f(0.115, 0, -0.075), relief=1, scale=LVecBase3f(0.1, 0.1, 0.1), text='Leave', text_align=TextNode.A_center, text_scale=(0.75, 0.75), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, command=base.messenger.send, extraArgs=["leaveRoom"], ) self.btnLeave.setTransparency(0) self.lblPlayerName = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.55, 0, -0.075), scale=LVecBase3f(0.1, 0.1, 0.1), text='Label', text_align=TextNode.A_left, text_scale=(0.75, 0.75), text_pos=(0, 0), text_fg=LVecBase4f(0.8, 0.8, 0.8, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblPlayerName.setTransparency(0) self.pg1983 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.42, 0, -0.075), scale=LVecBase3f(0.1, 0.1, 0.1), text='Name:', text_align=TextNode.A_center, text_scale=(0.75, 0.75), text_pos=(0, 0), text_fg=LVecBase4f(0.6, 0.6, 0.6, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.pg1983.setTransparency(0) def show(self): self.frmMain.show() def hide(self): self.frmMain.hide() def destroy(self): self.frmMain.destroy()
class Menu(object): def __init__(self, main): self.main = main wx = base.win.get_x_size() wy = base.win.get_y_size() kx = 1920 ky = 1080 self.myFrame = DirectFrame(frameColor=(1, 1, 1, 1), frameSize=(0, kx, 0, ky)) menu_tex = loader.loadTexture("res/menu.png") menu_tex.set_minfilter(SamplerState.FT_nearest) menu_tex.set_magfilter(SamplerState.FT_linear) self.myFrame["frameTexture"] = menu_tex self.myFrame.reparentTo(base.pixel2d) self.myFrame.set_pos((wx - kx) / 2, 0, -(wy + ky) / 2) self.myFrame.set_transparency(True) self.startButton = DirectButton(text="", text_scale=1.0, text_fg=(0.2, 0.2, 0.2, 1), frameTexture="res/start_game.png", frameColor=(1, 1, 1, 1), frameSize=(-64, 64, -20, 20), command=self.main.startGame, relief=DGG.FLAT, rolloverSound=None, clickSound=None, parent=self.myFrame, scale=2.0, pos=(wx / 2 + 160, 0, wy / 2 + 50)) self.startButton.setTransparency(1) self.exitButton = DirectButton( text=("Exit Game"), pos=(0, 0, -.8), text_scale=.1, frameColor=(0, 0, 0, 0), relief=1, frameVisibleScale=(2, 3), command=exit, rolloverSound=None, clickSound=None, parent=self.myFrame, ) self.exitButton.setTransparency(1) self.resumeButton = DirectButton( text=("Resume"), pos=(.0, 0, .3), text_scale=.1, frameColor=(0, 0, 0, 0), relief=1, frameVisibleScale=(2, 3), command=self.main.resumeGame, rolloverSound=None, clickSound=None, parent=self.myFrame, ) self.resumeButton.setTransparency(1) self.resumeButton.hide() self.selectFrame = DirectFrame(frameColor=(1, 1, 1, 1), frameSize=(-64, 64, -20, 20), frameTexture="res/select.png") self.selectFrame.setTransparency(1) self.selectFrame.reparentTo(self.startButton) self.entries = [self.exitButton, self.startButton, self.resumeButton] self.activeEntry = 1 def clearKeys(self): base.ignore("arrow_up") base.ignore("arrow_down") base.ignore("arrow_left") base.ignore("arrow_right") base.ignore("escape") base.ignore("enter") def execSelection(self): self.entries[self.activeEntry]["command"]() def selectDown(self): if self.activeEntry == 0: self.activeEntry = len(self.entries) - 1 else: self.activeEntry -= 1 if self.entries[self.activeEntry].isHidden(): self.selectDown() return self.selectFrame.reparentTo(self.entries[self.activeEntry]) def selectUp(self): if self.activeEntry == len(self.entries) - 1: self.activeEntry = 0 else: self.activeEntry += 1 if self.entries[self.activeEntry].isHidden(): self.selectUp() return self.selectFrame.reparentTo(self.entries[self.activeEntry]) def hideMenu(self): self.clearKeys() self.main.gui.show() seq = Sequence(LerpColorScaleInterval(self.myFrame, 0.4, (1, 1, 1, 0)), Func(self.myFrame.hide)) seq.start() def hideResume(self): seq = Sequence( LerpColorScaleInterval(self.resumeButton, .5, (1, 1, 1, 0)), Func(self.resumeButton.hide)) seq.start() def showResume(self): self.resumeButton.show() #seq= Sequence( LerpColorScaleInterval(self.resumeButton, 1 ,(1,1,1,1)) ) #seq.start() def showMenu(self): self.clearKeys() base.accept("arrow_up", self.selectUp) base.accept("arrow_down", self.selectDown) base.accept("escape", exit) base.accept("enter", self.execSelection) self.myFrame.show() self.main.gui.hide() seq = Sequence(LerpColorScaleInterval(self.myFrame, .5, (1, 1, 1, 1))) seq.start()
class Player(object): """ Player is the main actor in the fps game """ HP = 100 EROSION = 0 updateTime = 0 speed = 10 FORWARD = Vec3(0, 2, 0) BACK = Vec3(0, -1, 0) LEFT = Vec3(-1, 0, 0) RIGHT = Vec3(1, 0, 0) STOP = Vec3(0) walk = STOP strafe = STOP readyToJump = False jump = 0 state = '' cameraState = 1 visionState = 0 RightButton = 0 LeftButton = 0 goodmanager = None isInteractive = False SLOW = 1 End = 0 Begin = 1 TaskState = End def __init__(self, goodmanager, m, g): """ inits the player """ # 6/17 self.walksound = loader.loadSfx("res/sounds/footstep.mp3") self.goodmanager = goodmanager self.menu = m self.game = g self.loadModel() self.setUpCamera() self.setMouseIcon() self.createCollisions() self.attachControls() self.initSkill() self.shoot = Shoot() # init mouse update task self.initSave() self.initTask() self.initMission() def initMission(self): if self.game.levelName == "tutorial": self.mission = Mission(self, self.menu) elif self.game.levelName == "levelTwo": self.mission = MissionTwo(self, self.menu) elif self.game.levelName == "levelThree": self.mission = MissionThree(self, self.menu) def initSave(self): self.erosionFrame = DirectFrame(frameColor=(0, 0, 0, 0), frameSize=(-1, 1, -1, 1), pos=(-1.2, 0, 0)) self.erosionFrame.hide() self.erosionFrame.setScale(.02, 1, .4) self.background = OnscreenImage('res/erosion_bar.png', pos=(0, 0, 0), scale=(1, 1, 1)) self.background.setTransparency(TransparencyAttrib.MAlpha) self.background.reparentTo(self.erosionFrame) # self.erosionBar = DirectWaitBar(value=self.EROSION, pos=(0, 0, 0), barTexture='res/erosion_value.png', # relief=None) # self.erosionBar.setHpr(0, 0, -90) # self.erosionBar.setScale(0.98, 1, 10) # self.erosionBar.hide() # self.erosionBar.reparentTo(self.erosionFrame) self.erosionBar = OnscreenImage('res/erosion_value.png', pos=(0, 0, 0), scale=(1, 1, 1)) self.erosionBar.setScale(1) self.erosionBar.setTransparency(TransparencyAttrib.MAlpha) self.erosionBar.reparentTo(self.erosionFrame) self.currentItemFrame = DirectFrame( frameColor=(0, 0, 0, 0), frameSize=(-2, 2, -2, 2), pos=(-1.2, 0, .8), image='res/models/items/injection.png', scale=(.1)) self.currentItemFrame.setTransparency(TransparencyAttrib.MAlpha) self.currentItemFrame.hide() # self.currentItemFrame.show() def initTask(self): if self.TaskState == self.Begin: return self.TaskState = self.Begin self.state = '' self.game.gameState = '' self.mouseIconNormal.show() taskMgr.add(self.mouseUpdate, "mouse-task") taskMgr.add(self.moveUpdate, "move-task") taskMgr.add(self.jumpUpdate, 'jump-task') taskMgr.add(self.erosionUpdate, "erosion-task") def endTask(self): if self.TaskState == self.End: return self.TaskState = self.End self.state = 'pause' self.mouseIconWatch.hide() self.mouseIconNormal.hide() taskMgr.remove('mouse-task') taskMgr.remove('move-task') taskMgr.remove('jump-task') taskMgr.remove('erosion-task') # reset update time self.updateTime = 5 def loadModel(self): """ make the nodepath for player """ # self.playerModel = Actor("res/models/ralph", {"run": "res/models/ralph-run", "walk": "res/models/ralph-walk"}) self.playerModel = Actor("res/models/hitman-model5", { "walk": "res/models/hitman-walk5", "stand": "res/models/hitman-stand" }) # self.playerModel = Actor("res/models/hitman2-model", {"walk": "res/models/hitman2-walk", "stand":"res/models/hitman-stand"}) self.playerModel.setH(180) self.playerModel.setZ(0) self.playerModel.setScale(1.1) # self.playerModel.hide() self.node = NodePath("player") self.node.reparentTo(render) self.playerModel.reparentTo(self.node) # self.node.setPos(0, 0, 10) self.node.setPos(-250, 265, 0) self.node.setHpr(150, 0, 0) self.node.setScale(20) self.node.hide(BitMask32.bit(0)) self.node.hide(BitMask32.bit(1)) def setMouseIcon(self): self.mouseIconNormal = OnscreenImage(image="res/mouse/mouse1.png", pos=(0, 1.1, 0)) self.mouseIconNormal.setTransparency(TransparencyAttrib.MAlpha) self.mouseIconNormal.setScale(0.02) self.mouseIconNormal.setLightOff() self.mouseIconNormal.setSa(0.5) self.mouseIconWatch = OnscreenImage(image="res/mouse/mouse2.png", pos=(0, 1.1, 0)) self.mouseIconWatch.setTransparency(TransparencyAttrib.MAlpha) self.mouseIconWatch.setScale(0.05) self.mouseIconWatch.setSa(0.5) self.mouseIconWatch.setLightOff() self.mouseIconNormal.reparentTo(base.camera) self.mouseIconWatch.reparentTo(base.camera) self.mouseIconWatch.hide() def SetMouseModeNormal(self, mode): if mode == 'Watch': self.mouseIconWatch.show() self.mouseIconNormal.hide() elif mode == 'Normal': self.mouseIconNormal.show() self.mouseIconWatch.hide() def setUpCamera(self): """ puts camera at the players node """ pl = base.cam.node().getLens() pl.setFov(70) base.cam.node().setLens(pl) base.camera.reparentTo(self.node) base.cam.node().setCameraMask(BitMask32.bit(3)) self.oldcameraState = 0 self.cameranewPos = None self.cameranewH = None self.changeCamera() # 6/17 def createCollisions(self): """ create a collision solid and ray for the player """ cn = CollisionNode('PlayerCollideNode') cn.addSolid(CollisionSphere(0, 0, 4, 1)) solid = self.node.attachNewNode(cn) solid.setScale(1, 1, 1) solid.setPos(0, 0, 0) # solid.show() base.cTrav.addCollider(solid, base.pusher) base.pusher.addCollider(solid, self.node, base.drive.node()) # init players floor collisions ray = CollisionRay() ray.setOrigin(0, 0, 3) ray.setDirection(0, 0, -1) cn = CollisionNode('playerRay') cn.addSolid(ray) cn.setFromCollideMask(BitMask32.bit(0)) cn.setIntoCollideMask(BitMask32.allOff()) solid = self.node.attachNewNode(cn) # solid.show() base.cTrav.setRespectPrevTransform(True) self.nodeGroundHandler = CollisionHandlerQueue() base.cTrav.addCollider(solid, self.nodeGroundHandler) # init players Forward Ray ForwardSegment = CollisionSegment(0, 2, 0, 0, 20, 0) cn = CollisionNode('playerForwardSegment') cn.addSolid(ForwardSegment) cn.setFromCollideMask(BitMask32.bit(0)) cn.setIntoCollideMask(BitMask32.allOff()) solid = base.camera.attachNewNode(cn) # solid.show() base.cTrav.addCollider(solid, self.nodeGroundHandler) # repair cross wall ForwardSegment = CollisionSegment(0, -4, 3, 0, 4, 3) cn = CollisionNode('PlayerMoveForwardSegment') cn.addSolid(ForwardSegment) cn.setFromCollideMask(BitMask32.bit(0)) cn.setIntoCollideMask(BitMask32.allOff()) solid = self.node.attachNewNode(cn) # solid.show() base.cTrav.addCollider(solid, self.nodeGroundHandler) # init play Right Ray ForwardSegment = CollisionSegment(-2, 0, 3, 2, 0, 3) cn = CollisionNode('PlayerMoveRightSegment') cn.addSolid(ForwardSegment) cn.setFromCollideMask(BitMask32.bit(0)) cn.setIntoCollideMask(BitMask32.allOff()) solid = self.node.attachNewNode(cn) # solid.show() base.cTrav.addCollider(solid, self.nodeGroundHandler) def attachControls(self): """ attach key events """ # base.accept("space", self.__setattr__, ["readyToJump", True]) # base.accept("space-up", self.__setattr__, ["readyToJump", False]) self.keyEven = [ "s", "s-up", "w", "w-up", "a", "d", "a-up", "d-up", "c", "o", "mouse3", "mouse3-up", "mouse1", "mouse1-up" ] base.accept("s", self.__setattr__, ["walk", self.STOP]) base.accept("w", self.__setattr__, ["walk", self.FORWARD]) base.accept("s", self.__setattr__, ["walk", self.BACK]) base.accept("s-up", self.__setattr__, ["walk", self.STOP]) base.accept("w-up", self.__setattr__, ["walk", self.STOP]) base.accept("a", self.__setattr__, ["strafe", self.LEFT]) base.accept("d", self.__setattr__, ["strafe", self.RIGHT]) base.accept("a-up", self.__setattr__, ["strafe", self.STOP]) base.accept("d-up", self.__setattr__, ["strafe", self.STOP]) base.accept("c", self.changeCamera) base.accept("o", self.doubleVision) base.accept("mouse3", self.__setattr__, ["RightButton", 1]) base.accept("mouse3-up", self.__setattr__, ["RightButton", 0]) base.accept("mouse1", self.__setattr__, ["LeftButton", 1]) base.accept("mouse1-up", self.__setattr__, ["LeftButton", 0]) def IgnoreControls(self): for name in self.keyEven: base.ignore(name) print base.getAllAccepting() def initSkill(self): self.tex = Texture() self.tex.setMinfilter(Texture.FTLinear) base.win.addRenderTexture(self.tex, GraphicsOutput.RTMTriggeredCopyTexture) self.tex.setClearColor((0, 0, 0, 1)) self.tex.clearImage() # Create another 2D camera. Tell it to render before the main camera. self.backcam = base.makeCamera2d(base.win, sort=-10) self.background = NodePath("background") self.backcam.reparentTo(self.background) self.background.setDepthTest(0) self.background.setDepthWrite(0) self.backcam.node().getDisplayRegion(0).setClearDepthActive(0) self.bcard = base.win.getTextureCard() self.bcard.reparentTo(base.render2d) self.bcard.setTransparency(1) self.fcard = base.win.getTextureCard() self.fcard.reparentTo(base.render2d) self.fcard.setTransparency(1) # Add the task that initiates the screenshots. taskMgr.add(self.takeSnapShot, "takeSnapShot") if base.win.getGsg().getCopyTextureInverted(): # print("Copy texture is inverted.") self.bcard.setScale(1, 1, -1) self.fcard.setScale(1, 1, -1) self.bcard.hide() self.fcard.hide() self.nextclick = 0 self.clickrate = 10000 def takeSnapShot(self, task): if task.time > self.nextclick: self.nextclick += 1.0 / self.clickrate if self.nextclick < task.time: self.nextclick = task.time base.win.triggerCopy() return task.cont def doubleVision(self): self.visionState = 1 - self.visionState if self.visionState == 1: self.bcard.show() self.bcard.setColor(1, 1, 1, 0.60) self.bcard.setScale(1.0) self.bcard.setPos(-0.05, 0, 0) self.bcard.setR(0) self.fcard.show() self.fcard.setColor(1, 1, 1, 0.60) self.fcard.setScale(1.0) self.fcard.setPos(0.05, 0, 0) self.fcard.setR(0) self.clickrate = 10000 self.nextclick = 0 else: self.bcard.hide() self.fcard.hide() def changeCamera(self): if self.cameraState == 1: self.cameraState = 0 else: self.cameraState = 1 self.setCamera() def setCamera(self): self.cameraoldPos = base.camera.getPos() self.cameraoldNear = base.cam.node().getLens().getNear() if self.cameraState == 0: self.cameranewPos = Vec3(0, -5, 10) pl = base.cam.node().getLens() self.cameranewNear = 1 base.cam.node().setLens(pl) elif self.cameraState == 1: self.cameranewPos = Vec3(0, -1, 8) self.cameranewNear = 1 # self.playerModel.hide() self.playerModel.hide(BitMask32.bit(3)) elif self.cameraState == 2: self.cameranewPos = Vec3(0, -1.5, 8) self.cameranewNear = 1 taskMgr.add(self.updatecamera, "updatecamera") def updatecamera(self, task): if task.time < 0.2: camera.setPos( (self.cameraoldPos * (0.2 - task.time) + self.cameranewPos * (task.time)) / 0.2) return task.cont if self.cameraState == 1: self.playerModel.hide(BitMask32.bit(3)) else: self.playerModel.show(BitMask32.bit(3)) pl = base.cam.node().getLens() pl.setNear(self.cameraoldNear) base.cam.node().setLens(pl) return def erosionUpdate(self, task): if self.EROSION >= 100: self.mission.end("endA") return if self.EROSION >= 80: self.visionState = 0 self.doubleVision() else: self.visionState = 1 self.doubleVision() # self.erosionBar['value'] = self.EROSION self.erosionBar.setScale(1, 1, self.EROSION / 100) self.erosionBar.setPos(0, 0, -1 + self.EROSION / 100) if task.time > self.updateTime: self.EROSION = math.pow(2, (self.EROSION / 20 - 1)) / 6 + self.EROSION # print task.time, 'time' # print self.EROSION self.updateTime += 10 # print self.updateTime return task.cont def erosionUpdateTemp(self): if self.EROSION >= 100: if self.game.levelName == 'levelThree': self.mission.chessBoard.hide() self.mission.end("endA") return if self.EROSION >= 80: self.visionState = 0 self.doubleVision() else: self.visionState = 1 self.doubleVision() # self.erosionBar['value'] = self.EROSION self.erosionBar.setScale(1, 1, self.EROSION / 100) self.erosionBar.setPos(0, 0, -1 + self.EROSION / 100) def mouseUpdate(self, task): """ this task updates the mouse """ if self.state == '': md = base.win.getPointer(0) x = md.getX() y = md.getY() if base.win.movePointer(0, base.win.getXSize() / 2, base.win.getYSize() / 2): self.node.setH(self.node.getH() - (x - base.win.getXSize() / 2) * 0.1) base.camera.setP(base.camera.getP() - (y - base.win.getYSize() / 2) * 0.1) if (base.camera.getP() < -45.): base.camera.setP(-45) if (base.camera.getP() > 45.): base.camera.setP(45) if self.RightButton == 1: self.shoot.MouseDown(self.node) self.EROSION += 5 self.RightButton = 0 # check Interactive Goods nearest = 1000.0 goods = None for i in range(self.nodeGroundHandler.getNumEntries()): entry = self.nodeGroundHandler.getEntry(i) IntoName = entry.getIntoNode().getName() FromName = entry.getFromNode().getName() if FromName == 'playerForwardSegment': if entry.getSurfacePoint(base.camera).getY() < nearest: nearest = entry.getSurfacePoint(base.camera).getY() goods = self.goodmanager.GoodsIta.get(IntoName) if goods and goods.Interactive == True: # print goods.Name self.SetMouseModeNormal('Watch') self.isInteractive = True self.currentInteract = goods else: self.SetMouseModeNormal('Normal') self.isInteractive = False self.currentInteract = None if self.LeftButton == 1 and self.isInteractive: print 'trigger interactive event' print goods.Name self.mission.interactiveWith(goods) return task.cont def moveUpdate(self, task): """ this task makes the player move """ # move where the keys set it # print self.node.getPos() nearestForward = 1000.0 nearestRight = 1000.0 RightEntry = None ForwardEntry = None for i in range(self.nodeGroundHandler.getNumEntries()): entry = self.nodeGroundHandler.getEntry(i) IntoName = entry.getIntoNode().getName() FromName = entry.getFromNode().getName() if FromName == 'PlayerMoveForwardSegment' and ( IntoName != 'PlayerCollideNode'): if entry.getSurfacePoint(self.node).getY() < nearestForward: nearestForward = entry.getSurfacePoint(self.node).getY() ForwardEntry = entry if FromName == 'PlayerMoveRightSegment' and (IntoName != 'PlayerCollideNode'): if abs(entry.getSurfacePoint(self.node).getX()) < nearestRight: nearestRight = abs(entry.getSurfacePoint(self.node).getX()) RightEntry = entry if nearestForward < 2 and nearestForward > -2: self.SLOW = abs(nearestForward) * 0.2 self.node.setPos(self.node.getPos() + ForwardEntry.getSurfaceNormal(render)) else: self.SLOW = 1 if nearestRight < 2: self.node.setPos(self.node.getPos() + RightEntry.getSurfaceNormal(render)) if (nearestForward < 0 and nearestForward > -5.) or nearestRight < 5: if self.cameraState == 0: self.cameraState = 2 self.setCamera() else: if self.cameraState == 2: self.cameraState = 0 self.setCamera() if self.state == '': self.walksound.setLoop(False) #self.walksound.stop() if ((self.walk == self.FORWARD) and (self.playerModel.getAnimControl('walk').isPlaying() == False)): self.walksound.setLoop(True) self.walksound.setVolume(0.5) self.walksound.play() self.playerModel.getAnimControl('walk').play() elif self.walk == self.STOP and self.playerModel.getAnimControl( 'stand').isPlaying() == False: self.playerModel.getAnimControl('stand').play() self.playerModel.getAnimControl('walk').stop() self.walksound.setLoop(False) self.walksound.stop() if self.strafe == LVector3f( -1, 0, 0) or self.strafe == LVector3f(1, 0, 0): self.walksound.setLoop(True) # self.walksound.setVolume(0.5) self.walksound.play() elif self.strafe == LVector3f(0, 0, 0): self.walksound.setLoop(False) self.walksound.stop() #elif self.walk == self.BACK: #self.walksound.setLoop(True) #self.walksound.setVolume(0.5) #self.walksound.play() self.node.setFluidPos( self.node, self.walk * globalClock.getDt() * self.speed * self.SLOW) self.node.setFluidPos( self.node, self.strafe * globalClock.getDt() * self.speed * self.SLOW) return task.cont # 6/17 def jumpUpdate(self, task): """ this task simulates gravity and makes the player jump """ # get the highest Z from the down casting ray highestZ = -100 for i in range(self.nodeGroundHandler.getNumEntries()): entry = self.nodeGroundHandler.getEntry(i) # print entry z = entry.getSurfacePoint(render).getZ() # if z > highestZ and entry.getFromNode().getName() == 'playerRay' and entry.getIntoNode().getName() != "PlayerCollideNode": if z > highestZ and entry.getFromNode().getName( ) == 'playerRay' and entry.getIntoNode().getName() == "floor": highestZ = z # print highestZ # gravity effects and jumps self.node.setZ(self.node.getZ() + self.jump * globalClock.getDt() * 600) self.jump -= 1 * globalClock.getDt() if highestZ > self.node.getZ(): self.jump = 0 self.node.setZ(highestZ) if self.readyToJump: self.jump = 1 return task.cont
class GUI: def __init__(self, rootParent=None): self.lblDescription = DirectFrame( frameColor=(1.0, 1.0, 1.0, 0.0), frameSize=(-0.75, 0.75, -0.8, 0.8), hpr=LVecBase3f(0, 0, 0), image='./assets/quest/QuestBG.png', pos=LPoint3f(0, 0, 0), image_scale=LVecBase3f(0.75, 1, 0.8), image_pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.lblDescription.setTransparency(2) self.lblHeader = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.59), scale=LVecBase3f(0.1, 0.1, 0.1), text='Quest', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.lblDescription, ) self.lblHeader.setTransparency(1) self.lblQuestDesc = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.6, 0, 0.525), scale=LVecBase3f(0.05, 0.05, 0.05), text='Quest description part 1', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.lblDescription, ) self.lblQuestDesc.setTransparency(1) self.lblControl = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.6, 0, -0.25), scale=LVecBase3f(0.08, 0.08, 0.08), text='Controls', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.lblDescription, ) self.lblControl.setTransparency(1) self.lblControlDesc = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.6, 0, -0.315), scale=LVecBase3f(0.05, 0.05, 0.05), text="If it's your turn, click the dice button or hit D", text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.lblDescription, ) self.lblControlDesc.setTransparency(1) self.btnClose = DirectButton( frameColor=(0.8, 0.8, 0.8, 0.75), frameSize=(-1.288, 1.387, -0.213, 0.825), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.65), relief=1, scale=LVecBase3f(0.1, 0.1, 0.1), text='Close', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.lblDescription, pressEffect=1, ) self.btnClose.setTransparency(0) def show(self): self.lblDescription.show() def hide(self): self.lblDescription.hide() def destroy(self): self.lblDescription.destroy()
class GUI: def __init__(self, rootParent=None): self.frmMain = DirectFrame( frameColor=(1, 1, 1, 1), frameSize=(-1.777778, 1.77777778, -1.1638, 1.1638), hpr=LVecBase3f(0, 0, 0), image='assets/menu/Background.png', pos=LPoint3f(0, 0, 0), image_scale=LVecBase3f(1.77778, 1, 1.1638), image_pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmMain.setTransparency(0) self.frmRoomList = DirectScrolledFrame( canvasSize=(-1.0, 1.0, -2.0, 0.0), frameColor=(1, 1, 1, 1), frameSize=(-1.0, 1.08, -1.4, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.7), scrollBarWidth=0.08, state='normal', horizontalScroll_borderWidth=(0.01, 0.01), horizontalScroll_frameSize=(-0.05, 0.05, -0.04, 0.04), horizontalScroll_hpr=LVecBase3f(0, 0, 0), horizontalScroll_pos=LPoint3f(0, 0, 0), horizontalScroll_decButton_borderWidth=(0.01, 0.01), horizontalScroll_decButton_frameSize=(-0.05, 0.05, -0.04, 0.04), horizontalScroll_decButton_hpr=LVecBase3f(0, 0, 0), horizontalScroll_decButton_pos=LPoint3f(-0.96, 0, -1.36), horizontalScroll_incButton_borderWidth=(0.01, 0.01), horizontalScroll_incButton_frameSize=(-0.05, 0.05, -0.04, 0.04), horizontalScroll_incButton_hpr=LVecBase3f(0, 0, 0), horizontalScroll_incButton_pos=LPoint3f(0.96, 0, -1.36), horizontalScroll_thumb_borderWidth=(0.01, 0.01), horizontalScroll_thumb_hpr=LVecBase3f(0, 0, 0), horizontalScroll_thumb_pos=LPoint3f(0, 0, -1.36), verticalScroll_borderWidth=(0.01, 0.01), verticalScroll_frameSize=(-0.04, 0.04, -0.05, 0.05), verticalScroll_hpr=LVecBase3f(0, 0, 0), verticalScroll_pos=LPoint3f(0, 0, 0), verticalScroll_decButton_borderWidth=(0.01, 0.01), verticalScroll_decButton_frameSize=(-0.04, 0.04, -0.05, 0.05), verticalScroll_decButton_hpr=LVecBase3f(0, 0, 0), verticalScroll_decButton_pos=LPoint3f(1.04, 0, -0.04), verticalScroll_incButton_borderWidth=(0.01, 0.01), verticalScroll_incButton_frameSize=(-0.04, 0.04, -0.05, 0.05), verticalScroll_incButton_hpr=LVecBase3f(0, 0, 0), verticalScroll_incButton_pos=LPoint3f(1.04, 0, -1.28), verticalScroll_thumb_borderWidth=(0.01, 0.01), verticalScroll_thumb_hpr=LVecBase3f(0, 0, 0), verticalScroll_thumb_pos=LPoint3f(1.04, 0, -0.4628), parent=self.frmMain, ) self.frmRoomList.setTransparency(0) self.btnBack = DirectButton( hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.96, 0, -0.825), scale=LVecBase3f(0.1, 0.1, 0.1), text='Back', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, command=base.messenger.send, extraArgs=["roomList_back"], ) self.btnBack.setTransparency(0) self.lblRoomName = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-1, 0, 0.725), scale=LVecBase3f(0.07, 0.1, 0.07), text='Room Name', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblRoomName.setTransparency(0) self.lblPlayerCount = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.15, 0, 0.725), scale=LVecBase3f(0.07, 0.1, 0.07), text='Players', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblPlayerCount.setTransparency(0) self.btnCreateRoom = DirectButton( hpr=LVecBase3f(0, 0, 0), pad=(0.2, 0.2), pos=LPoint3f(-0.955, 0, -0.815), scale=LVecBase3f(0.1, 0.1, 0.1), text='+', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.btnCreateRoom.setTransparency(0) self.btnReloadRoomList = DirectButton( hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.025, 0, -0.825), scale=LVecBase3f(0.1, 0.1, 0.1), text='Reload Rooms', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, command=base.messenger.send, extraArgs=["roomList_reload"], ) self.btnReloadRoomList.setTransparency(0) self.lblGameType = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.125, 0, 0.725), scale=LVecBase3f(0.07, 0.1, 0.07), text='Type', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblGameType.setTransparency(0) self.lblDifficulty = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.54, 0, 0.72), scale=LVecBase3f(0.07, 0.1, 0.07), text='Difficulty', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblDifficulty.setTransparency(0) def show(self): self.frmMain.show() def hide(self): self.frmMain.hide() def destroy(self): self.frmMain.destroy()
class StoryManager(SogalForm): """Story controller of Sogal Controls the whole story scene. Mainly for logic control And graphics is on other Attributes: gameTextBox: the current GameTextBox, useful for user scripting storyView: the current StoryView, useful for user scripting """ script_space = {} _currentDump = None __destroyed = False def __init__(self): self.step = 0 #shows how many commands line it had run self.scrStack = [] self.commandList = [] self.__currentPtr = None if not runtime_data.RuntimeData.command_ptr: self.nextPtr = 0 else: self.nextPtr = runtime_data.RuntimeData.command_ptr if not runtime_data.RuntimeData.command_stack: runtime_data.RuntimeData.command_stack = self.scrStack else: self.scrStack = runtime_data.RuntimeData.command_stack if not runtime_data.RuntimeData.command_list: runtime_data.RuntimeData.command_list = self.commandList else: self.commandList = runtime_data.RuntimeData.command_list self._frame = DirectFrame(parent = aspect2d) # @UndefinedVariable pydev在傲娇而已不用管 self._frame.setTransparency(TransparencyAttrib.MAlpha) self.storyView = StoryView() self.audioPlayer = base.audioPlayer # @UndefinedVariable pydev在傲娇而已不用管 self.menu = StoryMenuBar() self.gameTextBox = GameTextBox() self.textHistory = TextHistory() self.button_auto = self.menu.addButton(text = 'Auto',state = DGG.NORMAL,command = self.autoPlayButton) self.button_history = self.menu.addButton(text = 'History',state = DGG.NORMAL,command = self.showTextHistoryButton) self.button_skip = self.menu.addButton(text = 'Skip',state = DGG.DISABLED,command = self.startSkippingButton) self.button_lastchoice = self.menu.addButton(text = 'Last Choice',state = DGG.DISABLED,command = self.lastChoice) self.button_save = self.menu.addButton(text = 'Save',state = DGG.DISABLED, command = self.saveButton) self.button_load = self.menu.addButton(text = 'Load',state = DGG.NORMAL,command = self.loadButton) self.button_quicksave = self.menu.addButton(text = 'Quick Save',state = DGG.DISABLED,command = self.quickSaveButton) self.button_quickload = self.menu.addButton(text = 'Quick Load',state = DGG.DISABLED,command = self.quickLoadButton) self.button_config = self.menu.addButton(text = 'Options', state = DGG.NORMAL, command = self._configButton) self.button_title = self.menu.addButton(text = 'Title',state = DGG.NORMAL,command = self.returnToTitle) self._inputReady = True self.__arrow_shown = False self._choiceReady = True self._currentMessage = '' self.__currentSelection = None self.__finishing = False self.__lock = Lock() self.forcejump = False self.__autoInput = False self.__focused = False self.intervals = [] self.__skipping = False self.__autoplaying = False self.__autoInterval = None self.__autoplaystep = None self.mapScriptSpace() SogalForm.__init__(self) self.show() taskMgr.add(self.loopTask,'story_manager_loop',sort = 2,priority = 1) # @UndefinedVariable 傲娇的pydev……因为panda3D的"黑魔法"…… taskMgr.doMethodLater(runtime_data.game_settings['jump_span'],self.__jumpCheck,'story_jump_check', sort = 5, priority = 1) # @UndefinedVariable def focused(self): if not self.__focused: self.accept('mouse1', self.input, [1]) self.accept('enter', self.input, [1]) self.accept('mouse3', self.input, [3]) self.accept('wheel_up', self.showTextHistory) self.accept('escape', self.showMenu) self.accept('control',self.setForceJump, [True]) self.accept('control-up',self.setForceJump, [False]) SogalForm.focused(self) self.__focused = True def defocused(self): if self.__focused: self.ignore('mouse1') self.ignore('enter') self.ignore('mouse3') self.ignore('wheel_up') self.ignore('escape') self.ignore('control') self.ignore('control-up') self.setForceJump(False) SogalForm.defocused(self) self.__arrow_shown = False self.gameTextBox.hideArrow() self.__focused = False def destroy(self): self.__destroyed = True taskMgr.remove('story_manager_loop') # @UndefinedVariable taskMgr.remove('story_jump_check') # @UndefinedVariable if self._frame: self._frame.destroy() self._frame = None if self.__currentSelection: self.__currentSelection.destroy() self.gameTextBox.destroy() self.storyView.destroy() self.menu.destroy() self.textHistory.destroy() SogalForm.destroy(self) def loopTask(self,task): ''' The task loop of StoryManager, trying to advance every task frame ''' if not self.__destroyed: if self.hasFocus(): self.forward(False) return task.cont else: return task.done def _enableSavingButton(self): self.button_save['state'] = DGG.NORMAL self.button_quicksave['state'] = DGG.NORMAL def _disableSavingButton(self): self.button_save['state'] = DGG.DISABLED self.button_quicksave['state'] = DGG.DISABLED def presave(self): if self.nextPtr is not None: runtime_data.RuntimeData.command_ptr = self.nextPtr self.gameTextBox.presave() self.storyView.presave() self.audioPlayer.presave() def reload(self): taskMgr.remove('storyManagerLoop') # @UndefinedVariable self.nextPtr = runtime_data.RuntimeData.command_ptr self.mapScriptSpace() self.gameTextBox.reload() self.storyView.reload() self.audioPlayer.reload() taskMgr.add(self.loopTask,'storyManagerLoop',sort = 2,priority = 1) # @UndefinedVariable 傲娇的pydev……因为panda3D的"黑魔法"…… def mapScriptSpace(self): if runtime_data.RuntimeData.script_space: #map script space self.script_space = runtime_data.RuntimeData.script_space else: runtime_data.RuntimeData.script_space = self.script_space script_global['goto'] = self.goto script_global['story_manager'] = self script_global['game_text_box'] = self.gameTextBox script_global['story_view'] = self.storyView script_global['audio_player'] = self.audioPlayer def quickfinish(self): self.__lock.acquire() if not self.__finishing: self.__finishing = True self.storyView.quickfinish() self.gameTextBox.quickFinish() for itv in self.intervals: itv.finish() self.__lock.release() def input(self,type = 1): self.stopSkipping() self.stopAutoPlaying() if not self.hasFocus(): return #left mouse button or enter key if type == 1 : if not self.getSceneReady(): self.quickfinish() else: self.setTextInputReady(True) #right mouse button elif type == 3: self.quickfinish() if self.getSceneReady(): self.menu.show() def showMenu(self): self.stopSkipping() self.stopAutoPlaying() self.quickfinish() if self.getSceneReady() and not self.forcejump: self.menu.show() def showTextHistory(self): if self.getSceneReady() and not self.forcejump: self.textHistory.show() def saveButton(self): self.menu.hide() base.saveForm.setData(self._currentDump, self._currentMessage) base.saveForm.show() def loadButton(self): self.menu.hide() base.loadForm.show() def quickSaveButton(self): '''quicksave the data''' self.menu.hide() self.button_quicksave['state'] = DGG.DISABLED self.button_quickload['state'] = DGG.DISABLED if self._currentDump: messenger.send('quick_save', [self._currentDump,self._currentMessage]) def quickLoadButton(self): ConfirmDialog(text= '要读取吗?',command= self.__confirmedQuickLoad) def _configButton(self): messenger.send('config_form') def returnToTitle(self): ConfirmDialog(text= '回到标题界面?',command= self.__confirmedReturnToTitle) def __confirmedReturnToTitle(self): messenger.send('return_to_title') def showTextHistoryButton(self): self.menu.hide() self.showTextHistory() def startSkippingButton(self): self.menu.hide() self.startSkipping() def autoPlayButton(self): self.menu.hide() if self.__autoplaying: self.stopAutoPlaying() else: self.startAutoPlaying() def lastChoice(self): ConfirmDialog(text= '要回到上一个选择枝吗?',command= self.__confirmedLastChoice) def __confirmedQuickLoad(self): messenger.send('quick_load') # @UndefinedVariable def __confirmedLastChoice(self): if runtime_data.RuntimeData.last_choice: messenger.send('load_memory',[runtime_data.RuntimeData.last_choice]) # @UndefinedVariable def autoSave(self,info = ''): if not info: info = self._currentMessage messenger.send('auto_save',[self._currentDump,info]) def getSceneReady(self): '''Get if the scene is ready''' textbox_ready = False view_ready = False intervals_ready = True if not self.gameTextBox.getIsWaiting(): textbox_ready = True if not self.storyView.getIsWaiting(): view_ready = True for itv in self.intervals: if itv.isPlaying(): intervals_ready = False break scene_ready = textbox_ready and view_ready and intervals_ready if not scene_ready: return False #auto play span if scene_ready and self.__autoplaying: if self.__autoplaystep != self.step: self.__autoplaystep = self.step self.__autoInterval = Wait(runtime_data.game_settings['auto_span']) self.__autoInterval.start() scene_ready = False else: if self.__autoInterval.isPlaying(): scene_ready = False if self.audioPlayer.isVoicePlaying(): scene_ready = False return scene_ready def getInputReady(self): '''define is user's 'next' command given''' textinput_ready = self._inputReady or self.__autoInput choice_ready = self.getChoiceReady() if self.__autoInput: self.__autoInput = False if textinput_ready and choice_ready: return True return False def setTextInputReady(self, value): self._inputReady = value def getChoiceReady(self): return self._choiceReady def forward(self,is_user = False): '''run nextCommand() or finish current operations quickly @param is_user: define if this operation is started by the player ''' scene_ready = self.getSceneReady() if scene_ready and not self.__arrow_shown: self.gameTextBox.showArrow() self.__arrow_shown = False if scene_ready and self.getInputReady(): self.nextCommand() if self.forcejump or self.__skipping: self.quickfinish() def nextCommand(self): '''Process the next command in the non-processed queue ''' #TODO: 还要添加循环的支持,用到runtime_data.command_stack来暂存需要回跳的命令组和回跳节点 #TODO:添加对条件和选择的支持 self.__finishing = False self.__arrow_shown = False self.gameTextBox.hideArrow() #Dumps story data for saving or further use if self.__destroyed: return self.presave() self._currentDump = copy.deepcopy(runtime_data.RuntimeData) if self.nextPtr < 0: self.nextPtr = 0 self.__currentPtr = self.nextPtr self.nextPtr += 1 if not self.commandList: return if len(self.commandList) > self.__currentPtr: handled = False if self.commandList[self.__currentPtr].command: comline = self.commandList[self.__currentPtr].command.strip() if comline.startswith('mark ')or comline.startswith('mark:'): handled = True # 条件判断处理 If condition elif comline.startswith('if '): splited = space_cutter.split(comline, 1) if len(splited)<2: raise Exception('没条件玩毛线') if self.scriptEval(splited[1]): handled = True else: relative_depth = 0 #if not match the condition, try to jump to elif or else for i in range(self.__currentPtr+1,len(self.commandList)): cli = self.commandList[i] if cli.command: cl = cli.command.strip() else: continue #一个嵌套循环的情况! A inner if if cl.startswith('if '): relative_depth += 1 continue elif relative_depth == 0 and cl.startswith('elif '): splited = space_cutter.split(cl, 1) if len(splited)<2: raise Exception('没条件玩毛线') if self.scriptEval(splited[1]): self.nextPtr = i + 1 handled = True break else: continue elif relative_depth == 0 and cl == 'else': self.nextPtr = i + 1 handled = True break elif cl == 'end' or cl.startswith('end '): if relative_depth == 0: self.nextPtr = i + 1 handled = True break else: relative_depth -= 1 continue #if we meet else or elif then jump to end elif comline.startswith('elif ') or comline == 'else': relative_depth = 0 for i in range(self.__currentPtr+1,len(self.commandList)): cli = self.commandList[i] if cli.command: cl = cli.command.strip() else: continue if cl.startswith('if '): relative_depth += 1 continue elif cl == 'end' or cl.startswith('end '): if relative_depth == 0: self.nextPtr = i + 1 handled = True break else: relative_depth -= 1 continue #ignore end elif comline == 'end' or comline.startswith('end '): handled = True if not handled: self.processCommand(self.commandList[self.__currentPtr]) #self.scrPtr = self.scrPtr + 1 #runtime_data.RuntimeData.command_ptr = self.scrPtr if base.hasQuickData(): self.button_quickload['state'] = DGG.NORMAL if runtime_data.RuntimeData.last_choice: self.button_lastchoice['state'] = DGG.NORMAL if self._currentDump: self._enableSavingButton() self.step += 1 #mark step def goto(self, target): '''Jump to a mark''' for i in range(0, len(self.commandList)): if self.commandList[i].command: mark = mark_cutter.split(self.commandList[i].command , 1) if len(mark) > 1: markText = mark[1].strip() if markText == target: self.nextPtr = i #Solved: #this is not a good solution but this method runs at 'nextCommand', and ths scrPtr would plus 1 afterwards return safeprint('unable to find mark') def processCommand(self,command): '''Process a StoryCommand @param command: The StoryCommand to deal with ''' def seval(strs): return self.scriptEval(strs) #Mark read if not runtime_data.read_text.has_key(command.fileLoc): runtime_data.read_text[command.fileLoc] = {} if not runtime_data.read_text[command.fileLoc].has_key(command.index): already_read = False self.stopSkipping() else: already_read = True runtime_data.read_text[command.fileLoc][command.index] = True if already_read: self.button_skip['state'] = DGG.NORMAL else: self.button_skip['state'] = DGG.DISABLED self.storyView.clearQuickItems() #clear out quick items name = '' continuous = False is_script = False is_selection = False spaceCutter = space_cutter hidingtext = False voiceFlag = False #it will be True if voice is stopped in this line of command #used for disable cross voice of different command lines #but enable one command line with multiple voices autoSaving = False #Mark if autosaving is needed at the end of this step autoSavingInfo = '' #read command line if command.command: commands = command.command.split(',') comm = '' for item in commands: comm = item.strip() if comm: messenger.send('sogalcommand',[comm]) #allow other tools to deal with it @UndefinedVariable #名字设置命令 if comm.startswith('name ') or comm.startswith('name='): nameCutter = re.compile(ur'name *=?',re.UNICODE) name = nameCutter.split(comm,1)[1].strip() #改变文本框格式命令 elif comm.startswith('textboxstyle '): if self.gameTextBox: self.gameTextBox.setTextBoxStyle(spaceCutter.split(comm, 1)[1]) self.gameTextBox.applyStyle() #文本框分段命令 elif comm == 'p': if self.gameTextBox: self.gameTextBox.paragraphSparator() elif comm == 'c': continuous = True elif comm.startswith('wait '): temp = spaceCutter.split(comm,1) if len(temp) > 1: self.sceneWait(seval(temp[1])) #文本框属性设置命令 elif comm.startswith('textbox '): temp = spaceCutter.split(comm,2) if temp[1] == 'apply': self.gameTextBox.applyTextBoxProperties() elif len(temp)>=3: self.gameTextBox.setTextBoxProperty(temp[1],seval(temp[2])) else: safeprint('Not enough: ' + comm) #背景设置命令 elif comm.startswith('bg '): temp = spaceCutter.split(comm,2) if len(temp) >= 3: fadein = seval(temp[2]) else: fadein = 0 self.storyView.changeBackground(temp[1],fadein) #图片显示命令 elif comm.startswith('p '): temp = spaceCutter.split(comm,6) if len(temp) >= 7: fadein = seval(temp[6]) else: fadein = 0 if len(temp) >= 6: scale = seval(temp[5]) else: scale = 1 if len(temp) >= 5: location = (seval(temp[3]),0,seval(temp[4])) else: if self.storyView.itemEntries.has_key(temp[1]): location = self.storyView.itemEntries[temp[1]].pos else: location = (0,0,0) svie = StoryViewItemEntry(temp[1],temp[2],SVIC.FG,pos = location,scale = (scale,scale,scale),color = (1,1,1,1),fadein = fadein) self.storyView.newItem(svie) elif comm.startswith('del '): temp = spaceCutter.split(comm,2) if len(temp)>=3: self.storyView.deleteItem(temp[1], seval(temp[2])) else: self.storyView.deleteItem(temp[1]) elif comm.startswith('ploc '): temp = spaceCutter.split(comm,5) if len(temp) >= 5: location = (seval(temp[2]),seval(temp[3]),seval(temp[4])) else: location = (seval(temp[2]),0,seval(temp[3])) if len(temp) >= 6: fadein = seval(temp[5]) else: fadein = 0 self.storyView.changePosColorScale(temp[1], pos = location,time = fadein) elif comm.startswith('pcolor '): temp = spaceCutter.split(comm,6) color = (seval(temp[2]),seval(temp[3]),seval(temp[4]),seval(temp[5])) if len(temp) >= 7: fadein = seval(temp[6]) else: fadein = 0 self.storyView.changePosColorScale(temp[1], color = color, time = fadein) elif comm.startswith('pscale '): temp = spaceCutter.split(comm,5) if len(temp) >= 5: scale = (seval(temp[2]),seval(temp[3]),seval(temp[4])) else: scale = (seval(temp[2]),seval(temp[2]),seval(temp[2])) if len(temp) == 6: fadein = seval(temp[5]) elif len(temp) == 4: fadein = seval(temp[3]) else: fadein = 0 self.storyView.changePosColorScale(temp[1], scale = scale, time = fadein) elif comm.startswith('o3d '): temp = spaceCutter.split(comm) svie = StoryViewItemEntry(temp[1],temp[2],SVIC.O3D,pos = (seval(temp[3]),seval(temp[4]),seval(temp[5])) ,scale = (seval(temp[10]),seval(temp[11]),seval(temp[12])),color = (seval(temp[6]),seval(temp[7]),seval(temp[8]),seval(temp[9]))) self.storyView.newItem(svie) elif comm.startswith('o2d '): temp = spaceCutter.split(comm) svie = StoryViewItemEntry(temp[1],temp[2],SVIC.O2D,pos = (seval(temp[3]),seval(temp[4]),seval(temp[5])) ,scale = (seval(temp[10]),seval(temp[11]),seval(temp[12])),color = (seval(temp[6]),seval(temp[7]),seval(temp[8]),seval(temp[9]))) self.storyView.newItem(svie) elif comm.startswith('pa '): temp = spaceCutter.split(comm) if len(temp) >= 8: fadein = seval(temp[7]) else: fadein = 0 svie = StoryViewItemEntry(temp[1],temp[2],SVIC.AFG,pos = (seval(temp[3]),0,seval(temp[4])) ,scale = (seval(temp[5]),1,seval(temp[6])),fadein = fadein) self.storyView.newItem(svie) elif comm == 'clear': hidingtext = True self.storyView.clear() elif comm.startswith('clear '): hidingtext = True temp = spaceCutter.split(comm,2) if len(temp)>=3: self.storyView.clear(seval(temp[1]),temp[2]) elif len(temp)==2: self.storyView.clear(seval(temp[1])) else: self.storyView.clear() elif comm.startswith('delbg '): temp = spaceCutter.split(comm,1) if len('temp')>=2: self.storyView.deleteItem('__bg__', seval(temp[1])) else: self.storyView.deleteItem('__bg__') elif comm.startswith('qp '): temp = spaceCutter.split(comm,3) svie = StoryViewItemEntry('quickitem',temp[1],SVIC.FG, pos = (seval(temp[2]),0,seval(temp[3])), quickitem = True ) self.storyView.newItem(svie) elif comm.startswith('v '): if not voiceFlag: self.audioPlayer.stopVoice() voiceFlag = True temp = spaceCutter.split(comm , 2) if len(temp)>=3: volume = seval(temp[2]) else: volume = 1 self.audioPlayer.playVoice(temp[1],volume) elif comm.startswith('se '): temp = spaceCutter.split(comm , 2) if len(temp)>=3: volume = seval(temp[2]) else: volume = 1 self.audioPlayer.playSound(temp[1],volume) elif comm == 'vstop': self.audioPlayer.stopVoice() voiceFlag = True elif comm == 'sestop': self.audioPlayer.stopSound() elif comm.startswith('bgm '): temp = spaceCutter.split(comm , 4) if len(temp)>=3: fadein = seval(temp[2]) else: fadein = 0 if len(temp)>=4: volume = seval(temp[3]) else: volume = 1 if len(temp)>=5: loop = bool(seval(temp[4])) else: loop = True self.audioPlayer.playBGM(temp[1], fadein=fadein, volume=volume, loop=loop) elif comm.startswith('env '): temp = spaceCutter.split(comm , 4) if len(temp)>=3: fadein = seval(temp[2]) else: fadein = 0 if len(temp)>=4: volume = seval(temp[3]) else: volume = 1 if len(temp)>=5: loop = bool(seval(temp[4])) else: loop = True self.audioPlayer.playENV(temp[1], fadein=fadein, volume=volume, loop=loop) elif comm.startswith('bgmstop ') or comm == 'bgmstop': temp = spaceCutter.split(comm , 1) if len(temp)>=2: fadeout = seval(temp[1]) else: fadeout = 0 self.audioPlayer.stopBGM(fadeout) elif comm.startswith('envstop ') or comm == 'envstop': temp = spaceCutter.split(comm , 1) if len(temp)>=2: fadeout = seval(temp[1]) else: fadeout = 0 self.audioPlayer.stopENV(fadeout) elif comm.startswith('audiostop ') or comm == 'audiostop': temp = spaceCutter.split(comm , 1) if len(temp)>=2: fadeout = seval(temp[1]) else: fadeout = 0 self.audioPlayer.stopAll(fadeout) elif comm == 'script': is_script = True elif comm.startswith('script '): temp = spaceCutter.split(comm , 1) self.runScriptFile(temp[1]) elif comm == 'choice' or comm.startswith('choice '): ''' Selection ''' is_selection = True temp = spaceCutter.split(comm, 1) if len(temp) > 1: striped = temp[1].strip() if striped: self.pushText(text = striped, speaker = None, needInput = False, read = already_read) elif comm.startswith('jump '): temp = spaceCutter.split(comm , 1) self.beginScene(temp[1].strip()) elif comm.startswith('expand '): temp = spaceCutter.split(comm , 1) self.expandScene(temp[1].strip()) elif comm.startswith('goto '): temp = spaceCutter.split(comm , 1) self.goto(temp[1].strip()) elif comm.startswith('theme '): temp = spaceCutter.split(comm , 1) self.reloadTheme(temp[1].strip()) elif comm == 'autosave' or comm.startswith('autosave '): if self.step > 0: autoSaving = True temp = spaceCutter.split(comm , 1) if len(temp) > 1: autoSavingInfo = temp[1] else: if comm: safeprint('extra command: ' + comm) if command.text: if is_script: self.runScript(command.text) elif is_selection: ''' If encountered a selection ''' choiceList = [] enablesList = [] textlines = command.text.splitlines() for tl in textlines: if tl.startswith('--'): #--means disabled text = tl[2:] enablesList.append(False) else: text = tl enablesList.append(True) choiceList.append(text) self.showSelection(choiceList = choiceList, enablesList = enablesList) else: self.pushText(text = command.text, speaker = name, continuous = continuous, read = already_read) else: if hidingtext: self.gameTextBox.hide() #better to hide the textbox when 'vclear' if self.gameTextBox.newText: runtime_data.RuntimeData.latest_text = self.gameTextBox.newText if runtime_data.RuntimeData.latest_text: self._currentMessage = runtime_data.RuntimeData.latest_text #Autosave if autoSaving: if autoSavingInfo: self.autoSave(autoSavingInfo) else: self.autoSave() def pushText(self, text, speaker = None, continuous = False, needInput = True, read = False): def translate(t): ''' ,实现通配,__代替空行已经在一开始实现 ''' return t.replace(ur'\:', ur':').replace(ur'\:',ur':').replace(ur'\#',ur'#') #检查有无在文本中的name #name: formation checking textlines = text.splitlines() first_line = unicode(textlines[0]) #匹配第一行中是否有表示name的冒号,正则表达式表示前面不是\的冒号(@name 命令行的简写形式判断) pattern = re.compile(ur'(?<!\\)[:(:)]',re.UNICODE) splited = pattern.split(first_line,maxsplit = 1) #print(splited) #测试用,废弃 #如果存在name即分割成功 if len(splited)>1: speaker = translate(splited[0]).strip() if splited[1].strip(): textlines[0] = splited[1] else: textlines[0] = None final_text = '' #生成文本并解决转义符 #Generate the final text for item in textlines: if item: final_text += translate(item) + '\n' if final_text: self.textHistory.append(final_text, speaker, None) self.gameTextBox.pushText(text = final_text, speaker = speaker, continuous = continuous,read= read) if needInput: self._inputReady = False self.gameTextBox.show() def runScript(self,pscriptText): exec(pscriptText,script_global,self.script_space) def runScriptFile(self,fileName): #'''note that would ignore panda virtual pathes''' pathes = runtime_data.game_settings['pscriptpathes'] types = runtime_data.game_settings['pscripttypes'] for ft in ((folder,type) for folder in pathes for type in types): if exists(ft[0] + fileName + ft[1]): handle = open(ft[0] + fileName + ft[1]) script = handle.read() handle.close() break if script: self.runScript(script) else: safeprint("file not find: "+ fileName) def beginScene(self,fileName): '''Load target .sogal script file and go to that file. ''' self.nextPtr = 0 self.scrStack = [] #used for stack controller pointers self.commandList = loadScriptData(fileName) runtime_data.RuntimeData.command_stack = self.scrStack runtime_data.RuntimeData.command_list = self.commandList def expandScene(self,fileName): '''expand a scene, inserting another sogal file in to current point''' expanding = loadScriptData(fileName) if len(self.commandList)> self.__currentPtr+1: self.commandList = self.commandList[:self.__currentPtr] + expanding + self.commandList[self.__currentPtr+1:] else: self.commandList = self.commandList[:self.__currentPtr] + expanding runtime_data.RuntimeData.command_stack = self.scrStack runtime_data.RuntimeData.command_list = self.commandList self.nextPtr = self.__currentPtr #Solved: # this is not a good solution but this method runs at 'nextCommand', and ths scrPtr would plus 1 afterwards def showSelection(self,choiceList = ['A','B'],enablesList = None): '''This method shows a selection, which sets 'last_choice' in script space to player's choice. (0 is the first, 1 is the second etc.) you can disable some of the selections with enablesList for example for choiceList ['A','B','C'] and enablesList ''' #Store the last selection rdc = copy.deepcopy(self._currentDump) rdc.last_choice = None self.__tempDumpedLastChoice = pickle.dumps(rdc, 2) self._choiceReady = False startPos = (0,0,0.1 * len(choiceList)) frameSize = (-0.6,0.6,-0.05 - 0.1*len(choiceList), 0.1 + 0.1*len(choiceList)) buttonSize = (-0.5,0.5,-0.050,0.10) margin = 0.05 self.__currentSelection = SogalDialog(enableMask = False, fadeScreen= None, command = self.__selected, textList= choiceList, enablesList= enablesList, sortType= 1,noFocus = True, startPos = startPos,frameSize = frameSize,margin = margin, buttonSize = buttonSize) def __selected(self,choice): #Store the last selection if self.__tempDumpedLastChoice: runtime_data.RuntimeData.last_choice = self.__tempDumpedLastChoice self.script_space['last_choice'] = choice self._choiceReady = True def scriptEval(self,str): return eval(str,script_global,runtime_data.RuntimeData.script_space) def setForceJump(self,forcejump): if forcejump: if not self.forcejump: self.forcejump = True self.setTextInputReady(True) self.__skipping = False self.stopAutoPlaying() else: self.forcejump = False def __jumpCheck(self,task): if self.hasFocus(): if self.forcejump or self.__skipping or self.__autoplaying: self.__autoInput = True return task.again def sceneWait(self,time,hidetextbox = True): waitinterval = Wait(time) self.intervals.append(waitinterval) waitinterval.start() if hidetextbox: self.gameTextBox.hide() def reloadTheme(self,theme): base.setStyle(theme) self.menu.reloadTheme() self.textHistory.reloadTheme() self.gameTextBox.reloadTheme() def stopSkipping(self): self.__skipping = False if not self.forcejump: self.__autoInput = False def startSkipping(self): self.stopAutoPlaying() self.__skipping = True def startAutoPlaying(self): self.__skipping = False self.__autoplaying = True self.button_auto['text'] = 'Stop Auto' def stopAutoPlaying(self): self.__autoplaying = False if self.__autoInterval: self.__autoInterval.pause() self.button_auto['text'] = 'Auto'
class GUI: def __init__(self, rootParent=None): self.frmRoomEntry = DirectFrame( frameColor=(1, 1, 1, 1), frameSize=(-1.0, 1.0, -0.1, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmRoomEntry.setTransparency(0) self.lblRoomName = DirectLabel( frameSize=(0.075, 15.0, -0.2, 0.8), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.975, 0, -0.065), scale=LVecBase3f(0.05, 0.05, 0.05), text='Room Name', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmRoomEntry, ) self.lblRoomName.setTransparency(0) self.lblPlayerCount = DirectLabel( frameSize=(-1.15, 1.25, -0.2, 0.8), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.15, 0, -0.065), scale=LVecBase3f(0.05, 0.05, 0.05), text='0/4', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmRoomEntry, ) self.lblPlayerCount.setTransparency(0) self.lblGameType = DirectLabel( frameSize=(-4.0, 4.0, -0.2, 0.8), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.125, 0, -0.065), scale=LVecBase3f(0.05, 0.05, 0.05), text='Game Type', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmRoomEntry, ) self.lblGameType.setTransparency(0) self.btnJoin = DirectButton( hpr=LVecBase3f(0, 0, 0), pad=(0.1, 0.1), pos=LPoint3f(0.855, 0, -0.075), scale=LVecBase3f(0.075, 0.075, 0.075), text='Join', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmRoomEntry, command=base.messenger.send, extraArgs=["room_join"], ) self.btnJoin.setTransparency(0) self.lblDifficulty = DirectLabel( frameSize=(-4.0, 4.0, -0.2, 0.8), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.545, 0, -0.065), scale=LVecBase3f(0.05, 0.05, 0.05), text='Difficulty', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmRoomEntry, ) self.lblDifficulty.setTransparency(0) def show(self): self.frmRoomEntry.show() def hide(self): self.frmRoomEntry.hide() def destroy(self): self.frmRoomEntry.destroy()
class GUI: def __init__(self, rootParent=None): self.table = DirectFrame( frameColor=(1.0, 1.0, 1.0, 0.0), frameSize=(-1, 1, -1, 1), hpr=LVecBase3f(0, 0, 0), image='chapter1/table.png', pos=LPoint3f(0.55, 0, -0.575), sortOrder=200, image_scale=LVecBase3f(0.256, 1, 0.312), image_pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.table.setTransparency(1) self.btnFlashlight = DirectButton( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-0.4, 0.4, -0.4, 0.4), hpr=LVecBase3f(0, 0, 0), image='chapter1/flashlight.png', pos=LPoint3f(0.39, 0, -0.39), sortOrder=201, relief=1, scale=LVecBase3f(0.1, 0.1, 0.1), text='', image_scale=LVecBase3f(0.4, 0, 0.4), image_pos=LPoint3f(0, 0, 0), text_align=TextNode.A_center, text_scale=(1.0, 1.0), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, command=base.messenger.send, extraArgs=["chapter1_flashlight"], pressEffect=1, ) self.btnFlashlight.setTransparency(1) self.btnTelephone = DirectButton( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-0.4, 0.4, -0.4, 0.4), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.625, 0, -0.125), relief=1, scale=LVecBase3f(0.1, 0.1, 0.1), text='', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, command=base.messenger.send, extraArgs=["chapter1_telephone"], pressEffect=1, ) self.btnTelephone.setTransparency(0) self.btnDoor = DirectButton( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-0.5, 0.5, -2.0, 2.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.75, 0, -0.125), relief=1, scale=LVecBase3f(0.1, 0.1, 0.1), text='', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, command=base.messenger.send, extraArgs=["chapter1_door"], pressEffect=1, ) self.btnDoor.setTransparency(0) self.ringRing = DirectFrame( frameColor=(1.0, 1.0, 1.0, 0.0), frameSize=(-0.1, 0.1, -0.1, 0.1), hpr=LVecBase3f(0, 0, 0), image='chapter1/ringRing.png', pos=LPoint3f(0.5, 0, -0.025), image_scale=LVecBase3f(0.1, 1, 0.1), image_pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.ringRing.setTransparency(1) def show(self): self.table.show() self.btnFlashlight.show() self.btnTelephone.show() self.btnDoor.show() self.ringRing.show() def hide(self): self.table.hide() self.btnFlashlight.hide() self.btnTelephone.hide() self.btnDoor.hide() self.ringRing.hide() def destroy(self): self.table.destroy() self.btnFlashlight.destroy() self.btnTelephone.destroy() self.btnDoor.destroy() self.ringRing.destroy()
class NameEntry: def __init__(self, items=SIGNS, menu=False): self.items = items self.menu = menu base.cam.set_pos(0, 0, 0) base.cam.set_hpr(0, 0, 0) self.currentSign = 0 self.currentFrameID = 0 self.currentFrame = None self.sound_lo = loader.load_sfx("assets/sfx/pong_lo.wav") self.sound_lo.set_volume(0.4) self.sound_ye = loader.load_sfx("assets/sfx/pickup.wav") self.sound_ye.set_volume(0.4) self.sound_no = loader.load_sfx("assets/sfx/bounce.wav") self.sound_no.set_volume(0.4) self.repeating = 0 self.spinnerNode = NodePath("spinner") self.spinnerNode.setPos(0, 3, -0.2) self.spinnerNode.setHpr(-90, 0, 0) self.spinnerNode.setShaderAuto(True) size = (-0.15, 0.15, -0.05, 0.375) z = 0.5 if menu: self.spinnerNode.setScale(0.6) self.spinnerNode.setZ(-0.4) else: self.help = DirectLabel( text= "left/right = Choose sign | up = Select sign | down = remove/back", frameColor=(0, 0, 0, 0), text_fg=(1, 1, 1, 1), pos=(0, 0, -0.8), scale=0.07) self.first = DirectFrame(text="", frameColor=(0, 0, 0, 1), frameSize=size, pos=(-0.4, 0, z), text_scale=0.35, text_fg=(1, 1, 1, 1), text_font=base.font, text_align=TextNode.ACenter) self.second = DirectFrame(text="", frameColor=(0, 0, 0, 1), frameSize=size, pos=(0, 0, z), text_scale=0.35, text_fg=(1, 1, 1, 1), text_font=base.font, text_align=TextNode.ACenter) self.third = DirectFrame(text="", frameColor=(0, 0, 0, 1), frameSize=size, pos=(0.4, 0, z), text_scale=0.35, text_fg=(1, 1, 1, 1), text_font=base.font, text_align=TextNode.ACenter) self.currentFrame = self.first self.arrowA = DirectFrame(frameSize=(-0.1, 0.1, -0.1, 0.1), frameColor=(0, 0, 0, 0), pos=(-0.4, 0, z - 0.15), image="assets/gui/arrow.png", image_scale=0.2, scale=0.5) self.arrowA.setTransparency(1) self.arrowB = DirectFrame(frameSize=(-0.1, 0.1, -0.1, 0.1), frameColor=(0, 0, 0, 0), pos=(0, 0, -0.5), image="assets/gui/arrow.png", image_scale=0.2, scale=0.5) self.arrowB.setTransparency(1) self.task = base.task_mgr.add(self.update) r = 1 for i, sign in enumerate(self.items): deg = 2 * pi / len(self.items) t = deg * i x = r * cos(t) y = r * sin(t) s = TextNode(sign) s.setText(sign) s.setAlign(TextNode.ACenter) s.setFont(base.font) s.setTextColor(1, 1, 1, 1) snp = self.spinnerNode.attachNewNode(s) snp.setScale(0.2) if sign == "end": snp.setScale(0.1) snp.setPos(x, y, 0) snp.setHpr(90 + i * (360 / len(self.items)), 0, 0) self.spinnerNode.reparentTo(render) self.delay = 0.2 def activate(self): self.sound_ye.play() if self.currentSign == 0: base.messenger.send("do_start") elif self.currentSign == 1: base.messenger.send("do_highscore") else: base.messenger.send("do_quit") def tick(self): self.delay -= globalClock.get_dt() if self.delay < 0: return True def update(self, task): if self.tick(): context = base.device_listener.read_context('player') if context["move"] > 0.2: self.rotateRight() if self.repeating: self.delay = 0.2 * (0.9**self.repeating) self.repeating += 1 else: self.delay = 0.2 self.repeating = 1 elif context['move'] < -0.2: self.rotateLeft() if self.repeating: self.delay = 0.2 * (0.9**self.repeating) self.repeating += 1 else: self.delay = 0.2 self.repeating = 1 elif context["accelerate"] or context["select"]: self.addSign() self.delay = 0.2 self.repeating = False elif context["decelerate"] or context["backspace"]: self.removeSign() self.delay = 0.2 self.repeating = False else: self.delay = 0 self.repeating = False if self.spinnerNode: desired_h = -self.currentSign * 360 / len(self.items) - 90 current_h = self.spinnerNode.get_h() diff = (((desired_h - current_h) + 180) % 360) - 180 delta = diff * globalClock.dt * 10 if abs(delta) > abs(diff): delta = diff self.spinnerNode.set_h(current_h + delta) return task.cont def destroy(self): self.task.remove() self.spinnerNode.removeNode() if not self.menu: self.first.destroy() self.second.destroy() self.third.destroy() self.arrowA.destroy() self.arrowB.destroy() self.help.destroy() def addSign(self): if self.menu: self.activate() return else: self.sound_ye.play() if self.items[self.currentSign] == "end": base.messenger.send("nameEntryDone") return self.currentFrame.setText(self.items[self.currentSign]) if self.currentFrameID < 2: self.arrowA.setX(self.arrowA.getX() + 0.4) self.currentFrameID += 1 if self.currentFrameID == 0: self.currentFrame = self.first elif self.currentFrameID == 1: self.currentFrame = self.second elif self.currentFrameID == 2: self.currentFrame = self.third else: self.currentSign = SIGNS.index("end") def removeSign(self): if self.menu: self.activate() return if self.currentFrame["text"] != "": self.currentFrame.setText("") return if self.currentFrameID > 0: self.sound_no.play() self.arrowA.setX(self.arrowA.getX() - 0.4) self.currentFrameID -= 1 if self.currentFrameID == 0: self.currentFrame = self.first elif self.currentFrameID == 1: self.currentFrame = self.second elif self.currentFrameID == 2: self.currentFrame = self.third def get(self): return "{}{}{}".format(self.first["text"], self.second["text"], self.third["text"]) def rotateLeft(self): self.sound_lo.play() self.currentSign -= 1 if self.currentSign < 0: self.currentSign = len(self.items) - 1 def rotateRight(self): self.sound_lo.play() self.currentSign += 1 if self.currentSign >= len(self.items): self.currentSign = 0