class GagTrack(DirectFrame): def __init__(self, gsg, trackId): DirectFrame.__init__(self) self.gsg = gsg self.trackId = trackId self.trackName = GagGlobals.TrackNameById[trackId] self['image'] = 'phase_14/maps/track_bar.png' self['image_scale'] = (1.119, 0, 0.152) self['relief'] = None color = GagGlobals.TrackColorByName[self.trackName] self['image_color'] = (color[0], color[1], color[2], 1) self.trackText = OnscreenText(text=self.trackName.upper(), fg=(0, 0, 0, 0.65), shadow=(0, 0, 0, 0), pos=(-0.825, -0.022), scale=0.12 * (3.0 / 4.0), align=TextNode.ACenter, parent=self) self.gagBtns = [] self.currentGag = 0 def cleanup(self): self.gsg = None self.trackId = None self.trackName = None self.currentGag = None if self.trackText: self.trackText.destroy() self.trackText = None if self.gagBtns: for btn in self.gagBtns: btn.cleanup() self.gagBtns = None self.destroy() def deselectAll(self): for btn in self.gagBtns: btn.deselect() def isOnLastGag(self): return self.currentGag == len(self.gagBtns) - 1 or not self.gagBtns def isOnFirstGag(self): return self.currentGag == 0 or not self.gagBtns def selectNextGag(self): newIdx = self.currentGag + 1 if newIdx > len(self.gagBtns) - 1: newIdx = 0 self.selectGag(newIdx) def selectPrevGag(self): newIdx = self.currentGag - 1 if newIdx < 0: newIdx = len(self.gagBtns) - 1 self.selectGag(newIdx) def selectGag(self, idx): self.deselectAll() if self.gagBtns: self.currentGag = idx self.gagBtns[self.currentGag].select() def selectFirstGag(self): self.selectGag(0) def selectLastGag(self): self.selectGag(len(self.gagBtns) - 1) def stashContents(self): self.trackText.stash() for btn in self.gagBtns: btn.deselect() btn.stash() self.currentGag = 0 def unstashContents(self): self.trackText.unstash() for btn in self.gagBtns: btn.unstash() def load(self): gags = GagGlobals.TrackGagNamesByTrackName[self.trackName] for i in xrange(len(gags)): gagName = gags[i] gagId = base.cr.attackMgr.getAttackIDByName(gagName) btn = GagWidget(self, gagId) btn.reparentTo(self) btn.setX(GAG_BTN_START + (GAG_BTN_OFFSET * i)) if not base.localAvatar.hasAttackId( gagId) or gagName not in GagGlobals.tempAllowedGags: btn.setLocked(True) else: btn.setLocked(False) self.gagBtns.append(btn) self.stashContents()