def add_axis(offset, axis_name): slider_width = canvas_width / 2 label = DirectLabel( text=axis_name, **left_aligned_small_text, pos=(0.05, 0, offset), parent=panel_canvas, ) slider = DirectSlider( value=0.0, range=(-1.0, 1.0), state=DGG.DISABLED, frameSize=VBase4( 0, slider_width, -0.1, 0, ), thumb_frameSize=VBase4( 0.0, 0.04, -0.04, 0.04), frameColor=VBase4(0.3, 0.3, 0.3, 1), pos=(canvas_width - slider_width, 0, offset), parent=panel_canvas, ) return slider
def enterDisplayPage(self): self.book.createPageButtons(False, False) self.book.setTitle("Display Options") dialog_gui = loader.loadModel( "phase_3/models/gui/dialog_box_buttons_gui.bam") width, height, fs, music, sfx, tex_detail, model_detail, aa, af = SettingsManager( ).getSettings("settings.json") self.width = width self.height = height self.windowType = [fs] self.buttons = [ DirectRadioButton(text="Windowed", variable=self.windowType, value=[False], scale=0.1, pos=(-0.45, 0.15, 0.15)), DirectRadioButton(text="Fullscreen", variable=self.windowType, value=[True], scale=0.1, pos=(-0.45, -0.15, -0.15)) ] for button in self.buttons: button.setOthers(self.buttons) self.resoLbl = DirectLabel(text="%sx%s" % (width, height), scale=0.08, relief=None, pos=(0.25, 0, 0)) self.resSlider = DirectSlider(range=(0, 200), pageSize=50, command=self.setResoText, scale=0.3, orientation=DGG.VERTICAL, pos=(0.6, 0, 0)) self.okBtn = DirectButton(text="OK", geom=CIGlobals.getOkayBtnGeom(), relief=None, pos=(-0.5, -0.5, -0.5), text_scale=0.05, text_pos=(0, -0.11), command=self.applyDisplaySettings) self.cancelBtn = DirectButton(text="Cancel", geom=CIGlobals.getCancelBtnGeom(), relief=None, pos=(-0.3, -0.5, -0.5), text_scale=0.05, text_pos=(0, -0.11), command=self.cancelDisplaySettings) if self.resoLbl['text'] == "640x480": self.resSlider['value'] = 0 elif self.resoLbl['text'] == "800x600": self.resSlider['value'] = 50 elif self.resoLbl['text'] == "1024x768": self.resSlider['value'] = 100 elif self.resoLbl['text'] == "1280x1024": self.resSlider['value'] = 150 elif self.resoLbl['text'] == "1600x1200": self.resSlider['value'] = 200
def add_vibration(offset, axis_name, index): slider_width = canvas_width / 2 label = DirectLabel( text=axis_name, **left_aligned_small_text, pos=(0.05, 0, offset), parent=panel_canvas, ) slider = DirectSlider( value=0.0, range=(0.0, 1.0), command=self.update_vibration, frameSize=VBase4( 0, slider_width, -0.1, 0, ), thumb_frameSize=VBase4( 0.0, 0.04, -0.04, 0.04), frameColor=VBase4(0.3, 0.3, 0.3, 1), pos=(canvas_width - slider_width, 0, offset), parent=panel_canvas, ) return slider
def setup(self, label, range, value, orientation, *args, **kwargs): def updateField(widget, field, value): widget[field] = value def finalCommand(): val = self.slider['value'] updateField(self.slider, 'text', '%1.3f' % val) self.slider = DirectSlider(parent=self, relief=DGG.FLAT, range=range, value=value, orientation=orientation, scale=0.25, thumb_relief=DGG.FLAT, thumb_color=(0, 1, 1, 1), pos=(0, 0, 0), text='0.0', text_scale=0.20000000000000001, text_pos=(0, 0.10000000000000001, 0)) updateField(self.slider, 'command', finalCommand) width = 3 if orientation == DGG.HORIZONTAL: pos = (-0.27500000000000002 - width * 0.050000000000000003, 0, -0.02) else: pos = (-0.025000000000000001 * width, 0, -0.34999999999999998) self.min = DirectEntry(parent=self, initialText=` float(self.slider['range'][0]) `, scale=0.050000000000000003, width=width, pos=pos) updateField( self.min, 'command', lambda x: updateField(self.slider, 'range', (float(x), self.slider['range'][1]))) if orientation == DGG.HORIZONTAL: pos = (0.27500000000000002, 0, -0.02) else: pos = (-0.025000000000000001 * width, 0, 0.29999999999999999) self.max = DirectEntry(parent=self, initialText=` float(self.slider['range'][1]) `, scale=0.050000000000000003, width=width, pos=pos) updateField( self.max, 'command', lambda x: updateField(self.slider, 'range', (self.slider['range'][0], float(x)))) self.label = DirectLabel( parent=self, relief=None, text=label, text_scale=0.050000000000000003, text_pos=(0.029999999999999999 - 0.39500000000000002, 0.34999999999999998 - 0.23999999999999999, 0), text_align=TextNode.ALeft)
def __init__(self, page, widgetname, slrange, slcommand, pos = (0, 0, 0)): DirectFrame.__init__(self, parent = page.book, pos = pos) self.page = page self.text = OnscreenText(text = widgetname + ":", pos = (-0.7, 0, 0), align = TextNode.ALeft, parent = self) self.slider = DirectSlider(range=slrange, pageSize=0.1, command=slcommand, scale=0.3, orientation=DGG.HORIZONTAL, pos=(0.35, 0, 0.025), parent = self) self.valText = OnscreenText(text = "", pos = (0.7, -0.005, -0.005), align = TextNode.ALeft, parent = self)
def createMaterialSliders(self): OnscreenText(text='Specular', pos=(-base.getAspectRatio() + 0.1, 0.85), scale=0.04, align=TextNode.ALeft, fg=(1, 1, 1, 1)) OnscreenText(text='Metallic', pos=(-base.getAspectRatio() + 0.1, 0.75), scale=0.04, align=TextNode.ALeft, fg=(1, 1, 1, 1)) OnscreenText(text='Roughness', pos=(-base.getAspectRatio() + 0.1, 0.65), scale=0.04, align=TextNode.ALeft, fg=(1, 1, 1, 1)) self.specSlider = DirectSlider(range=(0, 100), value=50, pageSize=3, command=self.setSpecular, scale=(0.6, 0.5, 0.2), pos=(-base.getAspectRatio() + 0.7, 0, 0.82)) self.metSlider = DirectSlider(range=(0, 100), value=50, pageSize=3, command=self.setMetallic, scale=(0.6, 0.5, 0.2), pos=(-base.getAspectRatio() + 0.7, 0, 0.72)) self.roughSlider = DirectSlider(range=(0, 100), value=50, pageSize=3, command=self.setRoughness, scale=(0.6, 0.5, 0.2), pos=(-base.getAspectRatio() + 0.7, 0, 0.62)) # Set initial values self.setSpecular() self.setMetallic() self.setRoughness()
def __init__(self, parent: DirectFrame, text: str, value: float, slider_edit_callback: Callable[['ColourChannel', float], None], entry_edit_callback: Callable[['ColourChannel', float], None], mouse1_press_callbacks: List[Callable[[], None]]): self.__frame = DirectFrame(parent=parent) self.__slider_edit_callback = slider_edit_callback self.__entry_edit_callback = entry_edit_callback self.__label = DirectLabel(parent=self.__frame, text=text, text_fg=WHITE, text_bg=WINDOW_BG_COLOUR, pos=(-0.5, 0.0, 0.0), scale=(0.1, 1.0, 0.1)) self.__slider = DirectSlider(parent=self.__frame, orientation=DGG.HORIZONTAL, borderWidth=(0.0, 0.0), frameColor=WIDGET_BG_COLOUR, frameSize=(-1.0, 1.0, -0.4, 0.4), thumb_frameSize=(-0.075, 0.075, -0.2, 0.2), value=value, pos=(0.05, 0.0, 0.0255), scale=(0.45, 1.0, 0.5)) self.__entry_hovered = False mouse1_press_callbacks.append(self.__entry_mouse_click_callback) self.__entry = DirectEntry(parent=self.__frame, frameColor=WIDGET_BG_COLOUR, text_fg=WHITE, initialText=str(value), scale=0.1, width=3, suppressKeys=True, pos=(0.55, 0.0, -0.01105)) self.__entry.bind(DGG.EXIT, self.__entry_exit_callback) self.__entry.bind(DGG.ENTER, self.__entry_enter_callback) self.__entry.bind(DGG.B1PRESS, self.__entry_mouse_click_callback) self.accept("mouse1", self.__entry_mouse_click_callback) self.__disable_frame_overlay = DirectButton(parent=self.__frame, frameColor=TRANSPARENT, borderWidth=(0.0, 0.0), frameSize=(-0.6, 0.9, -0.2, 0.2), suppressMouse=True) self.__disable_frame_overlay.hide() self.__enabled = True self.__set_callbacks()
def make_slider(self, parent, pos: tuple, value, command=None): """Get slider of default format with provided args.""" command = command or (lambda *args, **kwargs: None) slider = DirectSlider( command=command, pos=pos, scale=(256, 1, 128), value=value, parent=parent, relief=DGG.FLAT, ) return slider
def create_slider_entry(self, frame, param, component=None): if component is not None: scaled_value = param.get_param_component(component, scale=True) else: scaled_value = param.get_param(scale=True) hsizer = Sizer("horizontal") slider = DirectSlider(parent=frame, scale=(self.font_size * 16, 1, self.font_size * 6), value=scaled_value, range=param.get_range(scale=True), suppressKeys=1, command=self.do_update_slider) widget = SizerWidget(slider) hsizer.add(widget, alignments=("expand", "center"), borders=self.borders) widget = self.create_spin_entry(frame, param, slider, component) hsizer.add(widget, alignments=("min", "center"), borders=self.borders) slider['extraArgs'] = [slider, widget.dgui_obj, param, component] return hsizer
def __init__(self): tsteps = 10 # this is really molecules npoints = 999 # this is realy timesteps self.slider = DirectSlider(range=(0, 1), value=0, pageSize=1, thumb_frameSize=(0, .04, -.02, .02), command=self.t_set) self.slider.setPos((0, 0, -.9)) data = np.cumsum(np.random.randint(-1, 2, (tsteps, npoints, 3)), axis=1) data2 = [data[:, i, :] for i in range(len(data[0]))] #embed() ctup = np.random.rand(tsteps, 4) tm1 = [ treeMe(None, d, np.array(['%s' % uuid4() for _ in d]), np.ones(len(d))) for d in data ] self.f1 = fourObject(make4d(data, ctup, geomType=GeomLinestrips), tm1) sc1 = lambda: self.set_selected(self.f1) self.f1.coll_parent.setPythonTag('selection_callbacks', [sc1]) self.set_selected(self.f1) tm2 = [ treeMe(None, d, np.array(['%s' % uuid4() for _ in d]), np.ones(len(d))) for d in data2 ] self.f2 = fourObject(make4d(data2, ctup), tm2) self.f2.set_size(3) self.f2.stash() sc2 = lambda: self.set_selected(self.f2) self.f2.coll_parent.setPythonTag('selection_callbacks', [sc2]) # TODO make clicking not on the button set the slider position? self.accept('s', self.set_selected, [self.f2])
def setup(self): if hasattr(self, 'mainFrame'): self.mainFrame.destroy() self.mainFrame = DirectFrame(parent=self, relief=None) def setVisibility(): value = self.visSlider['value'] self.setColorScale(Vec4(1, 1, 1, value)) self.visSlider = DirectSlider(guiId='visSlider', parent=self.mainFrame, scale=0.40000000000000002, thumb_relief=DGG.FLAT, thumb_color=(0.25, 1.0, 0.25, 1), pos=(0.40000000000000002, 0, -0.84999999999999998), text='Visibility', text_scale=0.20000000000000001, text_pos=(0, 0.10000000000000001, 0), text_bg=(0.80000000000000004, 0.80000000000000004, 0.80000000000000004, 1), value=1.0, command=setVisibility) self.visSlider.getChild(0).setTransparency(0) self.camFrame = DirectFrame( guiId='camFrame', parent=self.mainFrame, relief=DGG.RIDGE, frameSize=(0.0, 0.80000000000000004, 0.0, 0.32000000000000001), frameColor=(1, 1, 0.75, 1), borderWidth=(0.0050000000000000001, 0.0050000000000000001), pos=(0, 0, 0.59999999999999998), text='Camera', text_fg=(0, 0, 0, 1), text_scale=0.050000000000000003, text_pos=(0.10000000000000001, 0.26000000000000001, 0)) self.camSlider = RangeSlider(guiId='zoom', label='Zoom (Y-axis)', range=(-0.75, 0.25), value=0, parent=self.camFrame, pos=(0.39500000000000002, 0, 0.070000000000000007)) self.worldFrame = DirectFrame( guiId='worldFrame', parent=self.mainFrame, relief=DGG.RIDGE, frameSize=(0.0, 0.80000000000000004, -0.55000000000000004, 0.5), frameColor=(1, 0.75, 0.75, 1), borderWidth=(0.0050000000000000001, 0.0050000000000000001), pos=(0.0, 0, 0), text='World', text_fg=(0, 0, 0, 1), text_scale=0.050000000000000003, text_pos=(0.10000000000000001, 0.42999999999999999, 0)) self.worldPSlider = RangeSlider(guiId='worldP', label='World P', range=(-90, 0), value=0.0, parent=self.worldFrame, pos=(0.39500000000000002, 0, 0.23999999999999999)) self.worldDecorScaleSlider = RangeSlider(guiId='worldP', label='World Decor Scale', range=(0.20000000000000001, 0.29999999999999999), value=0.25, parent=self.worldFrame, pos=(0.39500000000000002, 0, 0.0)) self.finalSlider = RangeSlider(guiId='final', label='Final', range=(0, 1), value=0, parent=self.worldFrame, pos=(0.39500000000000002, 0, -0.47999999999999998)) self.saveState0Button = DirectButton(guiId='save0Button', parent=self.mainFrame, scale=0.10000000000000001, pos=(0.20000000000000001, 0, -0.65000000000000002), borderWidth=(0.10000000000000001, 0.10000000000000001), text='save pt0') self.saveState1Button = DirectButton(guiId='save1Button', parent=self.mainFrame, scale=0.10000000000000001, pos=(0.59999999999999998, 0, -0.65000000000000002), borderWidth=(0.10000000000000001, 0.10000000000000001), text='save pt1')
def __init__(self): self.testMusic = loader.loadMusic("Audio/click.wav") self.testSfx = loader.loadSfx("Audio/click.wav") self.frameOption = DirectFrame(image="gui/BackGround_o.png", image_scale=(1.7778, 1, 1), frameSize=(base.a2dLeft, base.a2dRight, base.a2dBottom, base.a2dTop), frameColor=(0, 0, 0, 0)) self.frameOption.setTransparency(1) self.title = DirectLabel(scale=0.15, text_align=TextNode.ALeft, pos=(-0.3, 0, 0.5), frameColor=(0, 0, 0, 0), text="", text_fg=(1, 1, 1, 1)) self.title.setTransparency(1) self.title.reparentTo(self.frameOption) self.title_volume = DirectLabel(scale=0.1, text_align=TextNode.ALeft, pos=(base.a2dLeft + 1.3, 0, -0.2), frameColor=(0, 0, 0, 0), text="Music", text_fg=(1, 1, 1, 1)) self.title_volume.setTransparency(1) self.title_volume.reparentTo(self.frameOption) self.slider_volume = DirectSlider(pos=(base.a2dLeft + 2.2, 0, -0.2), value=50, range=(0, 100), pageSize=5, scale=0.5, command=base.messenger.send, extraArgs=["ChangeVolume"]) self.slider_volume.reparentTo(self.frameOption) self.testMusicBtn = self.createButton(-0.2, self.testMusic) self.title_sound = DirectLabel(scale=0.1, text_align=TextNode.ALeft, pos=(base.a2dLeft + 1.3, 0, -0.4), frameColor=(0, 0, 0, 0), text="Sfx", text_fg=(1, 1, 1, 1)) self.title_sound.setTransparency(1) self.title_sound.reparentTo(self.frameOption) self.slider_sound = DirectSlider( pos=(base.a2dLeft + 2.2, 0, -0.4), value=50, range=(0, 100), pageSize=5, #frameSize = (1,1,1,1) scale=0.5, command=base.messenger.send, extraArgs=["ChangeSound"]) self.slider_sound.reparentTo(self.frameOption) self.testSfxBtn = self.createButton(-0.4, self.testSfx) # self.title_leapmotion = DirectLabel( # scale = 0.1, # text_align = TextNode.ALeft, # pos = (base.a2dLeft + 0.6 , 0, -0.6), # frameColor = (0, 0, 0, 0), # text = "Leapmotion", # text_fg = (1,1,1,1)) # self.title_leapmotion.reparentTo(self.frameOption) # self.cbtn_leapmotion = DirectCheckButton( # text = "needed",text_fg=(1,1,1,1), # scale = .1, # pos = (base.a2dLeft + 1.5 , 0, -0.6), # command = base.messenger.send, # extraArgs = ["ChangeLeapmotion"]) # self.cbtn_leapmotion.reparentTo(self.frameOption) self.hide()
def setup(self, node): colours = self.app.theme.colours SLIDER_PROPERTIES = { 'range': (0, 100), 'pageSize': 100, 'scrollSize': 0, 'parent': node, 'scale': 0.5, 'frameSize': (-0.85, 0.85, -0.08, 0.08), 'thumb_relief': DGG.RIDGE, } TEXT_PROPERTIES = { 'parent': node, 'text_scale': 0.08, 'text_fg': colours.listboxButtons, 'text_align': TextNode.A_left, 'relief': None, 'textMayChange': True, } label = DirectLabel( text='Music volume', **TEXT_PROPERTIES ) align(label, left=-0.85, midZ=0.25) self.musicSlider = DirectSlider(**SLIDER_PROPERTIES) align(self.musicSlider, left=-0.2, midZ=0.25) self.musicLabel = DirectLabel( text='100', **TEXT_PROPERTIES ) align(self.musicLabel, left=0.70, midZ=0.25) label = DirectLabel( text='Enable music', **TEXT_PROPERTIES ) align(label, left=-0.85, midZ=0.10) self.musicCheckbox = DirectCheckButton( scale=0.06, parent=node, command=self.applySettings, ) align(self.musicCheckbox, left=-0.2, midZ=0.10) label = DirectLabel( text='Sound volume', **TEXT_PROPERTIES ) align(label, left=-0.85, midZ=-0.05) self.soundSlider = DirectSlider(**SLIDER_PROPERTIES) align(self.soundSlider, left=-0.2, midZ=-0.05) self.soundLabel = DirectLabel( text='100', **TEXT_PROPERTIES ) align(self.soundLabel, left=0.70, midZ=-0.05) label = DirectLabel( text='Enable sound', **TEXT_PROPERTIES ) align(label, left=-0.85, midZ=-0.20) self.soundCheckbox = DirectCheckButton( scale=0.06, parent=node, command=self.applySettings, ) align(self.soundCheckbox, left=-0.2, midZ=-0.20) BUTTON_PROPERTIES = { 'scale': 0.04, 'frameSize': (-5.0, 5.0, -1.0, 1.5), 'parent': node, } button = DirectButton( text='Back', command=self.parent.showMainButtons, **BUTTON_PROPERTIES ) align(button, right=0.87, z=-0.63)
def __init__(self, mesh, pm_filebuf): scene_members = getSceneMembers(mesh) base = ShowBase() if len(scene_members) > 1: print 'There is more than one geometry in the scene, so I think this is not a progressive base mesh.' sys.exit(1) rotateNode = GeomNode("rotater") rotatePath = render.attachNewNode(rotateNode) matrix = numpy.identity(4) if mesh.assetInfo.upaxis == collada.asset.UP_AXIS.X_UP: r = collada.scene.RotateTransform(0, 1, 0, 90) matrix = r.matrix elif mesh.assetInfo.upaxis == collada.asset.UP_AXIS.Y_UP: r = collada.scene.RotateTransform(1, 0, 0, 90) matrix = r.matrix rotatePath.setMat(Mat4(*matrix.T.flatten().tolist())) geom, renderstate, mat4 = scene_members[0] node = GeomNode("primitive") node.addGeom(geom) if renderstate is not None: node.setGeomState(0, renderstate) self.geomPath = rotatePath.attachNewNode(node) self.geomPath.setMat(mat4) wrappedNode = ensureCameraAt(self.geomPath, base.camera) base.disableMouse() attachLights(render) render.setShaderAuto() render.setTransparency(TransparencyAttrib.MDual, 1) base.render.analyze() KeyboardMovement() MouseDrag(wrappedNode) MouseScaleZoom(wrappedNode) ButtonUtils(wrappedNode) MouseCamera() print 'Loading pm into memory... ', sys.stdout.flush() self.pm_refinements = readPDAE(pm_filebuf) self.pm_index = 0 print 'Done' self.slider = DirectSlider(range=(0, len(self.pm_refinements)), value=0, pageSize=len(self.pm_refinements) / 20, command=self.sliderMoved, pos=(0, 0, -.9), scale=1) for key, val in uiArgs.iteritems(): self.slider.thumb[key] = val self.triText = OnscreenText(text="", pos=(-1, 0.85), scale=0.15, fg=(1, 0.5, 0.5, 1), align=TextNode.ALeft, mayChange=1) base.run()
def __init__(self): """Default constructor""" # create a main frame as big as the window self.frameMain = DirectFrame( # set framesize the same size as the window frameSize=(base.a2dLeft, base.a2dRight, base.a2dTop, base.a2dBottom), image="LogoTextGlow.png", image_scale=(1.06 / 2.0, 1, 0.7 / 2.0), image_pos=(0, 0, 0.7), # position center pos=(0, 0, 0), # set tramsparent background color frameColor=(0, 0, 0, 0)) self.frameMain.setTransparency(1) self.frameMain.setBin("fixed", 100) sliderscale = 0.5 buttonScale = 0.25 textscale = 0.1 checkboxscale = 0.05 left = -0.5 right = 0.5 self.sliderTextspeed = DirectSlider( scale=sliderscale, pos=(left, 0, 0.2), range=(0.2, 0.01), scrollSize=0.01, text=_("Textspeed %0.1f%%") % (base.textWriteSpeed * 10), text_scale=textscale, text_align=TextNode.ACenter, text_pos=(0.0, 0.15), text_fg=(1, 1, 1, 1), thumb_frameColor=(0.65, 0.65, 0.0, 1), thumb_relief=DGG.FLAT, frameColor=(0.15, 0.15, 0.15, 1), value=base.textWriteSpeed, command=self.sliderTextspeed_ValueChanged) self.sliderTextspeed.reparentTo(self.frameMain) self.cbParticles = DirectCheckButton( text=_(" Enable Particles"), text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 0.35), pos=(left, 0, -0.0), scale=checkboxscale, frameColor=(0, 0, 0, 0), command=self.cbParticles_CheckedChanged, rolloverSound=None, clickSound=None, pressEffect=False, boxPlacement="below", boxBorder=0.8, boxRelief=DGG.FLAT, indicator_scale=1.5, indicator_text_fg=(0.65, 0.65, 0.0, 1), indicator_text_shadow=(0, 0, 0, 0.35), indicator_frameColor=(0.15, 0.15, 0.15, 1), indicatorValue=base.particleMgrEnabled) self.cbParticles.indicator['text'] = (' ', 'x') self.cbParticles.indicator['text_pos'] = (0, 0.1) #self.cbParticles.indicator.setX(self.cbParticles.indicator, -0.5) #self.cbParticles.indicator.setZ(self.cbParticles.indicator, -0.1) #self.cbParticles.setFrameSize() self.cbParticles.setTransparency(1) self.cbParticles.reparentTo(self.frameMain) volume = base.musicManager.getVolume() self.sliderVolume = DirectSlider( scale=sliderscale, pos=(left, 0, -0.35), range=(0, 1), scrollSize=0.01, text=_("Volume %d%%") % volume * 100, text_scale=textscale, text_align=TextNode.ACenter, text_pos=(.0, 0.15), text_fg=(1, 1, 1, 1), thumb_frameColor=(0.65, 0.65, 0.0, 1), thumb_relief=DGG.FLAT, frameColor=(0.15, 0.15, 0.15, 1), value=volume, command=self.sliderVolume_ValueChanged) self.sliderVolume.reparentTo(self.frameMain) self.lblControltype = DirectLabel(text=_("Control type"), text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 0.35), frameColor=(0, 0, 0, 0), scale=textscale / 2, pos=(right, 0, 0.27)) self.lblControltype.setTransparency(1) self.lblControltype.reparentTo(self.frameMain) selectedControlType = 0 if base.controlType == "MouseAndKeyboard": selectedControlType = 1 self.controltype = DirectOptionMenu( pos=(right, 0, 0.18), text_fg=(1, 1, 1, 1), scale=0.1, items=[_("Keyboard"), _("Keyboard + Mouse")], initialitem=selectedControlType, frameColor=(0.15, 0.15, 0.15, 1), popupMarker_frameColor=(0.65, 0.65, 0.0, 1), popupMarker_relief=DGG.FLAT, highlightColor=(0.65, 0.65, 0.0, 1), relief=DGG.FLAT, command=self.controlType_Changed) self.controltype.reparentTo(self.frameMain) b = self.controltype.getBounds() xPos = right - ((b[1] - b[0]) / 2.0 * 0.1) self.controltype.setX(xPos) setItems(self.controltype) self.controltype.setItems = setItems self.controltype.showPopupMenu = showPopupMenu self.controltype.popupMarker.unbind(DGG.B1PRESS) self.controltype.popupMarker.bind(DGG.B1PRESS, showPopupMenu) self.controltype.unbind(DGG.B1PRESS) self.controltype.bind(DGG.B1PRESS, showPopupMenuExtra, [self.controltype]) isChecked = not base.AppHasAudioFocus img = None if base.AppHasAudioFocus: img = "AudioSwitch_on.png" else: img = "AudioSwitch_off.png" self.cbVolumeMute = DirectCheckBox( text=_("Mute Audio"), text_scale=0.5, text_align=TextNode.ACenter, text_pos=(0.0, 0.65), text_fg=(1, 1, 1, 1), pos=(right, 0, -0.35), scale=0.21 / 2.0, command=self.cbVolumeMute_CheckedChanged, rolloverSound=None, clickSound=None, relief=None, pressEffect=False, isChecked=isChecked, image=img, image_scale=0.5, checkedImage="AudioSwitch_off.png", uncheckedImage="AudioSwitch_on.png") self.cbVolumeMute.setTransparency(1) self.cbVolumeMute.setImage() self.cbVolumeMute.reparentTo(self.frameMain) sensitivity = base.mouseSensitivity self.sliderSensitivity = DirectSlider( scale=sliderscale, pos=(right, 0, -0.075), range=(0.5, 2), scrollSize=0.01, text=_("Mouse Sensitivity %0.1fx") % sensitivity, text_scale=textscale, text_align=TextNode.ACenter, text_pos=(.0, 0.15), text_fg=(1, 1, 1, 1), thumb_frameColor=(0.65, 0.65, 0.0, 1), thumb_relief=DGG.FLAT, frameColor=(0.15, 0.15, 0.15, 1), value=sensitivity, command=self.sliderSensitivity_ValueChanged) self.sliderSensitivity.reparentTo(self.frameMain) if base.controlType == "Gamepad": self.sliderSensitivity.hide() # create the back button self.btnBack = DirectButton( scale=buttonScale, # position on the window pos=(0, 0, base.a2dBottom + 0.15), frameColor=(0, 0, 0, 0), # text properties text=_("Back"), text_scale=0.5, text_fg=(1, 1, 1, 1), text_pos=(0.0, -0.15), text_shadow=(0, 0, 0, 0.35), text_shadowOffset=(-0.05, -0.05), # sounds that should be played rolloverSound=None, clickSound=None, pressEffect=False, relief=None, # the event which is thrown on clickSound command=lambda: base.messenger.send("options_back")) self.btnBack.setTransparency(1) self.btnBack.reparentTo(self.frameMain) self.hide()
def __init__(self): self.frameMain = DirectFrame(image="optionsmenu.png", image_scale=(1.7778, 1, 1), frameSize=(base.a2dLeft, base.a2dRight, base.a2dBottom, base.a2dTop), frameColor=(0, 0, 0, 0)) self.frameMain.setTransparency(True) volume = base.musicManager.getVolume() self.sliderMusicVolume = DirectSlider( scale=0.5, pos=(0, 0, -0.1), range=(0, 1), scrollSize=0.01, text="Music Volume: %d%%" % volume * 100, text_scale=0.15, text_align=TextNode.ACenter, text_pos=(.0, 0.15), text_fg=(240 / 255.0, 255 / 255.0, 240 / 255.0, 1), thumb_frameColor=(0.8, 0, 1, 0.75), thumb_relief=DGG.FLAT, frameColor=(0.25, 0.25, 0.55, 1), value=volume, command=self.sliderMusicVolume_ValueChanged) self.sliderMusicVolume.reparentTo(self.frameMain) volume = base.sfxManagerList[0].getVolume() self.sliderSFXVolume = DirectSlider( scale=0.5, pos=(0, 0, -0.3), range=(0, 1), scrollSize=0.01, text="SFX Volume: %d%%" % volume * 100, text_scale=0.15, text_align=TextNode.ACenter, text_pos=(.0, 0.15), text_fg=(240 / 255.0, 255 / 255.0, 240 / 255.0, 1), thumb_frameColor=(0.8, 0, 1, 0.75), thumb_relief=DGG.FLAT, frameColor=(0.25, 0.25, 0.55, 1), value=volume, command=self.sliderSFXVolume_ValueChanged) self.sliderSFXVolume.reparentTo(self.frameMain) isChecked = not base.AppHasAudioFocus img = None imgON = "AudioSwitch_on.png" imgOFF = "AudioSwitch_off.png" if base.AppHasAudioFocus: img = imgON else: img = imgOFF self.cbVolumeMute = DirectCheckBox( scale=0.5, text="Mute Audio", text_scale=0.15, text_align=TextNode.ACenter, text_pos=(0.0, 0.15), text_fg=(240 / 255.0, 255 / 255.0, 240 / 255.0, 1), pos=(0, 0, -0.5), command=self.cbVolumeMute_CheckedChanged, rolloverSound=None, clickSound=None, relief=None, pressEffect=False, isChecked=isChecked, image=img, image_scale=0.1, checkedImage=imgOFF, uncheckedImage=imgON) self.cbVolumeMute.setTransparency(True) self.cbVolumeMute.setImage() self.cbVolumeMute.reparentTo(self.frameMain) radio = base.loader.loadModel("radioBtn") radioGeom = (radio.find("**/RadioButtonReady"), radio.find("**/RadioButtonChecked")) self.lblDifficulty = DirectLabel(text="Difficulty", text_fg=(240 / 255.0, 255 / 255.0, 240 / 255.0, 1), text_scale=0.6, scale=0.15, frameColor=(0, 0, 0, 0), pos=(-0.5, 0, -0.6)) self.lblDifficulty.reparentTo(self.frameMain) self.difficulty = [base.difficulty] def createDifficultyDRB(self, text, value, initialValue, xPos): drb = DirectRadioButton( text=text, text_fg=(240 / 255.0, 255 / 255.0, 240 / 255.0, 1), variable=self.difficulty, value=value, indicatorValue=initialValue, boxGeom=radioGeom, boxGeomScale=0.5, #indicator_pad = (0.1, 0.1), scale=0.05, frameColor=(0.5, 0.5, 0.5, 1), pressEffect=False, relief=1, pad=(0.5, 0, 0.5, 0.5), pos=(xPos, 0, -0.6), command=self.rbDifficulty_ValueChanged) drb.indicator.setX(drb.indicator.getX() + 0.1) drb.indicator.setZ(drb.indicator.getZ() + 0.1) drb.reparentTo(self.frameMain) return drb self.difficultyButtons = [ createDifficultyDRB(self, "Easy", [0], 1 if base.difficulty == 0 else 0, 0.5 - 0.3), createDifficultyDRB(self, "Medium", [1], 1 if base.difficulty == 1 else 0, 0.5), createDifficultyDRB(self, "Hard", [2], 1 if base.difficulty == 2 else 0, 0.5 + 0.3) ] for button in self.difficultyButtons: button.setOthers(self.difficultyButtons) self.btnBack = DirectButton(text="Back", scale=0.15, text_pos=(-0.3, -0.2), text_scale=0.6, text_fg=(240 / 255.0, 255 / 255.0, 240 / 255.0, 1), frameColor=(0, 0, 0, 0), image=("btnExit.png", "btnExit_hover.png", "btnExit_hover.png", "btnExit_hover.png"), image_scale=(1, 1, 0.5), pos=(0, 0, -0.8), command=base.messenger.send, extraArgs=["menu_Back"]) self.btnBack.setTransparency(True) self.btnBack.reparentTo(self.frameMain) self.hide()
def __init__(self, mesh_path, progressive_texture_path): resolutions = [] f = tarfile.open(progressive_texture_path) for resolution_name in f.getnames(): toset = { 'size': resolution_name[:-4], 'contents': f.extractfile(resolution_name).read() } texpnm = PNMImage() texpnm.read(StringStream(toset['contents']), 'something.jpg') newtex = Texture() newtex.load(texpnm) toset['texture'] = newtex resolutions.append(toset) self.resolutions = resolutions def aux_loader(fname): return resolutions[0]['contents'] mesh = collada.Collada(mesh_path, aux_file_loader=aux_loader) scene_members = getSceneMembers(mesh) base = ShowBase() rotateNode = GeomNode("rotater") rotatePath = render.attachNewNode(rotateNode) matrix = numpy.identity(4) if mesh.assetInfo.upaxis == collada.asset.UP_AXIS.X_UP: r = collada.scene.RotateTransform(0, 1, 0, 90) matrix = r.matrix elif mesh.assetInfo.upaxis == collada.asset.UP_AXIS.Y_UP: r = collada.scene.RotateTransform(1, 0, 0, 90) matrix = r.matrix rotatePath.setMat(Mat4(*matrix.T.flatten().tolist())) geom, renderstate, mat4 = scene_members[0] node = GeomNode("primitive") node.addGeom(geom) if renderstate is not None: node.setGeomState(0, renderstate) self.geomPath = rotatePath.attachNewNode(node) self.geomPath.setMat(mat4) wrappedNode = ensureCameraAt(self.geomPath, base.camera) base.disableMouse() attachLights(render) render.setShaderAuto() render.setTransparency(TransparencyAttrib.MDual, 1) base.render.analyze() KeyboardMovement() MouseDrag(wrappedNode) MouseScaleZoom(wrappedNode) MouseCamera() num_resolutions = len(resolutions) - 1 self.slider = DirectSlider(range=(0, num_resolutions), value=0, pageSize=1, command=self.sliderMoved, pos=(0, 0, -.9), scale=1) for key, val in uiArgs.iteritems(): self.slider.thumb[key] = val self.triText = OnscreenText(text="", pos=(-1, 0.85), scale=0.15, fg=(1, 0.5, 0.5, 1), align=TextNode.ALeft, mayChange=1) base.run()
def __init__(self): self.frameMain = DirectFrame( image="gui/MenuBackground.png", image_scale=(1.7778, 1, 1), #image_pos=(0, 0, 0.25), frameSize=( base.a2dLeft, base.a2dRight, base.a2dTop, base.a2dBottom), frameColor=(0,0,0,0)) self.frameMain.setTransparency(True) self.logo = DirectFrame( image="Logo.png", image_scale=0.25, image_pos=(0, 0, 0.55), frameSize=( base.a2dLeft, base.a2dRight, base.a2dTop, base.a2dBottom), frameColor=(0,0,0,0)) self.logo.reparentTo(self.frameMain) btnGeom = "gui/button" self.btnBack = menuHelper.createButton(_("Back"), btnGeom, 0, -0.7, ["options_back"]) self.btnBack.reparentTo(self.frameMain) volume = base.musicManager.getVolume() self.sliderVolume = DirectSlider( scale=0.5, pos=(-0.5, 0, 0), range=(0, 1), scrollSize=0.01, text=_("Volume %d%%") % volume*100, text_scale=0.1, text_pos=(0, 0.15), text_fg=(1, 1, 1, 1), thumb_frameColor=(0,0.75, 0.25, 1), frameColor=(0.35, 0.15, 0.05, 1), value=volume, command=self.sliderVolume_ValueChanged) self.sliderVolume.reparentTo(self.frameMain) isChecked = not base.AppHasAudioFocus img = None imgON = "gui/AudioSwitch_on.png" imgOFF = "gui/AudioSwitch_off.png" if base.AppHasAudioFocus: img = imgON else: img = imgOFF self.cbVolumeMute = DirectCheckBox( text=_("Mute Audio"), text_scale=0.5, text_align=TextNode.ACenter, text_pos=(0, 0.65), text_fg=(1, 1, 1, 1), scale=0.105, pos=(0.5, 0, 0), command=self.cbVolumeMute_CheckedChanged, relief=None, pressEffect=False, isChecked=isChecked, image=img, image_scale=0.5, checkedImage=imgOFF, uncheckedImage=imgON) self.cbVolumeMute.setTransparency(True) self.cbVolumeMute.setImage() self.cbVolumeMute.reparentTo(self.frameMain) prcPath = os.path.join(basedir, "%s.prc"%appName) self.advancedOptions = DirectLabel( text=_("Advanced options can be made in the following text file\n%s")%prcPath, text_scale=0.5, text_fg=(1, 1, 1, 1), scale=0.1, pos=(0, 0, -0.25), frameColor=(0, 0, 0, 0)) self.advancedOptions.setTransparency(True) self.advancedOptions.reparentTo(self.frameMain) self.hide()