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
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