class KOTHGui(DirectFrame):
    notify = directNotify.newCategory('KOTHGui')

    pointsSfx = None
    points = None

    def __init__(self):
        # Let's load up the DirectFrame
        DirectFrame.__init__(self,
                             parent=base.a2dTopLeft,
                             relief=None,
                             pos=(0.275, 1, -0.7),
                             sortOrder=0)

        # The variables we're going to be using.
        self.pointsSfx = loader.loadSfx('phase_4/audio/sfx/MG_maze_pickup.ogg')
        self.points = 0

        # Background because it won't work for whatever reason.
        gui = loader.loadModel('phase_4/models/gui/purchase_gui.bam')
        panel = gui.find('**/yellowPanel')
        self.bg = OnscreenImage(image=panel, parent=self)

        # Let's setup the header text.
        self.title = OnscreenText(text='Capture Points',
                                  font=CIGlobals.getMinnieFont(),
                                  parent=self,
                                  scale=0.0475,
                                  pos=(0, 0.18),
                                  fg=(1, 0, 0, 1),
                                  shadow=(0.2, 0.2, 0.2, 1))

        # Let's setup the amount text.
        self.amt_label = OnscreenText(text=str(self.points),
                                      font=CIGlobals.getToonFont(),
                                      parent=self,
                                      scale=0.15,
                                      pos=(0, 0.03525),
                                      shadow=(0.5, 0.5, 0.5, 0.6))

        # Let's setup the info text.
        self.info = OnscreenText(
            text=
            'First Toon to 100 points wins!\nEarn points by standing on the\nhill after capturing it.',
            parent=self,
            font=CIGlobals.getToonFont(),
            scale=0.035,
            pos=(0, -0.05),
            fg=(1.5, 0, 0, 1),
            shadow=(0.2, 0.2, 0.2, 1))

        # We're not ready to show the GUI yet.
        self.hide()

    def show(self):
        self.title.show()
        self.amt_label.show()
        self.info.show()
        self.bg.show()

    def hide(self):
        self.title.hide()
        self.amt_label.hide()
        self.info.hide()
        self.bg.hide()

    def destroy(self):
        self.title.destroy()
        self.amt_label.destroy()
        self.info.destroy()
        self.bg.destroy()
        self.title = None
        self.amt_label = None
        self.info = None
        self.bg = None

        # Let's get rid of the sound.
        self.pointsSfx.stop()
        self.pointsSfx = None

        self.points = None
        DirectFrame.destroy(self)

    def setPoints(self, points):
        self.points = points
        self.amt_label.setText(str(self.points))
        self.pointsSfx.play()

    def getPoints(self):
        return self.points
예제 #2
0
class GagWidget(DirectButton):

    Idle = (0, 115 / 255.0, 194 / 255.0, 1)
    Selected = (0, 115 / 255.0 * 1.5, 194 / 255.0 * 1.5, 1)

    NoAmmoIdle = (0, 115 / 255.0 / 1.75, 194 / 255.0 / 1.75, 1)
    NoAmmoSelected = (0, 115 / 255.0 / 1.75, 194 / 255.0 / 1.75, 1)

    LockedIdle = (0.5, 0.5, 0.5, 1.0)
    LockedSelected = (0.5, 0.5, 0.5, 1.0)

    def __init__(self, track, gagId):
        self.track = track
        self.gagId = gagId
        self.gagName = base.cr.attackMgr.getAttackName(gagId)

        self.lastScale = 1.0
        self.goalScale = 1.0
        self.scaleLerpTask = taskMgr.add(self.__scaleLerp, "scaleLerp")

        self.locked = False

        DirectButton.__init__(self,
                              scale=1,
                              relief=None,
                              pressEffect=False,
                              rolloverSound=None,
                              clickSound=None,
                              command=self.track.gsg.selectCurrentGag)
        self['image'] = 'phase_14/maps/gag_box.png'
        self['image_scale'] = (0.115, 0, 0.114)
        self.bind(DGG.ENTER, self.mouseEnter)
        self.bind(DGG.EXIT, self.mouseExit)

        self.lockedImg = OnscreenImage(image='phase_14/maps/lock.png',
                                       scale=(0.061, 0, 0.089),
                                       parent=self,
                                       color=(1, 1, 1, 0.5))

        invIcons = loader.loadModel("phase_3.5/models/gui/inventory_icons.bam")
        self.gagImg = OnscreenGeom(geom=invIcons.find(
            GagGlobals.InventoryIconByName[self.gagName]),
                                   scale=0.85,
                                   parent=self)
        invIcons.removeNode()
        del invIcons

        self.initialiseoptions(GagWidget)

    def mouseEnter(self, foo=None, bar=None):
        if self.track.gsg.getCurrentOrNextState() == 'Select':
            self.track.gsg.ignoreSelectionClick()
        self.track.gsg.resetTimeout()
        self.select()

    def mouseExit(self, foo=None, bar=None):
        if self.track.gsg.getCurrentOrNextState() == 'Select':
            self.track.gsg.acceptSelectionClick()
        self.track.gsg.resetTimeout()
        self.deselect()

    def cleanup(self):
        if self.scaleLerpTask:
            self.scaleLerpTask.remove()
            self.scaleLerpTask = None

        self.lastScale = None
        self.goalScale = None
        self.locked = None
        self.gagId = None
        self.gagName = None

        if self.lockedImg:
            self.lockedImg.destroy()
            self.lockedImg = None
        if self.gagImg:
            self.gagImg.destroy()
            self.gagImg = None

        self.destroy()

    def __scaleLerp(self, task):
        if self.lastScale == self.goalScale:
            return task.cont

        self.lastScale = CIGlobals.lerpWithRatio(self.goalScale,
                                                 self.lastScale, 0.8)
        self.setScale(self.lastScale)

        return task.cont

    def stash(self):
        self.scaleLerpTask.remove()
        DirectButton.stash(self)

    def unstash(self):
        taskMgr.add(self.scaleLerpTask)
        DirectButton.unstash(self)

    def select(self):
        if self.locked:
            self['image_color'] = self.LockedSelected
        elif not self.hasAmmo():
            self['image_color'] = self.NoAmmoSelected
        else:
            self['image_color'] = self.Selected

        self.goalScale = 1.15

        if self.track.gsg.currentGag != self:
            if self.track.gsg.currentGag is not None:
                self.track.gsg.currentGag.deselect()
            self.track.gsg.currentGag = self
            self.track.gsg.update()

    def hasAmmo(self):
        if not base.localAvatar.hasAttackId(self.gagId):
            return False

        return base.localAvatar.getAttack(self.gagId).hasAmmo()

    def deselect(self):
        if self.locked:
            self['image_color'] = self.LockedIdle
        elif not self.hasAmmo():
            self['image_color'] = self.NoAmmoIdle
        else:
            self['image_color'] = self.Idle
        self.goalScale = 1.0

        if self.track.gsg.currentGag == self:
            self.track.gsg.currentGag = None

    def setLocked(self, flag):
        self.locked = flag
        if flag:
            self.lockedImg.show()
            self.gagImg.hide()
            self['image_color'] = self.LockedIdle
            self['state'] = DGG.DISABLED
        else:
            self.lockedImg.hide()
            self.gagImg.show()
            self['image_color'] = self.Idle
            self['state'] = DGG.NORMAL
class KOTHGui(DirectFrame):
    notify = directNotify.newCategory('KOTHGui')
    pointsSfx = None
    points = None

    def __init__(self):
        DirectFrame.__init__(self,
                             parent=base.a2dTopLeft,
                             relief=None,
                             pos=(0.275, 1, -0.7),
                             sortOrder=0)
        self.pointsSfx = loader.loadSfx('phase_4/audio/sfx/MG_maze_pickup.ogg')
        self.points = 0
        gui = loader.loadModel('phase_4/models/gui/purchase_gui.bam')
        panel = gui.find('**/yellowPanel')
        self.bg = OnscreenImage(image=panel, parent=self)
        self.title = OnscreenText(text='Capture Points',
                                  font=CIGlobals.getMinnieFont(),
                                  parent=self,
                                  scale=0.0475,
                                  pos=(0, 0.18),
                                  fg=(1, 0, 0, 1),
                                  shadow=(0.2, 0.2, 0.2, 1))
        self.amt_label = OnscreenText(text=str(self.points),
                                      font=CIGlobals.getToonFont(),
                                      parent=self,
                                      scale=0.15,
                                      pos=(0, 0.03525),
                                      shadow=(0.5, 0.5, 0.5, 0.6))
        self.info = OnscreenText(
            text=
            'First Toon to 100 points wins!\nEarn points by standing on the\nhill after capturing it.',
            parent=self,
            font=CIGlobals.getToonFont(),
            scale=0.035,
            pos=(0, -0.05),
            fg=(1.5, 0, 0, 1),
            shadow=(0.2, 0.2, 0.2, 1))
        self.hide()
        return

    def show(self):
        self.title.show()
        self.amt_label.show()
        self.info.show()
        self.bg.show()

    def hide(self):
        self.title.hide()
        self.amt_label.hide()
        self.info.hide()
        self.bg.hide()

    def destroy(self):
        self.title.destroy()
        self.amt_label.destroy()
        self.info.destroy()
        self.bg.destroy()
        self.title = None
        self.amt_label = None
        self.info = None
        self.bg = None
        self.pointsSfx.stop()
        self.pointsSfx = None
        self.points = None
        DirectFrame.destroy(self)
        return

    def setPoints(self, points):
        self.points = points
        self.amt_label.setText(str(self.points))
        self.pointsSfx.play()

    def getPoints(self):
        return self.points