from toontown.toonbase import ToontownGlobals import ShtikerPage from direct.directnotify import DirectNotifyGlobal from direct.gui.DirectGui import * from panda3d.core import * from toontown.toonbase import TTLocalizer from toontown.fishing import FishPicker from toontown.fishing import FishBrowser from toontown.fishing import FishGlobals FishPage_Tank = 0 FishPage_Collection = 1 FishPage_Trophy = 2 TROPHIES_PER_ROW = 5 class FishPage(ShtikerPage.ShtikerPage): notify = DirectNotifyGlobal.directNotify.newCategory('FishPage') def __init__(self): ShtikerPage.ShtikerPage.__init__(self) self.avatar = None self.mode = FishPage_Tank return def enter(self): if not hasattr(self, 'title'): self.load() self.setMode(self.mode, 1) self.accept(localAvatar.uniqueName('fishTankChange'), self.updatePage) ShtikerPage.ShtikerPage.enter(self) def exit(self): if hasattr(self, 'picker'): self.picker.hide() if hasattr(self, 'browser'): self.browser.hide() self.ignore(localAvatar.uniqueName('fishTankChange')) ShtikerPage.ShtikerPage.exit(self) def setAvatar(self, av): self.avatar = av def getAvatar(self): return self.avatar def load(self): ShtikerPage.ShtikerPage.load(self) gui = loader.loadModel('phase_3.5/models/gui/fishingBook') rodFrame = gui.find('**/bucket/fram1') rodFrame.removeNode() trophyCase = gui.find('**/trophyCase1') trophyCase.find('glass1').reparentTo(trophyCase, -1) trophyCase.find('shelf').reparentTo(trophyCase, -1) self.trophyCase = trophyCase self.title = DirectLabel(parent=self, relief=None, text='', text_scale=0.1, pos=(0, 0, 0.65)) normalColor = (1, 1, 1, 1) clickColor = (0.8, 0.8, 0, 1) rolloverColor = (0.15, 0.82, 1.0, 1) diabledColor = (1.0, 0.98, 0.15, 1) self.tankTab = DirectButton(parent=self, relief=None, text=TTLocalizer.FishPageTankTab, text_scale=TTLocalizer.FPtankTab, text_align=TextNode.ALeft, image=gui.find('**/tabs/polySurface1'), image_pos=(0.55, 1, -0.91), image_hpr=(0, 0, -90), image_scale=(0.033, 0.033, 0.035), image_color=normalColor, image1_color=clickColor, image2_color=rolloverColor, image3_color=diabledColor, text_fg=Vec4(0.2, 0.1, 0, 1), command=self.setMode, extraArgs=[FishPage_Tank], pos=(0.92, 0, 0.55)) self.collectionTab = DirectButton(parent=self, relief=None, text=TTLocalizer.FishPageCollectionTab, text_scale=TTLocalizer.FPcollectionTab, text_align=TextNode.ALeft, image=gui.find('**/tabs/polySurface2'), image_pos=(0.12, 1, -0.91), image_hpr=(0, 0, -90), image_scale=(0.033, 0.033, 0.035), image_color=normalColor, image1_color=clickColor, image2_color=rolloverColor, image3_color=diabledColor, text_fg=Vec4(0.2, 0.1, 0, 1), command=self.setMode, extraArgs=[FishPage_Collection], pos=(0.92, 0, 0.1)) self.trophyTab = DirectButton(parent=self, relief=None, text=TTLocalizer.FishPageTrophyTab, text_scale=TTLocalizer.FPtrophyTab, text_align=TextNode.ALeft, image=gui.find('**/tabs/polySurface3'), image_pos=(-0.28, 1, -0.91), image_hpr=(0, 0, -90), image_scale=(0.033, 0.033, 0.035), image_color=normalColor, image1_color=clickColor, image2_color=rolloverColor, image3_color=diabledColor, text_fg=Vec4(0.2, 0.1, 0, 1), command=self.setMode, extraArgs=[FishPage_Trophy], pos=(0.92, 0, -0.3)) self.tankTab.setPos(-0.55, 0, 0.775) self.collectionTab.setPos(-0.13, 0, 0.775) self.trophyTab.setPos(0.28, 0, 0.775) return def createFishPicker(self): if not hasattr(self, 'picker'): self.picker = FishPicker.FishPicker(self) self.picker.setPos(-0.555, 0, 0.1) self.picker.setScale(0.95) self.rod = DirectLabel(parent=self.picker, relief=None, text='', text_align=TextNode.ALeft, text_scale=0.06, pos=(0.9, 0, -0.65)) return def createFishBrowser(self): if not hasattr(self, 'browser'): self.browser = FishBrowser.FishBrowser(self) self.browser.setScale(1.1) self.collectedTotal = DirectLabel(parent=self.browser, relief=None, text='', text_scale=0.06, pos=(0, 0, -0.61)) return def createFishTrophyFrame(self): if not hasattr(self, 'trophyFrame'): self.trophyFrame = DirectFrame(parent=self, relief=None, image=self.trophyCase, image_pos=(0, 1, 0), image_scale=0.034) self.trophyFrame.hide() self.trophies = [] hOffset = -0.5 vOffset = 0.4 for level, trophyDesc in FishGlobals.TrophyDict.items(): trophy = FishingTrophy(-1) trophy.nameLabel['text'] = trophyDesc[0] trophy.reparentTo(self.trophyFrame) trophy.setScale(0.36) if level % TROPHIES_PER_ROW == 0: hOffset = -0.5 vOffset -= 0.4 trophy.setPos(hOffset, 0, vOffset) hOffset += 0.25 self.trophies.append(trophy) return def setMode(self, mode, updateAnyways = 0): messenger.send('wakeup') if not updateAnyways: if self.mode == mode: return else: self.mode = mode self.show() if mode == FishPage_Tank: self.title['text'] = TTLocalizer.FishPageTitleTank if not hasattr(self, 'picker'): self.createFishPicker() self.picker.show() if hasattr(self, 'browser'): self.browser.hide() if hasattr(self, 'trophyFrame'): self.trophyFrame.hide() self.tankTab['state'] = DGG.DISABLED self.collectionTab['state'] = DGG.NORMAL self.trophyTab['state'] = DGG.NORMAL elif mode == FishPage_Collection: self.title['text'] = TTLocalizer.FishPageTitleCollection if hasattr(self, 'picker'): self.picker.hide() if not hasattr(self, 'browser'): self.createFishBrowser() self.browser.show() if hasattr(self, 'trophyFrame'): self.trophyFrame.hide() self.tankTab['state'] = DGG.NORMAL self.collectionTab['state'] = DGG.DISABLED self.trophyTab['state'] = DGG.NORMAL elif mode == FishPage_Trophy: self.title['text'] = TTLocalizer.FishPageTitleTrophy if hasattr(self, 'picker'): self.picker.hide() if hasattr(self, 'browser'): self.browser.hide() if not hasattr(self, 'trophyFrame'): self.createFishTrophyFrame() self.trophyFrame.show() self.tankTab['state'] = DGG.NORMAL self.collectionTab['state'] = DGG.NORMAL self.trophyTab['state'] = DGG.DISABLED self.updatePage() def unload(self): self.avatar = None if hasattr(self, 'trophies'): del self.trophies if hasattr(self, 'trophyCase'): del self.trophyCase self.tankTab.destroy() self.collectionTab.destroy() self.trophyTab.destroy() ShtikerPage.ShtikerPage.unload(self) return def updatePage(self): if hasattr(self, 'collectedTotal'): self.collectedTotal['text'] = TTLocalizer.FishPageCollectedTotal % (len(base.localAvatar.fishCollection), FishGlobals.getTotalNumFish()) if hasattr(self, 'rod'): rod = base.localAvatar.fishingRod rodName = TTLocalizer.FishingRodNameDict[rod] rodWeightRange = FishGlobals.getRodWeightRange(rod) self.rod['text'] = TTLocalizer.FishPageRodInfo % (rodName, rodWeightRange[0], rodWeightRange[1]) if self.mode == FishPage_Tank: if hasattr(self, 'picker'): newTankFish = base.localAvatar.fishTank.getFish() self.picker.update(newTankFish) elif self.mode == FishPage_Collection: if hasattr(self, 'browser'): self.browser.update() elif self.mode == FishPage_Trophy: if hasattr(self, 'trophies'): for trophy in self.trophies: trophy.setLevel(-1) for trophyId in base.localAvatar.getFishingTrophies(): self.trophies[trophyId].setLevel(trophyId) def destroy(self): self.notify.debug('destroy') DirectFrame.destroy(self) class FishingTrophy(DirectFrame): notify = DirectNotifyGlobal.directNotify.newCategory('FishingTrophy') def __init__(self, level): DirectFrame.__init__(self, relief=None) self.initialiseoptions(FishingTrophy) self.trophy = loader.loadModel('phase_3.5/models/gui/fishingTrophy') self.trophy.reparentTo(self) self.trophy.setPos(0, 1, 0) self.trophy.setScale(0.1) self.base = self.trophy.find('**/trophyBase') self.column = self.trophy.find('**/trophyColumn') self.top = self.trophy.find('**/trophyTop') self.topBase = self.trophy.find('**/trophyTopBase') self.statue = self.trophy.find('**/trophyStatue') self.base.setColorScale(1, 1, 0.8, 1) self.bowl = loader.loadModel('phase_3.5/models/gui/fishingTrophyBowl') self.bowl.reparentTo(self) self.bowl.setPos(0, 1, 0) self.bowl.setScale(2.0) self.bowlTop = self.bowl.find('**/fishingTrophyGreyBowl') self.bowlBase = self.bowl.find('**/fishingTrophyBase') self.bowlBase.setScale(1.25, 1, 1) self.bowlBase.setColorScale(1, 1, 0.8, 1) self.nameLabel = DirectLabel(parent=self, relief=None, pos=(0, 0, -0.15), text='Trophy Text', text_scale=0.125, text_fg=Vec4(0.9, 0.9, 0.4, 1)) self.shadow = loader.loadModel('phase_3/models/props/drop_shadow') self.shadow.reparentTo(self) self.shadow.setColor(1, 1, 1, 0.2) self.shadow.setPosHprScale(0, 1, 0.35, 0, 90, 0, 0.1, 0.14, 0.1) self.setLevel(level) return def setLevel(self, level): self.level = level if level == -1: self.trophy.hide() self.bowl.hide() self.nameLabel.hide() elif level == 0: self.trophy.show() self.bowl.hide() self.nameLabel.show() self.column.setScale(1.3229, 1.26468, 1.11878) self.top.setPos(0, 0, -1) self.__bronze() elif level == 1: self.trophy.show() self.bowl.hide() self.nameLabel.show() self.column.setScale(1.3229, 1.26468, 1.61878) self.top.setPos(0, 0, -0.5) self.__bronze() elif level == 2: self.trophy.show() self.bowl.hide() self.nameLabel.show() self.column.setScale(1.3229, 1.26468, 2.11878) self.top.setPos(0, 0, 0) self.__silver() elif level == 3: self.trophy.show() self.bowl.hide() self.nameLabel.show() self.column.setScale(1.3229, 1.26468, 2.61878) self.top.setPos(0, 0, 0.5) self.__silver() elif level == 4: self.trophy.show() self.bowl.hide() self.nameLabel.show() self.column.setScale(1.3229, 1.26468, 3.11878) self.top.setPos(0, 0, 1) self.__gold() elif level == 5: self.trophy.hide() self.bowl.show() self.bowlTop.setScale(1.75) self.nameLabel.show() self.__bronze() elif level == 6: self.trophy.hide() self.bowl.show() self.bowlTop.setScale(2.0) self.nameLabel.show() self.__silver() elif level >= 7: self.trophy.hide() self.bowl.show() self.bowlTop.setScale(2.25) self.nameLabel.show() self.__gold() def __bronze(self): self.top.setColorScale(0.9, 0.6, 0.33, 1) self.bowlTop.setColorScale(0.9, 0.6, 0.33, 1) def __silver(self): self.top.setColorScale(0.9, 0.9, 1, 1) self.bowlTop.setColorScale(0.9, 0.9, 1, 1) def __gold(self): self.top.setColorScale(1, 0.95, 0.1, 1) self.bowlTop.setColorScale(1, 0.95, 0.1, 1) def destroy(self): self.trophy.removeNode() self.bowl.removeNode() self.shadow.removeNode() DirectFrame.destroy(self) def show(self): ShtikerPage.show(self)