class CogdoFlyingGuiManager: def __init__(self, player): self.player = player self.root = NodePath("CogdoFlyingGui") self.root.reparentTo(aspect2d) self.fuelMeter = NodePath("scrubMeter") self.fuelMeter.reparentTo(self.root) self.fuelMeter.setPos(1.1, 0.0, -0.7) self.fuelMeter.setSz(2.0) cm = CardMaker('card') cm.setFrame(-0.07, 0.07, 0.0, 0.75) self.fuelMeterBar = self.fuelMeter.attachNewNode(cm.generate()) self.fuelMeterBar.setColor(0.95, 0.95, 0.0, 1.0) self.fuelLabel = DirectLabel( parent=self.root, relief=None, pos=(1.1, 0, -0.8), scale=0.075, text="Fuel", text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_font=ToontownGlobals.getInterfaceFont(), ) self.messageLabel = DirectLabel( parent=self.root, relief=None, pos=(0.0, 0.0, -0.9), scale=0.1, text=" ", text_align=TextNode.ACenter, text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_font=ToontownGlobals.getInterfaceFont(), textMayChange=1, ) self.messageLabel.stash() self.winLabel = DirectLabel( parent=self.root, relief=None, pos=(0.0, 0.0, 0.0), scale=0.25, text="You win!", text_align=TextNode.ACenter, text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_font=ToontownGlobals.getInterfaceFont(), ) self.winLabel.stash() self.refuelLerp = LerpFunctionInterval(self.fuelMeterBar.setSz, fromData=0.0, toData=1.0, duration=2.0) def setRefuelLerpFromData(self): startScale = self.fuelMeterBar.getSz() self.refuelLerp.fromData = startScale def setMessageLabelText(self, text): self.messageLabel["text"] = text self.messageLabel.setText() def update(self): self.fuelMeterBar.setSz(self.player.fuel) def destroy(self): # print "Destroying GUI" self.fuelMeterBar.detachNode() self.fuelMeterBar = None self.fuelLabel.detachNode() self.fuelLabel = None self.fuelMeter.detachNode() self.fuelMeter = None self.winLabel.detachNode() self.winLabel = None self.root.detachNode() self.root = None self.player = None
class DirectSidebar(DirectFrame): def __init__( self, parent=None, frameSize=(1, 1), dragbarSize=0.05, align=ALIGN_LEFT | ALIGN_TOP, orientation=HORIZONTAL, opendir=RIGHT_OR_DOWN, pos=Vec3(0, 0, 0), text='', toggleFunc=None, frameColor=(1, 1, 1, 1), ): if parent is None: parent = aspect2d self.dragbarSize = dragbarSize self.align = align self.orientation = orientation self.opendir = opendir self.pos = pos self.frameSize = frameSize self.toggleFunc = toggleFunc self.collapsed = False DirectFrame.__init__( self, parent=parent, frameSize=(0, frameSize[0], 0, frameSize[1]), frameColor=frameColor, suppressMouse=1, ) self.initialiseoptions(DirectSidebar) self.resetFrameSize() self.collapseButton = DirectButton( parent=parent, borderWidth=(0, 0), relief=DGG.FLAT, command=self.toggleCollapsed, ) self.label = DirectLabel(parent=self.collapseButton, scale=0.04, text=text, text_align=TextNode.ACenter, frameColor=(0, 0, 0, 0)) if self.orientation == HORIZONTAL: self.label.setPos(Vec3(frameSize[0] / 2., 0, 0.015)) if self.orientation == VERTICAL: self.label.setPos(Vec3(0.035, 0, frameSize[1] / 2.)) self.label.setR(-90) self.accept('window-event', self.update) self.update() def destroy(self): self.label.detachNode() self.collapseButton.detachNode() self.detachNode() self.ignoreAll() #'window-event', self.update) def __del__(self): self.destroy() def update(self, args=None): aspectRatio = base.getAspectRatio() framePos = Vec3(self.pos[0], 0, self.pos[2]) if self.align & ALIGN_LEFT: framePos += Vec3(-aspectRatio, 0, 0) if self.align & ALIGN_RIGHT: framePos += Vec3(aspectRatio, 0, 0) if self.align & ALIGN_TOP: framePos += Vec3(0, 0, 1 - self.frameSize[1]) if self.align & ALIGN_BOTTOM: framePos += Vec3(0, 0, -1) if self.orientation == HORIZONTAL: if self.align & ALIGN_RIGHT: # a small help for the user framePos -= Vec3(self.frameSize[0], 0, 0) buttonSize = (0, self.frameSize[0], 0, self.dragbarSize) if self.opendir == RIGHT_OR_DOWN: # correct if self.collapsed: buttonPos = framePos + Vec3( 0, 0, self.frameSize[1] - self.dragbarSize) else: buttonPos = framePos + Vec3(0, 0, -self.dragbarSize) elif self.opendir == LEFT_OR_UP: if self.collapsed: buttonPos = framePos else: buttonPos = framePos + Vec3(0, 0, self.frameSize[1]) elif self.orientation == VERTICAL: buttonSize = (0, self.dragbarSize, 0, self.frameSize[1]) if self.opendir == RIGHT_OR_DOWN: if self.collapsed: buttonPos = framePos else: buttonPos = framePos + Vec3(self.frameSize[0], 0, 0) elif self.opendir == LEFT_OR_UP: framePos -= Vec3(self.frameSize[0], 0, 0) # a small help for the user if self.collapsed: buttonPos = framePos + Vec3( self.frameSize[0] - self.dragbarSize, 0, 0) else: buttonPos = framePos if self.collapsed: self.hide() else: self.show() self.setPos(framePos) self.collapseButton.setPos(buttonPos) self.collapseButton['frameSize'] = buttonSize def toggleCollapsed(self, state=None): if state is None: state = not self.collapsed self.collapsed = state if self.toggleFunc: try: self.toggleFunc(state) except: traceback.print_exc() self.update()
class DirectSidebar(DirectFrame): def __init__( self, parent=None, frameSize=(1, 1), dragbarSize=0.05, align=ALIGN_LEFT|ALIGN_TOP, orientation=HORIZONTAL, opendir=RIGHT_OR_DOWN, pos=Vec3(0,0,0), text='', toggleFunc=None, frameColor=(1,1,1,1), ): if parent is None: parent=aspect2d self.dragbarSize=dragbarSize self.align=align self.orientation=orientation self.opendir=opendir self.pos=pos self.frameSize=frameSize self.toggleFunc=toggleFunc self.collapsed=False DirectFrame.__init__( self, parent=parent, frameSize=(0,frameSize[0],0,frameSize[1]), frameColor=frameColor, suppressMouse=1, ) self.initialiseoptions(DirectSidebar) self.resetFrameSize() self.collapseButton = DirectButton( parent=parent, borderWidth=(0, 0), relief=DGG.FLAT, command=self.toggleCollapsed, ) self.label = DirectLabel( parent=self.collapseButton, scale=0.04, text=text, text_align=TextNode.ACenter, frameColor=(0,0,0,0) ) if self.orientation == HORIZONTAL: self.label.setPos(Vec3(frameSize[0]/2.,0,0.015)) if self.orientation == VERTICAL: self.label.setPos(Vec3(0.035,0,frameSize[1]/2.)) self.label.setR(-90) self.accept('window-event', self.update) self.update() def destroy(self): self.label.detachNode() self.collapseButton.detachNode() self.detachNode() self.ignoreAll()#'window-event', self.update) def __del__(self): self.destroy() def update(self, args=None): aspectRatio=base.getAspectRatio() framePos=Vec3(self.pos[0],0,self.pos[2]) if self.align & ALIGN_LEFT: framePos+=Vec3(-aspectRatio,0,0) if self.align & ALIGN_RIGHT: framePos+=Vec3(aspectRatio,0,0) if self.align & ALIGN_TOP: framePos+=Vec3(0,0,1-self.frameSize[1]) if self.align & ALIGN_BOTTOM: framePos+=Vec3(0,0,-1) if self.orientation == HORIZONTAL: if self.align & ALIGN_RIGHT: # a small help for the user framePos-=Vec3(self.frameSize[0],0,0) buttonSize=(0,self.frameSize[0],0,self.dragbarSize) if self.opendir == RIGHT_OR_DOWN: # correct if self.collapsed: buttonPos=framePos+Vec3(0,0,self.frameSize[1]-self.dragbarSize) else: buttonPos=framePos+Vec3(0,0,-self.dragbarSize) elif self.opendir == LEFT_OR_UP: if self.collapsed: buttonPos=framePos else: buttonPos=framePos+Vec3(0,0,self.frameSize[1]) elif self.orientation == VERTICAL: buttonSize=(0,self.dragbarSize,0,self.frameSize[1]) if self.opendir == RIGHT_OR_DOWN: if self.collapsed: buttonPos=framePos else: buttonPos=framePos+Vec3(self.frameSize[0],0,0) elif self.opendir == LEFT_OR_UP: framePos-=Vec3(self.frameSize[0],0,0) # a small help for the user if self.collapsed: buttonPos=framePos+Vec3(self.frameSize[0]-self.dragbarSize,0,0) else: buttonPos=framePos if self.collapsed: self.hide() else: self.show() self.setPos(framePos) self.collapseButton.setPos(buttonPos) self.collapseButton['frameSize']=buttonSize def toggleCollapsed(self,state=None): if state is None: state=not self.collapsed self.collapsed=state if self.toggleFunc: try: self.toggleFunc(state) except: traceback.print_exc() self.update()