Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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()