2015-03-03 16:10:12 -06:00
|
|
|
from toontown.toonbase import ToontownGlobals
|
|
|
|
import ShtikerPage
|
|
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
|
|
from direct.gui.DirectGui import *
|
2015-06-23 18:11:48 -05:00
|
|
|
from panda3d.core import *
|
2015-03-03 16:10:12 -06:00
|
|
|
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)
|