class GUI: def __init__(self, rootParent=None): self.pg202 = DirectFrame( frameColor=(1.0, 1.0, 1.0, 0.0), frameSize=(-1, 1, -1, 1), hpr=LVecBase3f(0, 0, 0), image='chapter3/overlay.png', sortOrder=200, pos=LPoint3f(0, 0, 0), image_scale=LVecBase3f(0.8, 1, 0.8), image_pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.pg202.setTransparency(1) def show(self): self.pg202.show() def hide(self): self.pg202.hide() def destroy(self): self.pg202.destroy()
class GUI: def __init__(self, rootParent=None): self.frmMain = DirectFrame( frameColor=(0.0, 0.0, 0.0, 0.5), frameSize=(-1, 1, -1, 1), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmMain.setTransparency(0) self.lblVictory = DirectLabel( frameColor=(0.0, 0.0, 0.0, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), scale=LVecBase3f(0.2, 0.2, 0.2), text='Won Fight', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblVictory.setTransparency(0) def show(self): self.frmMain.show() def hide(self): self.frmMain.hide() def destroy(self): self.frmMain.destroy()
class GUI: def __init__(self, rootParent=None): self.frmMain = DirectFrame( frameColor=(0.0, 0.0, 0.0, 0.75), frameSize=(-1, 1, -1, 1), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmMain.setTransparency(1) self.btnQuit = DirectButton( hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.75), scale=LVecBase3f(0.1, 0.1, 0.1), text='Quit', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, command=base.messenger.send, extraArgs=["quitRoom"], pressEffect=1, ) self.btnQuit.setTransparency(0) self.lblMessage = DirectLabel( frameColor=(0.0, 0.0, 0.0, 0.0), frameSize=(-2.981, 3.106, -0.325, 0.725), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), scale=LVecBase3f(0.2, 0.2, 0.2), text='Player A Won', text_align=TextNode.A_center, text_scale=(1.0, 1.0), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblMessage.setTransparency(0) def show(self): self.frmMain.show() def hide(self): self.frmMain.hide() def destroy(self): self.frmMain.destroy()
class GUI: def __init__(self, rootParent=None): self.frmMain = DirectFrame( frameColor=(1, 1, 1, 1), frameSize=(-1, 1, -1, 1), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmMain.setTransparency(0) self.waitbar = DirectWaitBar( barColor=(0.0, 0.0, 1.0, 1.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), state='normal', text='0%', value=50.0, text_align=TextNode.A_center, text_scale=(0.1, 0.1), text_pos=(0, -0.025), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.waitbar.setTransparency(0) def show(self): self.frmMain.show() def hide(self): self.frmMain.hide() def destroy(self): self.frmMain.destroy()
class MessageFrm(GameObject): def __init__(self, menu_props): GameObject.__init__(self) self.eng.log('created message form') self.chats = [] self.curr_chat = None self.curr_match_room = None self.msg_frm = DirectFrame( frameSize=(-.02, .8, 0, .45), frameColor=(.2, .2, .2, .5), pos=(-.82, 1, .02), parent=base.a2dBottomRight) self.presences_sent = [] self.menu_props = menu_props t_a = menu_props.text_args t_a['scale'] = .05 t_a['fg'] = menu_props.text_normal_col self.dst_txt = OnscreenText( text='', pos=(0, .4), parent=self.msg_frm, align=TextNode.A_left, **t_a) self.arrow_btn = ImgBtn( parent=self.msg_frm, scale=(.024, .024), pos=(.7, 1, .42), frame_col=(1, 1, 1, 1), frame_texture='assets/images/gui/arrow.txo', cmd=self.on_arrow, **menu_props.imgbtn_args) self.arrow_btn.disable() self.close_btn = ImgBtn( parent=self.msg_frm, scale=(.024, .024), pos=(.76, 1, .42), frame_col=(1, 1, 1, 1), frame_texture='assets/images/gui/close.txo', cmd=self.on_close, **menu_props.imgbtn_args) self.close_btn.disable() self.ent = Entry( scale=.04, pos=(0, .03), entry_font=menu_props.font, width=19.5, frame_col=menu_props.btn_col, parent=self.msg_frm, initial_text=_('write here your message'), cmd=self.on_typed_msg, focus_in_cmd=self.on_focus, focus_in_args=['in'], focus_out_cmd=self.on_focus, focus_out_args=['out'], text_fg=menu_props.text_active_col) self.ent['state'] = DISABLED self.txt_frm = DirectScrolledFrame( frameSize=(-.02, .76, -.02, .28), canvasSize=(-.02, .72, -.02, .28), scrollBarWidth=.036, verticalScroll_relief=FLAT, verticalScroll_frameColor=(.2, .2, .2, .4), verticalScroll_thumb_relief=FLAT, verticalScroll_thumb_frameColor=(.8, .8, .8, .6), verticalScroll_incButton_relief=FLAT, verticalScroll_incButton_frameColor=(.8, .8, .8, .6), verticalScroll_decButton_relief=FLAT, verticalScroll_decButton_frameColor=(.8, .8, .8, .6), horizontalScroll_relief=FLAT, frameColor=(1, 1, 1, 0), pos=(.02, 1, .11), parent=self.msg_frm) t_a['scale'] = .046 self.msg_txt = OnscreenText( text='', pos=(0, .24), parent=self.txt_frm.getCanvas(), align=TextNode.A_left, wordwrap=14, **t_a) lab_args = menu_props.label_args lab_args['scale'] = .046 lab_args['text_fg'] = menu_props.text_normal_col self.lab_frm = Btn( frame_size=(-.02, .64, -.01, .05), frame_col=(1, 1, 1, 0), pos=(0, 1, .4), parent=self.msg_frm) self.lab_frm.bind(ENTER, self.on_enter) self.lab_frm.bind(EXIT, self.on_exit) self.tooltip = Label( text='', pos=(.78, 1, -.06), parent=self.lab_frm, text_wordwrap=16,# text_bg=(.2, .2, .2, .8), text_align=TextNode.A_right, **lab_args) self.tooltip.set_bin('gui-popup', 10) self.tooltip.hide() def on_enter(self, pos): self.tooltip.show() def on_exit(self, pos): self.tooltip.hide() def show(self): self.msg_frm.show() def hide(self): self.msg_frm.hide() def add_msg_txt(self, msg): self.msg_txt['text'] += ('\n' if self.msg_txt['text'] else '') + msg txt_height = self.msg_txt.textNode.getUpperLeft3d()[2] - \ self.msg_txt.textNode.getLowerRight3d()[2] self.txt_frm['canvasSize'] = (-.02, .72, .28 - txt_height, .28) def set_title(self, title): ttitle = self.trunc(title, 32) fix_name = lambda name: name if '@' not in name else name.split('@')[0] + '\1smaller\1@' + name.split('@')[1] + '\2' if title: if ',' in ttitle: is_muc = True ttitle = ttitle names = ttitle.split(',') names = [name.strip() for name in names] names = [fix_name(name) for name in names] ttitle = ', '.join(names) else: ttitle = fix_name(ttitle) self.dst_txt['text'] = ttitle self.tooltip['text'] = title @staticmethod def trunc(name, lgt): if len(name) > lgt: return name[:lgt] + '...' return name def set_chat(self, chat): self.curr_chat = chat self.set_title(chat.title) self.msg_txt['text'] = '\n'.join(chat.messages) txt_height = self.msg_txt.textNode.getUpperLeft3d()[2] - \ self.msg_txt.textNode.getLowerRight3d()[2] self.txt_frm['canvasSize'] = (-.02, .72, .28 - txt_height, .28) if not self.chats: self.close_btn.disable() self.ent['state'] = DISABLED elif len(self.chats) == 1: self.close_btn.enable() self.ent['state'] = NORMAL self.arrow_btn.disable() else: self.close_btn.enable() self.ent['state'] = NORMAL self.arrow_btn.enable() if all(_chat.read for _chat in self.chats): self.arrow_btn['frameTexture'] = 'assets/images/gui/arrow.txo' else: self.arrow_btn['frameTexture'] = 'assets/images/gui/message.txo' def on_arrow(self): chat_idx = self.chats.index(self.curr_chat) next_idx = (chat_idx + 1) % len(self.chats) chat = self.chats[next_idx] self.set_title(chat.title) chat.read = True self.set_chat(chat) @property def open_chats(self): return [chat for chat in self.chats if not chat.closed] def on_close(self): if self.curr_chat not in self.open_chats: return curr_idx = self.open_chats.index(self.curr_chat) #self.chats.remove(self.curr_chat) self.curr_chat.closed = True if self.open_chats: self.set_chat(self.open_chats[curr_idx - 1]) else: self.set_chat(Chat('')) self.notify('on_close_all_chats') def on_typed_msg(self, val): self.add_msg_txt('\1italic\1' + _('you') + '\2: ' + val) self.ent.set('') #if self.curr_chat.dst not in self.presences_sent and \ # not str(self.curr_chat.dst).startswith('yorg'): # self.eng.xmpp.client.send_presence( # pfrom=self.eng.xmpp.client.boundjid.full, # pto=self.curr_chat.dst) # self.presences_sent += [self.curr_chat.dst] #if str(self.curr_chat.dst).startswith('yorg'): # self.eng.xmpp.client.send_message( # mfrom=self.eng.xmpp.client.boundjid.full, # mto=self.curr_chat.dst, # mtype='groupchat', # mbody=val) #else: # self.eng.xmpp.client.send_message( # mfrom=self.eng.xmpp.client.boundjid.full, # mto=self.curr_chat.dst, # msubject='chat', # mbody=val) if len(self.curr_chat.dst) > 12 and all(char.isdigit() for char in self.curr_chat.dst[-12:]): self.eng.client.send([ 'msg_room', self.eng.client.myid, self.curr_chat.dst, val]) else: self.eng.client.send(['msg', self.eng.client.myid, self.curr_chat.dst, val]) msg = '\1italic\1' + _('you') + '\2: ' + val self.curr_chat.messages += [msg] self.ent['focus'] = 1 def on_msg(self, from_, to, txt): #src = str(JID(msg['from']).bare) #src = src.split('@')[0] + '\1smaller\1@' + src.split('@')[1] + '\2' str_msg = '\1italic\1' + from_ + '\2: ' + txt chat = self.__find_chat(from_) if not chat: chat = Chat(from_) self.chats += [chat] chat.messages += [str_msg] if self.dst_txt['text'] == '': self.set_chat(chat) elif self.curr_chat.dst == from_: self.add_msg_txt(str_msg) else: chat.read = False chat.closed = False self.arrow_btn['frameTexture'] = 'assets/images/gui/message.txo' def on_groupchat_msg(self, from_, to, txt): #if str(JID(msg['from']).bare) == self.curr_match_room: if to == self.curr_match_room: if self.match_msg_frm: # we're still in the room page self.match_msg_frm.on_groupchat_msg(from_, to, txt) #src = str(JID(msg['mucnick'])) #src = src.split('@')[0] + '\1smaller\1@' + src.split('@')[1] + '\2' src = from_ #self.eng.log('received groupchat message from %s in the chat %s' %(msg['mucnick'], JID(msg['from']).bare)) self.eng.log('received groupchat message from %s in the chat %s' % (from_, to)) #str_msg = '\1italic\1' + src + '\2: ' + str(msg['body']) str_msg = '\1italic\1' + src + '\2: ' + txt chat = self.curr_chat if not chat: #chat = MUC(str(JID(msg['from']).bare)) chat = MUC(to) self.chats += [chat] chat.messages += [str_msg] if self.dst_txt['text'] == '': self.set_chat(chat) #elif self.curr_chat.dst == str(JID(msg['from']).bare): elif self.curr_chat.dst == to: self.add_msg_txt(str_msg) else: chat.read = False chat.closed = False self.arrow_btn['frameTexture'] = 'assets/images/gui/message.txo' def on_presence_available_room(self, uid, room): if room == self.curr_match_room: self.match_msg_frm.on_presence_available_room(uid, room) #room = str(JID(msg['muc']['room']).bare) #nick = str(msg['muc']['nick']) self.eng.log('user %s has logged in the chat %s' %(uid, room)) chat = self.__find_chat(room) chat.users += [uid] if room != self.curr_match_room: if self.curr_chat.dst == room: self.set_title(chat.title) def on_presence_unavailable_room(self, uid, room_name): if self.match_msg_frm and room_name == self.curr_match_room: self.match_msg_frm.on_presence_unavailable_room(uid, room_name) return room = room_name nick = uid self.eng.log('user %s has left the chat %s' %(nick, room)) chat = self.__find_chat(room) if nick == self.eng.client.myid: self.on_close() else: chat.users.remove(nick) if self.curr_chat.dst == room: self.set_title(chat.title) def __find_chat(self, dst): chats = [chat for chat in self.chats if chat.dst == dst] if chats: return chats[0] def add_chat(self, usr): #self.set_title(JID(usr).bare) chat = self.__find_chat(usr) if not chat: chat = Chat(usr) self.chats += [chat] self.set_chat(chat) self.ent['focus'] = 1 def add_groupchat(self, room, usr): self.set_title(usr) chat = self.__find_chat(room) if not chat: chat = MUC(room) self.chats += [chat] chat.users += [usr] self.set_chat(chat) self.add_match_chat(room, usr) def remove_groupchat(self): self.match_msg_frm.detach(self.on_match_msg_focus) self.match_msg_frm = self.match_msg_frm.destroy() def on_focus(self, val): if val and self.ent.get() == _('write here your message'): self.ent.set('') self.notify('on_msg_focus', val) def on_match_msg_focus(self, val): self.notify('on_msg_focus', val) def on_room_back(self): self.curr_match_room = None self.match_msg_frm.destroy() def add_match_chat(self, room, usr): if self.curr_match_room: return self.curr_match_room = room self.match_msg_frm = MatchMsgFrm(self.menu_props) self.match_msg_frm.attach(self.on_match_msg_focus) self.match_msg_frm.add_groupchat(room, usr)
class GUI: def __init__(self, rootParent=None): self.frmStats = DirectFrame( frameColor=(1, 1, 1, 1), frameSize=(-0.55, 0.55, -0.1, 0.1), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmStats.setTransparency(0) self.lblName = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.3, 0, 0.05), scale=LVecBase3f(0.05, 0.05, 0.05), text='Name: ', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmStats, ) self.lblName.setTransparency(0) self.lblAttack = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.3, 0, -0.01), scale=LVecBase3f(0.05, 0.05, 0.05), text='Attack:', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmStats, ) self.lblAttack.setTransparency(0) self.lblDefense = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.3, 0, -0.075), scale=LVecBase3f(0.05, 0.05, 0.05), text='Defense:', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmStats, ) self.lblDefense.setTransparency(0) self.imgPlayer = DirectLabel( frameSize=(-0.9, 0.9, -0.9, 0.9), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.445, 0, 0), scale=LVecBase3f(0.1, 0.1, 0.1), text='', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmStats, ) self.imgPlayer.setTransparency(0) self.lblNameValue = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.075, 0, 0.05), scale=LVecBase3f(0.05, 0.05, 0.05), text='Player Name', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmStats, ) self.lblNameValue.setTransparency(0) self.lblAttackValue = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.075, 0, -0.01), scale=LVecBase3f(0.05, 0.05, 0.05), text='5', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmStats, ) self.lblAttackValue.setTransparency(0) self.lblDefenseValue = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.075, 0, -0.075), scale=LVecBase3f(0.05, 0.05, 0.05), text='10', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmStats, ) self.lblDefenseValue.setTransparency(0) self.lblHealtPotions = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.12, 0, -0.075), scale=LVecBase3f(0.05, 0.05, 0.05), text='Potions:', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmStats, ) self.lblHealtPotions.setTransparency(0) self.lblHealthPotionsValue = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.325, 0, -0.075), scale=LVecBase3f(0.05, 0.05, 0.05), text='3', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmStats, ) self.lblHealthPotionsValue.setTransparency(0) self.lblHit = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.125), scale=LVecBase3f(0.5, 0.5, 0.5), text='5', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmStats, ) self.lblHit.setTransparency(0) def show(self): self.frmStats.show() def hide(self): self.frmStats.hide() def destroy(self): self.frmStats.destroy()
class DirectFolderBrowser(DirectObject): def __init__(self, command, fileBrowser=False, defaultPath="~", defaultFilename="unnamed.txt", fileExtensions=[], tooltip=None, iconDir=None, parent=None, theme=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 iconDir: A directory path that contains replacement images. It must contain all required images which are: File.png Folder.png FolderNew.png FolderShowHidden.png FolderUp.png Reload.png parent: Another DirectGUI element which has pixel2d as root parent. The browser frame is placed centered so a frame for example should have equal sizes in horizontal and vertical directions e.g. frameSize=(-250,250,-200,200) """ self.theme = theme if theme is not None else LightTheme() self.tt = tooltip self.command = command self.showFiles = fileBrowser self.fileExtensions = fileExtensions self.showHidden = False self.parent = parent self.imageOpts = LoaderOptions() self.imageOpts.set_auto_texture_scale(ATS_none) if self.theme.icon_dir is not None: self.iconDir = self.theme.icon_dir elif iconDir is None: fn = Filename.fromOsSpecific(os.path.dirname(__file__)) fn.makeTrueCase() self.iconDir = str(fn) + "/icons" else: self.iconDir = iconDir self.selectedViewType = "Symbol" self.currentPath = os.path.expanduser(defaultPath) if not os.path.exists(self.currentPath): self.currentPath = os.path.expanduser("~") self.previousPath = self.currentPath if self.parent is None: self.parent = base.pixel2d self.screenWidthPx = base.getSize()[0] self.screenHeightPx = base.getSize()[1] self.position = LPoint3f(base.getSize()[0] / 2, 0, -base.getSize()[1] / 2) else: self.screenWidthPx = self.parent.getWidth() self.screenHeightPx = self.parent.getHeight() self.position = LPoint3f(0) self.screenWidthPxHalf = self.screenWidthPx * 0.5 self.screenHeightPxHalf = self.screenHeightPx * 0.5 self.mainFrame = DirectFrame( relief=1, frameSize=(-self.screenWidthPxHalf, self.screenWidthPxHalf, -self.screenHeightPxHalf, self.screenHeightPxHalf), frameColor=self.theme.main_background, pos=self.position, parent=self.parent, state=DGG.NORMAL, ) self.pathRightMargin = 155 # NOTE: Add 28 for each button to the right + 15px margin self.pathEntryWidth = self.screenWidthPx - self.pathRightMargin - 28 # The path entry on top of the window self.pathEntry = DirectEntry( text_fg=self.theme.default_text_color, parent=self.mainFrame, relief=DGG.SUNKEN, frameColor=self.theme.entry_background, 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"], ) # ---------------- # CONTROL BUTTONS # ---------------- x = self.screenWidthPxHalf - self.pathRightMargin + 18 # RELOAD self.btnReload = DirectButton( parent=self.mainFrame, relief=1, frameColor=self.theme.icon_button_background, frameSize=(-14, 14, -10, 18), pos=LPoint3f(x, 0, self.screenHeightPxHalf - 25), command=self.folderReload, image=loader.load_texture(f"{self.iconDir}/Reload.png", loaderOptions=self.imageOpts), 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) # MOVE UP ONE FOLDER x += 28 self.btnFolderUp = DirectButton( parent=self.mainFrame, relief=1, frameColor=self.theme.icon_button_background, frameSize=(-14, 14, -10, 18), pos=LPoint3f(x, 0, self.screenHeightPxHalf - 25), command=self.folderUp, image=loader.load_texture(f"{self.iconDir}/FolderUp.png", loaderOptions=self.imageOpts), 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) # CREATE NEW FOLDER x += 28 self.btnFolderNew = DirectButton( parent=self.mainFrame, relief=1, frameColor=self.theme.icon_button_background, frameSize=(-14, 14, -10, 18), pos=LPoint3f(x, 0, self.screenHeightPxHalf - 25), command=self.folderNew, image=loader.load_texture(f"{self.iconDir}/FolderNew.png", loaderOptions=self.imageOpts), 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) # SHOW HIDDEN FOLDERS x += 28 self.btnFolderShowHidden = DirectButton( parent=self.mainFrame, relief=1, frameColor=self.theme.icon_button_background, frameSize=(-14, 14, -10, 18), pos=LPoint3f(x, 0, self.screenHeightPxHalf - 25), command=self.folderShowHidden, image=loader.load_texture(f"{self.iconDir}/FolderShowHidden.png", loaderOptions=self.imageOpts), 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) # TOGGLE VIEW TYPE x += 28 self.btnViewType = DirectButton( parent=self.mainFrame, relief=1, frameColor=self.theme.icon_button_background, frameSize=(-14, 14, -10, 18), pos=LPoint3f(x, 0, self.screenHeightPxHalf - 25), command=self.toggleViewType, image=loader.load_texture(f"{self.iconDir}/ViewTypeSymbol.png", loaderOptions=self.imageOpts), image_scale=14, image_pos=(0, 0, 4), ) self.btnViewType.setTransparency(TransparencyAttrib.M_multisample) if self.tt is not None: self.btnViewType.bind( DGG.ENTER, self.tt.show, ["Toggle view between Symbols and Detail list"]) self.btnViewType.bind(DGG.EXIT, self.tt.hide) # -------------- # CONTENT FRAME # -------------- color = self.theme.scrollbar_controlls_color self.container = DirectScrolledFrame( relief=DGG.RIDGE, borderWidth=(2, 2), frameColor=self.theme.main_background, 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, verticalScroll_frameColor=self.theme.scroll_background, 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, horizontalScroll_frameColor=self.theme.scroll_background, state=DGG.NORMAL, ) self.container.bind(DGG.MWDOWN, self.scroll, [0.01]) self.container.bind(DGG.MWUP, self.scroll, [-0.01]) # ACCEPT BUTTON self.btnOk = DirectButton( parent=self.mainFrame, relief=1, frameColor=self.theme.text_button_background, frameSize=(-45, 45, -6, 14), pos=LPoint3f(self.screenWidthPxHalf - 160, 0, -self.screenHeightPxHalf + 25), text="ok", text_scale=12, text_fg=self.theme.default_text_color, command=command, extraArgs=[1], ) # CANCEL BUTTON self.btnCancel = DirectButton( parent=self.mainFrame, relief=1, frameColor=self.theme.text_button_background, frameSize=(-45, 45, -6, 14), pos=LPoint3f(self.screenWidthPxHalf - 55, 0, -self.screenHeightPxHalf + 25), text="Cancel", text_scale=12, text_fg=self.theme.default_text_color, command=command, extraArgs=[0]) # SELECTED FILE ENTRY FIELD if self.showFiles: self.txtFileName = DirectEntry( text_fg=self.theme.default_text_color, parent=self.mainFrame, relief=DGG.SUNKEN, frameColor=self.theme.entry_background, 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"], ) # ------------------ # CREATE NEW FOLDER # ------------------ # FRAME FOR CREATING NEW FOLDER 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=self.theme.popup_frame_background, ) # LABEL FOR NEW FOLDER NAME ENTRY self.txtNewFolderName = DirectLabel( parent=self.newFolderFrame, text="New Folder Name", text_scale=12, text_fg=self.theme.default_text_color, frameColor=(0, 0, 0, 0), text_align=TextNode.ALeft, pos=(-self.screenWidthPxHalf + 15, 0, -3), ) # ENTRY FOR THE NEW FOLDER NAME self.folderName = DirectEntry( text_fg=self.theme.default_text_color, parent=self.newFolderFrame, relief=DGG.SUNKEN, frameColor=self.theme.entry_background, 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"], ) # ACCEPT BUTTON FOR THE CREATE NEW FOLDER self.btnCreate = DirectButton( parent=self.newFolderFrame, relief=1, frameColor=self.theme.text_button_background, frameSize=(-45, 45, -6, 14), pos=LPoint3f(self.screenWidthPxHalf - 65, 0, -4), text="Create", text_scale=12, text_fg=self.theme.default_text_color, command=self.folderCreate, extraArgs=[0]) # Hide the create new folder frame by default self.newFolderFrame.hide() # --------------- # UPDATE CONTENT # --------------- # Initial loading of the files and folders of the current path self.folderReload() # handle window resizing self.prevScreenSize = base.getSize() if self.parent is base.pixel2d: self.accept("window-event", self.windowEventHandler) def show(self): self.mainFrame.show() if self.parent is None: 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 VIEWTYPE[self.selectedViewType](self, content) 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 toggleViewType(self): if self.selectedViewType == "Symbol": self.selectedViewType = "Detail" self.btnViewType["image"] = loader.load_texture( f"{self.iconDir}/ViewTypeDetail.png", loaderOptions=self.imageOpts) else: self.selectedViewType = "Symbol" self.btnViewType["image"] = loader.load_texture( f"{self.iconDir}/ViewTypeSymbol.png", loaderOptions=self.imageOpts) 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 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 - 28 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.screenWidthPxHalf - self.pathRightMargin + 14 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)) x += 28 self.btnViewType.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()
class NodeBase(DirectObject): def __init__(self, name, parent): self.right = 0.5 self.left = -0.5 self.name = name self.nodeID = uuid4() self.inputList = [] self.outputList = [] self.selected = False self.frame = DirectFrame(state=DGG.NORMAL, text=name, text_align=TextNode.A_left, text_scale=0.1, text_pos=(self.left, 0.12), text_fg=(1, 1, 1, 1), frameColor=(0.25, 0.25, 0.25, 1), frameSize=(-0.5, 0.5, -.6, 0.2), parent=parent) self.setupBind() self.hide() self.setPos = self.frame.setPos self.getPos = self.frame.getPos def addIn(self, name, socketType): """Add a new input socket of the given socket type""" inSocket = socketType(self, name) self.inputList.append(inSocket) def addOut(self, name): """Add a new output socket""" outSocket = OutSocket(self, name) self.outputList.append(outSocket) def isLeaveNode(self): """Returns true if this is a leave node. Leave nodes do not have any input connections. Either if no input sockets are defined at all or none of the sockets is connected.""" # check if we have any input sockets and if so if any of them is connected for inSocket in self.inputList: if inSocket.connected: return False return True def logic(self): """Run the logic of this node, process all in and output data. This is a stub and should be overwritten by the derived classes""" pass def update(self): """Show all sockets and resize the frame to fit all sockets in""" z = 0 for outSocket in self.outputList: outSocket.show(z, self.right) z -= outSocket.height for inSocket in self.inputList: inSocket.show(z, self.left) z -= inSocket.height fs = self.frame["frameSize"] self.frame["frameSize"] = (fs[0], fs[1], z, fs[3]) def create(self): """Place and show the node under the mouse and start draging it.""" mwn = base.mouseWatcherNode if mwn.hasMouse(): newPos = Point3(mwn.getMouse()[0], 0, mwn.getMouse()[1]) self.frame.setPos(render2d, newPos) self._dragStart(self.frame, None) self.show() def show(self): """Shows the Node frame and updates its sockets""" self.update() self.frame.show() def hide(self): """Hide the Node frame""" self.frame.hide() def destroy(self): self.frame.destroy() def setupBind(self): """Setup the mousebutton actions for drag and drop feature""" self.frame.bind(DGG.B1PRESS, self._dragStart, [self.frame]) self.frame.bind(DGG.B1RELEASE, self._dragStop) def select(self, select): """Set this node as selected or deselected""" if self.selected == select: return self.selected = select if self.selected: self.frame["frameColor"] = (0.45, 0.45, 0.45, 1) else: self.frame["frameColor"] = (0.25, 0.25, 0.25, 1) def _dragStart(self, nodeFrame, event): # Mark this node as selected base.messenger.send("selectNode", [ self, True, base.mouseWatcherNode.isButtonDown(KeyboardButton.shift()), True ]) # tell everyone we started to drag this node base.messenger.send("dragNodeStart", [self]) # Remove any previous started drag tasks taskMgr.remove("dragNodeDropTask") # get some positions vWidget2render2d = nodeFrame.getPos(render2d) vMouse2render2d = Point3(0) if event is not None: # we get the mouse position from the event vMouse2render2d = Point3(event.getMouse()[0], 0, event.getMouse()[1]) else: # we try to get the current mouse position from the mouse watcher mwn = base.mouseWatcherNode if mwn.hasMouse(): vMouse2render2d = Point3(mwn.getMouse()[0], 0, mwn.getMouse()[1]) editVec = Vec3(vWidget2render2d - vMouse2render2d) self.hasMoved = False # Initiate the task to move the node and pass it some initial values t = taskMgr.add(self.dragTask, "dragNodeDropTask") t.nodeFrame = nodeFrame t.editVec = editVec t.mouseVec = vMouse2render2d def dragTask(self, t): mwn = base.mouseWatcherNode if mwn.hasMouse(): # get the current mouse position fitting for a render2d position vMouse2render2d = Point3(mwn.getMouse()[0], 0, mwn.getMouse()[1]) # check if the cursor has moved enough to drag this node # this gives us some puffer zone for clicking if not self.hasMoved and (t.mouseVec - vMouse2render2d).length() < 0.01: return t.cont # We actually have moved now self.hasMoved = True # calculate the new position newPos = vMouse2render2d + t.editVec # move the node to the new position t.nodeFrame.setPos(render2d, newPos) # tell everyone we moved the node base.messenger.send("dragNodeMove", [t.mouseVec, vMouse2render2d]) return t.cont def _dragStop(self, event=None): self.ignore("mouse1-up") # remove the node dragging task taskMgr.remove("dragNodeDropTask") # check if the node has moved if not self.hasMoved: # we want to select this node as it has not been moved base.messenger.send("selectNode", [ self, True, base.mouseWatcherNode.isButtonDown(KeyboardButton.shift()) ]) # tell everyone we stopped moving the node base.messenger.send("dragNodeStop", [self]) def getLeftEdge(self): """Get the left edge of the frame as seen from the frame""" return self.frame["frameSize"][0] def getRightEdge(self): """Get the right edge of the frame as seen from the frame""" return self.frame["frameSize"][1] def getBottomEdge(self): """Get the bottom edge of the frame as seen from the frame""" return self.frame["frameSize"][2] def getTopEdge(self): """Get the top edge of the frame as seen from the frame""" return self.frame["frameSize"][3] def getLeft(self, np=None): """Get left edge of the frame with respect to it's position as seen from the given np""" if np is None: np = render2d return self.getPos(render2d).getX() + self.frame["frameSize"][0] def getRight(self, np=None): """Get right edge of the frame with respect to it's position as seen from the given np""" if np is None: np = render2d return self.getPos(render2d).getX() + self.frame["frameSize"][1] def getBottom(self, np=None): """Get bottom edge of the frame with respect to it's position as seen from the given np""" if np is None: np = render2d return self.getPos(render2d).getZ() + self.frame["frameSize"][2] def getTop(self, np=None): """Get top edge of the frame with respect to it's position as seen from the given np""" if np is None: np = render2d return self.getPos(render2d).getZ() + self.frame["frameSize"][3]
class GUI: def __init__(self, rootParent=None): self.lblDescription = DirectFrame( frameColor=(1.0, 1.0, 1.0, 0.0), frameSize=(-0.75, 0.75, -0.8, 0.8), hpr=LVecBase3f(0, 0, 0), image='./assets/quest/QuestBG.png', pos=LPoint3f(0, 0, 0), image_scale=LVecBase3f(0.75, 1, 0.8), image_pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.lblDescription.setTransparency(2) self.lblHeader = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.59), scale=LVecBase3f(0.1, 0.1, 0.1), text='Quest', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.lblDescription, ) self.lblHeader.setTransparency(1) self.lblQuestDesc = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.6, 0, 0.525), scale=LVecBase3f(0.05, 0.05, 0.05), text='Quest description part 1', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.lblDescription, ) self.lblQuestDesc.setTransparency(1) self.lblControl = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.6, 0, -0.25), scale=LVecBase3f(0.08, 0.08, 0.08), text='Controls', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.lblDescription, ) self.lblControl.setTransparency(1) self.lblControlDesc = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.6, 0, -0.315), scale=LVecBase3f(0.05, 0.05, 0.05), text="If it's your turn, click the dice button or hit D", text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.lblDescription, ) self.lblControlDesc.setTransparency(1) self.btnClose = DirectButton( frameColor=(0.8, 0.8, 0.8, 0.75), frameSize=(-1.288, 1.387, -0.213, 0.825), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.65), relief=1, scale=LVecBase3f(0.1, 0.1, 0.1), text='Close', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.lblDescription, pressEffect=1, ) self.btnClose.setTransparency(0) def show(self): self.lblDescription.show() def hide(self): self.lblDescription.hide() def destroy(self): self.lblDescription.destroy()
class GUI: def __init__(self, rootParent=None): self.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.frmBack = DirectFrame( frameColor=(0.0, 0.0, 0.0, 1.0), frameSize=(-0.8, 0.8, -0.8, 0.8), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmBack.setTransparency(0) self.pg671 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-0.893750011920929, 1.0187499523162842, -0.11250001192092896, 0.7124999761581421), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.5), scale=LVecBase3f(0.2, 0.2, 0.2), text='END', text_align=TextNode.A_center, text_scale=(1.0, 1.0), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmBack, ) self.pg671.setTransparency(0) self.lblEnding = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-8.0, 8.0, -0.325, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.025, 0, -0.675), scale=LVecBase3f(0.1, 0.1, 0.1), text="You've found ending x/x", text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmBack, ) self.lblEnding.setTransparency(0) self.pg6340 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-0.893750011920929, 1.0187499523162842, -0.11250001192092896, 0.7124999761581421), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.125, 0, 0.65), scale=LVecBase3f(0.05, 0.05, 0.05), text='the', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmBack, ) self.pg6340.setTransparency(0) self.pg1228 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-8.0, 8.0, -0.325, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.35), scale=LVecBase3f(0.05, 0.1, 0.056), text='A Game By', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmBack, ) self.pg1228.setTransparency(0) self.pg1785 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-8.0, 8.0, -0.325, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.275), scale=LVecBase3f(0.08, 0.1, 0.08), text='Fireclaw', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmBack, ) self.pg1785.setTransparency(0) self.pg4435 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-8.0, 8.0, -0.325, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.175), scale=LVecBase3f(0.05, 0.1, 0.056), text='Music from Jamendo by Golden Antelope', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmBack, ) self.pg4435.setTransparency(0) self.pg5320 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-8.0, 8.0, -0.325, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.1), scale=LVecBase3f(0.05, 0.1, 0.056), text='Audio from freesound by reinsamba', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmBack, ) self.pg5320.setTransparency(0) def show(self): self.frmBack.show() def hide(self): self.frmBack.hide() def destroy(self): self.frmBack.destroy()
class Menu(object): def __init__(self,main): self.main=main wx = base.win.get_x_size() wy = base.win.get_y_size() kx = 1920 ky = 1080 self.myFrame = DirectFrame(frameColor=(1,1,1,1), frameSize=(0, kx,0, ky)) menu_tex = loader.loadTexture("res/menu.png") menu_tex.set_minfilter(SamplerState.FT_nearest) menu_tex.set_magfilter(SamplerState.FT_linear) self.myFrame["frameTexture"] = menu_tex self.myFrame.reparentTo(base.pixel2d) self.myFrame.set_pos( (wx-kx) / 2, 0, -(wy+ky) / 2) self.myFrame.set_transparency(True) self.startButton = DirectButton( text = "", text_scale=1.0, text_fg=(0.2,0.2,0.2,1), frameTexture="res/start_game.png", frameColor=(1,1,1,1), frameSize=(-64, 64, -20, 20), command=self.main.startGame, relief=DGG.FLAT, rolloverSound=None, clickSound=None, parent=self.myFrame, scale=2.0, pos=(wx/2 + 160, 0, wy/2 + 50) ) self.startButton.setTransparency(1) self.exitButton = DirectButton( text = ("Exit Game"), pos=(0,0,-.8), text_scale=.1, frameColor=(0,0,0,0), relief=1, frameVisibleScale=(2,3), command=exit, rolloverSound=None, clickSound=None, parent=self.myFrame, ) self.exitButton.setTransparency(1) self.resumeButton = DirectButton( text = ("Resume"), pos=(.0,0,.3), text_scale=.1, frameColor=(0,0,0,0), relief=1, frameVisibleScale=(2,3), command=self.main.resumeGame, rolloverSound=None, clickSound=None, parent=self.myFrame, ) self.resumeButton.setTransparency(1) self.resumeButton.hide() self.selectFrame= DirectFrame( frameColor=(1,1,1,1) , frameSize=(-64, 64, -20, 20) , frameTexture="res/select.png") self.selectFrame.setTransparency(1) self.selectFrame.reparentTo(self.startButton) self.entries = [self.exitButton,self.startButton,self.resumeButton] self.activeEntry = 1 def clearKeys(self): base.ignore("arrow_up") base.ignore("arrow_down") base.ignore("arrow_left") base.ignore("arrow_right") base.ignore("escape") base.ignore("enter") def execSelection(self): self.entries[self.activeEntry]["command"]() def selectDown(self): if self.activeEntry == 0: self.activeEntry = len(self.entries)-1 else: self.activeEntry -=1 if self.entries[self.activeEntry].isHidden(): self.selectDown() return self.selectFrame.reparentTo(self.entries[self.activeEntry]) def selectUp(self): if self.activeEntry == len(self.entries)-1: self.activeEntry=0 else: self.activeEntry +=1 if self.entries[self.activeEntry].isHidden() : self.selectUp() return self.selectFrame.reparentTo(self.entries[self.activeEntry]) def hideMenu(self): self.clearKeys() self.main.gui.show() seq= Sequence( LerpColorScaleInterval(self.myFrame, 0.4 ,(1,1,1,0)) , Func(self.myFrame.hide) ) seq.start() def hideResume(self): seq= Sequence( LerpColorScaleInterval(self.resumeButton, .5 ,(1,1,1,0)) , Func(self.resumeButton.hide)) seq.start() def showResume(self): self.resumeButton.show() #seq= Sequence( LerpColorScaleInterval(self.resumeButton, 1 ,(1,1,1,1)) ) #seq.start() def showMenu(self): self.clearKeys() base.accept("arrow_up" , self.selectUp ) base.accept("arrow_down" , self.selectDown ) base.accept("escape", exit) base.accept("enter",self.execSelection) self.myFrame.show() self.main.gui.hide() seq= Sequence( LerpColorScaleInterval(self.myFrame, .5 ,(1,1,1,1)) ) seq.start()
class GUI: def __init__(self, rootParent=None): self.frmMain = DirectFrame( frameColor=(1, 1, 1, 1), frameSize=(-1, 1, -1, 1), hpr=LVecBase3f(0, 0, 0), image='menu/background.png', pos=LPoint3f(0, 0, 0), image_scale=LVecBase3f(1, 1, 1), image_pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmMain.setTransparency(0) self.btnStart = DirectButton( frameColor=(1.0, 1.0, 0.5, 0.1), frameSize=(-1.9, 1.8, -0.6, 0.6), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.46), relief=1, scale=LVecBase3f(0.1, 0.1, 0.1), text='Start Game', text_align=TextNode.A_center, text_scale=(0.42, 0.4), text_pos=(0.03, -0.45), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmMain, command=base.messenger.send, extraArgs=["startGame"], pressEffect=1, ) self.btnStart.setTransparency(0) self.btnOptions = DirectButton( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-1.825, 1.925, -0.437, 0.85), hpr=LVecBase3f(35, -28, 20), pos=LPoint3f(0.6, 0, -0.125), relief=1, scale=LVecBase3f(0.1, 0.1, 0.1), text='Options', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0.7, 0.7, 0.7, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmMain, command=base.messenger.send, extraArgs=["options"], pressEffect=0, ) self.btnOptions.setTransparency(0) self.btnExit = DirectButton( frameColor=(0.1, 0.7, 0.1, 1.0), frameSize=(-1.5249999523162843, 1.6499999523162843, -0.21250001192092896, 0.8250000238418579), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.45, 0, -0.6), relief=1, scale=LVecBase3f(0.1, 0.1, 0.1), text='EXIT', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0.9, 0.9, 0.9, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmMain, command=base.messenger.send, extraArgs=["exit"], pressEffect=0, ) self.btnExit.setTransparency(0) def show(self): self.frmMain.show() def hide(self): self.frmMain.hide() def destroy(self): self.frmMain.destroy()
class GUI: def __init__(self, rootParent=None): self.frmMain = DirectFrame( frameColor=(1, 1, 1, 1), frameSize=(-1.777, 1.777, -1.0, 1.0), hpr=LVecBase3f(0, 0, 0), image='assets/menu/Background.png', pos=LPoint3f(0, 0, 0), image_scale=LVecBase3f(1.77778, 0, 1.1638), image_pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmMain.setTransparency(0) self.lblptions = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.8), scale=LVecBase3f(0.1, 0.1, 0.1), text='Options', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblptions.setTransparency(0) self.lblServer = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.75, 0, 0.175), scale=LVecBase3f(1, 1, 1), text='Game Server URL:', text_align=TextNode.A_left, text_scale=(0.05, 0.05), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblServer.setTransparency(0) self.btnOk = DirectButton( hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.375, 0, -0.775), relief=1, scale=LVecBase3f(0.1, 0.1, 0.1), text='Ok', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, command=base.messenger.send, extraArgs=["options_ok"], pressEffect=1, ) self.btnOk.setTransparency(0) self.btnCancel = DirectButton( hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.275, 0, -0.775), relief=1, scale=LVecBase3f(0.1, 0.1, 0.1), text='Cancel', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, command=base.messenger.send, extraArgs=["options_cancel"], pressEffect=1, ) self.btnCancel.setTransparency(0) self.txtServer = DirectEntry( borderWidth=(0.01, 0.01), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.15, 0, 0.17), scale=LVecBase3f(1, 1, 1), width=25.0, text_align=TextNode.A_left, text_scale=(0.05, 0.05), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.txtServer.setTransparency(0) self.cbMusic = DirectCheckButton( frameSize=(-3.0, 2.0, -0.3, 1.0), hpr=LVecBase3f(0, 0, 0), indicatorValue=1, pos=LPoint3f(0, 0, -0.21), scale=LVecBase3f(0.05, 0.1, 0.05), text='Music', indicator_hpr=LVecBase3f(0, 0, 0), indicator_pos=LPoint3f(-2.625, 0, 0.05), indicator_relief='sunken', indicator_text_align=TextNode.A_center, indicator_text_scale=(1, 1), indicator_text_pos=(0, -0.2), indicator_text_fg=LVecBase4f(0, 0, 0, 1), indicator_text_bg=LVecBase4f(0, 0, 0, 0), text_align=TextNode.A_center, text_scale=(1.0, 1.0), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.cbMusic.setTransparency(0) self.cbSFX = DirectCheckButton( frameSize=(-3.0, 2.0, -0.3, 1.0), hpr=LVecBase3f(0, 0, 0), indicatorValue=1, pos=LPoint3f(0, 0, -0.315), scale=LVecBase3f(0.05, 0.1, 0.05), text='SFX', indicator_hpr=LVecBase3f(0, 0, 0), indicator_pos=LPoint3f(-2.625, 0, 0.05), indicator_relief='sunken', indicator_text_align=TextNode.A_center, indicator_text_scale=(1, 1), indicator_text_pos=(0, -0.2), indicator_text_fg=LVecBase4f(0, 0, 0, 1), indicator_text_bg=LVecBase4f(0, 0, 0, 0), text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.cbSFX.setTransparency(0) self.lblAudio = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.1), scale=LVecBase3f(0.1, 0.1, 0.1), text='Audio', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblAudio.setTransparency(0) self.lblConnection = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.3), scale=LVecBase3f(0.1, 0.1, 0.1), text='Connection', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblConnection.setTransparency(0) def show(self): self.frmMain.show() def hide(self): self.frmMain.hide() def destroy(self): self.frmMain.destroy()
class GUI: def __init__(self, rootParent=None): self.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 GUI: def __init__(self, rootParent=None): self.btnBox1 = DirectButton( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-1.0, 1.0, -1.0, 1.0), hpr=LVecBase3f(0, 0, 0), image='chapter2/box1.png', pos=LPoint3f(-0.25, 0, -0.35), relief=1, scale=LVecBase3f(0.05, 0.08, 0.05), text='', image_scale=LVecBase3f(1, 1, 1), image_pos=LPoint3f(0, 0, 0), text_align=TextNode.A_center, text_scale=(1.0, 1.0), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, command=base.messenger.send, extraArgs=["box1"], pressEffect=0, ) self.btnBox1.setTransparency(1) self.btnBox2 = DirectButton( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-1.0, 1.0, -1.0, 1.0), hpr=LVecBase3f(0, 0, 0), image='chapter2/box2.png', pos=LPoint3f(0.4, 0, 0.16), relief=1, scale=LVecBase3f(0.05, 0.08, 0.05), text='', image_scale=LVecBase3f(1, 1, 1), image_pos=LPoint3f(0, 0, 0), text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, command=base.messenger.send, extraArgs=["box2"], pressEffect=0, ) self.btnBox2.setTransparency(1) self.btnBox3 = DirectButton( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-1.0, 1.0, -1.0, 1.0), hpr=LVecBase3f(0, 0, 0), image='chapter2/box3.png', pos=LPoint3f(0.305, 0, -0.435), relief=1, scale=LVecBase3f(0.08, 0.1, 0.08), text='', image_scale=LVecBase3f(1, 1, 1), image_pos=LPoint3f(0, 0, 0), text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, command=base.messenger.send, extraArgs=["box3"], pressEffect=0, ) self.btnBox3.setTransparency(1) self.overlay = DirectFrame( frameColor=(1.0, 1.0, 1.0, 0.0), frameSize=(-0.8, 0.8, -0.8, 0.8), hpr=LVecBase3f(0, 0, 0), image='chapter2/overlay.png', pos=LPoint3f(0, 0, 0), image_scale=LVecBase3f(0.8, 1, 0.8), image_pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.overlay.setTransparency(1) def show(self): self.btnBox1.show() self.btnBox2.show() self.btnBox3.show() self.overlay.show() def hide(self): self.btnBox1.hide() self.btnBox2.hide() self.btnBox3.hide() self.overlay.hide() def destroy(self): self.btnBox1.destroy() self.btnBox2.destroy() self.btnBox3.destroy() self.overlay.destroy()
class GUI: def __init__(self, rootParent=None): self.frmMain = DirectFrame( frameColor=(1, 1, 1, 1), frameSize=(-1.777778, 1.77777778, -1.1638, 1.1638), hpr=LVecBase3f(0, 0, 0), image='assets/menu/Background.png', pos=LPoint3f(0, 0, 0), image_scale=LVecBase3f(1.77778, 1, 1.1638), image_pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmMain.setTransparency(0) self.frmSinglePlayerCreateGame = DirectFrame( borderWidth=(0.01, 0.01), frameColor=(1, 1, 1, 1), frameSize=(-0.65, 0.65, -0.55, 0.55), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.425, 0, 0), relief=5, parent=self.frmMain, ) self.frmSinglePlayerCreateGame.setTransparency(0) self.lblHeader = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.425), scale=LVecBase3f(0.1, 0.1, 0.1), text='Singleplayer Game', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmSinglePlayerCreateGame, ) self.lblHeader.setTransparency(0) self.lblGameType = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.6, 0, 0.225), scale=LVecBase3f(0.1, 0.1, 0.1), text='Game Type', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmSinglePlayerCreateGame, ) self.lblGameType.setTransparency(0) self.lblNumNPCs = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.6, 0, -0.125), scale=LVecBase3f(0.1, 0.1, 0.1), text='Number of NPCs ', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmSinglePlayerCreateGame, ) self.lblNumNPCs.setTransparency(0) self.optionNumNPCs = DirectOptionMenu( items=['item1'], frameSize=(0.07500000298023224, 3.012500149011612, -0.11250001192092896, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.2, 0, -0.115), scale=LVecBase3f(0.1, 0.1, 0.1), text='item1', cancelframe_frameSize=(-1, 1, -1, 1), cancelframe_hpr=LVecBase3f(0, 0, 0), cancelframe_pos=LPoint3f(0, 0, 0), cancelframe_relief=None, item_frameSize=(0.07500000298023224, 2.4125001430511475, -0.11250001192092896, 0.75), item_hpr=LVecBase3f(0, 0, 0), item_pos=LPoint3f(-0.075, 0, -0.75), item_text='item1', item0_text_align=TextNode.A_left, item0_text_scale=(1, 1), item0_text_pos=(0, 0), item0_text_fg=LVecBase4f(0, 0, 0, 1), item0_text_bg=LVecBase4f(0, 0, 0, 0), item0_text_wordwrap=None, popupMarker_frameSize=(-0.5, 0.5, -0.2, 0.2), popupMarker_hpr=LVecBase3f(0, 0, 0), popupMarker_pos=LPoint3f(2.7125, 0, 0.31875), popupMarker_relief=2, popupMarker_scale=LVecBase3f(0.4, 0.4, 0.4), popupMenu_frameSize=(0, 2.3375001400709152, -0.862500011920929, 0), popupMenu_hpr=LVecBase3f(0, 0, 0), popupMenu_pos=LPoint3f(0, 0, 0), popupMenu_relief='raised', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmSinglePlayerCreateGame, ) self.optionNumNPCs.setTransparency(0) self.optionGameType = DirectOptionMenu( items=['item1'], frameSize=(0.07500000298023224, 3.012500149011612, -0.11250001192092896, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.2, 0, 0.22), scale=LVecBase3f(0.1, 0.1, 0.1), text='item1', cancelframe_frameSize=(-1, 1, -1, 1), cancelframe_hpr=LVecBase3f(0, 0, 0), cancelframe_pos=LPoint3f(0, 0, 0), cancelframe_relief=None, item_frameSize=(0.07500000298023224, 2.4125001430511475, -0.11250001192092896, 0.75), item_hpr=LVecBase3f(0, 0, 0), item_pos=LPoint3f(-0.075, 0, -0.75), item_text='item1', item0_text_align=TextNode.A_left, item0_text_scale=(1, 1), item0_text_pos=(0, 0), item0_text_fg=LVecBase4f(0, 0, 0, 1), item0_text_bg=LVecBase4f(0, 0, 0, 0), item0_text_wordwrap=None, popupMarker_frameSize=(-0.5, 0.5, -0.2, 0.2), popupMarker_hpr=LVecBase3f(0, 0, 0), popupMarker_pos=LPoint3f(2.7125, 0, 0.31875), popupMarker_relief=2, popupMarker_scale=LVecBase3f(0.4, 0.4, 0.4), popupMenu_frameSize=(0, 2.3375001400709152, -0.862500011920929, 0), popupMenu_hpr=LVecBase3f(0, 0, 0), popupMenu_pos=LPoint3f(0, 0, 0), popupMenu_relief='raised', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmSinglePlayerCreateGame, ) self.optionGameType.setTransparency(0) self.btnStart = DirectButton( hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.35, 0, -0.45), scale=LVecBase3f(0.1, 0.1, 0.1), text='Start', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmSinglePlayerCreateGame, command=base.messenger.send, extraArgs=["singlePlayerCreateGame_start"], ) self.btnStart.setTransparency(0) self.lblPlayerClass = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.6, 0, 0.05), scale=LVecBase3f(0.1, 0.1, 0.1), text='Player Class', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmSinglePlayerCreateGame, ) self.lblPlayerClass.setTransparency(0) self.optionPlayerClass = DirectOptionMenu( items=['item1'], frameSize=(0.07500000298023224, 3.012500149011612, -0.11250001192092896, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.2, 0, 0.055), scale=LVecBase3f(0.1, 0.1, 0.1), text='item1', cancelframe_frameSize=(-1, 1, -1, 1), cancelframe_hpr=LVecBase3f(0, 0, 0), cancelframe_pos=LPoint3f(0, 0, 0), cancelframe_relief=None, item_frameSize=(0.07500000298023224, 2.4125001430511475, -0.11250001192092896, 0.75), item_hpr=LVecBase3f(0, 0, 0), item_pos=LPoint3f(-0.075, 0, -0.75), item_text='item1', item0_text_align=TextNode.A_left, item0_text_scale=(1, 1), item0_text_pos=(0, 0), item0_text_fg=LVecBase4f(0, 0, 0, 1), item0_text_bg=LVecBase4f(0, 0, 0, 0), item0_text_wordwrap=None, popupMarker_frameSize=(-0.5, 0.5, -0.2, 0.2), popupMarker_hpr=LVecBase3f(0, 0, 0), popupMarker_pos=LPoint3f(2.7125, 0, 0.31875), popupMarker_relief=2, popupMarker_scale=LVecBase3f(0.4, 0.4, 0.4), popupMenu_frameSize=(0, 2.3375001400709152, -0.862500011920929, 0), popupMenu_hpr=LVecBase3f(0, 0, 0), popupMenu_pos=LPoint3f(0, 0, 0), popupMenu_relief='raised', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmSinglePlayerCreateGame, ) self.optionPlayerClass.setTransparency(0) self.btnCancel = DirectButton( hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.325, 0, -0.45), scale=LVecBase3f(0.1, 0.1, 0.1), text='Cancel', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmSinglePlayerCreateGame, command=base.messenger.send, extraArgs=["singlePlayerCreateGame_back"], ) self.btnCancel.setTransparency(0) self.lblDifficulty = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.6, 0, -0.29), scale=LVecBase3f(0.1, 0.1, 0.1), text='Difficulty', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmSinglePlayerCreateGame, ) self.lblDifficulty.setTransparency(0) self.optionDifficulty = DirectOptionMenu( items=['item1'], frameSize=(0.07500000298023224, 3.012500149011612, -0.11250001192092896, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.2, 0, -0.29), scale=LVecBase3f(0.1, 0.1, 0.1), text='item1', cancelframe_frameSize=(-1, 1, -1, 1), cancelframe_hpr=LVecBase3f(0, 0, 0), cancelframe_pos=LPoint3f(0, 0, 0), cancelframe_relief=None, item_frameSize=(0.07500000298023224, 2.4125001430511475, -0.11250001192092896, 0.75), item_hpr=LVecBase3f(0, 0, 0), item_pos=LPoint3f(-0.075, 0, -0.75), item_text='item1', item0_text_align=TextNode.A_left, item0_text_scale=(1, 1), item0_text_pos=(0, 0), item0_text_fg=LVecBase4f(0, 0, 0, 1), item0_text_bg=LVecBase4f(0, 0, 0, 0), item0_text_wordwrap=None, popupMarker_frameSize=(-0.5, 0.5, -0.2, 0.2), popupMarker_hpr=LVecBase3f(0, 0, 0), popupMarker_pos=LPoint3f(2.7125, 0, 0.31875), popupMarker_relief=2, popupMarker_scale=LVecBase3f(0.4, 0.4, 0.4), popupMenu_frameSize=(0, 2.3375001400709152, -0.862500011920929, 0), popupMenu_hpr=LVecBase3f(0, 0, 0), popupMenu_pos=LPoint3f(0, 0, 0), popupMenu_relief='raised', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmSinglePlayerCreateGame, ) self.optionDifficulty.setTransparency(0) self.frmPlayerInfo = DirectFrame( borderWidth=(0.01, 0.01), frameColor=(1, 1, 1, 1), frameSize=(-0.5, 0.5, -0.55, 0.55), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.765, 0, 0), relief=3, parent=self.frmMain, ) self.frmPlayerInfo.setTransparency(0) self.lblInfoHeader = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.45), scale=LVecBase3f(0.1, 0.1, 0.1), text='Info', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmPlayerInfo, ) self.lblInfoHeader.setTransparency(0) self.frmImageHero = DirectFrame( frameColor=(1, 1, 1, 1), frameSize=(-0.15, 0.15, -0.2, 0.2), hpr=LVecBase3f(0, 0, 0), image= '/home/fireclaw/workspace/Ankandora/AnkandoraLight/design/guiGraphics/heroArcher.png', pos=LPoint3f(-0.275, 0, 0.195), image_scale=LVecBase3f(0.15, 1, 0.2), image_pos=LPoint3f(0, 0, 0), parent=self.frmPlayerInfo, ) self.frmImageHero.setTransparency(1) self.lblClassDescription = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.12, 0, 0.31), scale=LVecBase3f(0.1, 0.1, 0.1), text='The archer shoots from afar and gains the first-strike', text_align=TextNode.A_left, text_scale=(0.6, 0.6), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=10.0, parent=self.frmPlayerInfo, ) self.lblClassDescription.setTransparency(0) self.lblHealth = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.28, 0, -0.1), scale=LVecBase3f(0.1, 0.1, 0.1), text='Health', text_align=TextNode.A_center, text_scale=(0.7, 0.7), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmPlayerInfo, ) self.lblHealth.setTransparency(0) self.lblAttack = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.275, 0, -0.285), scale=LVecBase3f(0.1, 0.1, 0.1), text='Attack', text_align=TextNode.A_center, text_scale=(0.7, 0.7), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmPlayerInfo, ) self.lblAttack.setTransparency(0) self.lblHealthValue = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.275, 0, -0.17), scale=LVecBase3f(0.1, 0.1, 0.1), text='7', text_align=TextNode.A_center, text_scale=(0.6, 0.6), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmPlayerInfo, ) self.lblHealthValue.setTransparency(0) self.lblAttackValue = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.275, 0, -0.36), scale=LVecBase3f(0.1, 0.1, 0.1), text='4', text_align=TextNode.A_center, text_scale=(0.6, 0.6), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.frmPlayerInfo, ) self.lblAttackValue.setTransparency(0) def show(self): self.frmMain.show() def hide(self): self.frmMain.hide() def destroy(self): self.frmMain.destroy()
class MatchFrm(GameObject): def __init__(self, menu_args): GameObject.__init__(self) self.eng.log('created match form (init)') self.room = '' self.invited_users = [self.eng.xmpp.client.boundjid.bare] self.menu_args = menu_args lab_args = menu_args.label_args lab_args['scale'] = .046 self.match_frm = DirectFrame(frameSize=(-.02, 2.5, 0, .45), frameColor=(.2, .2, .2, .5), pos=(.04, 1, -.46), parent=base.a2dTopLeft) usr = [ usr for usr in self.eng.xmpp.users if usr.name == self.eng.xmpp.client.boundjid.bare ][0] frm = UserFrmMe(self.eng.xmpp.client.boundjid.bare, self.eng.xmpp.client.boundjid.bare, usr.is_supporter, True, (.1, 1, .38), self.match_frm, self.menu_args, .32) self.forms = [frm] for i in range(0, 8): row, col = i % 4, i / 4 DirectLabel(text=str(i + 1) + '.', pos=(.06 + 1.24 * col, 1, .38 - .08 * row), parent=self.match_frm, **lab_args) def on_presence_available_room(self, msg): room = str(JID(msg['muc']['room']).bare) nick = str(msg['muc']['nick']) self.eng.log('user %s has connected to the room %s' % (nick, room)) if nick == self.eng.xmpp.client.boundjid.bare: return if room != self.room: return found = False for frm in self.forms: lab = frm.lab.lab['text'] lab = lab.replace('\1smaller\1', '').replace('\2', '') if lab.startswith('? '): lab = lab[2:] if lab == nick: found = True frm.lab.lab['text'] = frm.lab.lab['text'][2:] if not found: idx = len(self.forms) x = .1 + 1.24 * (idx / 4) y = .38 - .08 * (idx % 4) usr = [usr for usr in self.eng.xmpp.users if usr.name == nick][0] frm = UserFrm(self.trunc(nick, 30), nick, usr.is_supporter, usr.is_online, (x, 1, y), self.match_frm, self.menu_args, 1.0) self.forms += [frm] def on_presence_unavailable_room(self, msg): room = str(JID(msg['muc']['room']).bare) nick = str(msg['muc']['nick']) self.eng.log('user %s has disconnected from the room %s' % (nick, room)) if room != self.room: return for i, frm in enumerate(self.forms[:]): lab = frm.lab.lab['text'] lab = lab.replace('\1smaller\1', '').replace('\2', '') if lab == nick: for j in range(i + 1, 8): if j < len(self.forms): self.set_frm_pos(self.forms[j], j - 1) self.forms.remove(frm) frm.destroy() @property def users_names(self): clean = lambda lab: lab.replace('\1smaller\1', '').replace('\2', '') return [clean(frm.lab.lab['text']) for frm in self.forms] def set_frm_pos(self, frm, i): row, col = i % 4, i / 4 x = .1 + 1.24 * col y = .38 - .08 * row frm.frm.set_pos((x, 1, y)) def on_declined(self, msg): usr = str(JID(msg['from']).bare) self.eng.log('user %s has declined' % usr) for i, frm in enumerate(self.forms[:]): lab = frm.lab.lab['text'] lab = lab.replace('\1smaller\1', '').replace('\2', '') if lab.startswith('? '): lab = lab[2:] if lab == usr: for j in range(i + 1, 8): if j < len(self.forms): self.set_frm_pos(self.forms[j], j - 1) self.forms.remove(frm) frm.destroy() @staticmethod def trunc(name, lgt): if len(name) > lgt: return name[:lgt] + '...' return name def on_invite(self, usr): self.eng.log('match form: invited user ' + usr.name) idx = len(self.invited_users) x = .1 + 1.24 * (idx / 4) y = .38 - .08 * (idx % 4) frm = UserFrmMatch('? ' + self.trunc(usr.name, 30), usr, usr.is_supporter, usr.is_online, (x, 1, y), self.match_frm, self.menu_args) frm.attach(self.on_remove) self.forms += [frm] self.invited_users += [usr.name] def on_start(self): self.eng.log('match form: start') self.notify('on_start') def on_remove(self, usr_name): self.eng.xmpp.client.plugin['xep_0045'].setRole( self.room, usr_name, 'none') def show(self, room): self.eng.log('match form: show room ' + room) self.room = room self.match_frm.show() def hide(self): self.eng.log('match form: hide') self.match_frm.hide() def destroy(self): self.eng.log('match form: destroy') self.match_frm.destroy() GameObject.destroy(self)
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 MissionOne(object): def __init__(self, p, m): """ :type p: Player """ self.menu = m self.player = p self.password = None self.passwordExit = None self.bookIndex = 0 # self.manager = GoodsManager() self.manager = self.player.goodmanager self.tutorialText = range(10) self.plotText = [[0] * 10] * 10 self.memoryText = [[0] * 10] * 10 self.kuraText = range(10) self.initTutorial() self.initPlot() self.initMemory() self.initKuraMessage() self.flowerNum = 2 def initTutorial(self): self.tutorialText[0] = "" self.tutorialText[1] = "被Erosion感染的人存在侵蚀度这个概念。侵蚀度越高你的身体机能也就越强,\n" \ "但是一定不要为了力量而盲目提升侵蚀度,因为你的侵蚀度达到100%之后意识" \ "就会立刻消亡,成为Erosion病毒的傀儡。" self.tutorialText[2] = "如果真的需要力量的话,可以发动技能入魔,通过提升侵蚀度的代价短暂提升\n" \ "自身的速度,同时随着侵蚀度上升可以做一些平时力量达不到的事情。但是一\n" \ "定给我不要滥用啊,不然的话就去死吧,笨蛋。系统提示:按下Space发动入魔。" self.tutorialText[3] = "你终于想起来一些事情了呢~这个房间中有好多能让你找回记忆的东西。找到\n" \ "那些东西,也是拯救我们的办法呢。系统提示:在侵蚀度高于50%时你会有破坏\n" \ "东西的冲动和焦虑感,可能会影响剧情的发展。" self.tutorialText[4] = "我们这种被Erosion寄生的人呢,在危险的时候会有一种直觉,这种直觉会让\n" \ "你在遭遇危险时听到自己的心跳声。说来,为什么我的心跳这么剧烈呢…" self.tutorialText[5] = "在遇到无法通过的障碍时,使用侵蚀之门可以在空间中制造通道从而进行穿梭。\n" \ "我先在这里制造一扇给你示范一下,看好了哦。系统提示:按下鼠标右键可以\n" \ "向前方发射侵蚀之门,如果场景中存在两个侵蚀之门即可互相穿梭。" self.menu.nextButton['command'] = self.hideTutorial self.menu.nextButton['extraArgs'] = [] def initPlot(self): self.plotText[0][0] = "终于醒了啊。估计你也想不起来过去的事情了,那我就重新介绍一下自己吧" self.plotText[0][1] = "我叫Kura。当时有一群人冲向我们,你给自己注射了Erosion,\n然后杀掉了那些人呢。" self.plotText[0][2] = "那些…人?Kura?不行,我还是想不起来……。" self.plotText[0][3] = "只有你知道治疗Erosion的办法,所以能从病毒中拯救我们的…也就只有你了。\n" \ "因为我被感染的时间比较长,所以只能保持清醒状态很短时间…务必要从这里逃\n" \ "出去然后找到解药,不然我们恐怕都要迷失在这里了…我会在这里等你的。" self.plotText[1] = "刚一踏出房间,房间的门就被重重的锁上了。无论我怎么叫喊,里面都没有回应。" \ "我尽可能不去想最糟糕的情况,大概kura不会有什么问题的吧。" def initMemory(self): pass ''' 编号2 记忆的回影 ''' self.memoryText[2][0] = "相册上这些实验体…似曾相识的感觉呢……" self.memoryText[2][1] = "这份研究结论我也见过……为什么呢……" self.memoryText[2][2] = "实验体被Erosion所侵蚀之后意识会逐渐被吞噬……\n" \ "Erosion结附在实验体上,夺去实验体的意识。" self.memoryText[2][3] = "而这些失去意识的实验体脸上挂着笑容,大概是本我还活在海市蜃楼中吧。" ''' 编号4 熟识的地点 ''' self.memoryText[4][0] = "什么?!这个地点…我曾经来过。" self.memoryText[4][1] = "这两个几乎完全相同的实验室…正是我曾经每天待着的地方……" self.memoryText[4][2] = "为什么我会……有这么强的即视感呢?" self.memoryText[4][3] = "那些大大的培养槽中的人,都还活着!他们本我的意识\n" \ "已经在幻境中沉沉睡去,大概是已经变成Erosion控制的傀儡……" self.memoryText[4][4] = "这个实验的实验者是谁?为什么要研究这些傀儡呢?" ''' 编号5 过去的残影 ''' self.memoryText[5][0] = "这个合影……我依稀记得这是我和女儿一起照的……感觉……记忆在涌上来" self.memoryText[5][1] = "她应该也在这个实验室中……在不久之前她被一些实验体咬伤了\n……不行," \ "我一定要活着出去,并且找到她……" self.memoryText[5][2] = "说起来kura,你长的真的很像我的女儿呢。可是你为什么会在这里呢?\n" self.memoryText[5][3] = "是吗?那你就把我当成你的女儿呗,爸爸。" self.memoryText[5][4] = "……" self.memoryText[5][5] = "当然是开玩笑的啦,嘻嘻。我也不知道我为什么在这里,我只知道我也\n" \ "被Erosion感染了。不管这些,你一定要逃出去哦,无论是为了为了你\n" \ "的女儿亦或是你自己,或者说……为了我?" self.memoryText[5][6] = "嗯,一定。" def initKuraMessage(self): self.kuraText[0] = "呜……真是的…干嘛突然用\n手电筒照我呀,好刺眼的……" self.kuraText[1] = "……呜…又来…恶作剧也要有\n个限度呀………人家也是会生气的哦…" self.kuraText[2] = "…不是说过了么…恶作剧什么的,要有个…限度呢。\n...\n去死吧你这可恶的人类!" self.kuraText[3] = "我记得那边有个八音盒哦。\n这个发条应该和那个八音盒有关" def interactiveWith(self, goods): props = WindowProperties() props.setCursorHidden(False) base.win.requestProperties(props) self.player.endTask() self.goods = goods if goods.Name == "elevator_box": self.menu.selectDialog.show() if goods.state == "ready": self.menu.textLabel['text'] = "随着一声轻响,电梯缓缓地打开了。" self.menu.aButton['command'] = self.doNothing self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "走进电梯" self.menu.bButton.hide() elif self.player.bag.haveItem("res/models/items/" + "hammer" + ".png") \ and goods.state == "cracked": self.menu.textLabel['text'] = "无论怎么按动按钮,电梯都没有反应。\n" \ "电梯门已经残破不堪了,似乎可以强行打开的样子。" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "你愤怒的抄起锤子砸向有一点裂缝的电梯门。\n" "电梯间的门被砸开了。然而里面却没有电梯,\n" "等待着你的是……", goods, "smashed", None, 'endC', None ] self.menu.aButton['text'] = "用锤子砸" self.menu.bButton['command'] = self.doNothing self.menu.bButton['extraArgs'] = [] self.menu.bButton['text'] = "暂时离开" elif self.player.bag.haveItem("res/models/items/" + "hammer" + ".png")\ and goods.state == "": self.menu.textLabel['text'] = "无论怎么按动按钮,电梯都没有反应。\n" \ "电梯门已经残破不堪了,似乎可以强行打开的样子。" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "你愤怒的抄起锤子砸向电梯门。\n门似乎被砸出了一点缝隙。", goods, "smashed", ["torch", "groupPhoto"], 3, -15 ] self.menu.aButton['text'] = "用锤子砸" self.menu.bButton['command'] = self.doNothing self.menu.bButton['extraArgs'] = [] self.menu.bButton['text'] = "暂时离开" else: self.menu.textLabel['text'] = "无论怎么按动按钮,电梯都没有反应。\n" \ "电梯门已经残破不堪了,似乎可以强行打开的样子。" self.menu.aButton['command'] = self.doNothing self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "暂时离开" self.menu.bButton.hide() elif goods.Name == "distribution_box": self.menu.selectDialog.show() if goods.state == "opened": self.menu.textLabel['text'] = "这个配电盒已经被打开了。" self.menu.aButton['command'] = self.doNothing self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "离开" self.menu.bButton.hide() elif self.player.bag.haveItem("res/models/items/" + "goldenKey" + ".png") and \ self.player.bag.haveItem("res/models/items/" + "hammer" + ".png"): self.menu.textLabel['text'] = "配电盒被紧紧锁着,没有钥匙的话似乎打不开。" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "配电盒的锁被打开了。你拉下了电闸,\n" "看到电梯的按钮亮了起来。", goods, "opened" ] self.menu.aButton['text'] = "用钥匙打开" self.menu.bButton['command'] = self.showInfo self.menu.bButton['extraArgs'] = [ "你砸开了配电盒,此时从配电盒里\n" "传来巨大电流,你被电成了焦炭。", goods, "", None, "endD", None ] self.menu.bButton['text'] = "用锤子砸" elif self.player.bag.haveItem("res/models/items/" + "hammer" + ".png"): self.menu.textLabel['text'] = "配电盒被紧紧锁着,没有钥匙的话似乎打不开。" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "你砸开了配电盒,此时从配电盒里\n" "传来巨大电流,你被电成了焦炭。", goods, "", None, "endD", None ] self.menu.aButton['text'] = "用锤子砸" self.menu.bButton['command'] = self.doNothing self.menu.bButton['extraArgs'] = [] self.menu.bButton['text'] = "暂时离开" elif self.player.bag.haveItem("res/models/items/" + "goldenKey" + ".png"): self.menu.textLabel['text'] = "配电盒被紧紧锁着,没有钥匙的话似乎打不开。" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "配电盒的锁被打开了。你拉下了电闸,\n" "看到电梯的按钮亮了起来。", goods, "opened", None, "endD", None ] self.menu.aButton['text'] = "用钥匙打开" self.menu.bButton['command'] = self.doNothing self.menu.bButton['extraArgs'] = [] self.menu.bButton['text'] = "暂时离开" else: self.menu.textLabel['text'] = "配电盒被紧紧锁着,没有钥匙的话似乎打不开。" self.menu.aButton['command'] = self.doNothing self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "暂时离开" self.menu.bButton.hide() elif goods.Name == "clock_box": self.menu.selectDialog.show() self.menu.textLabel['text'] = "这个钟显示的时间……有点奇怪呢。" self.menu.aButton['command'] = self.doNothing self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "离开" self.menu.bButton.hide() elif goods.Name == "painting_1": self.menu.selectDialog.show() self.menu.textLabel['text'] = "《不要动我的蛋糕》" self.menu.aButton['command'] = self.doNothing self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "离开" self.menu.bButton.hide() elif goods.Name == "painting_2": self.menu.selectDialog.show() self.menu.textLabel['text'] = "《死兔》" self.menu.aButton['command'] = self.doNothing self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "离开" self.menu.bButton.hide() elif goods.Name == "painting_3": self.menu.selectDialog.show() self.menu.textLabel['text'] = "《破碎的镜》" self.menu.aButton['command'] = self.doNothing self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "离开" self.menu.bButton.hide() elif goods.Name == "painting_4": self.menu.selectDialog.show() self.menu.textLabel['text'] = "《沾血的房间》" self.menu.aButton['command'] = self.doNothing self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "离开" self.menu.bButton.hide() elif goods.Name == "painting_5": self.menu.selectDialog.show() self.menu.textLabel['text'] = "《数学题》" self.menu.aButton['command'] = self.doNothing self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "离开" self.menu.bButton.hide() elif goods.Name == "painting_6": self.menu.selectDialog.show() self.menu.textLabel['text'] = "《正与反的恒常》" self.menu.aButton['command'] = self.doNothing self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "离开" self.menu.bButton.hide() elif goods.Name == "painting_7": self.menu.selectDialog.show() self.menu.textLabel['text'] = "《夕阳》" self.menu.aButton['command'] = self.doNothing self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "离开" self.menu.bButton.hide() elif goods.Name == "painting_8": self.menu.selectDialog.show() self.menu.textLabel['text'] = "《花》" self.menu.aButton['command'] = self.doNothing self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "离开" self.menu.bButton.hide() elif goods.Name == "painting_9": self.menu.selectDialog.show() self.menu.textLabel['text'] = "《希望》" self.menu.aButton['command'] = self.doNothing self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "离开" self.menu.bButton.hide() elif goods.Name == "lobby_door": self.menu.selectDialog.show() if self.player.EROSION >= 50 and self.goods.state == "": self.menu.textLabel['text'] = "你的焦虑影响了你的思维。" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "你用力向前一拍,砸碎了大厅门。", goods, "unlockedOpen" ] self.menu.aButton['text'] = "我..." self.menu.bButton.hide() self.goods.OnClick() self.password = Password() self.password.passwordFrame.hide() self.password.unloadLeap() self.password.passState = True else: if self.goods.state == "unlockedOpen": self.menu.textLabel['text'] = "大厅门上现在没有上锁。" self.menu.aButton['command'] = self.openDoor self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "关闭大厅门" self.menu.bButton['command'] = self.doNothing self.menu.bButton['extraArgs'] = [] self.menu.bButton['text'] = "离开" elif self.goods.state == "unlockedClose": self.menu.textLabel['text'] = "大厅门上现在没有上锁。" self.menu.aButton['command'] = self.openDoor self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "打开大厅门" self.menu.bButton['command'] = self.doNothing self.menu.bButton['extraArgs'] = [] self.menu.bButton['text'] = "离开" else: self.menu.textLabel['text'] = "门上存在一个电子锁。" self.menu.aButton['command'] = self.openDoor self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "输入密码" self.menu.bButton['command'] = self.showInfo self.menu.bButton['extraArgs'] = [ "这个密码到底是什么呢……", goods, "" ] self.menu.bButton['text'] = "暂时离开" elif goods.Name == "laboratory_door": self.menu.selectDialog.show() if goods.state == "": self.menu.textLabel['text'] = "这个门似乎可以推开,但总感觉里面阴森森的,有种不祥的气息。" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "里面有窸窸窣窣的声音,不知道是什么东西在里面,\n" "但是好像很可怕。", goods, "" ] self.menu.aButton['text'] = "趴在门上听" self.menu.bButton['command'] = self.showInfo self.menu.bButton['extraArgs'] = [ "你面前出现了...", goods, "", None, "endE", None ] self.menu.bButton['text'] = "推开门" self.menu.bButton.hide() elif goods.state == "deadRabbit": self.menu.textLabel['text'] = "这个门似乎可以推开。" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "里面有窸窸窣窣的声音,但是声音距离你很远。", goods, "deadRabbit" ] self.menu.aButton['text'] = "趴在门上听" self.menu.bButton['command'] = self.showInfo self.menu.bButton['extraArgs'] = [ "门被打开了。", goods, "deadRabbit", None, "openLabDoor", None ] self.menu.bButton['text'] = "推开门" self.menu.bButton.hide() elif self.player.bag.haveItem("res/models/items/" + "deadRabbit" + ".png"): self.menu.textLabel['text'] = "这个门似乎可以推开,但总感觉里面阴森森的,有种不祥的气息。" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "你将死兔放在门口,之后躲在大厅门旁暗中观察。\n" "这时,一只血红色的手抓住了兔子,将其拉入了门内。\n" "不久,门内传来哀嚎声。", goods, "deadRabbit" ] self.menu.aButton['text'] = "投放死兔" self.menu.bButton['command'] = self.showInfo self.menu.bButton['extraArgs'] = [ "你面前出现了...", goods, "", None, "endE", None ] self.menu.bButton['text'] = "推开门" self.menu.bButton.hide() elif self.player.bag.haveItem("res/models/items/" + "rabbit" + ".png"): self.menu.textLabel['text'] = "这个门似乎可以推开,但总感觉里面阴森森的,有种不祥的气息。" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "你将实验兔放在门口,之后躲在大厅门旁暗中观察。\n" "这时,一只血红色的手抓住了兔子,将其拉入了门内。\n" "你似乎听到门内传来“我……还……要”", goods, "rabbit" ] self.menu.aButton['text'] = "投放实验兔" self.menu.bButton['command'] = self.showInfo self.menu.bButton['extraArgs'] = [ "你面前出现了...", goods, "", None, "endE", None ] self.menu.bButton['text'] = "推开门" self.menu.bButton.hide() elif self.player.bag.haveItem("res/models/items/" + "hammer" + ".png"): self.menu.textLabel['text'] = "这个门似乎可以推开,但总感觉里面阴森森的,有种不祥的气息。" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "你把门敲开了,看到了一群满身血迹的怪物。\n" "这时谁都救不了你了。", goods, "", None, "endE", None ] self.menu.aButton['text'] = "用锤子砸" self.menu.bButton['command'] = self.showInfo self.menu.bButton['extraArgs'] = [ "你面前出现了...", goods, "", None, "endE", None ] self.menu.bButton['text'] = "推开门" self.menu.bButton.hide() else: self.menu.textLabel['text'] = "这个门似乎可以推开,但总感觉里面阴森森的,有种不祥的气息。" self.menu.aButton['command'] = self.doNothing self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "暂时离开" self.menu.bButton.hide() elif goods.Name == "fridge_box": self.menu.selectDialog.show() self.menu.textLabel['text'] = "冰箱中东西不多,仅有几根胡萝卜和一个大蛋糕。" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "获得胡萝卜*1", goods, "searched", ["carrot"] ] self.menu.aButton['text'] = "拿走胡萝卜" self.menu.bButton['command'] = self.showInfo self.menu.bButton['extraArgs'] = [ "获得大蛋糕*1", goods, "searched", ["cake"], "endF", None ] self.menu.bButton['text'] = "拿走大蛋糕" elif goods.Name == "diary": self.menu.selectDialog.show() if self.player.EROSION > 50: self.menu.textLabel['text'] = "因为意识混乱,日记上的字迹模糊不清,难以调查。" self.menu.aButton['command'] = self.doNothing self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "暂时离开" self.menu.bButton.hide() else: self.menu.textLabel['text'] = "这份研究结论我似乎见过呢。实验体被Erosion所侵蚀之后意识会逐渐被吞噬……\n" \ "Erosion结附在实验体上,夺去实验体的意识。而这些失去意识的实验体脸上\n" \ "挂着笑容,大概是本我意识还活在海市蜃楼中吧。" self.menu.aButton['command'] = self.beginMemory self.menu.aButton['extraArgs'] = [0, 2] self.menu.aButton['text'] = "我记起了..." self.menu.bButton.hide() elif goods.Name == "moldy_food": self.menu.selectDialog.show() self.menu.textLabel[ 'text'] = "食物放了太久 早就发霉了。看起来像是煮好的胡萝卜。“还是不要去尝了吧,不然会死人的”" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "实验兔吃下了发霉的食物,蹬了一下腿就一动不动了。\n" "获得死兔", goods, "eaten", ["deadRabbit"] ] self.menu.aButton['text'] = "使用实验兔" self.menu.bButton['command'] = self.doNothing self.menu.bButton['extraArgs'] = [] self.menu.bButton['text'] = "离开" elif goods.Name == "safe_box": self.menu.selectDialog.show() if self.player.EROSION >= 50 and self.goods.state == "": self.menu.textLabel['text'] = "你的焦虑影响了你的思维。" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "你用力向前一拍,砸碎了大厅门。", goods, "unlockedOpen" ] self.menu.aButton['text'] = "我..." self.menu.bButton.hide() self.goods.OnClick() self.password = Password() self.password.passwordFrame.hide() self.password.unloadLeap() self.password.passState = True else: if self.goods.state == "unlockedOpen": self.menu.textLabel['text'] = "大厅门上现在没有上锁。" self.menu.aButton['command'] = self.openDoor self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "关闭大厅门" self.menu.bButton['command'] = self.doNothing self.menu.bButton['extraArgs'] = [] self.menu.bButton['text'] = "离开" elif self.goods.state == "unlockedClose": self.menu.textLabel['text'] = "大厅门上现在没有上锁。" self.menu.aButton['command'] = self.openDoor self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "打开大厅门" self.menu.bButton['command'] = self.doNothing self.menu.bButton['extraArgs'] = [] self.menu.bButton['text'] = "离开" else: self.menu.textLabel['text'] = "上面似乎有一个密码锁。" self.menu.aButton['command'] = self.openDoor self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "输入密码" self.menu.bButton['command'] = self.showInfo self.menu.bButton['extraArgs'] = [ "这个密码到底是什么呢……", goods, "" ] self.menu.bButton['text'] = "暂时离开" elif goods.Name == "rabbit_cage": self.menu.selectDialog.show() self.menu.textLabel['text'] = "实验室的实验兔笼。里面的兔子似乎因为没有食物而显得很躁动。\n" \ "伸了伸手,发现似乎够不着兔子。" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "你使用胡萝卜引诱兔子出来,抓出了一只兔子。\n" "获得兔子*1", goods, "", ["rabbit"] ] self.menu.aButton['text'] = "使用胡萝卜" self.menu.bButton['command'] = self.doNothing self.menu.bButton['extraArgs'] = [] self.menu.bButton['text'] = "离开" elif goods.Name == "windows_box": self.menu.selectDialog.show() if goods.state == "smashed": self.menu.textLabel['text'] = "这个窗户已经被砸开了。" self.menu.aButton['command'] = self.doNothing self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "离开" else: self.menu.textLabel['text'] = "这个窗户似乎通向实验室。透过窗户看了看实验室里面,\n" \ "只看到一片阴影在蠕动。" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "窗户似乎打不开呢……没有办法放兔子进去。", goods, "" ] self.menu.aButton['text'] = "放入兔子" self.menu.bButton['command'] = self.showInfo self.menu.aButton['text'] = "使用锤子" if self.player.EROSION > 80: self.menu.aButton['extraArgs'] = [ "你用锤子直接砸碎了窗户。同时,窗户内传来\n" "镜子破碎的声音。这时一个锈迹斑斑的铜板掉了\n" "下来。获得锈迹斑斑的铜板", goods, "smashed", ["copper"] ] else: self.menu.aButton['extraArgs'] = [ "实验室窗户异常坚硬,砸不开。", goods, "" ] elif goods.Name == "scissor": self.menu.selectDialog.show() self.menu.textLabel['text'] = "这里有把裁纸刀。" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "获得裁纸刀*1", goods, "", ["scissor"] ] self.menu.aButton['text'] = "拿起裁纸刀" self.menu.bButton['command'] = self.doNothing self.menu.bButton['extraArgs'] = [] self.menu.bButton['text'] = "离开" elif goods.Name == "tank": self.menu.selectDialog.show() self.menu.textLabel['text'] = "硫酸槽中盛满了稀硫酸。" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "你用稀硫酸除去了铁锈,看到了铜片上的文字。", goods, "", None, "copperText", None ] self.menu.aButton['text'] = "使用铜板" self.menu.bButton['command'] = self.doNothing self.menu.bButton['extraArgs'] = [] self.menu.bButton['text'] = "离开" elif goods.Name == "slogan": self.menu.selectDialog.show() self.menu.textLabel['text'] = "属于我们的请回来,不属于我们的请离开。我们是不可分离的\n" \ "镜的两面,恢复镜的人会获得祝福,破坏镜的人会万劫不复。\n" \ "当你迷茫如何前进时,不如去走廊欣赏一下艺术。" self.menu.aButton['command'] = self.doNothing self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "离开" self.menu.bButton.hide() elif goods.Name == "stove1": self.menu.selectDialog.show() self.menu.textLabel['text'] = "熊熊燃烧的火炉。你看到周围的灰烬中残留的纸屑写着文字“悲”" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "你把莎士比亚喜剧集烧掉,火焰变的更旺了", goods, "", None, "burnBook", None ] self.menu.aButton['text'] = "烧掉喜剧集" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "这时火焰突然跃起。", goods, "", None, "burnFunBook", 15 ] self.menu.aButton['text'] = "烧掉其他书" elif goods.Name == "stove2": self.menu.selectDialog.show() self.menu.textLabel['text'] = "熊熊燃烧的火炉。你看到周围的灰烬中残留的纸屑写着文字“喜”" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "你把莎士比亚悲剧集烧掉,火焰变的更旺了", goods, "", None, "burnBook", None ] self.menu.aButton['text'] = "烧掉悲剧集" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "这时火焰突然跃起。", goods, "", None, "burnSadBook", 15 ] self.menu.aButton['text'] = "烧掉其他书" elif goods.Name == "mirror": self.menu.selectDialog.show() if goods.state == "smashed": self.menu.selectDialog.show() self.menu.textLabel['text'] = "这其实是块玻璃而已,已经被砸碎了。" self.menu.aButton['command'] = self.doNothing self.menu.aButton['extraArgs'] = [] self.menu.aButton['text'] = "离开" self.menu.bButton.hide() else: self.menu.textLabel['text'] = "显示出一模一样的情景,但没有映出自己的脸。" self.menu.aButton['command'] = self.doNothing self.menu.aButton['extraArgs'] = [ "你用锤子砸碎了镜子,发现这其实是一块玻璃,\n" "表里两侧除了光线以外完全相同。", goods, "smashed" ] self.menu.aButton['text'] = "使用锤子" self.menu.bButton['command'] = self.doNothing self.menu.bButton['extraArgs'] = [] self.menu.bButton['text'] = "离开" elif goods.Name == "flower_vase": self.menu.selectDialog.show() self.menu.textLabel['text'] = "里面有" + str(self.flowerNum) + "朵纸花。" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "你成功插入了一朵纸花。", goods, "", None, "addFlower", None ] self.menu.aButton['text'] = "插入纸花" self.menu.bButton['command'] = self.doNothing self.menu.bButton['extraArgs'] = [] self.menu.bButton['text'] = "离开" elif goods.Name == "bookshelf_box": self.menu.selectDialog.show() self.menu.textLabel['text'] = "书架里有:《失忆症》《莎士比亚喜剧集》《高等代数分析》" self.menu.aButton['command'] = self.showInfo self.menu.aButton['extraArgs'] = [ "获得《莎士比亚喜剧集》", goods, "", ["funBook"] ] self.menu.aButton['text'] = "拿走莎士比亚喜剧集" self.menu.bButton['command'] = self.showInfo self.menu.bButton['extraArgs'] = [ "你看到书架后方有一个人影。\n" "不对啊…书架明明是在墙角才对……", goods, "", None, "endG", None ] self.menu.bButton['text'] = "拿走其他" else: self.resume() ''' wall word ''' def showWordBefore(self): self.menu.selectDialog.hide() props = WindowProperties() props.setCursorHidden(True) base.win.requestProperties(props) self.wordframe = DirectFrame(frameColor=(0, 0, 0, 1), frameSize=(-2, 2, -2, 2), pos=(0, 0, 0)) self.wordImage = OnscreenImage( 'res/models/SceneJPG/Scene1_Wall_Hall.png', pos=(0, 0, 0), scale=(1.4, 1, 1)) self.wordImage.reparentTo(self.wordframe) # self.leaveButton=DirectButton self.wordframe.show() self.player.initTask() base.accept("mouse1", self.wordReturn) base.accept("escape", self.wordReturn) def showWordAfter(self): self.menu.selectDialog.hide() props = WindowProperties() props.setCursorHidden(True) base.win.requestProperties(props) self.wordframe = DirectFrame(frameColor=(0, 0, 0, 1), frameSize=(-2, 2, -2, 2), pos=(0, 0, 0)) self.wordImage = OnscreenImage( 'res/models/SceneJPG/Scene1_Wall_Hall2.png', pos=(0, 0, 0), scale=(1.4, 1, 1)) self.wordImage.reparentTo(self.wordframe) # self.wordImage.removeNode() self.wordframe.show() self.player.initTask() base.accept("escape", self.wordReturn) base.accept("mouse1", self.wordReturn) def wordReturn(self): self.wordframe.hide() self.resume() self.player.initTask() base.accept("mouse1", self.player.__setattr__, ["LeftButton", 1]) base.accept('escape', self.player.game.pauseGame) def changWord(self, info, goods, state, items=None): goods.state = state self.manager.GoodsIta["Scene1_wallword_1"].CloseHighLight() self.manager.GoodsIta["Scene1_wallword_1"].Node.hide() self.manager.GoodsIta["Scene1_wallword_1"].state = "changed" self.manager.GoodsIta["Scene1_wallword_2"].Node.show() self.menu.infoDialog['text'] = info self.menu.infoDialog.show() self.resume() self.player.initTask() ''' password door ''' def openDoor(self): if self.password is None: self.password = Password() self.password.password = "******" else: self.password.reloadLeap() props = WindowProperties() props.setCursorHidden(False) base.win.requestProperties(props) self.player.endTask() self.password.passwordFrame.show() self.menu.selectDialog.hide() taskMgr.add(self.waitPass, "waitPass") base.accept('escape', self.waitPassReturn) def waitPass(self, task): if self.password.passState: self.password.passwordFrame.hide() self.password.unloadLeap() self.goods.OnClick() if self.goods.state == "unlockedOpen": self.goods.state = "unlockedClose" else: self.goods.state = "unlockedOpen" self.resume() self.player.initTask() base.accept('escape', self.player.game.pauseGame) return if self.password.wrongTime == 1: self.password.passwordFrame.hide() self.password.wrongTime = 0 self.password.unloadLeap() self.showInfo("密码错误,侵蚀度+5", self.goods, "", None, None, 5) base.accept('escape', self.player.game.pauseGame) return task.done return task.cont def waitPassReturn(self): self.resume() self.player.initTask() base.accept('escape', self.player.game.pauseGame) self.password.passwordFrame.hide() def openExitDoor(self): if self.passwordExit is None: self.passwordExit = Password() else: self.passwordExit.reloadLeap() props = WindowProperties() props.setCursorHidden(False) base.win.requestProperties(props) self.player.endTask() self.passwordExit.passwordFrame.show() self.menu.selectDialog.hide() taskMgr.add(self.waitExitPass, "waitExitPass") base.accept('escape', self.waitExitPassReturn) def waitExitPass(self, task): if self.passwordExit.passState: self.passwordExit.passwordFrame.hide() self.passwordExit.unloadLeap() self.goods.OnClick() if self.goods.state == "unlockedOpen": self.goods.state = "unlockedClose" else: self.goods.state = "unlockedOpen" self.resume() self.player.initTask() base.accept('escape', self.player.game.pauseGame) return return task.cont def waitExitPassReturn(self): self.resume() self.player.initTask() base.accept('escape', self.player.game.pauseGame) self.passwordExit.passwordFrame.hide() def doNothing(self): self.resume() self.player.initTask() def showTutorial(self, tutorialIndex): self.menu.selectDialog.hide() self.menu.tutorialDialog.show() self.menu.nextButton['text'] = self.tutorialText[tutorialIndex] def hideTutorial(self): self.menu.bButton.show() self.menu.selectDialog.hide() self.menu.tutorialDialog.hide() self.skip() props = WindowProperties() props.setCursorHidden(True) base.win.requestProperties(props) base.win.movePointer(0, base.win.getXSize() / 2, base.win.getYSize() / 2) self.player.initTask() def hideOcanio(self): self.menu.tutorialDialog.hide() self.menu.ocanioDialog.hide() props = WindowProperties() props.setCursorHidden(True) base.win.requestProperties(props) base.win.movePointer(0, base.win.getXSize() / 2, base.win.getYSize() / 2) self.player.initTask() def showInfo(self, info, goods, state, items=None, index=None, addErosion=None): self.menu.infoDialog.show() goods.state = state self.menu.infoDialog['text'] = info if items is not None: for item in items: if item == "rabbit": self.player.bag.addItem( Goods("res/models/items/" + item + ".png", self.player.bag.rabbit, "一只实验兔")) elif item == "deadRabbit": self.player.bag.addItem( Goods("res/models/items/" + item + ".png", self.player.bag.deadRabbit, "一只死兔")) elif item == "hammer": self.player.bag.addItem( Goods("res/models/items/" + item + ".png", self.player.bag.hammer, "一只锤子")) elif item == "injection": self.player.bag.addItem( Goods("res/models/items/" + item + ".png", self.player.bag.injection, "抑制剂")) elif item == "goldenKey": self.player.bag.addItem( Goods("res/models/items/" + item + ".png", self.player.bag.goldenKey, "一把金色钥匙")) elif item == "carrot": self.player.bag.addItem( Goods("res/models/items/" + item + ".png", self.player.bag.carrot, "一根胡萝卜")) elif item == "cake": self.player.bag.addItem( Goods("res/models/items/" + item + ".png", self.player.bag.cake, "一块大蛋糕")) elif item == "copper": self.player.bag.addItem( Goods("res/models/items/" + item + ".png", self.player.bag.copper, "一个锈迹斑斑的铜板")) elif item == "scissor": self.player.bag.addItem( Goods("res/models/items/" + item + ".png", self.player.bag.scissor, "一把裁纸刀")) elif item == "funBook": self.player.bag.addItem( Goods("res/models/items/" + item + ".png", self.player.bag.funBook, "《莎士比亚喜剧集》")) elif item == "sadBook": self.player.bag.addItem( Goods("res/models/items/" + item + ".png", self.player.bag.sadBood, "《莎士比亚悲剧集》")) else: self.player.bag.addItem( Goods("res/models/items/" + item + ".png", self.player.bag.panda, "这是啥?")) if index is not None: if index == 3: self.beginMemory(0) self.menu.selectDialog.hide() self.skip() elif index == "endC" or index == "endD": self.end(index) else: self.showTutorial(index) self.skip() else: self.resume() self.player.initTask() if addErosion is not None: if self.player.EROSION + addErosion < 0: self.player.EROSION = 0 elif self.player.EROSION + addErosion > 100: self.player.EROSION = 100 else: self.player.EROSION += addErosion def beginMemory(self, index, memIndex=None): if memIndex is not None: if index < 4: self.menu.tutorialDialog.hide() self.menu.ocanioDialog.show() self.menu.ocanioButton['text'] = self.memoryText[memIndex][ index] self.menu.ocanioButton['command'] = self.beginMemory self.menu.ocanioButton['extraArgs'] = [index + 1] else: self.menu.tutorialDialog.hide() self.menu.ocanioDialog.show() self.menu.ocanioButton['text'] = self.memoryText[memIndex][ index] self.menu.ocanioButton['command'] = self.hideOcanio self.menu.ocanioButton['extraArgs'] = [] else: if index < 3 or index == 4: self.menu.tutorialDialog.hide() self.menu.ocanioDialog.show() self.menu.ocanioButton['text'] = self.memoryText[5][index] self.menu.ocanioButton['command'] = self.beginMemory self.menu.ocanioButton['extraArgs'] = [index + 1] elif index == 3 or index == 5: self.menu.tutorialDialog.show() self.menu.ocanioDialog.hide() self.menu.nextButton['text'] = self.memoryText[5][index] self.menu.nextButton['command'] = self.beginMemory self.menu.nextButton['extraArgs'] = [index + 1] elif index == 6: self.menu.tutorialDialog.hide() self.menu.ocanioDialog.show() self.menu.ocanioButton['text'] = self.memoryText[5][index] self.menu.ocanioButton['command'] = self.hideOcanio self.menu.ocanioButton['extraArgs'] = [] def aCommand(self): self.resume() self.player.initTask() def bCommand(self): self.menu.infoDialog.show() self.menu.infoDialog['text'] = "get something!" self.resume() self.player.initTask() def skip(self): taskMgr.add(self.fadeTask, "fadeTask") def fadeTask(self, task): if task.time < 1.0: return task.cont self.menu.infoDialog.hide() return task.done def resume(self): self.menu.bButton.show() self.menu.selectDialog.hide() # self.menu.tutorialDialog.hide() self.skip() props = WindowProperties() props.setCursorHidden(True) base.win.requestProperties(props) base.win.movePointer(0, base.win.getXSize() / 2, base.win.getYSize() / 2) def end(self, fun="endB"): self.endFun = fun self.menu.tutorialDialog.hide() taskMgr.add(self.fadeEnd, "fadeEnd") def fadeEnd(self, task): if task.time < 1.0: self.menu.passFrame['frameColor'] = (0, 0, 0, task.time) return task.cont self.menu.passFrame.hide() self.menu.infoDialog.hide() if self.endFun == "endA": self.endA() elif self.endFun == "end1": self.end1() elif self.endFun == "endB": self.endB() return task.done def endA(self): props = WindowProperties() props.setCursorHidden(False) base.win.requestProperties(props) self.player.endTask() self.menu.mainFrame.show() self.menu.infoDialog.show() self.player.erosionFrame.hide() self.player.currentItemFrame.hide() self.menu.infoDialog['text'] = "Erosion max!" self.skip() def endB(self): props = WindowProperties() props.setCursorHidden(False) base.win.requestProperties(props) self.player.endTask() self.menu.mainFrame.show() self.menu.infoDialog.show() self.player.erosionFrame.hide() self.player.currentItemFrame.hide() self.menu.tutorialDialog.hide() self.menu.infoDialog['text'] = "Kura被你吓死了!" self.skip() def end1(self): props = WindowProperties() props.setCursorHidden(False) base.win.requestProperties(props) self.player.endTask() self.menu.mainFrame.show() self.menu.infoDialog.show() self.player.erosionFrame.hide() self.player.currentItemFrame.hide() self.menu.infoDialog['text'] = "Erosion max!" self.skip()
class CutsceneGUI(StateData): def __init__(self, barDur = BAR_MOVE_DURATION, fov = None): StateData.__init__(self, doneEvent = 'cutsceneBarsDown') self.topBar = None self.btmBar = None self.ival = None self.barDur = barDur self.origFov = CIGlobals.DefaultCameraFov if not fov: self.fov = CIGlobals.DefaultCameraFov else: self.fov = fov self.load() def unload(self): if self.ival: self.ival.finish() self.ival = None if self.topBar: self.topBar.destroy() self.topBar = None if self.btmBar: self.btmBar.destroy() self.btmBar = None StateData.unload(self) def __lerpFov(self, amt): base.camLens.setMinFov(amt / (4. / 3.)) def load(self): StateData.load(self) self.topBar = DirectFrame(parent = render2d, frameSize = (2,-2,0.3,-0.3), frameColor=(0, 0, 0, 1), pos=(0,1,1.4)) self.btmBar = DirectFrame(parent = render2d, frameSize = (2,-2,0.3,-0.3), frameColor=(0,0,0,1), pos=(0,-1,-1.4)) self.ival = ParallelEndTogether( LerpPosInterval(self.topBar, duration=self.barDur, pos=(0,1,1.0), startPos=(0,1,1.4), blendType='easeOut' ), LerpPosInterval(self.btmBar, duration=self.barDur, pos=(0,-1,-1.0), startPos=(0,-1,-1.4), blendType='easeOut' ), LerpFunc( self.__lerpFov, duration = self.barDur, blendType = 'easeOut', fromData = self.origFov, toData = self.fov ) ) self.hide() def takeCameraControlTo(self, pos, hpr): base.localAvatar.detachCamera() base.localAvatar.stopSmartCamera() base.camera.reparentTo(render) base.camera.setPosHpr(pos[0], pos[1], pos[2], hpr[0], hpr[1], hpr[2]) def returnCameraControl(self): base.localAvatar.attachCamera() base.localAvatar.startSmartCamera() def hideOtherGUIElements(self): if base.localAvatarReachable(): base.aspect2d.hide() base.localAvatar.disableGagKeys() base.localAvatar.chatInput.fsm.request('idle') base.localAvatar.chatInput.disableKeyboardShortcuts() base.localAvatar.questManager.disableShowQuestsHotkey() base.localAvatar.allowA2dToggle = False def showOtherGUIElements(self): if base.localAvatarReachable(): base.aspect2d.show() base.localAvatar.enableGagKeys() base.localAvatar.chatInput.enableKeyboardShortcuts() base.localAvatar.questManager.enableShowQuestsHotkey() base.localAvatar.allowA2dToggle = True def hide(self): if self.topBar: self.topBar.hide() if self.btmBar: self.btmBar.hide() def show(self): if self.topBar: self.topBar.show() if self.btmBar: self.btmBar.show() def enter(self, hideStuff = True): if hideStuff: self.hideOtherGUIElements() self.show() self.ival.start() return StateData.enter(self) def exit(self, showStuff = True): if self.ival: self.ival.pause() self.ival = None self.__lerpFov(self.origFov) self.hide() if showStuff: self.showOtherGUIElements() return StateData.exit(self)
class GUI: def __init__(self, rootParent=None): self.frmMain = DirectFrame( frameColor=(1, 1, 1, 1), frameSize=(-1.777778, 1.77777778, -1.1638, 1.1638), hpr=LVecBase3f(0, 0, 0), image='assets/menu/Background.png', pos=LPoint3f(0, 0, 0), image_scale=LVecBase3f(1.77778, 1, 1.1638), image_pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmMain.setTransparency(0) self.frmRoomList = DirectScrolledFrame( canvasSize=(-1.0, 1.0, -2.0, 0.0), frameColor=(1, 1, 1, 1), frameSize=(-1.0, 1.08, -1.4, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.7), scrollBarWidth=0.08, state='normal', horizontalScroll_borderWidth=(0.01, 0.01), horizontalScroll_frameSize=(-0.05, 0.05, -0.04, 0.04), horizontalScroll_hpr=LVecBase3f(0, 0, 0), horizontalScroll_pos=LPoint3f(0, 0, 0), horizontalScroll_decButton_borderWidth=(0.01, 0.01), horizontalScroll_decButton_frameSize=(-0.05, 0.05, -0.04, 0.04), horizontalScroll_decButton_hpr=LVecBase3f(0, 0, 0), horizontalScroll_decButton_pos=LPoint3f(-0.96, 0, -1.36), horizontalScroll_incButton_borderWidth=(0.01, 0.01), horizontalScroll_incButton_frameSize=(-0.05, 0.05, -0.04, 0.04), horizontalScroll_incButton_hpr=LVecBase3f(0, 0, 0), horizontalScroll_incButton_pos=LPoint3f(0.96, 0, -1.36), horizontalScroll_thumb_borderWidth=(0.01, 0.01), horizontalScroll_thumb_hpr=LVecBase3f(0, 0, 0), horizontalScroll_thumb_pos=LPoint3f(0, 0, -1.36), verticalScroll_borderWidth=(0.01, 0.01), verticalScroll_frameSize=(-0.04, 0.04, -0.05, 0.05), verticalScroll_hpr=LVecBase3f(0, 0, 0), verticalScroll_pos=LPoint3f(0, 0, 0), verticalScroll_decButton_borderWidth=(0.01, 0.01), verticalScroll_decButton_frameSize=(-0.04, 0.04, -0.05, 0.05), verticalScroll_decButton_hpr=LVecBase3f(0, 0, 0), verticalScroll_decButton_pos=LPoint3f(1.04, 0, -0.04), verticalScroll_incButton_borderWidth=(0.01, 0.01), verticalScroll_incButton_frameSize=(-0.04, 0.04, -0.05, 0.05), verticalScroll_incButton_hpr=LVecBase3f(0, 0, 0), verticalScroll_incButton_pos=LPoint3f(1.04, 0, -1.28), verticalScroll_thumb_borderWidth=(0.01, 0.01), verticalScroll_thumb_hpr=LVecBase3f(0, 0, 0), verticalScroll_thumb_pos=LPoint3f(1.04, 0, -0.4628), parent=self.frmMain, ) self.frmRoomList.setTransparency(0) self.btnBack = DirectButton( hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.96, 0, -0.825), scale=LVecBase3f(0.1, 0.1, 0.1), text='Back', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, command=base.messenger.send, extraArgs=["roomList_back"], ) self.btnBack.setTransparency(0) self.lblRoomName = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-1, 0, 0.725), scale=LVecBase3f(0.07, 0.1, 0.07), text='Room Name', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblRoomName.setTransparency(0) self.lblPlayerCount = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.15, 0, 0.725), scale=LVecBase3f(0.07, 0.1, 0.07), text='Players', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblPlayerCount.setTransparency(0) self.btnCreateRoom = DirectButton( hpr=LVecBase3f(0, 0, 0), pad=(0.2, 0.2), pos=LPoint3f(-0.955, 0, -0.815), scale=LVecBase3f(0.1, 0.1, 0.1), text='+', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.btnCreateRoom.setTransparency(0) self.btnReloadRoomList = DirectButton( hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.025, 0, -0.825), scale=LVecBase3f(0.1, 0.1, 0.1), text='Reload Rooms', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, command=base.messenger.send, extraArgs=["roomList_reload"], ) self.btnReloadRoomList.setTransparency(0) self.lblGameType = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.125, 0, 0.725), scale=LVecBase3f(0.07, 0.1, 0.07), text='Type', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblGameType.setTransparency(0) self.lblDifficulty = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.54, 0, 0.72), scale=LVecBase3f(0.07, 0.1, 0.07), text='Difficulty', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmMain, ) self.lblDifficulty.setTransparency(0) def show(self): self.frmMain.show() def hide(self): self.frmMain.hide() def destroy(self): self.frmMain.destroy()
class 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 ChessboardDemo(): def __init__(self, mission): # Initialize the ShowBase class from which we inherit, which will # create a window and set up everything we need for rendering into it. self.mission = mission self.player = mission.player self.menu = mission.menu self.state = 0 self.frame = DirectFrame(frameColor=(0.1, 0.1, 0.1, 0.5), frameSize=(-2, 2, -2, 2), pos=(0, 0, 0)) self.frame.hide() self.dr2 = base.win.makeDisplayRegion() #self.dr2.setActive(False) # self.frame.attachNewNode(self.dr2.node()) #self.dr2.setActive(False) self.dr2.setClearColorActive(True) self.dr2.setClearColor(VBase4(0.1, 0.1, 0.1, 1)) self.dr2.setClearDepthActive(True) # base.win.setClearColor(VBase4(0.1,0.1,0.1,1)) # base.win.setClearDepthActive() # base.win.setClearDepth(1) self.render2 = NodePath("render2") self.camNode = Camera("cam2") self.cam2 = self.render2.attachNewNode(self.camNode) self.dr2.setCamera(self.cam2) self.cam2.setPosHpr(0, -18, 10, 0, -30, 0) # Escape quits base.disableMouse() # Disble mouse camera control # camera.setPosHpr(0, -12, 8, 0, -35, 0) # Set the camera self.setupLights() # Setup default lighting # Since we are using collision detection to do picking, we set it up like # any other collision detection system with a traverser and a handler self.picker = CollisionTraverser() # Make a traverser self.pq = CollisionHandlerQueue() # Make a handler # Make a collision node for our picker ray self.pickerNode = CollisionNode('mouseRay') # Attach that node to the camera since the ray will need to be positioned # relative to it # self.pickerNP = camera.attachNewNode(self.pickerNode) self.pickerNP = self.cam2.attachNewNode(self.pickerNode) # Everything to be picked will use bit 1. This way if we were doing other # collision we could separate it self.pickerNode.setFromCollideMask(BitMask32.bit(1)) self.pickerRay = CollisionRay() # Make our ray # Add it to the collision node self.pickerNode.addSolid(self.pickerRay) # Register the ray as something that can cause collisions self.picker.addCollider(self.pickerNP, self.pq) # self.picker.showCollisions(render) # Now we create the chess board and its pieces # We will attach all of the squares to their own root. This way we can do the # collision pass just on the squares and save the time of checking the rest # of the scene self.squareRoot = self.render2.attachNewNode("squareRoot") # For each square self.squares = [None for i in range(64)] self.pieces = [None for i in range(64)] for i in range(64): # Load, parent, color, and position the model (a single square # polygon) # self.squares[i] = loader.loadModel("../res/models/Scene3/Scene3Cat/hall/square") self.squares[i] = loader.loadModel( "res/models/Scene3/Scene3Cat/hall/square") self.squares[i].reparentTo(self.squareRoot) self.squares[i].setPos(SquarePos(i)) self.squares[i].setColor(SquareColor(i)) # Set the model itself to be collideable with the ray. If this model was # any more complex than a single polygon, you should set up a collision # sphere around it instead. But for single polygons this works # fine. self.squares[i].find("**/polygon").node().setIntoCollideMask( BitMask32.bit(1)) # Set a tag on the square's node so we can look up what square this is # later during the collision pass self.squares[i].find("**/polygon").node().setTag('square', str(i)) # We will use this variable as a pointer to whatever piece is currently # in this square # The order of pieces on a chessboard from white's perspective. This list # contains the constructor functions for the piece classes defined # below pieceOrder = (Rook, Knight, Bishop, Queen, King, Bishop, Knight, Rook) self.pieces[40] = Queen(self, 40, WHITE) self.pieces[51] = Bishop(self, 51, PIECEBLACK) self.pieces[33] = Knight(self, 33, PIECEBLACK) self.pieces[9] = Rook(self, 9, PIECEBLACK) self.pieces[20] = Rook(self, 20, PIECEBLACK) # This will represent the index of the currently highlited square self.hiSq = False # This wil represent the index of the square where currently dragged piece # was grabbed from self.dragging = False # self.eight = OnscreenText(text="8", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), # pos=(-0.9, 0.35), scale=.07) # self.seven = OnscreenText(text="7", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), # pos=(-0.93, 0.27), scale=.07) # self.six = OnscreenText(text="6", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), # pos=(-0.97, 0.18), scale=.07) # self.five = OnscreenText(text="5", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), # pos=(-1.02, 0.1), scale=.07) # self.four = OnscreenText(text="4", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), # pos=(-1.06, 0.02), scale=.07) # self.three = OnscreenText(text="3", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), # pos=(-1.12, -0.1), scale=.07) # self.two = OnscreenText(text="2", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), # pos=(-1.16, -0.18), scale=.07) # self.one = OnscreenText(text="1", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), # pos=(-1.23, -0.32), scale=.07) x = -0.91 y = 0.33 dx = 0.04 dy = 0.09 self.eight = OnscreenText(text="8", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), pos=(x, y), scale=.07) x -= dx y -= dy self.seven = OnscreenText(text="7", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), pos=(x, y), scale=.07) x -= dx y -= dy self.six = OnscreenText(text="6", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), pos=(x, y), scale=.07) x -= dx y -= dy self.five = OnscreenText(text="5", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), pos=(x, y), scale=.07) x -= dx y -= dy self.four = OnscreenText(text="4", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), pos=(x, y), scale=.07) x -= dx y -= dy self.three = OnscreenText(text="3", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), pos=(x, y), scale=.07) x -= dx y -= dy self.two = OnscreenText(text="2", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), pos=(x, y), scale=.07) x -= dx y -= dy self.one = OnscreenText(text="1", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), pos=(x, y), scale=.07) self.A = OnscreenText(text="A", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), pos=(-1.05, -0.5), scale=.07) self.B = OnscreenText(text="B", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), pos=(-0.75, -0.5), scale=.07) self.C = OnscreenText(text="C", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), pos=(-0.45, -0.5), scale=.07) self.D = OnscreenText(text="D", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), pos=(-0.15, -0.5), scale=.07) self.E = OnscreenText(text="E", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), pos=(0.15, -0.5), scale=.07) self.F = OnscreenText(text="F", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), pos=(0.45, -0.5), scale=.07) self.G = OnscreenText(text="G", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), pos=(0.75, -0.5), scale=.07) self.H = OnscreenText(text="H", style=1, fg=(1, 1, 1, 1), shadow=(0, 0, 0, 1), pos=(1.05, -0.5), scale=.07) self.A.reparentTo(self.frame) self.B.reparentTo(self.frame) self.C.reparentTo(self.frame) self.D.reparentTo(self.frame) self.E.reparentTo(self.frame) self.F.reparentTo(self.frame) self.G.reparentTo(self.frame) self.H.reparentTo(self.frame) self.one.reparentTo(self.frame) self.two.reparentTo(self.frame) self.three.reparentTo(self.frame) self.four.reparentTo(self.frame) self.five.reparentTo(self.frame) self.six.reparentTo(self.frame) self.seven.reparentTo(self.frame) self.eight.reparentTo(self.frame) self.hide() # Start the task that handles the picking self.mouseTask = taskMgr.add(self.mouseTask, 'mouseTask') base.accept("mouse1", self.grabPiece) # left-click grabs a piece base.accept("mouse1-up", self.releasePiece) # releasing places it base.accept("escape", self.hide) def hide(self): self.frame.hide() self.dr2.setActive(False) self.A.hide() self.B.hide() self.C.hide() self.D.hide() self.E.hide() self.F.hide() self.G.hide() self.H.hide() self.one.hide() self.two.hide() self.three.hide() self.four.hide() self.five.hide() self.six.hide() self.seven.hide() self.eight.hide() base.accept("escape", self.menu.game.pauseGame) base.accept("mouse1", self.player.__setattr__, ["LeftButton", 1]) base.accept("mouse1-up", self.player.__setattr__, ["LeftButton", 0]) self.mission.resume() self.player.initTask() def show(self): self.frame.show() self.dr2.setActive(True) self.A.show() self.B.show() self.C.show() self.D.show() self.E.show() self.F.show() self.G.show() self.H.show() self.one.show() self.two.show() self.three.show() self.four.show() self.five.show() self.six.show() self.seven.show() self.eight.show() base.accept("escape", self.hide) # This function swaps the positions of two pieces def swapPieces(self, fr, to): temp = self.pieces[fr] self.pieces[fr] = self.pieces[to] self.pieces[to] = temp if self.pieces[fr]: self.pieces[fr].square = fr self.pieces[fr].obj.setPos(SquarePos(fr)) if self.pieces[to]: self.pieces[to].square = to self.pieces[to].obj.setPos(SquarePos(to)) def mouseTask(self, task): # This task deals with the highlighting and dragging based on the mouse # First, clear the current highlight if self.hiSq is not False: self.squares[self.hiSq].setColor(SquareColor(self.hiSq)) self.hiSq = False # Check to see if we can access the mouse. We need it to do anything # else if base.mouseWatcherNode.hasMouse(): # get the mouse position mpos = base.mouseWatcherNode.getMouse() # Set the position of the ray based on the mouse position self.pickerRay.setFromLens(self.camNode, mpos.getX(), mpos.getY()) # If we are dragging something, set the position of the object # to be at the appropriate point over the plane of the board if self.dragging is not False: # Gets the point described by pickerRay.getOrigin(), which is relative to # camera, relative instead to render # nearPoint = render.getRelativePoint( # camera, self.pickerRay.getOrigin()) nearPoint = render.getRelativePoint(self.cam2, self.pickerRay.getOrigin()) # Same thing with the direction of the ray # nearVec = render.getRelativeVector( # camera, self.pickerRay.getDirection()) nearVec = render.getRelativeVector( self.cam2, self.pickerRay.getDirection()) self.pieces[self.dragging].obj.setPos( PointAtZ(.5, nearPoint, nearVec)) # Do the actual collision pass (Do it only on the squares for # efficiency purposes) self.picker.traverse(self.squareRoot) if self.pq.getNumEntries() > 0: # if we have hit something, sort the hits so that the closest # is first, and highlight that node self.pq.sortEntries() i = int(self.pq.getEntry(0).getIntoNode().getTag('square')) # Set the highlight on the picked square self.squares[i].setColor(HIGHLIGHT) self.hiSq = i return Task.cont def grabPiece(self): # If a square is highlighted and it has a piece, set it to dragging # mode if self.hiSq is not False and self.pieces[self.hiSq]: self.dragging = self.hiSq self.hiSq = False def releasePiece(self): # Letting go of a piece. If we are not on a square, return it to its original # position. Otherwise, swap it with the piece in the new square # Make sure we really are dragging something if self.dragging is not False: # We have let go of the piece, but we are not on a square if self.hiSq is False: self.pieces[self.dragging].obj.setPos(SquarePos(self.dragging)) else: if self.state == 0: if self.dragging == 51 and self.hiSq == 58: self.swapPieces(self.dragging, self.hiSq) self.swapPieces(40, 32) self.state = self.state + 1 self.mission.manager.GoodsIta[ 'studydoor_box'].state = 'unlockedOpen' self.mission.manager.GoodsIta[ 'studydoor_box'].OpenDoor() self.menu.infoDialog.show() self.menu.infoLabel['text'] = '似乎传来咔嚓一声开锁的声音' self.mission.skip() self.hide() else: self.pieces[self.dragging].obj.setPos( SquarePos(self.dragging)) if self.dragging != self.hiSq: self.player.EROSION += 10 self.player.erosionUpdateTemp() elif self.state == 1: if self.dragging == 33 and self.hiSq == 18: self.swapPieces(self.dragging, self.hiSq) self.state = self.state + 1 self.mission.manager.GoodsIta[ 'chessdoor_box'].state = 'unlockedOpen' self.mission.manager.GoodsIta[ 'chessdoor_box'].OpenDoor() self.mission.menu.infoDialog.show() self.mission.menu.infoLabel['text'] = '棋盘上弹出一张纸条「pass。这又不是\n' \ '真的国际象棋,我选择PASS你又能怎样?\n' \ '你是无法将死我的。」' self.mission.skip() self.hide() else: self.pieces[self.dragging].obj.setPos( SquarePos(self.dragging)) if self.dragging != self.hiSq: self.player.EROSION += 10 self.player.erosionUpdateTemp() elif self.state == 2: if self.dragging == 20 and self.hiSq == 36: self.swapPieces(self.dragging, self.hiSq) self.state = self.state + 1 self.mission.manager.GoodsIta[ 'exit_box'].state = 'unlockedOpen' self.mission.menu.infoDialog.show() self.mission.menu.infoLabel[ 'text'] = '可恶 失策了……这里居然…还有一个城堡么…' self.mission.skip() if self.mission.hiddenState: self.mission.end('hiddenEnd') self.hide() else: self.pieces[self.dragging].obj.setPos( SquarePos(self.dragging)) if self.dragging != self.hiSq: self.player.EROSION += 10 self.player.erosionUpdateTemp() elif self.state == 3: self.pieces[self.dragging].obj.setPos( SquarePos(self.dragging)) # We are no longer dragging anything self.dragging = False def setupLights(self): # This function sets up some default lighting ambientLight = AmbientLight("ambientLight") ambientLight.setColor((.8, .8, .8, 1)) directionalLight = DirectionalLight("directionalLight") directionalLight.setDirection(LVector3(0, 45, -45)) directionalLight.setColor((0.2, 0.2, 0.2, 1)) render.setLight(render.attachNewNode(directionalLight)) render.setLight(render.attachNewNode(ambientLight)) def initPos(self, state): if state == 0: self.pieces[40] = Queen(self, 40, WHITE) self.pieces[51] = Bishop(self, 51, PIECEBLACK) self.pieces[33] = Knight(self, 33, PIECEBLACK) self.pieces[9] = Rook(self, 9, PIECEBLACK) self.pieces[20] = Rook(self, 20, PIECEBLACK) elif state == 1: self.pieces[32] = Queen(self, 32, WHITE) self.pieces[58] = Bishop(self, 58, PIECEBLACK) self.pieces[33] = Knight(self, 33, PIECEBLACK) self.pieces[9] = Rook(self, 9, PIECEBLACK) self.pieces[20] = Rook(self, 20, PIECEBLACK) elif state == 2: self.pieces[32] = Queen(self, 32, WHITE) self.pieces[58] = Bishop(self, 58, PIECEBLACK) self.pieces[18] = Knight(self, 18, PIECEBLACK) self.pieces[9] = Rook(self, 9, PIECEBLACK) self.pieces[20] = Rook(self, 20, PIECEBLACK) elif state == 3: self.pieces[32] = Queen(self, 32, WHITE) self.pieces[58] = Bishop(self, 58, PIECEBLACK) self.pieces[18] = Knight(self, 18, PIECEBLACK) self.pieces[9] = Rook(self, 9, PIECEBLACK) self.pieces[36] = Rook(self, 36, PIECEBLACK)
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()
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.frmChat = DirectFrame( frameColor=(0.25, 0.25, 0.25, 1.0), frameSize=(-0.4, 0.4, -1.25, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmChat.setTransparency(0) self.frmMessages = DirectScrolledFrame( borderWidth=(0.005, 0.005), canvasSize=(-0.38, 0.34, -1.2, 0.0), frameColor=(1, 1, 1, 1), frameSize=(-0.38, 0.38, -1.0, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.1), relief=3, scrollBarWidth=0.03, state='normal', horizontalScroll_borderWidth=(0.01, 0.01), horizontalScroll_frameSize=(-0.05, 0.05, -0.015, 0.015), horizontalScroll_hpr=LVecBase3f(0, 0, 0), horizontalScroll_pos=LPoint3f(0, 0, 0), horizontalScroll_decButton_borderWidth=(0.01, 0.01), horizontalScroll_decButton_frameSize=(-0.05, 0.05, -0.04, 0.04), horizontalScroll_decButton_hpr=LVecBase3f(0, 0, 0), horizontalScroll_decButton_pos=LPoint3f(0, 0, 0), horizontalScroll_incButton_borderWidth=(0.01, 0.01), horizontalScroll_incButton_frameSize=(-0.05, 0.05, -0.04, 0.04), horizontalScroll_incButton_hpr=LVecBase3f(0, 0, 0), horizontalScroll_incButton_pos=LPoint3f(0, 0, 0), horizontalScroll_thumb_borderWidth=(0.01, 0.01), horizontalScroll_thumb_hpr=LVecBase3f(0, 0, 0), horizontalScroll_thumb_pos=LPoint3f(0, 0, 0), verticalScroll_borderWidth=(0.01, 0.01), verticalScroll_frameSize=(-0.015, 0.015, -0.05, 0.05), verticalScroll_hpr=LVecBase3f(0, 0, 0), verticalScroll_pos=LPoint3f(0, 0, 0), verticalScroll_decButton_borderWidth=(0.01, 0.01), verticalScroll_decButton_frameSize=(-0.04, 0.04, -0.05, 0.05), verticalScroll_decButton_hpr=LVecBase3f(0, 0, 0), verticalScroll_decButton_pos=LPoint3f(0.36, 0, -0.02), verticalScroll_incButton_borderWidth=(0.01, 0.01), verticalScroll_incButton_frameSize=(-0.04, 0.04, -0.05, 0.05), verticalScroll_incButton_hpr=LVecBase3f(0, 0, 0), verticalScroll_incButton_pos=LPoint3f(0.36, 0, -0.98), verticalScroll_thumb_borderWidth=(0.01, 0.01), verticalScroll_thumb_hpr=LVecBase3f(0, 0, 0), verticalScroll_thumb_pos=LPoint3f(0.36, 0, -0.418625), parent=self.frmChat, ) self.frmMessages.setTransparency(0) self.txtMessage = DirectEntry( borderWidth=(0.005, 0.005), frameColor=(1.0, 1.0, 1.0, 1.0), hpr=LVecBase3f(0, 0, 0), overflow=1, pos=LPoint3f(-0.375, 0, -1.195), relief=3, scale=LVecBase3f(0.045, 0.045, 0.045), width=14.0, text_align=TextNode.A_left, text_scale=(1.0, 1.0), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmChat, ) self.txtMessage.setTransparency(0) self.btnSend = DirectButton( frameColor=(0.0, 0.0, 0.0, 0.0), frameSize=(-0.4, 0.4, -0.4, 0.4), hpr=LVecBase3f(0, 0, 0), image='assets/chat/ChatSend.png', pos=LPoint3f(0.33, 0, -1.18), relief=1, scale=LVecBase3f(0.1, 0.1, 0.1), text='', image_scale=LVecBase3f(0.4, 1, 0.4), image_pos=LPoint3f(0, 0, 0), text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmChat, command=base.messenger.send, extraArgs=["sendMessage"], ) self.btnSend.setTransparency(1) self.btnToggleChat = DirectButton( frameColor=(0.15, 0.15, 0.15, 1.0), frameSize=(-0.4, 0.4, -0.02, 0.05), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.05), relief=1, scale=LVecBase3f(1, 1, 1), text='Toggle Chat', text_align=TextNode.A_center, text_scale=(0.05, 0.05), text_pos=(0, 0), text_fg=LVecBase4f(0.8, 0.8, 0.8, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=rootParent, command=base.messenger.send, extraArgs=["toggleChat"], ) self.btnToggleChat.setTransparency(0) def show(self): self.frmChat.show() self.btnToggleChat.show() def hide(self): self.frmChat.hide() self.btnToggleChat.hide() def destroy(self): self.frmChat.destroy() self.btnToggleChat.destroy()
class GUI: def __init__(self, rootParent=None): self.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 MessageFrm(GameObject): def __init__(self, menu_args): GameObject.__init__(self) self.eng.log('created message form') self.chats = [] self.curr_chat = None self.curr_match_room = None self.msg_frm = DirectFrame(frameSize=(-.02, .8, 0, .45), frameColor=(.2, .2, .2, .5), pos=(-.82, 1, .02), parent=base.a2dBottomRight) self.presences_sent = [] self.menu_args = menu_args t_a = menu_args.text_args t_a['scale'] = .05 t_a['fg'] = menu_args.text_normal self.dst_txt = OnscreenText(text='', pos=(0, .4), parent=self.msg_frm, align=TextNode.A_left, **t_a) self.arrow_btn = ImgBtn(parent=self.msg_frm, scale=.024, pos=(.7, 1, .42), frameColor=(1, 1, 1, 1), frameTexture='assets/images/gui/arrow.txo', command=self.on_arrow, **menu_args.imgbtn_args) self.arrow_btn.disable() self.close_btn = ImgBtn(parent=self.msg_frm, scale=.024, pos=(.76, 1, .42), frameColor=(1, 1, 1, 1), frameTexture='assets/images/gui/close.txo', command=self.on_close, **menu_args.imgbtn_args) self.close_btn.disable() self.ent = Entry(scale=.04, pos=(0, 1, .03), entryFont=menu_args.font, width=19.5, frameColor=menu_args.btn_color, parent=self.msg_frm, initialText=_('write here your message'), command=self.on_typed_msg, focusInCommand=self.on_focus, focusInExtraArgs=['in'], focusOutCommand=self.on_focus, focusOutExtraArgs=['out'], text_fg=menu_args.text_active) self.ent['state'] = DISABLED self.txt_frm = DirectScrolledFrame( frameSize=(-.02, .76, -.02, .28), canvasSize=(-.02, .72, -.02, .28), scrollBarWidth=.036, verticalScroll_relief=FLAT, verticalScroll_frameColor=(.2, .2, .2, .4), verticalScroll_thumb_relief=FLAT, verticalScroll_thumb_frameColor=(.8, .8, .8, .6), verticalScroll_incButton_relief=FLAT, verticalScroll_incButton_frameColor=(.8, .8, .8, .6), verticalScroll_decButton_relief=FLAT, verticalScroll_decButton_frameColor=(.8, .8, .8, .6), horizontalScroll_relief=FLAT, frameColor=(1, 1, 1, 0), pos=(.02, 1, .11), parent=self.msg_frm) t_a['scale'] = .046 self.msg_txt = OnscreenText(text='', pos=(0, .24), parent=self.txt_frm.getCanvas(), align=TextNode.A_left, wordwrap=14, **t_a) lab_args = menu_args.label_args lab_args['scale'] = .046 lab_args['text_fg'] = menu_args.text_normal self.lab_frm = Btn(frameSize=(-.02, .64, -.01, .05), frameColor=(1, 1, 1, 0), pos=(0, 1, .4), parent=self.msg_frm) self.lab_frm.bind(ENTER, self.on_enter) self.lab_frm.bind(EXIT, self.on_exit) self.tooltip = DirectLabel(text='', pos=(.78, 1, -.06), parent=self.lab_frm, text_wordwrap=16, text_bg=(.2, .2, .2, .8), text_align=TextNode.A_right, **lab_args) self.tooltip.set_bin('gui-popup', 10) self.tooltip.hide() def on_enter(self, pos): self.tooltip.show() def on_exit(self, pos): self.tooltip.hide() def show(self): self.msg_frm.show() def hide(self): self.msg_frm.hide() def add_msg_txt(self, msg): self.msg_txt['text'] += ('\n' if self.msg_txt['text'] else '') + msg txt_height = self.msg_txt.textNode.getUpperLeft3d()[2] - \ self.msg_txt.textNode.getLowerRight3d()[2] self.txt_frm['canvasSize'] = (-.02, .72, .28 - txt_height, .28) def set_title(self, title): ttitle = self.trunc(title, 32) fix_name = lambda name: name if '@' not in name else name.split('@')[ 0] + '\1smaller\1@' + name.split('@')[1] + '\2' if title: if ',' in ttitle: is_muc = True ttitle = ttitle names = ttitle.split(',') names = [name.strip() for name in names] names = [fix_name(name) for name in names] ttitle = ', '.join(names) else: ttitle = fix_name(ttitle) self.dst_txt['text'] = ttitle self.tooltip['text'] = title @staticmethod def trunc(name, lgt): if len(name) > lgt: return name[:lgt] + '...' return name def set_chat(self, chat): self.curr_chat = chat self.set_title(chat.title) self.msg_txt['text'] = '\n'.join(chat.messages) txt_height = self.msg_txt.textNode.getUpperLeft3d()[2] - \ self.msg_txt.textNode.getLowerRight3d()[2] self.txt_frm['canvasSize'] = (-.02, .72, .28 - txt_height, .28) if not self.chats: self.close_btn.disable() self.ent['state'] = DISABLED elif len(self.chats) == 1: self.close_btn.enable() self.ent['state'] = NORMAL self.arrow_btn.disable() else: self.close_btn.enable() self.ent['state'] = NORMAL self.arrow_btn.enable() if all(_chat.read for _chat in self.chats): self.arrow_btn['frameTexture'] = 'assets/images/gui/arrow.txo' else: self.arrow_btn['frameTexture'] = 'assets/images/gui/message.txo' def on_arrow(self): chat_idx = self.chats.index(self.curr_chat) next_idx = (chat_idx + 1) % len(self.chats) chat = self.chats[next_idx] self.set_title(chat.title) chat.read = True self.set_chat(chat) @property def open_chats(self): return [chat for chat in self.chats if not chat.closed] def on_close(self): if self.curr_chat not in self.open_chats: return curr_idx = self.open_chats.index(self.curr_chat) #self.chats.remove(self.curr_chat) self.curr_chat.closed = True if self.open_chats: self.set_chat(self.open_chats[curr_idx - 1]) else: self.set_chat(Chat('')) self.notify('on_close_all_chats') def on_typed_msg(self, val): self.add_msg_txt('\1italic\1' + _('you') + '\2: ' + val) self.ent.set('') if self.curr_chat.dst not in self.presences_sent and \ not str(self.curr_chat.dst).startswith('yorg'): self.eng.xmpp.client.send_presence( pfrom=self.eng.xmpp.client.boundjid.full, pto=self.curr_chat.dst) self.presences_sent += [self.curr_chat.dst] if str(self.curr_chat.dst).startswith('yorg'): self.eng.xmpp.client.send_message( mfrom=self.eng.xmpp.client.boundjid.full, mto=self.curr_chat.dst, mtype='groupchat', mbody=val) else: self.eng.xmpp.client.send_message( mfrom=self.eng.xmpp.client.boundjid.full, mto=self.curr_chat.dst, msubject='chat', mbody=val) msg = '\1italic\1' + _('you') + '\2: ' + val self.curr_chat.messages += [msg] self.ent['focus'] = 1 def on_msg(self, msg): src = str(JID(msg['from']).bare) src = src.split('@')[0] + '\1smaller\1@' + src.split('@')[1] + '\2' str_msg = '\1italic\1' + src + '\2: ' + str(msg['body']) chat = self.__find_chat(msg['from']) if not chat: chat = Chat(msg['from']) self.chats += [chat] chat.messages += [str_msg] if self.dst_txt['text'] == '': self.set_chat(chat) elif JID(self.curr_chat.dst).bare == JID(msg['from']).bare: self.add_msg_txt(str_msg) else: chat.read = False chat.closed = False self.arrow_btn['frameTexture'] = 'assets/images/gui/message.txo' def on_groupchat_msg(self, msg): if str(JID(msg['from']).bare) == self.curr_match_room: if self.match_msg_frm: # we're still in the room page self.match_msg_frm.on_groupchat_msg(msg) src = str(JID(msg['mucnick'])) src = src.split('@')[0] + '\1smaller\1@' + src.split('@')[1] + '\2' self.eng.log('received groupchat message from %s in the chat %s' % (msg['mucnick'], JID(msg['from']).bare)) str_msg = '\1italic\1' + src + '\2: ' + str(msg['body']) chat = self.curr_chat if not chat: chat = MUC(str(JID(msg['from']).bare)) self.chats += [chat] chat.messages += [str_msg] if self.dst_txt['text'] == '': self.set_chat(chat) elif self.curr_chat.dst == str(JID(msg['from']).bare): self.add_msg_txt(str_msg) else: chat.read = False chat.closed = False self.arrow_btn['frameTexture'] = 'assets/images/gui/message.txo' def on_presence_available_room(self, msg): if str(JID(msg['from']).bare) == self.curr_match_room: self.match_msg_frm.on_presence_available_room(msg) room = str(JID(msg['muc']['room']).bare) nick = str(msg['muc']['nick']) self.eng.log('user %s has logged in the chat %s' % (nick, room)) chat = self.__find_chat(room) chat.users += [nick] if str(JID(msg['from']).bare) != self.curr_match_room: if self.curr_chat.dst == room: self.set_title(chat.title) def on_presence_unavailable_room(self, msg): if self.match_msg_frm and str(JID( msg['from']).bare) == self.curr_match_room: self.match_msg_frm.on_presence_unavailable_room(msg) return room = str(JID(msg['muc']['room']).bare) nick = str(msg['muc']['nick']) self.eng.log('user %s has left the chat %s' % (nick, room)) chat = self.__find_chat(room) if nick == self.eng.xmpp.client.boundjid.bare: self.on_close() else: chat.users.remove(nick) if self.curr_chat.dst == room: self.set_title(chat.title) def __find_chat(self, dst): chats = [chat for chat in self.chats if chat.dst == dst] if chats: return chats[0] def add_chat(self, usr): self.set_title(JID(usr).bare) chat = self.__find_chat(usr) if not chat: chat = Chat(usr) self.chats += [chat] self.set_chat(chat) self.ent['focus'] = 1 def add_groupchat(self, room, usr): self.set_title(usr) chat = self.__find_chat(room) if not chat: chat = MUC(room) self.chats += [chat] chat.users += [usr] self.set_chat(chat) self.add_match_chat(room, usr) def remove_groupchat(self): self.match_msg_frm.detach(self.on_match_msg_focus) self.match_msg_frm = self.match_msg_frm.destroy() def on_focus(self, val): if val and self.ent.get() == _('write here your message'): self.ent.set('') self.notify('on_msg_focus', val) def on_match_msg_focus(self, val): self.notify('on_msg_focus', val) def on_room_back(self): self.curr_match_room = None self.match_msg_frm.destroy() def add_match_chat(self, room, usr): if self.curr_match_room: return self.curr_match_room = room self.match_msg_frm = MatchMsgFrm(self.menu_args) self.match_msg_frm.attach(self.on_match_msg_focus) self.match_msg_frm.add_groupchat(room, usr)
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.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: def __init__(self, rootParent=None): self.frmCreateRoom = DirectFrame( borderWidth=(0.01, 0.01), frameColor=(1, 1, 1, 1), frameSize=(-0.65, 0.65, -0.55, 0.55), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), relief=5, parent=rootParent, ) self.frmCreateRoom.setTransparency(0) self.btnOk = DirectButton( hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.425, 0, -0.45), scale=LVecBase3f(0.1, 0.1, 0.1), text='OK', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmCreateRoom, command=base.messenger.send, extraArgs=["createRoom_Ok"], ) self.btnOk.setTransparency(0) self.btnCancel = DirectButton( hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.4, 0, -0.45), scale=LVecBase3f(0.1, 0.1, 0.1), text='Cancel', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmCreateRoom, command=base.messenger.send, extraArgs=["createRoom_Cancel"], ) self.btnCancel.setTransparency(0) self.pg1640 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.425), scale=LVecBase3f(0.1, 0.1, 0.1), text='Create New Room', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmCreateRoom, ) self.pg1640.setTransparency(0) self.pg2148 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.05, 0, 0.24), scale=LVecBase3f(0.1, 0.1, 0.1), text='Room Name', text_align=TextNode.A_right, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmCreateRoom, ) self.pg2148.setTransparency(0) self.pg2173 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.05, 0, 0.065), scale=LVecBase3f(0.1, 0.1, 0.1), text='# of Players', text_align=TextNode.A_right, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmCreateRoom, ) self.pg2173.setTransparency(0) self.pg2201 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.05, 0, -0.115), scale=LVecBase3f(0.1, 0.1, 0.1), text='Game Type', text_align=TextNode.A_right, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmCreateRoom, ) self.pg2201.setTransparency(0) self.entryRoomName = DirectEntry( hpr=LVecBase3f(0, 0, 0), overflow=1, pos=LPoint3f(0.08, 0, 0.25), scale=LVecBase3f(0.05, 0.1, 0.05), width=8.0, text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmCreateRoom, ) self.entryRoomName.setTransparency(0) self.optionNumPlayers = DirectOptionMenu( items=['item1'], frameSize=(0.07500000298023224, 3.012500149011612, -0.11250001192092896, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.175, 0, 0.06), scale=LVecBase3f(0.1, 0.1, 0.1), text='item1', cancelframe_frameSize=(-1, 1, -1, 1), cancelframe_hpr=LVecBase3f(0, 0, 0), cancelframe_pos=LPoint3f(0, 0, 0), cancelframe_relief=None, item_frameSize=(0.07500000298023224, 2.4125001430511475, -0.11250001192092896, 0.75), item_hpr=LVecBase3f(0, 0, 0), item_pos=LPoint3f(-0.075, 0, -0.75), item_text='item1', item0_text_align=TextNode.A_left, item0_text_scale=(1, 1), item0_text_pos=(0, 0), item0_text_fg=LVecBase4f(0, 0, 0, 1), item0_text_bg=LVecBase4f(0, 0, 0, 0), popupMarker_frameSize=(-0.5, 0.5, -0.2, 0.2), popupMarker_hpr=LVecBase3f(0, 0, 0), popupMarker_pos=LPoint3f(2.7125, 0, 0.31875), popupMarker_relief=2, popupMarker_scale=LVecBase3f(0.4, 0.4, 0.4), popupMenu_frameSize=(0, 2.3375001400709152, -0.862500011920929, 0), popupMenu_hpr=LVecBase3f(0, 0, 0), popupMenu_pos=LPoint3f(0, 0, 0), popupMenu_relief='raised', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmCreateRoom, ) self.optionNumPlayers.setTransparency(0) self.optionGameType = DirectOptionMenu( items=['item1'], frameSize=(0.07500000298023224, 3.012500149011612, -0.11250001192092896, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.175, 0, -0.125), scale=LVecBase3f(0.1, 0.1, 0.1), text='item1', cancelframe_frameSize=(-1, 1, -1, 1), cancelframe_hpr=LVecBase3f(0, 0, 0), cancelframe_pos=LPoint3f(0, 0, 0), cancelframe_relief=None, item_frameSize=(0.07500000298023224, 2.4125001430511475, -0.11250001192092896, 0.75), item_hpr=LVecBase3f(0, 0, 0), item_pos=LPoint3f(-0.075, 0, -0.75), item_text='item1', item0_text_align=TextNode.A_left, item0_text_scale=(1, 1), item0_text_pos=(0, 0), item0_text_fg=LVecBase4f(0, 0, 0, 1), item0_text_bg=LVecBase4f(0, 0, 0, 0), popupMarker_frameSize=(-0.5, 0.5, -0.2, 0.2), popupMarker_hpr=LVecBase3f(0, 0, 0), popupMarker_pos=LPoint3f(2.7125, 0, 0.31875), popupMarker_relief=2, popupMarker_scale=LVecBase3f(0.4, 0.4, 0.4), popupMenu_frameSize=(0, 2.3375001400709152, -0.862500011920929, 0), popupMenu_hpr=LVecBase3f(0, 0, 0), popupMenu_pos=LPoint3f(0, 0, 0), popupMenu_relief='raised', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmCreateRoom, ) self.optionGameType.setTransparency(0) self.pg629 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(-1.15, 1.25, -0.113, 0.725), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.055, 0, -0.3), scale=LVecBase3f(0.1, 0.1, 0.1), text='Difficulty', text_align=TextNode.A_right, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmCreateRoom, ) self.pg629.setTransparency(0) self.optionDifficulty = DirectOptionMenu( items=['item1'], frameSize=(0.1, 3.013, -0.113, 0.75), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.175, 0, -0.305), scale=LVecBase3f(0.1, 0.1, 0.1), text='item1', cancelframe_frameSize=(-1, 1, -1, 1), cancelframe_hpr=LVecBase3f(0, 0, 0), cancelframe_pos=LPoint3f(0, 0, 0), cancelframe_relief=None, item_frameSize=(0.07500000298023224, 2.4125001430511475, -0.11250001192092896, 0.75), item_hpr=LVecBase3f(0, 0, 0), item_pos=LPoint3f(-0.075, 0, -0.75), item_text='item1', item0_text_align=TextNode.A_left, item0_text_scale=(1, 1), item0_text_pos=(0, 0), item0_text_fg=LVecBase4f(0, 0, 0, 1), item0_text_bg=LVecBase4f(0, 0, 0, 0), popupMarker_frameSize=(-0.5, 0.5, -0.2, 0.2), popupMarker_hpr=LVecBase3f(0, 0, 0), popupMarker_pos=LPoint3f(2.7125, 0, 0.31875), popupMarker_relief=2, popupMarker_scale=LVecBase3f(0.4, 0.4, 0.4), popupMenu_frameSize=(0, 2.3375001400709152, -0.862500011920929, 0), popupMenu_hpr=LVecBase3f(0, 0, 0), popupMenu_pos=LPoint3f(0, 0, 0), popupMenu_relief='raised', text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), parent=self.frmCreateRoom, ) self.optionDifficulty.setTransparency(0) def show(self): self.frmCreateRoom.show() def hide(self): self.frmCreateRoom.hide() def destroy(self): self.frmCreateRoom.destroy()