Esempio n. 1
0
class RepairGameButton(GuiButton):
    def __init__(self, parent, **kw):
        optiondefs = (('nodePath', None, None), ('image_scale', (1.0, 1.0,
                                                                 1.0), None))
        self.defineoptions(kw, optiondefs)
        GuiButton.__init__(self, parent)
        self.initialiseoptions(RepairGameButton)
        self.disabledStateNode = self.stateNodePath[3].getChild(0)
        self.downStateNode = self.stateNodePath[1].getChild(0)
        self.overStateNode = self.stateNodePath[2].getChild(0)
        self.inProgress = False
        self._initGUI()

    def _initGUI(self):
        self.setBin('fixed', 33)
        mainGui = loader.loadModel('models/gui/gui_main')
        gui = loader.loadModel('models/gui/toplevel_gui')
        self.checkMark = gui.find('**/generic_check')
        self.checkMark.reparentTo(self)
        self.checkMark.stash()
        self.checkMark.setScale(1.0)
        self.checkMark.setColorScale(0.0, 1.0, 0.0, 1.0)
        self.checkMark.setPos(0.02, 0.0, 0.02)
        self.checkMark.setBin('fixed', 34)
        self.skillRing = DialMeter(self,
                                   wantCover=False,
                                   dangerRatio=0.0,
                                   meterColor=Vec4(0.90000000000000002,
                                                   0.90000000000000002,
                                                   0.10000000000000001, 1.0),
                                   baseColor=Vec4(0.14999999999999999,
                                                  0.070000000000000007,
                                                  0.029999999999999999, 1.0),
                                   completeColor=Vec4(0.10000000000000001,
                                                      0.90000000000000002,
                                                      0.10000000000000001,
                                                      1.0))
        self.skillRing.reparentTo(self)
        self.skillRing.setScale(0.28499999999999998, 0.29999999999999999,
                                0.26500000000000001)
        self.skillRing.setBin('fixed', 32)
        self.skillGlow = OnscreenImage(parent=self,
                                       image=mainGui.find('**/icon_glow'),
                                       scale=(1.0, 1.0, 1.0),
                                       color=(1.0, 1.0, 0.59999999999999998,
                                              1.0))
        self.glow = OnscreenImage(parent=self,
                                  image=mainGui.find('**/icon_glow'),
                                  scale=(1.0, 1.0, 1.0),
                                  color=(1.0, 1.0, 0.59999999999999998, 1.0))
        self.skillGlow.reparentTo(self)
        self.skillGlow.setBin('fixed', 31)
        self.skillGlow.stash()
        self.pirateNameBox = None
        self.pirateNameLabel = None

    def showGlow(self):
        self.inProgress = False
        if self.pirateNameLabel == None and self.checkMark.isStashed():
            self.skillGlow.unstash()

    def hideGlow(self):
        self.inProgress = True
        self.skillGlow.stash()

    def setProgress(self, percent):
        self.skillGlow.stash()
        ratio = max(0.0, percent / 100.0)
        if ratio >= 1.0:
            if self.checkMark.isStashed():
                self.checkMark.unstash()

        elif not self.checkMark.isStashed():
            self.checkMark.stash()

        if self.pirateNameLabel == None and not (self.inProgress):
            self.skillGlow.unstash()

        self.skillRing.update(ratio, 1.0)
        self.skillRing.wrtReparentTo(self.getParent())
        self.reparentTo(self.getParent())

    def updatePirateNameBox(self, pirateName):
        if self.pirateNameLabel != None and self.pirateNameLabel[
                'text'] != pirateName:
            if self.pirateNameBox:
                self.pirateNameBox.destroy()

            if self.pirateNameLabel:
                self.pirateNameLabel.destroy()

            self.pirateNameBox = None
            self.pirateNameLabel = None

        if pirateName != '':
            if self.pirateNameBox:
                pass
            if not (self.pirateNameLabel['text'] == pirateName):
                self.createPirateNameBox(pirateName)

    def createPirateNameBox(self, pirateName):
        self.pirateNameLabel = DirectLabel(
            relief=None,
            state=DGG.DISABLED,
            text=pirateName,
            text_align=TextNode.ACenter,
            text_scale=PiratesGuiGlobals.TextScaleMed,
            text_fg=PiratesGuiGlobals.TextFG1,
            text_wordwrap=12,
            textMayChange=0,
            sortOrder=91)
        self.pirateNameLabel.setBin('fixed', 33)
        height = self.pirateNameLabel.getHeight()
        width = self.pirateNameLabel.getWidth() + 0.050000000000000003
        pos = [0.0, 0.0, height / 2 - 0.035000000000000003]
        fs = [
            -(width / 2 + 0.01), width / 2 + 0.01,
            -(height / 2 + 0.014999999999999999),
            height / 2 + 0.014999999999999999
        ]
        self.pirateNameBox = BorderFrame(parent=self,
                                         state=DGG.DISABLED,
                                         frameSize=(fs[0], fs[1], fs[2],
                                                    fs[3]),
                                         modelName='general_frame_f',
                                         pos=(0.0, 0.0, 0.0))
        self.pirateNameLabel.reparentTo(self.pirateNameBox)
        self.pirateNameLabel.setPos(pos[0], pos[1], pos[2])
        self.pirateNameBox.setClipPlaneOff()
        pos = self.pirateNameBox.getPos(aspect2d)
        x = min(pos[0], base.a2dRight - width)
        z = max(pos[2], base.a2dBottom - height)
        self.pirateNameBox.setPos(aspect2d, x, 0, z - 0.17499999999999999)
        self.pirateNameBox.flattenLight()
        self.pirateNameBox.setBin('fixed', 32)
        self.pirateNameBox.reparentTo(self)
class RepairGameButton(GuiButton):
    
    def __init__(self, parent, **kw):
        optiondefs = (('nodePath', None, None), ('image_scale', (1.0, 1.0, 1.0), None))
        self.defineoptions(kw, optiondefs)
        GuiButton.__init__(self, parent)
        self.initialiseoptions(RepairGameButton)
        self.disabledStateNode = self.stateNodePath[3].getChild(0)
        self.downStateNode = self.stateNodePath[1].getChild(0)
        self.overStateNode = self.stateNodePath[2].getChild(0)
        self.inProgress = False
        self._initGUI()

    
    def _initGUI(self):
        self.setBin('fixed', 33)
        mainGui = loader.loadModel('models/gui/gui_main')
        gui = loader.loadModel('models/gui/toplevel_gui')
        self.checkMark = gui.find('**/generic_check')
        self.checkMark.reparentTo(self)
        self.checkMark.stash()
        self.checkMark.setScale(1.0)
        self.checkMark.setColorScale(0.0, 1.0, 0.0, 1.0)
        self.checkMark.setPos(0.02, 0.0, 0.02)
        self.checkMark.setBin('fixed', 34)
        self.skillRing = DialMeter(self, wantCover = False, dangerRatio = 0.0, meterColor = Vec4(0.90000000000000002, 0.90000000000000002, 0.10000000000000001, 1.0), baseColor = Vec4(0.14999999999999999, 0.070000000000000007, 0.029999999999999999, 1.0), completeColor = Vec4(0.10000000000000001, 0.90000000000000002, 0.10000000000000001, 1.0))
        self.skillRing.reparentTo(self)
        self.skillRing.setScale(0.28499999999999998, 0.29999999999999999, 0.26500000000000001)
        self.skillRing.setBin('fixed', 32)
        self.skillGlow = OnscreenImage(parent = self, image = mainGui.find('**/icon_glow'), scale = (1.0, 1.0, 1.0), color = (1.0, 1.0, 0.59999999999999998, 1.0))
        self.glow = OnscreenImage(parent = self, image = mainGui.find('**/icon_glow'), scale = (1.0, 1.0, 1.0), color = (1.0, 1.0, 0.59999999999999998, 1.0))
        self.skillGlow.reparentTo(self)
        self.skillGlow.setBin('fixed', 31)
        self.skillGlow.stash()
        self.pirateNameBox = None
        self.pirateNameLabel = None

    
    def showGlow(self):
        self.inProgress = False
        if self.pirateNameLabel == None and self.checkMark.isStashed():
            self.skillGlow.unstash()
        

    
    def hideGlow(self):
        self.inProgress = True
        self.skillGlow.stash()

    
    def setProgress(self, percent):
        self.skillGlow.stash()
        ratio = max(0.0, percent / 100.0)
        if ratio >= 1.0:
            if self.checkMark.isStashed():
                self.checkMark.unstash()
            
        elif not self.checkMark.isStashed():
            self.checkMark.stash()
        
        if self.pirateNameLabel == None and not (self.inProgress):
            self.skillGlow.unstash()
        
        self.skillRing.update(ratio, 1.0)
        self.skillRing.wrtReparentTo(self.getParent())
        self.reparentTo(self.getParent())

    
    def updatePirateNameBox(self, pirateName):
        if self.pirateNameLabel != None and self.pirateNameLabel['text'] != pirateName:
            if self.pirateNameBox:
                self.pirateNameBox.destroy()
            
            if self.pirateNameLabel:
                self.pirateNameLabel.destroy()
            
            self.pirateNameBox = None
            self.pirateNameLabel = None
        
        if pirateName != '':
            if self.pirateNameBox:
                pass
            if not (self.pirateNameLabel['text'] == pirateName):
                self.createPirateNameBox(pirateName)
            

    
    def createPirateNameBox(self, pirateName):
        self.pirateNameLabel = DirectLabel(relief = None, state = DGG.DISABLED, text = pirateName, text_align = TextNode.ACenter, text_scale = PiratesGuiGlobals.TextScaleMed, text_fg = PiratesGuiGlobals.TextFG1, text_wordwrap = 12, textMayChange = 0, sortOrder = 91)
        self.pirateNameLabel.setBin('fixed', 33)
        height = self.pirateNameLabel.getHeight()
        width = self.pirateNameLabel.getWidth() + 0.050000000000000003
        pos = [
            0.0,
            0.0,
            height / 2 - 0.035000000000000003]
        fs = [
            -(width / 2 + 0.01),
            width / 2 + 0.01,
            -(height / 2 + 0.014999999999999999),
            height / 2 + 0.014999999999999999]
        self.pirateNameBox = BorderFrame(parent = self, state = DGG.DISABLED, frameSize = (fs[0], fs[1], fs[2], fs[3]), modelName = 'general_frame_f', pos = (0.0, 0.0, 0.0))
        self.pirateNameLabel.reparentTo(self.pirateNameBox)
        self.pirateNameLabel.setPos(pos[0], pos[1], pos[2])
        self.pirateNameBox.setClipPlaneOff()
        pos = self.pirateNameBox.getPos(aspect2d)
        x = min(pos[0], base.a2dRight - width)
        z = max(pos[2], base.a2dBottom - height)
        self.pirateNameBox.setPos(aspect2d, x, 0, z - 0.17499999999999999)
        self.pirateNameBox.flattenLight()
        self.pirateNameBox.setBin('fixed', 32)
        self.pirateNameBox.reparentTo(self)
class CannonDefenseTimeRemainingUI:
    __module__ = __name__

    def __init__(self):
        self.timeRemaining = None
        self.skillRing = None
        self._loadAssets()
        return

    def _loadAssets(self):
        timer = None
        try:
            timer = loader.loadModel('models/gui/pir_m_gui_can_timer')
            self.timeRemaining = base.a2dTopRight.attachNewNode(
                'CannonDefenseTimeRemaining')
            self.timeRemaining.setDepthTest(True)
            self.timeRemaining.setDepthWrite(True)
            self.timeRemaining.setScale(0.75)
            model = self.timeRemaining.attachNewNode('model')
            foreGround = timer.find('**/timer')
            self.skillRing = DialMeter(model,
                                       wantCover=False,
                                       dangerRatio=0.0,
                                       meterColor=Vec4(0.11328125, 0.09375,
                                                       0.05078125, 1.0),
                                       baseColor=Vec4(1.0, 0.0, 0.0, 1.0))
            self.skillRing.setScale(0.5)
            self.skillRing.setR(180)
            self.skillRing.update(0.0, 1.0)
            foreGround.reparentTo(model)
            foreGround.setY(-0.1)
            self.__createWaveText(model)
            self.__createWaveLabel(model)
            min = Point3()
            max = Point3()
            model.calcTightBounds(min, max)
            size = max - min
            model.setPos(-size[0] / 2.0, 0, -size[2] / 2.0)
        finally:
            if timer:
                timer.removeNode()
        return

    def __createWaveText(self, parent):
        self.waveNumberTxt = TextNode('WaveNumber')
        self.waveNumberTxt.setFont(PiratesGlobals.getInterfaceFont())
        self.waveNumberTxt.setTextColor(PiratesGuiGlobals.TextFG1)
        self.waveNumberTxt.setShadow(0.05, 0.05)
        self.waveNumberTxt.setAlign(TextNode.ACenter)
        waveTxtNode = parent.attachNewNode(self.waveNumberTxt)
        waveTxtNode.setScale(0.12)
        waveTxtNode.setPos(0, -0.2, -0.08)
        waveTxtNode.setDepthTest(False)
        waveTxtNode.setDepthWrite(False)

    def __createWaveLabel(self, parent):
        self.waveLabelTxt = TextNode('WaveLabel')
        self.waveLabelTxt.setFont(PiratesGlobals.getInterfaceFont())
        self.waveLabelTxt.setTextColor(PiratesGuiGlobals.TextFG1)
        self.waveLabelTxt.setShadow(0.05, 0.05)
        self.waveLabelTxt.setAlign(TextNode.ACenter)
        self.waveLabelTxt.setText(PLocalizer.CannonDefense['WaveLabel'])
        waveLblNode = parent.attachNewNode(self.waveLabelTxt)
        waveLblNode.setScale(0.06)
        waveLblNode.setPos(0, -0.2, 0.015)
        waveLblNode.setDepthTest(False)
        waveLblNode.setDepthWrite(False)

    def destroy(self):
        self.timeRemaining.removeNode()

    def hide(self):
        self.timeRemaining.hide()

    def show(self):
        self.timeRemaining.show()

    def setPercent(self, percent):
        if percent < 0.0:
            percent = 0.0
        else:
            if percent > 1.0:
                percent = 1.0
        self.skillRing.update(percent, 1.0)

    def setWaveNumber(self, num):
        self.waveNumberTxt.setText(str(num))
class CannonDefenseTimeRemainingUI:
    
    def __init__(self):
        self.timeRemaining = None
        self.skillRing = None
        self._loadAssets()

    
    def _loadAssets(self):
        timer = None
        
        try:
            timer = loader.loadModel('models/gui/pir_m_gui_can_timer')
            self.timeRemaining = base.a2dTopRight.attachNewNode('CannonDefenseTimeRemaining')
            self.timeRemaining.setDepthTest(True)
            self.timeRemaining.setDepthWrite(True)
            self.timeRemaining.setScale(0.75)
            model = self.timeRemaining.attachNewNode('model')
            foreGround = timer.find('**/timer')
            self.skillRing = DialMeter(model, wantCover = False, dangerRatio = 0.0, meterColor = Vec4(0.11328125, 0.09375, 0.05078125, 1.0), baseColor = Vec4(1.0, 0.0, 0.0, 1.0))
            self.skillRing.setScale(0.5)
            self.skillRing.setR(180)
            self.skillRing.update(0.0, 1.0)
            foreGround.reparentTo(model)
            foreGround.setY(-0.10000000000000001)
            self._CannonDefenseTimeRemainingUI__createWaveText(model)
            self._CannonDefenseTimeRemainingUI__createWaveLabel(model)
            min = Point3()
            max = Point3()
            model.calcTightBounds(min, max)
            size = max - min
            model.setPos(-size[0] / 2.0, 0, -size[2] / 2.0)
        finally:
            if timer:
                timer.removeNode()
            


    
    def _CannonDefenseTimeRemainingUI__createWaveText(self, parent):
        self.waveNumberTxt = TextNode('WaveNumber')
        self.waveNumberTxt.setFont(PiratesGlobals.getInterfaceFont())
        self.waveNumberTxt.setTextColor(PiratesGuiGlobals.TextFG1)
        self.waveNumberTxt.setShadow(0.050000000000000003, 0.050000000000000003)
        self.waveNumberTxt.setAlign(TextNode.ACenter)
        waveTxtNode = parent.attachNewNode(self.waveNumberTxt)
        waveTxtNode.setScale(0.12)
        waveTxtNode.setPos(0, -0.20000000000000001, -0.080000000000000002)
        waveTxtNode.setDepthTest(False)
        waveTxtNode.setDepthWrite(False)

    
    def _CannonDefenseTimeRemainingUI__createWaveLabel(self, parent):
        self.waveLabelTxt = TextNode('WaveLabel')
        self.waveLabelTxt.setFont(PiratesGlobals.getInterfaceFont())
        self.waveLabelTxt.setTextColor(PiratesGuiGlobals.TextFG1)
        self.waveLabelTxt.setShadow(0.050000000000000003, 0.050000000000000003)
        self.waveLabelTxt.setAlign(TextNode.ACenter)
        self.waveLabelTxt.setText(PLocalizer.CannonDefense['WaveLabel'])
        waveLblNode = parent.attachNewNode(self.waveLabelTxt)
        waveLblNode.setScale(0.059999999999999998)
        waveLblNode.setPos(0, -0.20000000000000001, 0.014999999999999999)
        waveLblNode.setDepthTest(False)
        waveLblNode.setDepthWrite(False)

    
    def destroy(self):
        self.timeRemaining.removeNode()

    
    def hide(self):
        self.timeRemaining.hide()

    
    def show(self):
        self.timeRemaining.show()

    
    def setPercent(self, percent):
        if percent < 0.0:
            percent = 0.0
        elif percent > 1.0:
            percent = 1.0
        
        self.skillRing.update(percent, 1.0)

    
    def setWaveNumber(self, num):
        self.waveNumberTxt.setText(str(num))