def __init__(self, beanAmount): if not ScavengerHuntEffect.images: ScavengerHuntEffect.images = loader.loadModel('phase_4/models/props/tot_jar') self.npRoot = DirectFrame(parent=aspect2d, relief=None, scale=0.75, pos=(0, 0, 0.6)) if beanAmount > 0: self.npRoot.setColorScale(VBase4(1, 1, 1, 0)) self.jar = DirectFrame(parent=self.npRoot, relief=None, image=ScavengerHuntEffect.images.find('**/tot_jar')) self.jar.hide() self.eventImage = NodePath('EventImage') self.eventImage.reparentTo(self.npRoot) self.countLabel = DirectLabel(parent=self.jar, relief=None, text='+0', text_pos=(0.02, -0.2), text_scale=0.25, text_fg=(0.95, 0.0, 0, 1), text_font=ToontownGlobals.getSignFont()) def countUp(t, startVal, endVal): beanCountStr = startVal + t * (endVal - startVal) self.countLabel['text'] = '+' + `(int(beanCountStr))` def setCountColor(color): self.countLabel['text_fg'] = color self.track = Sequence(LerpColorScaleInterval(self.npRoot, 1, colorScale=VBase4(1, 1, 1, 1), startColorScale=VBase4(1, 1, 1, 0)), Wait(1), Func(self.jar.show), LerpColorScaleInterval(self.eventImage, 1, colorScale=VBase4(1, 1, 1, 0), startColorScale=VBase4(1, 1, 1, 1)), Parallel(LerpScaleInterval(self.npRoot, 1, scale=0.5, startScale=0.75), LerpPosInterval(self.npRoot, 1, pos=VBase3(-0.9, 0, -0.83))), LerpFunc(countUp, duration=2, extraArgs=[0, beanAmount]), Func(setCountColor, VBase4(0.95, 0.95, 0, 1)), Wait(3), Func(self.destroy)) else: self.npRoot.setColorScale(VBase4(1, 1, 1, 0)) self.attemptFailedMsg() self.track = Sequence(LerpColorScaleInterval(self.npRoot, 1, colorScale=VBase4(1, 1, 1, 1), startColorScale=VBase4(1, 1, 1, 0)), Wait(5), LerpColorScaleInterval(self.npRoot, 1, colorScale=VBase4(1, 1, 1, 0), startColorScale=VBase4(1, 1, 1, 1)), Func(self.destroy)) return
def _createComponents(self): self.debug("Creating GUI Components") self.categoryMenu = self.parent.attachNewNode("CategoryMenu") self.categoryMenu.setPos(-350, 0, -49) self.sidebar = self.parent.attachNewNode("EditorSidebar") self.sidebarBackground = DirectFrame( parent=self.sidebar, pos=(0, 0, 0), frameSize=(0, 92, 0, -base.win.getYSize()), frameColor=(0.05, 0.05, 0.05, 1.0), ) self.logo = BetterOnscreenImage( parent=self.sidebar, transparent=False, image="Editor/GUI/logo.png", x=0, y=0, w=92, h=48 ) self.categoriesParent = self.sidebar.attachNewNode("Categories") self.categoriesParent.setPos(0, 0, -48) self.categoryIcons = {} self.animations = {"moveMenuArrow": None, "moveCategoryMenu": None} for index, category in enumerate(EditorCategories.Categories): iconDefault = "Editor/GUI/Icon-" + category.name + ".png" iconHover = "Editor/GUI/Icon-" + category.name + "-Hover.png" # iconActive = "Editor/GUI/Icon-" + category.name + "-Hover.png" self.categoryIcons[category.name] = BetterOnscreenImage( parent=self.categoriesParent, transparent=False, image=iconDefault, x=0, y=94 * index, w=92, h=94 ) # i hate direct gui hoverCatch = DirectFrame( parent=self.categoriesParent, frameSize=(0, 92, 0, -94), pos=(0, 0, -94 * index), frameColor=(0, 0, 0, 0), state=DGG.NORMAL, ) # Add a hover effect hoverCatch.bind(DGG.ENTER, partial(self._showCategoryMenu, category.name)) hoverCatch.bind(DGG.EXIT, partial(self._hideCategoryMenu, category.name)) self.currentCategoryMarker = BetterOnscreenImage( parent=self.categoriesParent, image="Editor/GUI/Arrow-Right.png", x=92, y=0, w=11, h=21 ) self.currentCategoryMarker.hide() self.categoryMenuBg = DirectFrame( parent=self.categoryMenu, pos=(15, 0, 0), frameSize=(0, 300, 0, -400), frameColor=(0.2, 0.2, 0.2, 1.0) )
def __init__(self, phaseNames): self.phaseNames = phaseNames self.model = loader.loadModel('models/gui/pir_m_gui_gen_loadingBar') bar = self.model.findTexture('pir_t_gui_gen_loadingBar') self.model.find('**/loading_bar').hide() self.topFrame = DirectFrame(parent = base.a2dTopRight, pos = (-0.80000000000000004, 0, -0.10000000000000001), sortOrder = NO_FADE_SORT_INDEX + 1) self.text = DirectLabel(relief = None, parent = self.topFrame, guiId = 'DownloadWatcherText', pos = (0, 0, 0), text = ' ', text_fg = (1, 1, 1, 1), text_shadow = (0, 0, 0, 1), text_scale = 0.040000000000000001, textMayChange = 1, text_align = TextNode.ARight, text_pos = (0.17000000000000001, 0), sortOrder = 2) self.bar = DirectWaitBar(relief = None, parent = self.topFrame, guiId = 'DownloadWatcherBar', pos = (0, 0, 0), frameSize = (-0.40000000000000002, 0.38, -0.044999999999999998, 0.065000000000000002), borderWidth = (0.02, 0.02), range = 100, frameColor = (1, 1, 1, 1), barColor = (0, 0.29999999999999999, 0, 1), barTexture = bar, geom = self.model, geom_scale = 0.089999999999999997, geom_pos = (-0.014, 0, 0.01), text = '0%', text_scale = 0.040000000000000001, text_fg = (1, 1, 1, 1), text_align = TextNode.ALeft, text_pos = (0.19, 0), sortOrder = 1) self.bgFrame = DirectFrame(relief = DGG.FLAT, parent = self.topFrame, pos = (0, 0, 0), frameColor = (0.5, 0.27000000000000002, 0.35999999999999999, 0.20000000000000001), frameSize = (-0.44, 0.39000000000000001, -0.035999999999999997, 0.056000000000000001), borderWidth = (0.02, 0.02), scale = 0.90000000000000002, sortOrder = 0) self.accept('launcherPercentPhaseComplete', self.update)
def renderBuffers(self): self.buffersParent.node().removeAllChildren() posX = 0 posY = 0 for name in self.bufferOrder: target = self.buffers[name] for targetType in RenderTargetType.All: if not target.hasTarget(targetType): continue tex = target.getTexture(targetType) sizeStr = str(tex.getXSize()) + " x " + str(tex.getYSize()) if tex.getZSize() != 1: sizeStr += " x " + str(tex.getZSize()) sizeStr += " - " + str(self.calculateTexSize(tex)) + " MB" node = DirectFrame(parent=self.buffersParent, frameColor=( 1, 1, 1, 0.2), frameSize=(-self.innerPadding, self.texWidth + self.innerPadding, -self.texHeight - 30 - self.innerPadding, self.innerPadding + 15), state=DGG.NORMAL) node.setPos( 20 + posX * (self.texWidth + self.texPadding), 0, -self.paddingTop - 22 - posY * (self.texHeight + self.texPadding + 44)) node.bind(DGG.ENTER, partial(self.onMouseOver, node)) node.bind(DGG.EXIT, partial(self.onMouseOut, node)) node.bind(DGG.B1RELEASE, partial(self.showDetail, tex)) aspect = tex.getYSize() / float(tex.getXSize()) computedWidth = self.texWidth computedHeight = self.texWidth * aspect if computedHeight > self.texHeight: # have to scale tex width instead computedHeight = self.texHeight computedWidth = tex.getXSize() / float(tex.getYSize()) * \ self.texHeight img = BetterOnscreenImage( image=tex, parent=node, x=0, y=30, w=computedWidth, h=computedHeight, transparent=False, nearFilter=False, anyFilter=False) txtName = BetterOnscreenText( text=name, x=0, y=0, size=13, parent=node) txtSizeFormat = BetterOnscreenText( text=sizeStr, x=0, y=20, size=13, parent=node, color=Vec3(0.2)) txtTarget = BetterOnscreenText( text=str(targetType), align="right", x=self.texWidth, y=20, size=13, parent=node, color=Vec3(0.2)) posX += 1 if posX > self.pageSize: posY += 1 posX = 0
class TrickOrTreatTargetEffect(ScavengerHuntEffect): def __init__(self, beanAmount): ScavengerHuntEffect.__init__(self, beanAmount) if beanAmount > 0: self.pumpkin = DirectFrame(parent=self.eventImage, relief=None, image=ScavengerHuntEffect.images.find('**/tot_pumpkin_tall')) def attemptFailedMsg(self): pLabel = DirectLabel(parent=self.npRoot, relief=None, pos=(0.0, 0.0, -0.15), text=TTLocalizer.TrickOrTreatMsg, text_fg=(0.95, 0.5, 0.0, 1.0), text_scale=0.12, text_font=ToontownGlobals.getSignFont()) def destroy(self): if hasattr(self, 'pumpkin') and self.pumpkin: self.pumpkin.destroy() ScavengerHuntEffect.destroy(self)
def _createBugReport(self): """ Creates a bug report """ w, h = self.showbase.win.getXSize(), self.showbase.win.getYSize() overlayBg = DirectFrame(parent=self.showbase.pixel2dp, frameColor=(0.05, 0.05, 0.05, 0.8), frameSize=(0, w, -h, 0)) # state=DGG.NORMAL overlay = BetterOnscreenImage(image="Data/GUI/BugReport.png", parent=self.showbase.pixel2dp, w=757, h=398, x=(w-757)/2, y=(h-398)/2) for i in xrange(2): self.showbase.graphicsEngine.renderFrame() reporter = BugReporter(self) overlay.remove() overlayBg.remove()
class WinterCarolingEffect(ScavengerHuntEffect): def __init__(self, beanAmount): ScavengerHuntEffect.__init__(self, beanAmount) if beanAmount > 0: sm = loader.loadModel('phase_5.5/models/estate/tt_m_prp_ext_snowman_icon') self.snowman = DirectFrame(parent=self.eventImage, relief=None, image=sm, scale=20.0) def attemptFailedMsg(self): pLabel = DirectLabel(parent=self.npRoot, relief=None, pos=(0.0, 0.0, -0.15), text=TTLocalizer.WinterCarolingMsg, text_fg=(0.9, 0.9, 1.0, 1.0), text_scale=0.12, text_font=ToontownGlobals.getSignFont()) def destroy(self): if hasattr(self, 'snowman') and self.snowman: self.snowman.destroy() ScavengerHuntEffect.destroy(self)
def createBugReport(self): """ Creates a bug report """ w, h = self.showbase.win.getXSize(), self.showbase.win.getYSize() overlayBg = DirectFrame(parent=self.showbase.pixel2dp, frameColor=(0.05, 0.05, 0.05, 0.8), frameSize=(0, w, -h, 0)) # state=DGG.NORMAL overlay = BetterOnscreenImage(image="Data/GUI/BugReport.png", parent=self.showbase.pixel2dp, w=757, h=398, x=(w-757)/2, y=(h-398)/2) for i in xrange(2): self.showbase.graphicsEngine.renderFrame() reporter = BugReporter(self) overlay.remove() overlayBg.remove()
def _create_components(self): """ Creates the window components """ self._node = self._parent.attach_new_node("Window") self._node.set_pos(self._pos.x, 1, -self._pos.y) border_px = 1 border_frame_size = (-border_px, self._width + border_px, border_px, -self._height - border_px) self._border_frame = DirectFrame(pos=(0, 1, 0), frameSize=border_frame_size, frameColor=(24 / 255.0, 131 / 255.0, 215 / 255.0, 1), parent=self._node, state=DGG.NORMAL) self._background = DirectFrame(pos=(0, 1, 0), frameSize=(0, self._width, 0, -self._height), frameColor=(0.1, 0.1, 0.1, 1.0), parent=self._node) self._title_bar = DirectFrame( pos=(0, 1, 0), frameSize=(0, self._width, 0, -25), # frameColor=(0.058, 0.058, 0.058, 1), frameColor=(1, 1, 1, 1), parent=self._node, state=DGG.NORMAL) self._window_title = Text(parent=self._node, x=8, y=17, text=self._title, size=13, color=Vec3(0.15), may_change=True) self._btn_close = DirectButton( relief=DGG.FLAT, pressEffect=1, pos=(self._width - 22, 1, -12), frameColor=(1.0, 0.2, 0.2, 0.5), parent=self._node, scale=(45 / 2, 1, 24 / 2), image="/$$rp/rpcore/data/gui/close_window.png") # Init bindings self._btn_close.set_transparency(TransparencyAttrib.M_alpha) self._btn_close.bind(DGG.B1CLICK, self._request_close) self._btn_close.bind(DGG.WITHIN, self._on_close_btn_hover) self._btn_close.bind(DGG.WITHOUT, self._on_close_btn_out) self._title_bar.bind(DGG.B1PRESS, self._start_drag) self._title_bar.bind(DGG.B1RELEASE, self._stop_drag)
def build_page(self): menu_args = self.menu.gui.menu_args self.frm = DirectFrame(frameSize=(-1.5, 1.5, -.9, .9), frameColor=(.95, .95, .7, .85)) txt = _( 'Please, visit our site after exiting!\n\nIt helps us! Thank you!') self.txt = OnscreenText(text=txt, pos=(0, .64), scale=.08, wordwrap=32, fg=menu_args.text_fg, font=menu_args.font) menu_data = [('visit our site after exiting', _('visit our site after exiting'), lambda: self.on_end(True)), ("don't visit our site after exiting", _("don't visit our site after exiting"), lambda: self.on_end(False))] btn_args = self.menu.gui.btn_args btn_args['frameSize'] = (-12, 12, -.8, 1.2) btn_visit = DirectButton(text=menu_data[0][1], pos=(0, 1, 0), command=menu_data[0][2], text_scale=.9, **btn_args) btn_dont_visit = DirectButton(text=menu_data[1][1], pos=(0, 1, -.5), command=menu_data[1][2], text_scale=.7, **btn_args) widgets = [self.frm, self.txt, btn_visit, btn_dont_visit] map(self.add_widget, widgets) PageGui.build_page(self, False)
def askForRequeue(self): buttons = loader.loadModel('phase_3/models/gui/dialog_box_buttons_gui') okImageList = (buttons.find('**/ChtBx_OKBtn_UP'), buttons.find('**/ChtBx_OKBtn_DN'), buttons.find('**/ChtBx_OKBtn_Rllvr')) cancelImageList = (buttons.find('**/CloseBtn_UP'), buttons.find('**/CloseBtn_DN'), buttons.find('**/CloseBtn_Rllvr')) buttons.removeNode() self.cr.mainMenu.buttons[0]['state'] = DISABLED self.requeueFrame = DirectFrame( relief=None, image=loader.loadModel('phase_13/models/gui/fade'), image_scale=(5, 2, 2), image_color=(0, 0, 0, 0.3), image_pos=(0.5, 0, 0), state=NORMAL, sortOrder=20) self.requeueDialog = YesNoDialog( parent=self.requeueFrame, text='Would you like to requeue?', button_text_pos=(0, -0.1), button_relief=None, buttonImageList=[okImageList, cancelImageList], button_text_font=FONT, text_font=FONT, command=self.requeueResponse)
def _create_components(self): """ Creates the window components """ self._node = self._parent.attach_new_node("Window") self._node.set_pos(self._pos.x, 1, -self._pos.y) border_px = 1 self._border_frame = DirectFrame( pos=(0, 1, 0), frameSize=(-border_px, self._width + border_px, border_px, -self._height - border_px), frameColor=(24 / 255.0, 131 / 255.0, 215 / 255.0, 1), parent=self._node, state=DGG.NORMAL) self._background = DirectFrame( pos=(0, 1, 0), frameSize=(0, self._width, 0, -self._height), frameColor=(0.1, 0.1, 0.1, 1.0), parent=self._node) self._title_bar = DirectFrame( pos=(0, 1, 0), frameSize=(0, self._width, 0, -25), # frameColor=(0.058, 0.058, 0.058, 1), frameColor=(1, 1, 1, 1), parent=self._node, state=DGG.NORMAL) self._window_title = Text( parent=self._node, x=8, y=17, text=self._title, size=13, color=Vec3(0.15), may_change=True) self._btn_close = DirectButton( relief=DGG.FLAT, pressEffect=1, pos=(self._width - 22, 1, -12), frameColor=(1.0, 0.2, 0.2, 0.5), parent=self._node, scale=(45 / 2, 1, 24 / 2), image="/$$rp/data/gui/close_window.png") # Init bindings self._btn_close.set_transparency(TransparencyAttrib.M_alpha) self._btn_close.bind(DGG.B1CLICK, self._request_close) self._btn_close.bind(DGG.WITHIN, self._on_close_btn_hover) self._btn_close.bind(DGG.WITHOUT, self._on_close_btn_out) self._title_bar.bind(DGG.B1PRESS, self._start_drag) self._title_bar.bind(DGG.B1RELEASE, self._stop_drag)
def set_news(self): menu_gui = self.menu.gui menu_args = self.menu.gui.menu_args feeds = parse(self.props.feed_url) if not feeds['entries']: return def conv(datestr): months = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ] date_el = datestr.split()[1:-2] month = months.index(date_el[1]) + 1 day, year = date_el[0], date_el[2] return datetime(int(year), month, int(day)) publ = lambda entry: conv(entry['published']) rss = sorted(feeds['entries'], key=publ) conv_time = lambda ent: datetime.strftime(conv(ent), '%b %d') rss = [(conv_time(ent['published']), ent['title']) for ent in rss] rss.reverse() rss = rss[:5] def conv_str(_str): return _str if len(_str) <= 20 else _str[:20] + '...' rss = [(_rss[0], conv_str(_rss[1])) for _rss in rss] frm = DirectFrame(frameSize=(0, 1.0, 0, .75), frameColor=(.2, .2, .2, .5), pos=(.05, 1, .1), parent=base.a2dBottomLeft) texts = [ OnscreenText(_('Last news:'), pos=(.55, .75), scale=.055, wordwrap=32, parent=base.a2dBottomLeft, fg=menu_args.text_bg, font=menu_args.font) ] texts += [ OnscreenText(': '.join(rss[i]), pos=(.1, .65 - i * .1), scale=.055, wordwrap=32, parent=base.a2dBottomLeft, align=TextNode.A_left, fg=menu_args.text_bg, font=menu_args.font) for i in range(5) ] btn_args = menu_gui.btn_args.copy() btn_args['scale'] = .055 btn = DirectButton(text=_('show'), pos=(.55, 1, .15), command=eng.open_browser, extraArgs=[self.props.site_url], parent=base.a2dBottomLeft, **btn_args) map(self.add_widget, [frm] + texts + [btn])
def create_layout(self, group): scale3 = LVector3(self.text_scale[0], 1.0, self.text_scale[1]) buttonSize = self.font_size * 2 self.layout = DirectWidgetContainer( TabbedFrame(frameSize=(0, self.width, -self.height, 0), tab_frameSize=(0, 7, 0, 2), tab_scale=scale3, tab_text_align=TextNode.ALeft, tab_text_pos=(0.2, 0.6), tabUnselectedColor=settings.tab_background, tabSelectedColor=settings.panel_background, scroll_scrollBarWidth=self.font_size, scroll_verticalScroll_pageSize=self.font_size)) self.layout.frame.setPos(0, 0, -buttonSize) for section in group.parameters: sizer = Sizer("vertical") frame = DirectFrame(state=DGG.NORMAL, frameColor=settings.panel_background) self.add_parameters(frame, sizer, section.parameters) sizer.update((self.width, self.height)) size = sizer.min_size frame['frameSize'] = (0, size[0], -size[1], 0) self.layout.frame.addPage(frame, section.name) title = "Editor - " + group.name self.window = Window(title, parent=pixel2d, scale=self.scale, child=self.layout, owner=self) self.window.register_scroller(self.layout.frame.viewingArea)
def _create_components(self): """ Internal method to init the widgets components """ self._node.hide() # Create the texture where the gui component is rendered inside self._storage_tex = Image.create_2d("ExposureDisplay", 140, 20, "RGBA8") self._storage_tex.set_clear_color(Vec4(0.2, 0.6, 1.0, 1.0)) self._storage_tex.clear_image() self._bg_frame = DirectFrame( parent=self._node, frameColor=(0.1, 0.1, 0.1, 1.0), frameSize=(200, 0, -10, -85), pos=(0, 0, 0)) self._display_img = Sprite( image=self._storage_tex, parent=self._node, w=140, h=20, x=20, y=50) self._display_txt = Text( text="Current Exposure".upper(), parent=self._node, x=160, y=40, size=13, color=Vec3(0.8), align="right") # Create the shader which generates the visualization texture self._cshader_node = ComputeNode("ExposureWidget") self._cshader_node.add_dispatch(140 // 10, 20 // 4, 1) self._cshader_np = self._node.attach_new_node(self._cshader_node) # Defer the further loading Globals.base.taskMgr.doMethodLater(1.0, self._late_init, "ExposureLateInit")
def build_page(self): self.frm = DirectFrame(frameSize=(-1.5, 1.5, -.9, .9), frameColor=(.95, .95, .7, .85)) txt = _("What do you want to do?\n\nNB Use 'p' for pausing the game.") menu_args = self.menu.gui.menu_args self.txt = OnscreenText(text=txt, pos=(0, .64), scale=.08, wordwrap=32, fg=menu_args.text_fg, font=menu_args.font) on_back = lambda: self.on_end(True) on_end = lambda: self.on_end(False) menu_data = [('back to the game', _('back to the game'), on_back), ('back to the main menu', _('back to the main menu'), on_end)] btn_args = self.menu.gui.btn_args btn_visit = DirectButton(text=menu_data[0][1], pos=(0, 1, 0), command=menu_data[0][2], text_scale=.8, **btn_args) btn_dont_visit = DirectButton(text=menu_data[1][1], pos=(0, 1, -.5), command=menu_data[1][2], text_scale=.8, **btn_args) map(self.add_widget, [self.frm, self.txt, btn_visit, btn_dont_visit]) PageGui.build_page(self, False) eng.hide_cursor() eng.show_standard_cursor() eng.do_later(.01, eng.toggle_pause, [False])
def __init__(self, enableMask = True, #NOTE THAT IT IS TRUE BY DEFAULT autoDestroy = True, sortType = 0, #0 for horizontal, 1 for vertical margin = 0.2, textList = ['OK','Cancel'], enablesList = None, command = None, frameSize = (-0.6,0.6,-0.45,0.45), buttonSize = BUTTON_SIZE, text = '', textPos = (0,0.2), startPos = (-0.4,0,-0.2), extraArgs = [], style = None, fadeScreen = 0.5, backgroundColor = None, **kwargs): if backgroundColor: bgColor = backgroundColor elif fadeScreen is not None: bgColor = (0,0,0,fadeScreen) else: bgColor = None SogalForm.__init__(self,enableMask = enableMask,backgroundColor=bgColor, **kwargs) if enableMask: self.reparentTo(aspect2d, sort = 1000) if not style: self.__style = base.getStyle() else: self.__style = color_themes.styles[style] self.__frame = DirectFrame(parent = self,frameSize = frameSize,**self.__style['hardframe']) self.__buttonList = []#DirectButton(parent = self, s) self.__text = OnscreenText(parent = self,text = text ,pos = textPos, **self.__style['text']) self.__command = command self.__autoDestroy = autoDestroy self._extraArgs = extraArgs if sortType == 0: self.__box = HLayout(margin = margin) else: self.__box = VLayout(margin = margin) self.__box.reparentTo(self) self.__box.setPos(startPos) for i in range(len(textList)): btn = DirectButton(text = textList[i], command = self.buttonCommand(i),frameSize = buttonSize, **self.__style['button']) self.__buttonList.append(btn) self.__box.append(btn) if enablesList: for i in range(len(enablesList)): if i >= len(self.__buttonList): break if enablesList[i]: self.__buttonList[i]['state'] = DGG.NORMAL else: self.__buttonList[i]['state'] = DGG.DISABLED self.show()
class ChapterBase(DirectObject): def __init__(self, backgroundImage, rootParent): self.background = DirectFrame(image=backgroundImage, image_scale=.8, frameColor=(0, 0, 0, 0), frameSize=(-.8, .8, -.8, .8), scale=1, parent=rootParent) tex = self.background.component("image0").getTexture() tex.setMagfilter(SamplerState.FT_nearest) tex.setMinfilter(SamplerState.FT_nearest) self.startPos = (0, 0, 0) def destroy(self): self.ignoreAll() self.background.destroy()
def __init__(self, **kw): fade = loader.loadModel('phase_13/models/gui/fade') dialog_box = loader.loadModel('phase_3/models/gui/dialog_box_gui') optiondefs = (('relief', None, None), ('image', fade, None), ('image_scale', (5, 2, 2), None), ('image_color', (0, 0, 0, 0.3), None), ('text', 'Options', None), ('text_font', FONT, None), ('text_scale', 0.08, None), ('text_pos', (0, 0.4), None), ('state', DGG.NORMAL, None), ('geom', dialog_box, None), ('sortOrder', 20, None)) self.defineoptions(kw, optiondefs) DirectFrame.__init__(self, aspect2d) self.initialiseoptions(OptionsPage) self._optionButtons = [] self.saveButton = None fade.removeNode() dialog_box.removeNode()
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 __init__(self, items): ''' Initialize using the set of items specified Set of items should be passed as RadialItems ''' DirectObject.__init__(self) # Initialize variables self.isActive = 0 self.selected = 0 self.items = items # Load the palletized gui model gui = loader.loadModel("resources/camera_gui.bam") # Create the frame self.frame = DirectFrame(geom=gui.find("**/radial_menu_bg"), parent=hidden, scale=1.3, relief=None) # Create the selection indicator self.selector = OnscreenImage( image=gui.find("**/radial_menu_bg_quarter"), parent=self.frame) # Create the selected item description box self.descriptionBox = OnscreenText(parent=self.frame, pos=(0, -.6), style=3, font=ToontownGlobals.getSignFont(), scale=0.05, bg=(0, 0, 0, .4)) # Load all the and calculate their positions self.itemAngle = 360 / len(items) self.itemImages = [] for i in range(len(items)): x = .38 * math.cos(i * deg2Rad(self.itemAngle)) z = .38 * math.sin(i * deg2Rad(self.itemAngle)) img = OnscreenImage(image=self.items[i].nodepath, scale=0.2, parent=self.frame, pos=(x, 0, z)) self.itemImages.append(img)
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 __init__(self, node, name): SocketBase.__init__(self, node, name) self.type = INSOCKET self.frame = DirectFrame( frameColor=(0.25, 0.25, 0.25, 1), frameSize=(-1, 0, -self.height, 0), parent=node.frame, ) SocketBase.createPlug(self, self.frame) self.text = DirectLabel( frameColor=(0, 0, 0, 0), frameSize=(0, 1, -self.height, 0), scale=(1, 1, 1), text=self.name, text_align=TextNode.A_left, text_scale=(0.1, 0.1), text_pos=(0.1, -0.02), text_fg=(1, 1, 1, 1), text_bg=(0, 0, 0, 0), parent=self.frame, ) self.spinBox = DirectSpinBox( pos=(0.5, 0, 0), value=5, minValue=-100, maxValue=100, repeatdelay=0.125, buttonOrientation=DGG.HORIZONTAL, valueEntry_text_align=TextNode.ACenter, borderWidth=(0.1, 0.1), parent=self.frame, incButtonCallback=self.updateConnectedNodes, decButtonCallback=self.updateConnectedNodes, ) self.spinBox.setScale(0.1) self.resize(1)
def mostrar_camaras(self): # if self.reflection_buffer: lbl_refl=DirectLabel(text="reflejo", pos=LVector3f(-1.05, -0.4), scale=0.05) lbl_refl.reparentTo(self.base.aspect2d) frame_refl=DirectFrame(image=self.reflection_buffer.getTexture(0), scale=0.25, pos=LVector3f(-1.05, -0.7)) frame_refl.reparentTo(self.base.aspect2d) # if self.refraction_buffer: lbl_refr=DirectLabel(text="refraccion", pos=LVector3f(-0.5, -0.4), scale=0.05) lbl_refr.reparentTo(self.base.aspect2d) frame_refr=DirectFrame(image=self.refraction_buffer.getTexture(0), scale=0.25, pos=LVector3f(-0.5, -0.7)) frame_refr.reparentTo(self.base.aspect2d)
def __init__(self, title, w=100, h=100, parent=None): DebugObject.__init__(self, "UIWindow") if parent is None: parent = Globals.base.pixel2d self.node = parent.attachNewNode("Window-" + title) self.parent = parent self.bgFrame = DirectFrame(parent=self.node, frameColor=(0.2, 0.2, 0.2, 0.9), frameSize=(0, w, -h, 0)) # state=DGG.NORMAL self.titleFrame = DirectFrame(parent=self.node, frameColor=(0.35, 0.56, 0.19, 0.9), frameSize=(0, w, -40, 0)) self.titleText = BetterOnscreenText(text=title, x=10, y=25, parent=self.titleFrame, color=Vec3(1), size=15) self.contentNode = self.node.attachNewNode("Content") self.contentNode.setPos(0, 0, -60)
def __init__(self, parent, frame=None, pos=(0, 0), anchor=None, title=""): text_pos = ((frame[1] + frame[0]) * 0.5, frame[3] - 0.1) self.path = DirectFrame(frameSize=frame, relief=None, parent=parent.path, text=title, text_scale=0.09, text_align=core.TextNode.A_center, text_fg=UI_COLOR, text_pos=text_pos, text_font=base.regular_font) generate_border(self.path, frame)
def createDirectFrame(self, parent=None): parent = self.getEditorRootCanvas() if parent is None else parent pos = self.editorCenter if parent == self.getEditorRootCanvas() else (0,0,0) if self.visEditorInAspect2D: element = DirectFrame( frameColor=(1,1,1,1), frameSize=(-1,1,-1,1), parent=parent, state = DGG.NORMAL) else: element = DirectFrame( frameColor=(1,1,1,1), text_scale=24, frameSize=(-150, 150, -150, 150), pos=pos, borderWidth=(2, 2), parent=parent, state = DGG.NORMAL) elementInfo = ElementInfo(element, "DirectFrame") self.setupBind(elementInfo) return elementInfo
def open_query(self, owner): self.owner = owner bg_color = LColor(*self.color) bg_color[3] = 0.2 scale3 = LVector3(self.scale[0], 1.0, self.scale[1]) self.background = DirectFrame( frameColor=bg_color, frameSize=(-1 / self.scale[0], 1.0 / self.scale[0], 0.15 + self.scale[1] * self.text_size, 0.0), parent=base.a2dBottomLeft) self.prefix = OnscreenText( text=_("Target name:"), font=self.font, fg=self.color, align=TextNode.ALeft, parent=base.a2dBottomLeft, scale=tuple(self.scale * self.text_size), pos=(0, .15), ) bounds = self.prefix.getTightBounds() length = bounds[1][0] - bounds[0][ 0] + self.scale[0] * self.text_size / 2 self.query = DirectEntry(text="", text_fg=self.color, scale=tuple(scale3 * self.text_size), command=self.do_query, parent=base.a2dBottomLeft, frameColor=(0, 0, 0, 0), pos=(length, 0, .15), initialText="", numLines=1, width=200, entryFont=self.font, focus=1, suppressKeys=1) self.query.bind("press-escape-", self.escape) self.query.bind("press-tab-", self.select) self.query.accept(self.query.guiItem.getTypeEvent(), self.completion) self.query.accept(self.query.guiItem.getEraseEvent(), self.completion) pos = self.prefix.getPos() bounds = self.query.getBounds() llz = bounds[2] / self.text_size self.suggestions = OnscreenText( text="", font=self.font, fg=self.color, align=TextNode.ALeft, mayChange=True, parent=base.a2dBottomLeft, scale=tuple(self.scale * self.suggestions_text_size), pos=(pos[0], pos[1] + llz), )
def __init__(self, parent): DirectFrame.__init__(self, parent) self.emblem = OnscreenImage(image=loader.loadTexture( 'phase_5/maps/quest_available_emblem.png'), parent=self) self.emblem.setTransparency(TransparencyAttrib.MAlpha) self.emblem.setBillboardAxis() self.emblem.setTwoSided(1) glowMdl = loader.loadModel('phase_4/models/minigames/particleGlow.bam') self.glow = OnscreenImage(parent=self.emblem, image=glowMdl, color=(1.0, 1.0, 0.4, 1.0), scale=(3.0, 3.0, 3.0), pos=(0, 0.05, 0)) self.glow.setBin('gui-popup', 10) glowMdl.removeNode() self.track = None self.state = LOADED
class OutSocket(SocketBase): def __init__(self, node, name): SocketBase.__init__(self, node, name) self.type = OUTSOCKET self.frame = DirectFrame( frameColor=(0.25, 0.25, 0.25, 1), frameSize=(-1, 0, -self.height, 0), parent=node.frame, ) SocketBase.createPlug(self, self.frame) self.text = DirectLabel( frameColor=(0, 0, 0, 0), frameSize=(-1, 0, -self.height, 0), scale=(1, 1, 1), text=self.name, text_align=TextNode.A_right, text_scale=(0.1, 0.1), text_pos=(-0.1, -0.02), text_fg=(1, 1, 1, 1), text_bg=(0, 0, 0, 0), parent=self.frame, ) self.resize(1) def show(self, z, right): self.frame.setZ(z) self.frame.setX(right) def resize(self, newWidth): self.frame["frameSize"] = (-newWidth, 0, -self.height / 2, self.height / 2) self.text["frameSize"] = (-newWidth, 0, -self.height / 2, self.height / 2)
def __init__(self, parent=None, **kw): optiondefs = ( # Define type of DirectGuiWidget ('items', [], self.refresh), ('pgFunc', PGItem, None), ('numStates', 1, None), ('state', DGG.NORMAL, None), ('borderWidth', (0, 0), self.setBorderWidth), ('itemMargin', (0, 0, 0, 0), self.refresh), ('numRows', 4, self.refresh), ('numColumns', 4, self.refresh), ('autoUpdateFrameSize', True, None), ('boxAlign', TextNode.ALeft, self.refresh), ('suppressMouse', 0, None), ) # Merge keyword options with default options self.defineoptions(kw, optiondefs) # Initialize superclasses DirectFrame.__init__(self, parent) # Call option initialization functions self.initialiseoptions(DirectGridSizer)
def __makeToolboxCenteredListItem(self, displayName, index): item = DirectFrame( text=displayName, frameSize=VBase4(-self.parent["frameSize"][1], self.parent["frameSize"][1], -10, 20), frameColor=VBase4(0.85, 0.85, 0.85, 1), text_align=TextNode.ACenter, text_scale=16, text_pos=(-10, 0), pos=(0, 0, -30 * index + 10), #self.parent["frameSize"][1]/2-10 state=DGG.NORMAL, #suppressMouse=0 ) return item
class SocketBase: def __init__(self, node, name): self.socketID = uuid4() self.node = node self.name = name self.height = 0.2 self.type = None self.value = None self.connected = False def getValue(self): """Returns a string serializable value stored in this node""" return self.value def setValue(self, value): self.value = value def createPlug(self, parent): self.plug = DirectFrame( state=DGG.NORMAL, frameColor=(0, 0, 0, 1), frameSize=(-0.05, 0.05, -0.05, 0.05), parent=parent, ) self.setupBind() def setupBind(self): self.plug.bind(DGG.B1PRESS, self.startPlug) self.plug.bind(DGG.B1RELEASE, self.releasePlug) self.plug.bind(DGG.ENTER, self.endPlug) def startPlug(self, event): base.messenger.send("startPlug", [self]) base.messenger.send("startLineDrawing", [self.plug.getPos(render2d)]) def endPlug(self, event): taskMgr.remove("delayedPlugRelease") base.messenger.send("endPlug", [self]) base.messenger.send("connectPlugs") def releasePlug(self, event): base.messenger.send("stopLineDrawing") taskMgr.doMethodLater(0.2, base.messenger.send, "delayedPlugRelease", extraArgs=["cancelPlug"]) def updateConnectedNodes(self, *args): base.messenger.send("updateConnectedNodes", [self.node]) def setConnected(self, connected): self.connected = connected
def __init__(self, beanAmount): if not ScavengerHuntEffect.images: ScavengerHuntEffect.images = loader.loadModel('phase_4/models/props/tot_jar') self.npRoot = DirectFrame(parent=aspect2d, relief=None, scale=0.75, pos=(0, 0, 0.6)) if beanAmount > 0: self.npRoot.setColorScale(VBase4(1, 1, 1, 0)) self.jar = DirectFrame(parent=self.npRoot, relief=None, image=ScavengerHuntEffect.images.find('**/tot_jar')) self.jar.hide() self.eventImage = NodePath('EventImage') self.eventImage.reparentTo(self.npRoot) self.countLabel = DirectLabel(parent=self.jar, relief=None, text='+0', text_pos=(0.02, -0.2), text_scale=0.25, text_fg=(0.95, 0.0, 0, 1), text_font=ToontownGlobals.getSignFont()) def countUp(t, startVal, endVal): beanCountStr = startVal + t * (endVal - startVal) self.countLabel['text'] = '+' + `(int(beanCountStr))` def setCountColor(color): self.countLabel['text_fg'] = color self.track = Sequence(LerpColorScaleInterval(self.npRoot, 1, colorScale=VBase4(1, 1, 1, 1), startColorScale=VBase4(1, 1, 1, 0)), Wait(1), Func(self.jar.show), LerpColorScaleInterval(self.eventImage, 1, colorScale=VBase4(1, 1, 1, 0), startColorScale=VBase4(1, 1, 1, 1)), Parallel(LerpScaleInterval(self.npRoot, 1, scale=0.5, startScale=0.75), LerpPosInterval(self.npRoot, 1, pos=VBase3(-0.9, 0, -0.83))), LerpFunc(countUp, duration=2, extraArgs=[0, beanAmount]), Func(setCountColor, VBase4(0.95, 0.95, 0, 1)), Wait(3), Func(self.destroy)) else: self.npRoot.setColorScale(VBase4(1, 1, 1, 0)) self.attemptFailedMsg() self.track = Sequence(LerpColorScaleInterval(self.npRoot, 1, colorScale=VBase4(1, 1, 1, 1), startColorScale=VBase4(1, 1, 1, 0)), Wait(5), LerpColorScaleInterval(self.npRoot, 1, colorScale=VBase4(1, 1, 1, 0), startColorScale=VBase4(1, 1, 1, 1)), Func(self.destroy))
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 __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 _create_components(self): """ Creates the window components """ self._node = self._parent.attach_new_node("Window") self._node.set_pos(self._pos.x, 1, -self._pos.y) border_px = 1 self._border_frame = DirectFrame( pos=(0, 1, 0), frameSize=(-border_px, self._width + border_px, border_px, -self._height - border_px), frameColor=(0.0, 0.0, 0.0, 1), parent=self._node, state=DGG.NORMAL, ) # self._border_frame.hide() self._background = DirectFrame( pos=(0, 1, 0), frameSize=(0, self._width, 0, -self._height), frameColor=(0.098, 0.098, 0.098, 1), parent=self._node, ) self._title_bar = DirectFrame( pos=(0, 1, 0), frameSize=(0, self._width, 0, -45), frameColor=(0.058, 0.058, 0.058, 1), parent=self._node, state=DGG.NORMAL, ) self._window_title = BetterOnscreenText( parent=self._node, x=12, y=29, text=self._title, size=19, color=Vec3(0.7), may_change=True ) self._btn_close = DirectButton( relief=DGG.FLAT, pressEffect=1, pos=(self._width - 22, 1, -22), frameColor=(0, 0, 0, 0), scale=(20, 1, 20), parent=self._node, image="Data/GUI/CloseWindow.png", ) # Init bindings self._btn_close.set_transparency(TransparencyAttrib.M_alpha) self._btn_close.bind(DGG.B1CLICK, self._request_close) self._btn_close.bind(DGG.WITHIN, self._on_close_btn_hover) self._btn_close.bind(DGG.WITHOUT, self._on_close_btn_out) self._title_bar.bind(DGG.B1PRESS, self._start_drag) self._title_bar.bind(DGG.B1RELEASE, self._stop_drag)
def load(args): """Sets up the GUI for the main menu. Arguments: This takes no arguments. """ global backFrame global menuFrame global pauseText global backButton font_digital = loader.loadFont('digital.egg') backFrame = DirectFrame() backFrame['frameColor'] = (0, 0, 0, .5) backFrame['frameSize'] = (2, -2, 2, -2) backFrame.setPos(0, 0, 0) menuFrame = DirectFrame() menuFrame.reparentTo(backFrame) menuFrame['frameColor'] = (1, 1, 1, .5) menuFrame['frameSize'] = (.5, -.5, .5, -.5) menuFrame.setPos(0, 0, 0) pauseText = OnscreenText() pauseText['text'] = ('PAUSED') pauseText['scale'] = (.1) pauseText['font'] = (font_digital) pauseText['fg'] = (1, 1, 1, 1) pauseText.setPos(0, .9) backButton = DirectButton() backButton.reparentTo(menuFrame) backButton['text'] = ('Back') backButton['text_scale'] = (.1) backButton['text_pos'] = (0, -0.03) backButton['frameVisibleScale'] = (2, 0.5, 0) backButton['frameColor'] = (1, 1, 1, 0) backButton['command'] = (messenger.send) backButton['extraArgs'] = ("switch_gui", [gui.menu.pause_options, gui.menu.pause]) backButton.setPos(0, 0, 0)
def __init__(self, image, carPos, trackDir): ShowBase.__init__(self) self.image = image # add show image function #OnscreenImage(image=image, pos=(0, 0, 0)) bg = DirectFrame(image=image, sortOrder=(-1)) bg.setPos(0, 20, 0) bg.reparentTo(render2d) nrDisplayRegions = self.camera.getNumDisplayRegions() print(nrDisplayRegions) self.carPos = carPos self.carModel = None self.loadModels(carPos) self.trackDir = trackDir
def render(self): """ Inits the loading screen, creating the gui """ self.node = self.showbase.pixel2dp.attachNewNode("Loading Screen") self.node.setBin("fixed", 10) self.node.setDepthTest(False) self.showbase.setFrameRateMeter(False) w, h = base.win.getXSize(), base.win.getYSize() scaleX = w / 2560.0 scaleY = h / 1440.0 imageScale = max(scaleX, scaleY) imageW = 2560 * imageScale imageH = 1440 * imageScale self.bgFrame = DirectFrame(parent=self.node, frameColor=(0.9, 0.9, 0.9, 1.0), frameSize=(0, w, -h, 0)) self.font = loader.loadFont("Data/Font/Roboto-Light.ttf") self.fontHighRes = loader.loadFont("Data/Font/Roboto-Thin.ttf") self.fontHighRes.setPixelsPerUnit(120) xOffs = (w - imageW) / 2.0 yOffs = (h - imageH) / 2.0 self.bgImage = BetterOnscreenImage( image="Data/GUI/LoadingScreen.png", parent=self.node, w=imageW, h=imageH, x=xOffs, y=yOffs ) self.points = [] self.pointAngles = [10, 25, 40, 51, 80, 103, 130, 152, 170, 198, 210, 231, 250, 274, 290, 310, 328, 352] random.seed(491) for angle in self.pointAngles: scale = 180.0 point = BetterOnscreenImage( image="Data/GUI/LoadingScreenPoint.png", parent=self.node, w=scale, h=scale, x=(w - scale) / 2, y=(h - scale) / 2, nearFilter=False, ) point._node.setR(angle) scaleZ = scale * (1.0 + random.random() * 1.2) * (1.0 + 0.6 * abs(math.cos(angle / 180.0 * math.pi))) point._node.setScale(scaleZ, scale, scale) sFrom, sTo = 0.7, 1.2 seq = Sequence( point._node.scaleInterval( 2.0 + random.random(), Vec3(scaleZ * sFrom, scale, scale), startScale=Vec3(scaleZ * sTo, scale, scale), blendType="easeInOut", ), point._node.scaleInterval( 2.0 + random.random(), Vec3(scaleZ * sTo, scale, scale), startScale=Vec3(scaleZ * sFrom, scale, scale), blendType="easeInOut", ), ) seq.loop() self.points.append(point) cr = 212 ct = 0 self.circlePart1 = BetterOnscreenImage( image="Data/GUI/LoadingCirclePart.png", parent=self.node, w=cr, h=cr, x=(w - cr) / 2, y=(h - cr) / 2 - ct ) self.circlePart2 = BetterOnscreenImage( image="Data/GUI/LoadingCirclePart.png", parent=self.node, w=cr, h=cr, x=(w - cr) / 2, y=(h - cr) / 2 - ct ) self.circlePart3 = BetterOnscreenImage( image="Data/GUI/LoadingCirclePart.png", parent=self.node, w=cr, h=cr, x=(w - cr) / 2, y=(h - cr) / 2 - ct ) self.circlePart4 = BetterOnscreenImage( image="Data/GUI/LoadingCirclePart.png", parent=self.node, w=cr, h=cr, x=(w - cr) / 2, y=(h - cr) / 2 - ct ) self.circleBg = BetterOnscreenImage( image="Data/GUI/LoadingCircleBgBlack.png", parent=self.node, w=180, h=180, x=(w - 180) / 2, y=(h - 180) / 2 - ct, ) self.logoImage = BetterOnscreenImage( image="Data/GUI/RPIcon.png", parent=self.node, w=316, h=316, x=(w - 316) / 2, y=(h - 316) / 2 - ct ) self.loadingDescText = BetterOnscreenText( text="50%".upper(), parent=self.node, x=w - 50, y=h - 95, size=90, align="right", color=Vec4(0.9, 0.9, 0.9, 0.5), mayChange=True, font=self.fontHighRes, ) self.loadingText = BetterOnscreenText( text="Compiling Shaders".upper(), parent=self.node, x=w - 50, y=h - 65, size=18, align="right", color=Vec4(117 / 255.0, 175 / 255.0, 65 / 255.0, 0.2), mayChange=True, font=self.font, ) self.versionText = BetterOnscreenText( text="Rendering Pipeline 1.0.1".upper(), parent=self.node, x=50, y=80, size=30, align="left", color=Vec4(0.9, 0.9, 0.9, 0.5), mayChange=False, font=self.font, ) self.linkText = BetterOnscreenText( text="github.com/tobspr/renderpipeline".upper(), parent=self.node, x=50, y=105, size=18, align="left", color=Vec4(117 / 255.0, 175 / 255.0, 65 / 255.0, 0.2), mayChange=False, font=self.font, ) self.loadingBarBG = DirectFrame( parent=self.node, frameColor=Vec4(0.2, 0.2, 0.2, 0.8), frameSize=(0, w, -3, 0), pos=(0, 0, -h + 30) ) self.loadingBar = DirectFrame( parent=self.node, frameColor=Vec4(117 / 255.0, 175 / 255.0, 65 / 255.0, 0.8), frameSize=(0, w, -3, 0), pos=(0, 0, -h + 30), ) self.circlePart2._node.setR(180) self.circlePart3._node.setR(90) self.circlePart4._node.setR(-90) # self.circlePart1._node.setColorScale(Vec4(103/255.0,167/255.0,53/255.0,1.0)) self.circlePart1._node.setColorScale(Vec4(0.5, 1.0, 1.0, 0.5)) self.circlePart2._node.setColorScale(Vec4(1.0, 0.5, 1.0, 0.5)) self.circlePart3._node.setColorScale(Vec4(1.0, 1.0, 0.5, 0.5)) self.circlePart4._node.setColorScale(Vec4(0.5, 0.5, 1.0, 0.5)) self.circlePart1.hide() self.circlePart2.hide() self.circlePart3.hide() self.circlePart4.hide() interval1 = self.circlePart1.hprInterval(2.1, Vec3(0, 0, 360)) interval1.loop() interval2 = self.circlePart2.hprInterval(2.3, Vec3(0, 0, -180)) interval2.loop() interval3 = self.circlePart3.hprInterval(2.5, Vec3(0, 0, -270)) interval3.loop() interval4 = self.circlePart4.hprInterval(2.7, Vec3(0, 0, 270)) interval4.loop() # Hide render till we're done render.hide() self.showbase.graphicsEngine.renderFrame() self.setStatus("Initializing", 5)
class PiratesDownloadWatcher(DownloadWatcher.DownloadWatcher): positions = [ (Point3(1, 0, 0.90000000000000002), Point3(1, 0, 0.90000000000000002)), (Point3(1, 0, 0.90000000000000002), Point3(1, 0, 0.90000000000000002)), (Point3(1, 0, 0.90000000000000002), Point3(1, 0, 0.90000000000000002))] def __init__(self, phaseNames): self.phaseNames = phaseNames self.model = loader.loadModel('models/gui/pir_m_gui_gen_loadingBar') bar = self.model.findTexture('pir_t_gui_gen_loadingBar') self.model.find('**/loading_bar').hide() self.topFrame = DirectFrame(parent = base.a2dTopRight, pos = (-0.80000000000000004, 0, -0.10000000000000001), sortOrder = NO_FADE_SORT_INDEX + 1) self.text = DirectLabel(relief = None, parent = self.topFrame, guiId = 'DownloadWatcherText', pos = (0, 0, 0), text = ' ', text_fg = (1, 1, 1, 1), text_shadow = (0, 0, 0, 1), text_scale = 0.040000000000000001, textMayChange = 1, text_align = TextNode.ARight, text_pos = (0.17000000000000001, 0), sortOrder = 2) self.bar = DirectWaitBar(relief = None, parent = self.topFrame, guiId = 'DownloadWatcherBar', pos = (0, 0, 0), frameSize = (-0.40000000000000002, 0.38, -0.044999999999999998, 0.065000000000000002), borderWidth = (0.02, 0.02), range = 100, frameColor = (1, 1, 1, 1), barColor = (0, 0.29999999999999999, 0, 1), barTexture = bar, geom = self.model, geom_scale = 0.089999999999999997, geom_pos = (-0.014, 0, 0.01), text = '0%', text_scale = 0.040000000000000001, text_fg = (1, 1, 1, 1), text_align = TextNode.ALeft, text_pos = (0.19, 0), sortOrder = 1) self.bgFrame = DirectFrame(relief = DGG.FLAT, parent = self.topFrame, pos = (0, 0, 0), frameColor = (0.5, 0.27000000000000002, 0.35999999999999999, 0.20000000000000001), frameSize = (-0.44, 0.39000000000000001, -0.035999999999999997, 0.056000000000000001), borderWidth = (0.02, 0.02), scale = 0.90000000000000002, sortOrder = 0) self.accept('launcherPercentPhaseComplete', self.update) def update(self, phase, percent, reqByteRate, actualByteRate): phaseName = self.phaseNames[phase] self.text['text'] = OTPLocalizer.DownloadWatcherUpdate % phaseName + ' -' self.bar['text'] = '%s %%' % percent self.bar['value'] = percent def foreground(self): self.topFrame.reparentTo(base.a2dpTopRight) self.topFrame.setBin('gui-fixed', 55) self.topFrame['sortOrder'] = NO_FADE_SORT_INDEX + 1 def background(self): self.topFrame.reparentTo(base.a2dTopRight) self.topFrame.setBin('unsorted', 49) self.topFrame['sortOrder'] = -1 def cleanup(self): self.text.destroy() self.bar.destroy() self.bgFrame.destroy() self.topFrame.destroy() self.ignoreAll()
def __init__(self): self.step = 0 #shows how many commands line it had run self.scrStack = [] self.commandList = [] self.__currentPtr = None if not runtime_data.RuntimeData.command_ptr: self.nextPtr = 0 else: self.nextPtr = runtime_data.RuntimeData.command_ptr if not runtime_data.RuntimeData.command_stack: runtime_data.RuntimeData.command_stack = self.scrStack else: self.scrStack = runtime_data.RuntimeData.command_stack if not runtime_data.RuntimeData.command_list: runtime_data.RuntimeData.command_list = self.commandList else: self.commandList = runtime_data.RuntimeData.command_list self._frame = DirectFrame(parent = aspect2d) # @UndefinedVariable pydev在傲娇而已不用管 self._frame.setTransparency(TransparencyAttrib.MAlpha) self.storyView = StoryView() self.audioPlayer = base.audioPlayer # @UndefinedVariable pydev在傲娇而已不用管 self.menu = StoryMenuBar() self.gameTextBox = GameTextBox() self.textHistory = TextHistory() self.button_auto = self.menu.addButton(text = 'Auto',state = DGG.NORMAL,command = self.autoPlayButton) self.button_history = self.menu.addButton(text = 'History',state = DGG.NORMAL,command = self.showTextHistoryButton) self.button_skip = self.menu.addButton(text = 'Skip',state = DGG.DISABLED,command = self.startSkippingButton) self.button_lastchoice = self.menu.addButton(text = 'Last Choice',state = DGG.DISABLED,command = self.lastChoice) self.button_save = self.menu.addButton(text = 'Save',state = DGG.DISABLED, command = self.saveButton) self.button_load = self.menu.addButton(text = 'Load',state = DGG.NORMAL,command = self.loadButton) self.button_quicksave = self.menu.addButton(text = 'Quick Save',state = DGG.DISABLED,command = self.quickSaveButton) self.button_quickload = self.menu.addButton(text = 'Quick Load',state = DGG.DISABLED,command = self.quickLoadButton) self.button_config = self.menu.addButton(text = 'Options', state = DGG.NORMAL, command = self._configButton) self.button_title = self.menu.addButton(text = 'Title',state = DGG.NORMAL,command = self.returnToTitle) self._inputReady = True self.__arrow_shown = False self._choiceReady = True self._currentMessage = '' self.__currentSelection = None self.__finishing = False self.__lock = Lock() self.forcejump = False self.__autoInput = False self.__focused = False self.intervals = [] self.__skipping = False self.__autoplaying = False self.__autoInterval = None self.__autoplaystep = None self.mapScriptSpace() SogalForm.__init__(self) self.show() taskMgr.add(self.loopTask,'story_manager_loop',sort = 2,priority = 1) # @UndefinedVariable 傲娇的pydev……因为panda3D的"黑魔法"…… taskMgr.doMethodLater(runtime_data.game_settings['jump_span'],self.__jumpCheck,'story_jump_check', sort = 5, priority = 1) # @UndefinedVariable