def __createFolder(self, entry, xPos, zPos): name = entry.name btn = DirectButton( parent=self.container.getCanvas(), image=loader.load_texture(f"{self.iconDir}/Folder.png", loaderOptions=self.imageOpts), image_scale=16, image_pos=(16,0,0), relief=1, frameColor = self.theme.folder_background, frameSize=(0, self.screenWidthPxHalf*2, -16, 16), pos=LPoint3f(xPos, 0, zPos), text = name, text_scale=12, text_align=TextNode.ALeft, text_pos=(32,-4), text_fg=self.theme.default_text_color, command=self.folderMoveIn, extraArgs=[entry.path] ) lblInfo = __createMIMEInfo(self, btn, entry, True) #lblSize = __createSizeInfo(self, btn, entry) btn.bind(DGG.MWDOWN, self.scroll, [0.01]) btn.bind(DGG.MWUP, self.scroll, [-0.01]) btn.setTransparency(TransparencyAttrib.M_multisample)
def init_pawn_change_panel(self, side, move): self.pawn_change_panel = self.objMngr.load_plane_textured( "ChessRender/data/panel.png") self.pawn_change_panel.reparentTo(self.render_fsm_ref.aspect2d) self.pawn_change_panel.setPos((0, 0, -0.85)) self.pawn_change_panel.setSx(1.8) self.pawn_change_panel.setSz(0.3) if side is Side.WHITE: swaped_figures = ["Q", "N", "B", "R"] else: swaped_figures = ["q", "n", "b", "r"] print('Side is ' + str(side)) self.swaped_icons = [] figure_num = 0 for swaped_figure in swaped_figures: but = DirectButton(text="", scale=0.13, command=self.swap_pawn_command, extraArgs=[swaped_figure, move], frameColor=((0.8, 0.8, 0.8, 0.0)), pos=(-0.5 + 0.35 * figure_num, 0, -0.85), image=self.objMngr.textures[ figure_as_render_object(swaped_figure)]) but.setTransparency(TransparencyAttrib.MAlpha) self.swaped_icons.append(but) figure_num += 1
def __createFolder(self, entry, xPos, zPos): name = entry.name if len(entry.name) > 10: name = "" for i in range(max(math.ceil(len(entry.name) / 10), 4)): name += entry.name[i * 10:i * 10 + 10] + "\n" name = name[:-1] if math.ceil(len(entry.name) / 10) > 4: name += "..." btn = DirectButton(parent=self.container.getCanvas(), image=loader.load_texture(f"{self.iconDir}/Folder.png", loaderOptions=self.imageOpts), image_scale=35, relief=1, frameColor=self.theme.folder_background, frameSize=(-40, 40, -40, 40), pos=LPoint3f(xPos, 0, zPos), text=name, text_scale=12, text_pos=(0, -40), text_fg=self.theme.default_text_color, command=self.folderMoveIn, extraArgs=[entry.path]) btn.bind(DGG.MWDOWN, self.scroll, [0.01]) btn.bind(DGG.MWUP, self.scroll, [-0.01]) btn.setTransparency(TransparencyAttrib.M_multisample)
def __createFile(self, filename, xPos, zPos): name = filename if len(filename) > 10: name = "" for i in range(min(math.ceil(len(filename)/10), 4)): name += filename[i*10:i*10+10]+"\n" name = name[:-1] if math.ceil(len(filename)/10) > 4: name += "..." btn = DirectButton( parent=self.container.getCanvas(), image="icons/File.png", image_scale=35, relief=1, frameColor = ( (0.9, 0.9, 0.9, 0), # Normal (0.95, 0.95, 1, 1), # Click (0.9, 0.9, 1, 1), # Hover (0.5, 0.5, 0.5, 1)), # Disabled frameSize=(-40, 40, -40, 40), pos=LPoint3f(xPos, 0, zPos), text = name, text_scale=12, text_pos=(0,-40), command=self.txtFileName.set, extraArgs=[filename] ) btn.bind(DGG.MWDOWN, self.scroll, [0.01]) btn.bind(DGG.MWUP, self.scroll, [-0.01]) btn.setTransparency(TransparencyAttrib.M_multisample)
class GUI: def __init__(self, rootParent=None): self.btnRollDice = DirectButton( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-0.25, 0.25, -0.25, 0.25), hpr=LVecBase3f(0, 0, 0), image='./assets/Dice/DiceButton.png', pos=LPoint3f(0.25, 0, 0.25), relief=1, scale=LVecBase3f(1, 1, 1), text='', image_scale=LVecBase3f(0.25, 0.25, 0.25), image_pos=LPoint3f(0, 0, 0), text_align=TextNode.A_center, text_scale=(0.15, 0.15), text_pos=(-0.08, -0.09), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=rootParent, command=base.messenger.send, extraArgs=["rollDice"], pressEffect=0, ) self.btnRollDice.setTransparency(1) def show(self): self.btnRollDice.show() def hide(self): self.btnRollDice.hide() def destroy(self): self.btnRollDice.destroy()
class GUI: def __init__(self, rootParent=None): self.btnEndTurn = DirectButton( borderWidth=(0.0, 0.0), frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-3.0, 3.0, -1.0, 1.0), hpr=LVecBase3f(0, 0, 0), image='./assets/Turn/EndTurn.png', pos=LPoint3f(0, 0, 0.1), relief=1, scale=LVecBase3f(0.1, 0.1, 0.1), text='End Turn', image_scale=LVecBase3f(3, 0, 1), image_pos=LPoint3f(0, 0, 0), text_align=TextNode.A_center, text_scale=(1.0, 1.0), text_pos=(0.0, -0.3), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=rootParent, command=base.messenger.send, extraArgs=["endTurn"], pressEffect=0, ) self.btnEndTurn.setTransparency(1) def show(self): self.btnEndTurn.show() def hide(self): self.btnEndTurn.hide() def destroy(self): self.btnEndTurn.destroy()
class Main(ShowBase): def __init__(self): """ Initialization of the connect 4""" print('General > Initialization') super().__init__() # General settings # self.disable_mouse() # Load the background self.background = OnscreenImage(parent=self.render2dp, image="tex/bedroom.jpg") self.cam2dp.node().getDisplayRegion(0).setSort(-20) # Load the avatar self.arm = Actor("models/Tatsumi_models/Tatsumi_1", {"anim1": "models/Tatsumi_models/Tatsumi_1_anim"}) self.arm.setPos(0, 50, -36) self.arm.setScale(20, 20, 20) self.arm.reparentTo(self.render) self.arm.setPlayRate(4, "anim1") self.arm.play("anim1") # Load the buttons self.icon_connect4 = DirectButton(image="img/connect4.png", pos=(-1.5, 0, -0.8), scale=(0.2, 0.2, 0.2), relief=None, command=self.run_connect4) self.icon_connect4.setTransparency(TransparencyAttrib.MAlpha) self.games = [] def run_connect4(self): """ Function that initializers the connect4 game """ print("General > Run the Connect 4") self.hide_elements() connect4 = Connect4(self) self.games.append(connect4) self.taskMgr.add(self.loop, "loop") def show_elements(self): """ Function that shows the elements of the initial display """ self.games = [] self.icon_connect4.show() def hide_elements(self): """ Function that hides the elements of the initial display """ self.icon_connect4.hide() def loop(self, task): """ Function that runs the connect4 game """ if self.games[0].mainloop() == 0: self.show_elements() return task.done else: return task.cont
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 InventoryItem(): def __init__(self, key, image, action, pos, rootParent): self.key = key self.btn = DirectButton(frameSize=(-0.1, 0.1, -0.1, 0.1), frameColor=(0, 0, 0, 0), text="", image=image, image_scale=0.1, command=base.messenger.send, extraArgs=[action], pos=pos, parent=rootParent) self.btn.setTransparency(1)
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.volume = DirectSlider( pos=LPoint3f(0.2, 0, 0.325), text='Volume', text_pos=(-1.05, -0.02), text_fg=(1, 1, 1, 1), text_scale=0.1, text_align=TextNode.ARight, parent=rootParent, command=base.messenger.send, extraArgs=["volumeChange"], ) self.volume.setTransparency(0) self.audioMute = DirectCheckButton( frameSize=(-2.925000047683716, 3.024999713897705, -0.225, 0.8250000238418579), pos=LPoint3f(0, 0, 0), scale=LVecBase3f(0.1, 0.1, 0.1), text='Mute', parent=rootParent, command=self.toggleMute, ) self.audioMute.setTransparency(0) self.btnBack = DirectButton( frameSize=(-1.5249999523162843, 1.6499999523162843, -0.21250001192092896, 0.8250000238418579), pos=LPoint3f(0, 0, -0.575), scale=LVecBase3f(0.1, 0.1, 0.1), text='Back', parent=rootParent, command=base.messenger.send, extraArgs=["optionBack"], pressEffect=1, ) self.btnBack.setTransparency(0) self.fullscreen = DirectCheckButton( frameSize=(-3.35, 2.6, -0.213, 0.825), pos=LPoint3f(0.045, 0, -0.175), scale=LVecBase3f(0.1, 0.1, 0.1), text='Fullscreen', parent=rootParent, command=self.toggleFullscreen, ) self.fullscreen.setTransparency(0) def show(self): self.volume.show() self.audioMute.show() self.btnBack.show() self.fullscreen.show() def hide(self): self.volume.hide() self.audioMute.hide() self.btnBack.hide() self.fullscreen.hide() def destroy(self): self.volume.destroy() self.audioMute.destroy() self.btnBack.destroy() self.fullscreen.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 MainMenu(ShowBase): def __init__(self): ShowBase.__init__(self) self.accept("Exit",self.__exit) self.__rm = ResourcesManager() self.__destroySetting = False # 菜单界面 def start(self): #全屏 self.setFullScreen(0) #load background image self.__image = OnscreenImage(image='../../resources/images/menu/home1.png',scale=1) self.__image.setSx(self.getAspectRatio()) self.__image.setTransparency(TransparencyAttrib.MAlpha) # 监听输入 self.__keyInput = MenuPlayerInputHandler() self.accept("NewGame",self.__new_game) self.accept("LoadGame",self.__load_game) self.accept("Description",self.__description) self.accept("ChangeMenu",self.__change_menu) self.accept("a",self.setting_menu) self.accept("b",self.setting_destroy) # 设置全屏 def setFullScreen(self,full): if full == 1 : self.__setFullscreen(2560,1600,0,0,1) else: self.__setFullscreen(800,600,150,50,0) # 清除界面,清除监听 def destroy(self): self.__image.destroy() self.__keyInput.destroy() # 私有函数,选择全屏 def __setFullscreen(self, width, height, posX, posY, full): winProps = WindowProperties() winProps.setOrigin(posX, posY) winProps.setSize(width, height) winProps.setFullscreen(full) self.win.requestProperties(winProps) # 私有函数,进入新建游戏界面 def __new_game(self): print '进入new game' messenger.send("serious_new_game") print '发送了serious_new_game' # 私有函数,进入读取游戏界面 def __load_game(self): print '进入load game' messenger.send("serious_load_game") print '发送了serious_load_game' # 私有函数,进入about界面 def __description(self): print '进入description' messenger.send("serious_description") print '发送了serious_description' # 私有函数,用来自建的选择进入的游戏界面 def __change_mode(self,image_path): self.__image.setImage(image_path) def __exit(self): print '进入exit' # self.__del__() exit() # 私有函数,更改游戏目录 def __change_menu(self): switch_count = {0:'../../resources/images/menu/home1.png', 1:'../../resources/images/menu/home2.png', 2:'../../resources/images/menu/home3.png', 3:'../../resources/images/menu/home4.png',} self.__change_mode(switch_count[self.__keyInput.get_count()]) #设置界面 def setting_menu(self): if self.__destroySetting==False: # 设置界面背景图 self.__background = OnscreenImage(image='../../resources/images/settings/setting_frame.png', pos=(0, 0, 0), scale=(1.0, 0, 0.7)) self.__background.setTransparency(TransparencyAttrib.MAlpha) ##滑动条 self.__slider = DirectSlider(pos=(0.16, 0, 0.26), scale=0.5, value=0.5, command=self.__setMusicSliderVolume, frameSize=(-1.0, 0.9, -0.06, 0.06), image='../../resources/images/settings/slide_bar.png', image_pos=(-0.05, 0, 0.0), image_scale=(1.0, 0, 0.05), thumb_image='../../resources/images/settings/slide_btn.png', thumb_image_pos=(-0.0, 0, 0.0), thumb_image_scale=0.1, thumb_frameSize=(0.0, 0.0, 0.0, 0.0)) self.__slider.setTransparency(TransparencyAttrib.MAlpha) # self.__musicButton = DirectButton(pos=(0.9, 0, 0.75), text="Close", scale=0.1, pad=(0.2, 0.2), rolloverSound=None, # clickSound=None, command=self.toggleMusicBox,extraArgs=[base]) # 继续按钮 self.__continueButton = DirectButton(pos=(-0.25, 0, 0.0), text="", scale=(0.2, 0, 0.1), command=self.__continue_game, image=("../../resources/images/settings/btn_continue_0.png", "../../resources/images/settings/btn_continue_0.png" , "../../resources/images/settings/btn_continue_1.png"), frameColor=(0, 0, 0, 0)) self.__continueButton.setTransparency(TransparencyAttrib.MAlpha) # 存档按钮 self.__saveButton = DirectButton(pos=(0.33, 0, 0.0), text="", scale=(0.2, 0, 0.1), command=self.__save_game, image=("../../resources/images/settings/btn_save_0.png", "../../resources/images/settings/btn_save_0.png" , "../../resources/images/settings/btn_save_1.png"), frameColor=(0, 0, 0, 0)) self.__saveButton.setTransparency(TransparencyAttrib.MAlpha) # 帮助按钮 self.__helpButton = DirectButton(pos=(-0.25, 0, -0.25), text="", scale=(0.2, 0, 0.1), command=self.__help, image=("../../resources/images/settings/btn_help_0.png", "../../resources/images/settings/btn_help_0.png" , "../../resources/images/settings/btn_help_1.png"), frameColor=(0, 0, 0, 0)) self.__helpButton.setTransparency(TransparencyAttrib.MAlpha) # 回到主界面按钮 self.__homeButton = DirectButton(pos=(0.33, 0, -0.25), text="", scale=(0.2, 0, 0.1), command=self.__return_home, image=("../../resources/images/settings/btn_home_0.png", "../../resources/images/settings/btn_home_0.png" , "../../resources/images/settings/btn_home_1.png"), frameColor=(0, 0, 0, 0)) self.__homeButton.setTransparency(TransparencyAttrib.MAlpha) # 设置滑动条value self.__slider['value'] = self.__rm.get_volume() self.__destroySetting = True #移除设置界面所有控件 def setting_destroy(self): if self.__destroySetting==True: self.__background.destroy() self.__rm.set_volume(self.__slider['value']) self.__slider.destroy() # self.__musicButton.destroy() self.__continueButton.destroy() self.__saveButton.destroy() self.__helpButton.destroy() self.__homeButton.destroy() self.__destroySetting = False # 设置音乐声音大小 def __setMusicSliderVolume(self): newVolume = self.__slider.guiItem.getValue() self.__rm.set_volume(newVolume) # 设置界面,私有函数,继续游戏 def __continue_game(self): self.setting_destroy() # 设置界面,私有函数,存档 def __save_game(self): self.setting_destroy() # 设置界面,私有函数,游戏帮助 def __help(self): self.setting_destroy() # 设置界面,私有函数,回到主界面 def __return_home(self): self.setting_destroy()
class GUI: def __init__(self, rootParent=None): self.btnStart = DirectButton( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-1.63125, 1.7312501430511475, -0.21250001192092896, 0.8124999761581421), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.325, 0, 0.25), 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(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, pressEffect=1, command=base.messenger.send, extraArgs=["do_start"] ) self.btnStart.setTransparency(0) self.btnHighscore = DirectButton( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-2.7499998569488526, 2.8874999046325684, -0.21250001192092896, 0.8124999761581421), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.025), scale=LVecBase3f(0.1, 0.1, 0.1), text='HIGHSCORE', 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=rootParent, pressEffect=1, command=base.messenger.send, extraArgs=["do_highscore"] ) self.btnHighscore.setTransparency(0) self.btnQuit = DirectButton( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-0.049999999254941946, 2.487499809265137, -0.225, 0.8124999761581421), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.225, 0, -0.3), scale=LVecBase3f(0.1, 0.1, 0.1), text='QUIT', text_align=TextNode.A_left, 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=rootParent, pressEffect=1, command=base.messenger.send, extraArgs=["do_quit"] ) self.btnQuit.setTransparency(0) def show(self): self.btnStart.show() self.btnHighscore.show() self.btnQuit.show() def hide(self): self.btnStart.hide() self.btnHighscore.hide() self.btnQuit.hide() def destroy(self): self.btnStart.destroy() self.btnHighscore.destroy() self.btnQuit.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 Menu(object): def __init__(self, main): self.main = main wx = base.win.get_x_size() wy = base.win.get_y_size() kx = 1600 ky = 900 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.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, 0, wy / 2 + 50)) self.startButton.setTransparency(1) self.exitButton = DirectButton(text="", text_scale=1.0, text_fg=(0.2, 0.2, 0.2, 1), frameTexture="res/exit.png", frameColor=(1, 1, 1, 1), frameSize=(-64, 64, -20, 20), relief=DGG.FLAT, command=exit, rolloverSound=None, clickSound=None, parent=self.myFrame, scale=2.0, pos=(wx / 2, 0, wy / 2 - 50)) self.exitButton.setTransparency(1) self.resumeButton = DirectButton(text="", text_scale=1.0, text_fg=(0.2, 0.2, 0.2, 1), frameTexture="res/resume.png", frameColor=(1, 1, 1, 1), frameSize=(-64, 64, -20, 20), relief=DGG.FLAT, command=self.main.resumeGame, rolloverSound=None, clickSound=None, parent=self.myFrame, scale=2.0, pos=(wx / 2, 0, wy / 2 + 150)) self.resumeButton.setTransparency(1) self.resumeButton.hide() def hideMenu(self): 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, .5, (1, 1, 1, 1))) seq.start() def showMenu(self): 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.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.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()
def __makeStructureFrameTreeItem(self, elementNP, elementInfo, parentsLevel, z): if elementInfo is None: lbl = DirectLabel(text=elementNP.getName(), text_align=TextNode.ALeft, frameColor=(0, 0, 0, 0), relief=DGG.FLAT, pos=(self.structureFrame["frameSize"][0] + 20 * parentsLevel, 0, z), scale=16, parent=self.structureFrame.getCanvas()) self.maxWidth = max( self.maxWidth, lbl.getX() + lbl.getWidth() * lbl.getScale()[0]) else: margin = 5 shift = 6 if hasattr(elementNP, "getChildren"): if len(elementNP.getChildren()) > 0: # Collapse Button btnC = DirectCheckBox( relief=DGG.FLAT, pos=(self.structureFrame["frameSize"][0] + 20 * parentsLevel - 16 + margin, 0, z + shift), frameSize=(-8, 8, -8, 8), frameColor=(0, 0, 0, 0), command=self.__collapseElement, extraArgs=[elementInfo], image="icons/Collapsed.png" if elementInfo in self.collapsedElements else "icons/Collapse.png", uncheckedImage="icons/Collapse.png", checkedImage="icons/Collapsed.png", image_scale=8, isChecked=elementInfo in self.collapsedElements, parent=self.structureFrame.getCanvas()) btnC.setTransparency(TransparencyAttrib.M_alpha) btnC.bind(DGG.MWDOWN, self.scroll, [0.01]) btnC.bind(DGG.MWUP, self.scroll, [-0.01]) # Element Name btn = DirectButton( frameColor=( VBase4(1, 1, 1, 1), #normal VBase4(0.9, 0.9, 0.9, 1), #click VBase4(0.8, 0.8, 0.8, 1), #hover VBase4(0.5, 0.5, 0.5, 1)), #disabled text=elementInfo.name, text_align=TextNode.ALeft, relief=DGG.FLAT, pos=(self.structureFrame["frameSize"][0] + 20 * parentsLevel, 0, z), scale=16, command=self.__selectElement, extraArgs=[elementInfo], parent=self.structureFrame.getCanvas()) btn.bind(DGG.MWDOWN, self.scroll, [0.01]) btn.bind(DGG.MWUP, self.scroll, [-0.01]) if self.selectedElement is not None and self.selectedElement == elementInfo: btn.setColorScale(1, 1, 0, 1) # Delete Button btnX = DirectButton( relief=DGG.FLAT, pos=(self.structureFrame["frameSize"][0] + 8 + margin + 20 * parentsLevel + btn.getWidth() * btn.getScale()[0], 0, z + shift), frameSize=(-8, 8, -8, 8), frameColor=(0, 0, 0, 0), command=self.__removeElement, extraArgs=[elementInfo], image="icons/DeleteSmall.png", image_scale=8, parent=self.structureFrame.getCanvas()) btnX.setTransparency(TransparencyAttrib.M_multisample) btnX.bind(DGG.MWDOWN, self.scroll, [0.01]) btnX.bind(DGG.MWUP, self.scroll, [-0.01]) # Visibility Button btnV = DirectCheckBox( relief=DGG.FLAT, pos=(self.structureFrame["frameSize"][0] + 8 + margin * 2 + 20 * parentsLevel + btn.getWidth() * btn.getScale()[0] + btnX.getWidth(), 0, z + shift), frameSize=(-8, 8, -8, 8), frameColor=(0, 0, 0, 0), command=self.__toggleElementVisibility, extraArgs=[elementInfo], image="icons/VisibilityOffSmall.png" if elementInfo.element.isHidden() else "icons/VisibilityOnSmall.png", uncheckedImage="icons/VisibilityOffSmall.png", checkedImage="icons/VisibilityOnSmall.png", image_scale=8, isChecked=not elementInfo.element.isHidden(), parent=self.structureFrame.getCanvas()) btnV.setTransparency(TransparencyAttrib.M_multisample) btnV.bind(DGG.MWDOWN, self.scroll, [0.01]) btnV.bind(DGG.MWUP, self.scroll, [-0.01]) self.maxWidth = max(self.maxWidth, btnV.getX() + 8)
class Character(DirectButton): def __init__(self, rootParent, pos, charFolder, charEvt): self.btn = DirectButton( image="characters/{}/idle_l1.png".format(charFolder), frameColor=(0, 0, 0, 0), frameSize=(-0.5, 0.5, -1, 1), scale=0.15, pos=pos, parent=rootParent, command=base.messenger.send, extraArgs=[charEvt], pressEffect=True) self.btn.setTransparency(1) self.animation = None self.charFolder = charFolder self.movement = None def stop(self): if self.animation is not None: self.animation.finish() if self.movement is not None: self.movement.finish() def destroy(self): self.stop() self.btn.destroy() def setStart(self, newPos): if self.movement is not None: self.movement.finish() self.btn.setPos(newPos) def animate(self, animation, direction, framecount, stopMovement=False): if stopMovement and self.movement is not None: self.movement.finish() if self.animation is not None: self.animation.finish() self.animation = self.getAnimation(animation, direction, framecount) self.animation.loop() def getAnimation(self, animationName, direction, framecount): delay = Wait(0.3) animation = Sequence() for i in range(1, framecount): path = "characters/{}/{}_{}{}.png".format(self.charFolder, animationName, direction, i) animation.append(Func(self.setFrame, path)) animation.append(delay) return animation def setFrame(self, path): self.btn.setImage(path) tex = self.btn.component("image0").getTexture() tex.setMagfilter(SamplerState.FT_nearest) tex.setMinfilter(SamplerState.FT_nearest) def moveTo(self, newPos): self.animation.finish() direction = "" if newPos[0] > self.btn.getX(): direction = "r" else: direction = "l" self.movement = Sequence( Func(self.animate, "run", direction, 4), self.btn.posInterval(3.0, newPos), Func(self.animate, "idle", direction, 3), ) self.movement.start()
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.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 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.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 DirectFolderBrowser(DirectObject): def __init__(self, command, fileBrowser=False, defaultPath="~", defaultFilename="unnamed.txt", fileExtensions=[], tooltip=None): """ A simple file and folder browser command: The command that will be called on closing the browser fileBrowser: If set to True the browser will show files, otherwise it will only show folders defaultPath: The initial path the browser will be set to show defaultFilename: The filename that will be set by default, only usefull if fileBrowser is True fileExtensions: A list of extensions. Only files with those extensions will be shown. Only usefull if fileBrowser is True tooltip: An instance of the Tooltip class to display tooltips for certain parts of the editor """ self.tt = tooltip self.command = command self.showFiles = fileBrowser self.fileExtensions = fileExtensions self.showHidden = False self.currentPath = os.path.expanduser(defaultPath) if not os.path.exists(self.currentPath): self.currentPath = os.path.expanduser("~") self.previousPath = self.currentPath self.screenWidthPx = base.getSize()[0] self.screenWidthPxHalf = self.screenWidthPx * 0.5 self.screenHeightPx = base.getSize()[1] self.screenHeightPxHalf = self.screenHeightPx * 0.5 self.mainFrame = DirectFrame( relief=1, frameSize=(-self.screenWidthPxHalf,self.screenWidthPxHalf,-self.screenHeightPxHalf,self.screenHeightPxHalf), frameColor=(1, 1, 1, 1), pos=LPoint3f(base.getSize()[0]/2, 0, -base.getSize()[1]/2), parent=base.pixel2d, state=DGG.NORMAL, ) self.pathRightMargin = 153 self.pathEntryWidth = self.screenWidthPx - self.pathRightMargin self.pathEntry = DirectEntry( parent=self.mainFrame, relief=DGG.SUNKEN, frameColor=(1, 1, 1, 1), pad=(0.2, 0.2), pos=LPoint3f(-self.screenWidthPxHalf + 15, 0, self.screenHeightPxHalf - 25), scale=12, width=self.pathEntryWidth/12, overflow=True, command=self.entryAccept, initialText=self.currentPath, focusInCommand=base.messenger.send, focusInExtraArgs=["unregisterKeyboardEvents"], focusOutCommand=base.messenger.send, focusOutExtraArgs=["reregisterKeyboardEvents"], ) x = self.pathEntryWidth/2-28 self.btnReload = DirectButton( parent=self.mainFrame, relief=1, frameColor = ( (0.8, 0.8, 0.8, 1), # Normal (0.9, 0.9, 1, 1), # Click (0.8, 0.8, 1, 1), # Hover (0.5, 0.5, 0.5, 1)), # Disabled frameSize=(-14, 14, -10, 18), pos=LPoint3f(x, 0, self.screenHeightPxHalf - 25), command=self.folderReload, image="icons/Reload.png", image_scale=14, image_pos=(0,0,4), ) self.btnReload.setTransparency(TransparencyAttrib.M_multisample) if self.tt is not None: self.btnReload.bind(DGG.ENTER, self.tt.show, ["Reload Folder"]) self.btnReload.bind(DGG.EXIT, self.tt.hide) x += 28 self.btnFolderUp = DirectButton( parent=self.mainFrame, relief=1, frameColor = ( (0.8, 0.8, 0.8, 1), # Normal (0.9, 0.9, 1, 1), # Click (0.8, 0.8, 1, 1), # Hover (0.5, 0.5, 0.5, 1)), # Disabled frameSize=(-14, 14, -10, 18), pos=LPoint3f(x, 0, self.screenHeightPxHalf - 25), command=self.folderUp, image="icons/FolderUp.png", image_scale=14, image_pos=(0,0,4), ) self.btnFolderUp.setTransparency(TransparencyAttrib.M_multisample) if self.tt is not None: self.btnFolderUp.bind(DGG.ENTER, self.tt.show, ["Move up one level"]) self.btnFolderUp.bind(DGG.EXIT, self.tt.hide) x += 28 self.btnFolderNew = DirectButton( parent=self.mainFrame, relief=1, frameColor = ( (0.8, 0.8, 0.8, 1), # Normal (0.9, 0.9, 1, 1), # Click (0.8, 0.8, 1, 1), # Hover (0.5, 0.5, 0.5, 1)), # Disabled frameSize=(-14, 14, -10, 18), pos=LPoint3f(x, 0, self.screenHeightPxHalf - 25), command=self.folderNew, image="icons/FolderNew.png", image_scale=14, image_pos=(0,0,4), ) self.btnFolderNew.setTransparency(TransparencyAttrib.M_multisample) if self.tt is not None: self.btnFolderNew.bind(DGG.ENTER, self.tt.show, ["Create new folder"]) self.btnFolderNew.bind(DGG.EXIT, self.tt.hide) x += 28 self.btnFolderShowHidden = DirectButton( parent=self.mainFrame, relief=1, frameColor = ( (0.8, 0.8, 0.8, 1), # Normal (0.9, 0.9, 1, 1), # Click (0.8, 0.8, 1, 1), # Hover (0.5, 0.5, 0.5, 1)), # Disabled frameSize=(-14, 14, -10, 18), pos=LPoint3f(x, 0, self.screenHeightPxHalf - 25), command=self.folderShowHidden, image="icons/FolderShowHidden.png", image_scale=14, image_pos=(0,0,4), ) self.btnFolderShowHidden.setTransparency(TransparencyAttrib.M_multisample) if self.tt is not None: self.btnFolderShowHidden.bind(DGG.ENTER, self.tt.show, ["Show/Hide hidden files and folders"]) self.btnFolderShowHidden.bind(DGG.EXIT, self.tt.hide) color = ( (0.8, 0.8, 0.8, 1), # Normal (0.9, 0.9, 1, 1), # Click (0.8, 0.8, 1, 1), # Hover (0.5, 0.5, 0.5, 1)) # Disabled self.container = DirectScrolledFrame( relief=DGG.RIDGE, borderWidth=(2, 2), frameColor=(1, 1, 1, 1), frameSize=(-self.screenWidthPxHalf+10, self.screenWidthPxHalf-10, -self.screenHeightPxHalf+50, self.screenHeightPxHalf-50), canvasSize=(-self.screenWidthPxHalf+31, self.screenWidthPxHalf-10, -self.screenHeightPxHalf+50, self.screenHeightPxHalf-50), pos=LPoint3f(0, 0, 0), parent=self.mainFrame, scrollBarWidth=20, verticalScroll_scrollSize=20, verticalScroll_thumb_relief=DGG.FLAT, verticalScroll_incButton_relief=DGG.FLAT, verticalScroll_decButton_relief=DGG.FLAT, verticalScroll_thumb_frameColor=color, verticalScroll_incButton_frameColor=color, verticalScroll_decButton_frameColor=color, horizontalScroll_thumb_relief=DGG.FLAT, horizontalScroll_incButton_relief=DGG.FLAT, horizontalScroll_decButton_relief=DGG.FLAT, horizontalScroll_thumb_frameColor=color, horizontalScroll_incButton_frameColor=color, horizontalScroll_decButton_frameColor=color, state=DGG.NORMAL, ) self.container.bind(DGG.MWDOWN, self.scroll, [0.01]) self.container.bind(DGG.MWUP, self.scroll, [-0.01]) self.btnOk = DirectButton( parent=self.mainFrame, relief=1, frameColor = ( (0.8, 0.8, 0.8, 1), # Normal (0.9, 0.9, 1, 1), # Click (0.8, 0.8, 1, 1), # Hover (0.5, 0.5, 0.5, 1)), # Disabled frameSize=(-45, 45, -6, 14), pos=LPoint3f(self.screenWidthPxHalf-160, 0, -self.screenHeightPxHalf+25), text = "ok", text_scale=12, command=command, extraArgs=[1], ) self.btnCancel = DirectButton( parent=self.mainFrame, relief=1, frameColor = ( (0.8, 0.8, 0.8, 1), # Normal (0.9, 0.9, 1, 1), # Click (0.8, 0.8, 1, 1), # Hover (0.5, 0.5, 0.5, 1)), # Disabled frameSize=(-45, 45, -6, 14), pos=LPoint3f(self.screenWidthPxHalf-55, 0, -self.screenHeightPxHalf+25), text = "Cancel", text_scale=12, command=command, extraArgs=[0] ) if self.showFiles: self.txtFileName = DirectEntry( parent=self.mainFrame, relief=DGG.SUNKEN, frameColor=(1, 1, 1, 1), pad=(0.2, 0.2), pos=LPoint3f(-self.screenWidthPxHalf+25, 0, -self.screenHeightPxHalf+25), scale=12, width=200/12, overflow=True, command=self.filenameAccept, initialText=defaultFilename, focusInCommand=base.messenger.send, focusInExtraArgs=["unregisterKeyboardEvents"], focusOutCommand=base.messenger.send, focusOutExtraArgs=["reregisterKeyboardEvents"], ) self.newFolderFrame = DirectFrame( parent=self.mainFrame, relief=1, frameSize=(-self.screenWidthPxHalf+10,self.screenWidthPxHalf-10,-20,20), pos=LPoint3f(0, 0, self.screenHeightPxHalf-55), frameColor=(0.5,0.5,0.5,1), ) self.txtNewFolderName = DirectLabel( parent=self.newFolderFrame, text="New Folder Name", text_scale=12, frameColor=(0,0,0,0), text_align=TextNode.ALeft, pos=(-self.screenWidthPxHalf+15, 0, -3), ) self.folderName = DirectEntry( parent=self.newFolderFrame, relief=DGG.SUNKEN, frameColor=(1, 1, 1, 1), pad=(0.2, 0.2), pos=LPoint3f(-self.screenWidthPxHalf+25 + self.txtNewFolderName.getWidth(), 0, -4), scale=12, width=((self.screenWidthPxHalf-25)*2-self.txtNewFolderName.getWidth() - 100)/12, overflow=True, command=self.entryAccept, initialText="New Folder", focusInCommand=base.messenger.send, focusInExtraArgs=["unregisterKeyboardEvents"], focusOutCommand=base.messenger.send, focusOutExtraArgs=["reregisterKeyboardEvents"], ) self.btnCreate = DirectButton( parent=self.newFolderFrame, relief=1, frameColor = ( (0.8, 0.8, 0.8, 1), # Normal (0.9, 0.9, 1, 1), # Click (0.8, 0.8, 1, 1), # Hover (0.5, 0.5, 0.5, 1)), # Disabled frameSize=(-45, 45, -6, 14), pos=LPoint3f(self.screenWidthPxHalf-65, 0, -4), text = "Create", text_scale=12, command=self.folderCreate, extraArgs=[0] ) self.newFolderFrame.hide() self.folderReload() # handle window resizing self.prevScreenSize = base.getSize() self.accept("window-event", self.windowEventHandler) def show(self): self.mainFrame.show() self.accept("window-event", self.windowEventHandler) def hide(self): self.ignore("window-event") self.mainFrame.hide() def destroy(self): self.ignore("window-event") self.mainFrame.destroy() def scroll(self, scrollStep, event): self.container.verticalScroll.scrollStep(scrollStep) def get(self): if self.showFiles: return os.path.join(self.currentPath, self.txtFileName.get(True)) return self.currentPath def filenameAccept(self, filename): self.command(1) def entryAccept(self, path): self.folderReload() def folderReload(self): for element in self.container.getCanvas().getChildren(): element.removeNode() path = self.pathEntry.get(True) path = os.path.expanduser(path) path = os.path.expandvars(path) if not os.path.exists(path): return self.currentPath = path try: content = os.scandir(path) except PermissionError: base.messenger.send("showWarning", ["Access denied!"]) self.pathEntry.set(self.previousPath) self.currentPath = self.previousPath self.folderReload() return # start position for the folders and files xPos = -self.screenWidthPxHalf + 20 + 50 - 110 zPos = self.screenHeightPxHalf-60-40 dirList = [] fileList = [] unkList = [] for entry in content: if entry.name.startswith(".") and not self.showHidden: continue if entry.is_dir(): dirList.append(entry) elif entry.is_file() and self.showFiles: if len(self.fileExtensions) > 0: if os.path.splitext(entry.name)[1] in self.fileExtensions: fileList.append(entry) else: fileList.append(entry) elif self.showFiles: unkList.append(entry) def moveNext(entry): nonlocal xPos nonlocal zPos if entry.is_dir() or self.showFiles: if xPos + 110 > self.screenWidthPxHalf - 45: # move to the next line if we hit the right border (incl. scrollbar size) xPos = -self.screenWidthPxHalf + 20 + 50 zPos -= 110 else: # move right the next position xPos += 110 def getKey(item): return item.name.lower() for entry in sorted(dirList, key=getKey): moveNext(entry) self.__createFolder(entry, xPos, zPos) for entry in sorted(fileList, key=getKey): moveNext(entry) self.__createFile(entry.name, xPos, zPos) for entry in sorted(unkList, key=getKey): moveNext(entry) self.__createUnknown(entry.name, xPos, zPos) # recalculate the canvas size self.container["canvasSize"] = (-self.screenWidthPxHalf+31, self.screenWidthPxHalf-15, zPos-90, self.screenHeightPxHalf-50) self.container.setCanvasSize() def folderUp(self): self.previousPath = self.currentPath self.currentPath = os.path.normpath(os.path.join(self.currentPath, "..")) self.pathEntry.set(self.currentPath) self.folderReload() def folderMoveIn(self, path): path = os.path.expanduser(path) path = os.path.expandvars(path) self.previousPath = self.currentPath self.currentPath = path self.pathEntry.set(path) self.folderReload() self.container.verticalScroll["value"] = 0 def folderNew(self): if self.newFolderFrame.isHidden(): self.newFolderFrame.show() else: self.newFolderFrame.hide() def folderShowHidden(self): self.showHidden = not self.showHidden self.folderReload() def folderCreate(self, path=""): try: os.makedirs(os.path.join(self.currentPath, self.folderName.get(True))) except: base.messenger.send("showWarning", ["Can't create folder"]) self.newFolderFrame.hide() self.folderReload() def __createFolder(self, entry, xPos, zPos): name = entry.name if len(entry.name) > 10: name = "" for i in range(max(math.ceil(len(entry.name)/10), 4)): name += entry.name[i*10:i*10+10]+"\n" name = name[:-1] if math.ceil(len(entry.name)/10) > 4: name += "..." btn = DirectButton( parent=self.container.getCanvas(), image="icons/Folder.png", image_scale=35, relief=1, frameColor = ( (0.9, 0.9, 0.9, 0), # Normal (0.95, 0.95, 1, 1), # Click (0.9, 0.9, 1, 1), # Hover (0.5, 0.5, 0.5, 1)), # Disabled frameSize=(-40, 40, -40, 40), pos=LPoint3f(xPos, 0, zPos), text = name, text_scale=12, text_pos=(0,-40), command=self.folderMoveIn, extraArgs=[entry.path] ) btn.bind(DGG.MWDOWN, self.scroll, [0.01]) btn.bind(DGG.MWUP, self.scroll, [-0.01]) btn.setTransparency(TransparencyAttrib.M_multisample) def __createFile(self, filename, xPos, zPos): name = filename if len(filename) > 10: name = "" for i in range(min(math.ceil(len(filename)/10), 4)): name += filename[i*10:i*10+10]+"\n" name = name[:-1] if math.ceil(len(filename)/10) > 4: name += "..." btn = DirectButton( parent=self.container.getCanvas(), image="icons/File.png", image_scale=35, relief=1, frameColor = ( (0.9, 0.9, 0.9, 0), # Normal (0.95, 0.95, 1, 1), # Click (0.9, 0.9, 1, 1), # Hover (0.5, 0.5, 0.5, 1)), # Disabled frameSize=(-40, 40, -40, 40), pos=LPoint3f(xPos, 0, zPos), text = name, text_scale=12, text_pos=(0,-40), command=self.txtFileName.set, extraArgs=[filename] ) btn.bind(DGG.MWDOWN, self.scroll, [0.01]) btn.bind(DGG.MWUP, self.scroll, [-0.01]) btn.setTransparency(TransparencyAttrib.M_multisample) def __createUnknown(self, filename, xPos, zPos): name = filename if len(filename) > 10: name = "" for i in range(math.ceil(len(filename)/10)): name += filename[i*10:i*10+10]+"\n" name = name[:-1] lbl = DirectLabel( parent=self.container.getCanvas(), image="icons/File.png", image_scale=35, image_color=(0.9,0.5,0.5,1), relief=1, frameColor = (0.7, 0.7, 0.7, 0), frameSize=(-40, 40, -40, 40), pos=LPoint3f(xPos, 0, zPos), text = name, text_scale=12, text_pos=(0,-40), ) lbl.bind(DGG.MWDOWN, self.scroll, [0.01]) lbl.bind(DGG.MWUP, self.scroll, [-0.01]) lbl.setTransparency(TransparencyAttrib.M_multisample) def windowEventHandler(self, window=None): if window != base.win: # This event isn't about our window. return if window is not None: # window is none if panda3d is not started if self.prevScreenSize == base.getSize(): return self.prevScreenSize = base.getSize() self.screenWidthPx = base.getSize()[0] self.screenWidthPxHalf = self.screenWidthPx * 0.5 self.screenHeightPx = base.getSize()[1] self.screenHeightPxHalf = self.screenHeightPx * 0.5 # reposition and resize all gui elements self.mainFrame.setPos(self.screenWidthPx/2, 0, -self.screenHeightPx/2) self.mainFrame["frameSize"] = (-self.screenWidthPxHalf,self.screenWidthPxHalf,-self.screenHeightPxHalf,self.screenHeightPxHalf) self.pathEntryWidth = self.screenWidthPx - self.pathRightMargin self.pathEntry.setPos(LPoint3f(-self.screenWidthPxHalf + 15, 0, self.screenHeightPxHalf - 25)) self.pathEntry["width"] = self.pathEntryWidth/12 self.pathEntry.resetFrameSize() # reposition top right icons x = self.pathEntryWidth/2-28 self.btnReload.setPos(LPoint3f(x, 0, self.screenHeightPxHalf - 25)) x += 28 self.btnFolderUp.setPos(pos=LPoint3f(x, 0, self.screenHeightPxHalf - 25)) x += 28 self.btnFolderNew.setPos(pos=LPoint3f(x, 0, self.screenHeightPxHalf - 25)) x += 28 self.btnFolderShowHidden.setPos(pos=LPoint3f(x, 0, self.screenHeightPxHalf - 25)) # resize the browsing area self.container["frameSize"] = (-self.screenWidthPxHalf+10, self.screenWidthPxHalf-10, -self.screenHeightPxHalf+50, self.screenHeightPxHalf-50) # Note: canvas size of the container will be reset in the # folder Reload call at the end of this function self.btnOk.setPos(LPoint3f(self.screenWidthPxHalf-160, 0, -self.screenHeightPxHalf+25)) self.btnCancel.setPos(LPoint3f(self.screenWidthPxHalf-55, 0, -self.screenHeightPxHalf+25)) if self.showFiles: self.txtFileName.setPos(LPoint3f(-self.screenWidthPxHalf+25, 0, -self.screenHeightPxHalf+25)) self.newFolderFrame.setPos(LPoint3f(0, 0, self.screenHeightPxHalf-55)) self.newFolderFrame["frameSize"] = (-self.screenWidthPxHalf+10,self.screenWidthPxHalf-10,-20,20) self.txtNewFolderName.setPos(-self.screenWidthPxHalf+15, 0, -3) self.folderName.setPos(LPoint3f(-self.screenWidthPxHalf+25 + self.txtNewFolderName.getWidth(), 0, -4)) self.folderName["width"]=((self.screenWidthPxHalf-25)*2-self.txtNewFolderName.getWidth() - 100)/12 self.btnCreate.setPos(LPoint3f(self.screenWidthPxHalf-65, 0, -4)) self.folderReload()
def __init__(self, tooltip, grid): self.tt = tooltip self.grid = grid screenWidthPx = base.getSize()[0] left = screenWidthPx * 0.25 barWidth = screenWidthPx * 0.75 color = ( (0.25, 0.25, 0.25, 1), # Normal (0.35, 0.35, 1, 1), # Click (0.25, 0.25, 1, 1), # Hover (0.1, 0.1, 0.1, 1)) # Disabled # # Toolbar # self.toolBar = DirectBoxSizer(frameColor=(0.25, 0.25, 0.25, 1), frameSize=(0, barWidth, -24, 24), autoUpdateFrameSize=False, pos=(0, 0, 0), parent=base.pixel2d) buttonColor = ( (0.8, 0.8, 0.8, 1), # Normal (0.9, 0.9, 1, 1), # Click (0.8, 0.8, 1, 1), # Hover (0.5, 0.5, 0.5, 1)) # Disabled btn = DirectButton(frameSize=(-24, 24, -24, 24), frameColor=buttonColor, relief=DGG.FLAT, command=base.messenger.send, extraArgs=["newProject"], image="icons/New.png", image_scale=24) btn.setTransparency(TransparencyAttrib.M_multisample) btn.bind(DGG.ENTER, self.tt.show, ["Create New GUI (Ctrl-N)"]) btn.bind(DGG.EXIT, self.tt.hide) self.toolBar.addItem(btn) btn = DirectButton(frameSize=(-24, 24, -24, 24), frameColor=buttonColor, relief=DGG.FLAT, command=base.messenger.send, extraArgs=["saveProject"], image="icons/Save.png", image_scale=24) btn.setTransparency(TransparencyAttrib.M_multisample) btn.bind(DGG.ENTER, self.tt.show, ["Save GUI as gui Project (Ctrl-S)"]) btn.bind(DGG.EXIT, self.tt.hide) self.toolBar.addItem(btn) btn = DirectButton(frameSize=(-24, 24, -24, 24), frameColor=buttonColor, text_scale=0.33, relief=DGG.FLAT, command=base.messenger.send, extraArgs=["exportProject"], image="icons/Export.png", image_scale=24) btn.setTransparency(TransparencyAttrib.M_multisample) btn.bind(DGG.ENTER, self.tt.show, ["Export GUI as python script (Ctrl-E)"]) btn.bind(DGG.EXIT, self.tt.hide) self.toolBar.addItem(btn) btn = DirectButton(frameSize=(-24, 24, -24, 24), frameColor=buttonColor, relief=DGG.FLAT, text_scale=0.33, command=base.messenger.send, extraArgs=["loadProject"], image="icons/Load.png", image_scale=24) btn.setTransparency(TransparencyAttrib.M_multisample) btn.bind(DGG.ENTER, self.tt.show, ["Load GUI project (Ctrl-O)"]) btn.bind(DGG.EXIT, self.tt.hide) self.toolBar.addItem(btn) placeholder = DirectFrame(text="|", frameSize=(-1, 1, -24, 24), pad=(4, 0), frameColor=(0, 0, 0, 1)) self.toolBar.addItem(placeholder) btn = DirectButton(frameSize=(-24, 24, -24, 24), frameColor=buttonColor, relief=DGG.FLAT, text_scale=0.33, command=base.messenger.send, extraArgs=["undo"], image="icons/Undo.png", image_scale=24) btn.setTransparency(TransparencyAttrib.M_multisample) btn.bind(DGG.ENTER, self.tt.show, ["Undo last action (Ctrl-Z)"]) btn.bind(DGG.EXIT, self.tt.hide) self.toolBar.addItem(btn) btn = DirectButton(frameSize=(-24, 24, -24, 24), frameColor=buttonColor, relief=DGG.FLAT, text_scale=0.33, command=base.messenger.send, extraArgs=["redo"], image="icons/Redo.png", image_scale=24) btn.setTransparency(TransparencyAttrib.M_multisample) btn.bind(DGG.ENTER, self.tt.show, ["Redo last action (Ctrl-Y)"]) btn.bind(DGG.EXIT, self.tt.hide) self.toolBar.addItem(btn) btn = DirectButton(frameSize=(-24, 24, -24, 24), frameColor=buttonColor, relief=DGG.FLAT, text_scale=0.33, command=base.messenger.send, extraArgs=["cycleRedo"], image="icons/CycleRedo.png", image_scale=24) btn.setTransparency(TransparencyAttrib.M_multisample) btn.bind(DGG.ENTER, self.tt.show, ["Cycle through redo branches (Ctrl-Shift-Y)"]) btn.bind(DGG.EXIT, self.tt.hide) self.toolBar.addItem(btn) placeholder = DirectFrame(text="|", frameSize=(-1, 1, -24, 24), pad=(4, 0), frameColor=(0, 0, 0, 1)) self.toolBar.addItem(placeholder) btn = DirectButton(frameSize=(-24, 24, -24, 24), frameColor=buttonColor, relief=DGG.FLAT, text_scale=0.33, command=base.messenger.send, extraArgs=["removeElement"], image="icons/Delete.png", image_scale=24) btn.setTransparency(TransparencyAttrib.M_multisample) btn.bind(DGG.ENTER, self.tt.show, ["Delete selected element (Del)"]) btn.bind(DGG.EXIT, self.tt.hide) self.toolBar.addItem(btn) placeholder = DirectFrame(text="|", frameSize=(-1, 1, -24, 24), pad=(4, 0), frameColor=(0, 0, 0, 1)) self.toolBar.addItem(placeholder) self.cb_grid = DirectCheckBox( frameSize=(-24, 24, -24, 24), frameColor=buttonColor, relief=DGG.FLAT, text_scale=12, image="icons/GridOff.png" if self.grid.isHidden() else "icons/GridOn.png", uncheckedImage="icons/GridOff.png", checkedImage="icons/GridOn.png", image_scale=24, isChecked=not self.grid.isHidden(), command=self.toggleGrid) self.cb_grid.setTransparency(TransparencyAttrib.M_multisample) self.cb_grid.bind(DGG.ENTER, self.tt.show, ["Toggle Grid (Ctrl-G)"]) self.cb_grid.bind(DGG.EXIT, self.tt.hide) self.toolBar.addItem(self.cb_grid) self.cb_scale = DirectCheckBox(frameSize=(-24, 24, -24, 24), frameColor=buttonColor, relief=DGG.FLAT, text_scale=12, image="icons/Scale1.png", uncheckedImage="icons/Scale2.png", checkedImage="icons/Scale1.png", image_scale=24, isChecked=True, command=self.toggleVisualEditorParent) self.cb_scale.setTransparency(TransparencyAttrib.M_alpha) self.cb_scale.bind(DGG.ENTER, self.tt.show, ["Toggle editor scale (Aspect/Pixel)"]) self.cb_scale.bind(DGG.EXIT, self.tt.hide) self.toolBar.addItem(self.cb_scale) placeholder = DirectFrame(text="|", frameSize=(-1, 1, -24, 24), pad=(4, 0), frameColor=(0, 0, 0, 1)) self.toolBar.addItem(placeholder) zoomHolder = DirectFrame( frameSize=(-48, 48, -24, 24), #pad=(4, 0), frameColor=(0, 0, 0, 0)) self.toolBar.addItem(zoomHolder) self.zoomSlider = DirectSlider(zoomHolder, scale=(48, 1, 96), pos=(0, 0, 0), range=(0.1, 1.5), command=self.zoomSliderChanged) self.zoomSlider.bind(DGG.ENTER, self.tt.show, ["Zoom"]) self.zoomSlider.bind(DGG.EXIT, self.tt.hide) #self.toolBar.addItem(self.zoomSlider) placeholder = DirectFrame(text="|", frameSize=(-1, 1, -24, 24), pad=(4, 0), frameColor=(0, 0, 0, 1)) self.toolBar.addItem(placeholder) btn = DirectButton(frameSize=(-24, 24, -24, 24), frameColor=buttonColor, relief=DGG.FLAT, text_scale=0.33, command=base.messenger.send, extraArgs=["quitApp"], image="icons/Quit.png", image_scale=24) btn.setTransparency(TransparencyAttrib.M_alpha) btn.bind(DGG.ENTER, self.tt.show, ["Quit Direct GUI Designer (Ctrl-Q)"]) btn.bind(DGG.EXIT, self.tt.hide) self.toolBar.addItem(btn) placeholder = DirectFrame(text="|", frameSize=(-1, 1, -24, 24), pad=(4, 0), frameColor=(0, 0, 0, 1)) self.toolBar.addItem(placeholder) btn = DirectButton(frameSize=(-24, 24, -24, 24), frameColor=buttonColor, relief=DGG.FLAT, text_scale=0.33, command=base.messenger.send, extraArgs=["showHelp"], image="icons/Help.png", image_scale=24) btn.setTransparency(TransparencyAttrib.M_multisample) btn.bind(DGG.ENTER, self.tt.show, ["Show a help Dialog (F1)"]) btn.bind(DGG.EXIT, self.tt.hide) self.toolBar.addItem(btn) btn = DirectButton(frameSize=(-24, 24, -24, 24), frameColor=buttonColor, relief=DGG.FLAT, text_scale=0.33, command=base.messenger.send, extraArgs=["showSettings"], image="icons/Settings.png", image_scale=24) btn.setTransparency(TransparencyAttrib.M_multisample) btn.bind(DGG.ENTER, self.tt.show, ["Show Designer Settings"]) btn.bind(DGG.EXIT, self.tt.hide) self.toolBar.addItem(btn) if not ConfigVariableBool("show-toolbar", True).getValue(): self.toolBar.hide() self.accept("setVisualEditorParent", self.setVisualEditorParent) self.accept("toggleGrid", self.setGrid)
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()
def render_buttons(self, render_fsm): for button_key in self.screen_atributes.buttons.keys(): button = self.screen_atributes.buttons[button_key] pos = button.position command_lambda = lambda button_: (None if button_.command is None else button_.command()) link_lambda = lambda render_fsm_, button_: ( None if button_.link_key is None else render_fsm.change_state( render_fsm_, button_.link_key)) commad_and_link = lambda command_lambda_, link_lambda_, render_fsm_, button_: ( command_lambda_(button_), link_lambda_(render_fsm_, button_)) if button.new_size is None: button_sizes = self.button_sizes else: button_sizes = button.new_size if screen_style: if button.image_sizes is None: image_sizes = self.image_sizes else: image_sizes = button.image_sizes texture_default = loader.loadTexture( "ChessRender\data\\button.png") texture_rolled_on = loader.loadTexture( "ChessRender\data\\button1.png") texture_pushed = loader.loadTexture( "ChessRender\data\\button2.png") gui_button = DirectButton( text=button.title, scale=0.2, command=commad_and_link, extraArgs=[ command_lambda, link_lambda, render_fsm, button ], pos=(pos[0], pos[1], pos[2]), frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=button_sizes, image=[texture_default, texture_pushed, texture_rolled_on], image_scale=image_sizes, image_pos=(0, 0, 0.25)) gui_button.setTransparency(TransparencyAttrib.MAlpha) else: gui_button = DirectButton( text=button.title, scale=0.2, command=commad_and_link, extraArgs=[ command_lambda, link_lambda, render_fsm, button ], pos=(pos[0], pos[1], pos[2]), frameColor=((0.8, 0.8, 0.8, 0.8), (0.4, 0.4, 0.4, 0.8), (0.4, 0.4, 0.8, 0.8), (0.1, 0.1, 0.1, 0.8)), frameSize=button_sizes, ) gui_button.setScale(button.scale) self.screen_atributes.scene_nodes.append(gui_button)
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=(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 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 GUI_server: def __init__(self, rootParent=None): self.pg471 = DirectScrolledList( forceHeight=0.1, frameSize=(-0.5, 0.5, -0.01, 0.75), hpr=LVecBase3f(0, 0, 0), numItemsVisible=5, pos=LPoint3f(0.4, 0, 0.05), state='normal', text='CEPBEPA', decButton_borderWidth=(0.005, 0.005), decButton_hpr=LVecBase3f(0, 0, 0), decButton_pos=LPoint3f(-0.45, 0, 0.03), decButton_state='disabled', decButton_text='Prev', decButton_text_align=TextNode.A_left, decButton_text_scale=(0.05, 0.05), decButton_text_pos=(0, 0), decButton_text_fg=LVecBase4f(0, 0, 0, 1), decButton_text_bg=LVecBase4f(0, 0, 0, 0), decButton_text_wordwrap=None, incButton_borderWidth=(0.005, 0.005), incButton_hpr=LVecBase3f(0, 0, 0), incButton_pos=LPoint3f(0.45, 0, 0.03), incButton_text='Next', incButton_text_align=TextNode.A_right, incButton_text_scale=(0.05, 0.05), incButton_text_pos=(0, 0), incButton_text_fg=LVecBase4f(0, 0, 0, 1), incButton_text_bg=LVecBase4f(0, 0, 0, 0), incButton_text_wordwrap=None, itemFrame_frameColor=(1, 1, 1, 1), itemFrame_frameSize=(-0.47, 0.47, -0.5, 0.1), itemFrame_hpr=LVecBase3f(0, 0, 0), itemFrame_pos=LPoint3f(0, 0, 0.6), text_align=TextNode.A_center, text_scale=(0.1, 0.1), text_pos=(0, 0.015), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, ) self.pg471.setTransparency(0) self.pg820 = DirectScrolledListItem( frameSize=(-3.831250286102295, 3.9062500953674317, -0.21250001192092896, 0.85), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), scale=LVecBase3f(0.1, 0.1, 0.1), text='Admin fun server.', 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.pg471, command=base.messenger.send, extraArgs=['select_list_item_changed'], ) self.pg820.setTransparency(0) self.pg839 = DirectScrolledListItem( frameSize=(-3.831250286102295, 3.9062500953674317, -0.21250001192092896, 0.85), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.1), scale=LVecBase3f(0.1, 0.1, 0.1), text='Bosses of 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.pg471, command=base.messenger.send, extraArgs=['select_list_item_changed'], ) self.pg839.setTransparency(0) self.pg861 = DirectScrolledListItem( frameSize=(-3.831250286102295, 3.9062500953674317, -0.21250001192092896, 0.85), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.2), scale=LVecBase3f(0.1, 0.1, 0.1), text='Hahahahha', 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.pg471, command=base.messenger.send, extraArgs=['select_list_item_changed'], ) self.pg861.setTransparency(0) self.pg886 = DirectScrolledListItem( frameSize=(-3.831250286102295, 3.9062500953674317, -0.21250001192092896, 0.85), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.3), scale=LVecBase3f(0.1, 0.1, 0.1), text='Empty', 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.pg471, command=base.messenger.send, extraArgs=['select_list_item_changed'], ) self.pg886.setTransparency(0) self.pg914 = DirectScrolledListItem( frameSize=(-3.831250286102295, 3.9062500953674317, -0.21250001192092896, 0.85), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.4), scale=LVecBase3f(0.1, 0.1, 0.1), state='disabled', text='Empty', 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.pg471, command=base.messenger.send, extraArgs=['select_list_item_changed'], ) self.pg914.setTransparency(0) self.pg2484 = DirectEntry( frameSize=(-0.1, 10.1, -0.3962500154972076, 1.087500011920929), hpr=LVecBase3f(0, 0, 0), initialText='', pos=LPoint3f(-13.4, 0, -3.225), scale=LVecBase3f(1.5, 1.5, 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), text_wordwrap=None, parent=self.pg914, ) self.pg2484.setTransparency(0) self.pg3545 = DirectButton( frameSize=(-2.3, 2.3, -0.213, 0.825), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(7.825, 0, -1.25), scale=LVecBase3f(1, 1, 1), text='D. connect', 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.pg2484, command=self.load_game, pressEffect=1, ) self.pg3545.setTransparency(0) self.pg945 = DirectScrolledListItem( hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), scale=LVecBase3f(0.1, 0.1, 0.1), text='scrolled list item', 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.pg471, command=base.messenger.send, extraArgs=['select_list_item_changed'], ) self.pg945.setTransparency(0) self.pg471.addItem(self.pg820) self.pg471.addItem(self.pg839) self.pg471.addItem(self.pg861) self.pg471.addItem(self.pg886) self.pg471.addItem(self.pg914) self.pg471.addItem(self.pg945) def show(self): self.pg471.show() def hide(self): self.pg471.hide() def destroy(self): self.pg471.destroy()