172 lines
6.9 KiB
Python
172 lines
6.9 KiB
Python
from panda3d.core import *
|
|
import ShtikerPage
|
|
from direct.gui.DirectGui import *
|
|
from toontown.quest import Quests
|
|
from toontown.toonbase import ToontownGlobals
|
|
from toontown.toonbase import ToontownBattleGlobals
|
|
from toontown.toonbase import TTLocalizer
|
|
from toontown.toon import Toon
|
|
MAX_FRAMES = 18
|
|
Track2Anim = {ToontownBattleGlobals.HEAL_TRACK: 'juggle',
|
|
ToontownBattleGlobals.TRAP_TRACK: 'toss',
|
|
ToontownBattleGlobals.LURE_TRACK: 'hypnotize',
|
|
ToontownBattleGlobals.SOUND_TRACK: 'sound',
|
|
ToontownBattleGlobals.THROW_TRACK: 'throw',
|
|
ToontownBattleGlobals.SQUIRT_TRACK: 'firehose',
|
|
ToontownBattleGlobals.DROP_TRACK: 'pushbutton'}
|
|
|
|
class TrackFrame(DirectFrame):
|
|
|
|
def __init__(self, index):
|
|
DirectFrame.__init__(self, relief=None)
|
|
self.initialiseoptions(TrackFrame)
|
|
filmstrip = loader.loadModel('phase_3.5/models/gui/filmstrip')
|
|
self.index = index
|
|
self.frame = DirectFrame(parent=self, relief=None, image=filmstrip, image_scale=1, text=str(self.index - 1), text_pos=(0.26, -0.22), text_fg=(1, 1, 1, 1), text_scale=0.1)
|
|
self.question = DirectLabel(parent=self.frame, relief=None, pos=(0, 0, -0.15), text='?', text_scale=0.4, text_pos=(0, 0.04), text_fg=(0.72, 0.72, 0.72, 1))
|
|
self.toon = None
|
|
filmstrip.removeNode()
|
|
return
|
|
|
|
def makeToon(self):
|
|
if not self.toon:
|
|
self.toon = Toon.Toon()
|
|
self.toon.setDNA(base.localAvatar.getStyle())
|
|
self.toon.getGeomNode().setDepthWrite(1)
|
|
self.toon.getGeomNode().setDepthTest(1)
|
|
self.toon.useLOD(500)
|
|
self.toon.reparentTo(self.frame)
|
|
self.toon.setPosHprScale(0, 10, -0.25, 210, 0, 0, 0.12, 0.12, 0.12)
|
|
self.ignore('nametagAmbientLightChanged')
|
|
|
|
def play(self, trackId):
|
|
anim = Track2Anim[trackId]
|
|
if self.toon:
|
|
numFrames = self.toon.getNumFrames(anim) - 1
|
|
fromFrame = 0
|
|
toFrame = (self.toon.getNumFrames(anim) - 1) / MAX_FRAMES * self.index
|
|
self.toon.play(anim, None, fromFrame, toFrame - 1)
|
|
return
|
|
|
|
def setTrained(self, trackId):
|
|
if self.toon == None:
|
|
self.makeToon()
|
|
anim = Track2Anim[trackId]
|
|
frame = (self.toon.getNumFrames(anim) - 1) / MAX_FRAMES * self.index
|
|
self.toon.pose(anim, frame)
|
|
self.toon.show()
|
|
self.question.hide()
|
|
trackColorR, trackColorG, trackColorB = ToontownBattleGlobals.TrackColors[trackId]
|
|
self.frame['image_color'] = Vec4(trackColorR, trackColorG, trackColorB, 1)
|
|
self.frame['text_fg'] = Vec4(trackColorR * 0.3, trackColorG * 0.3, trackColorB * 0.3, 1)
|
|
return
|
|
|
|
def setUntrained(self, trackId):
|
|
if self.toon:
|
|
self.toon.delete()
|
|
self.toon = None
|
|
self.question.show()
|
|
if trackId == -1:
|
|
self.frame['image_color'] = Vec4(0.7, 0.7, 0.7, 1)
|
|
self.frame['text_fg'] = Vec4(0.5, 0.5, 0.5, 1)
|
|
self.question['text_fg'] = Vec4(0.6, 0.6, 0.6, 1)
|
|
else:
|
|
trackColorR, trackColorG, trackColorB = ToontownBattleGlobals.TrackColors[trackId]
|
|
self.frame['image_color'] = Vec4(trackColorR * 0.7, trackColorG * 0.7, trackColorB * 0.7, 1)
|
|
self.frame['text_fg'] = Vec4(trackColorR * 0.3, trackColorG * 0.3, trackColorB * 0.3, 1)
|
|
self.question['text_fg'] = Vec4(trackColorR * 0.6, trackColorG * 0.6, trackColorB * 0.6, 1)
|
|
return
|
|
|
|
|
|
class TrackPage(ShtikerPage.ShtikerPage):
|
|
|
|
def __init__(self):
|
|
ShtikerPage.ShtikerPage.__init__(self)
|
|
self.trackFrames = []
|
|
|
|
def placeFrames(self):
|
|
rowY = 0.38
|
|
rowSpace = -0.32
|
|
rowPos = []
|
|
for i in xrange(3):
|
|
rowPos.append(rowY)
|
|
rowY += rowSpace
|
|
|
|
colX = -0.7
|
|
colSpace = 0.276
|
|
colPos = []
|
|
for i in xrange(6):
|
|
colPos.append(colX)
|
|
colX += colSpace
|
|
|
|
for index in xrange(1, MAX_FRAMES + 1):
|
|
frame = self.trackFrames[index - 1]
|
|
col = (index - 1) % 6
|
|
row = (index - 1) / 6
|
|
frame.setPos(colPos[col], 0, rowPos[row])
|
|
frame.setScale(0.39)
|
|
|
|
def load(self):
|
|
self.title = DirectLabel(parent=self, relief=None, text=TTLocalizer.TrackPageTitle, text_scale=0.1, pos=(0, 0, 0.65))
|
|
self.subtitle = DirectLabel(parent=self, relief=None, text=TTLocalizer.TrackPageSubtitle, text_scale=0.05, text_fg=(0.5, 0.1, 0.1, 1), pos=(0, 0, 0.56))
|
|
self.trackText = DirectLabel(parent=self, relief=None, text='', text_scale=0.05, text_fg=(0.5, 0.1, 0.1, 1), pos=(0, 0, -0.5))
|
|
for index in xrange(1, MAX_FRAMES + 1):
|
|
frame = TrackFrame(index)
|
|
frame.reparentTo(self)
|
|
self.trackFrames.append(frame)
|
|
|
|
self.placeFrames()
|
|
self.startFrame = self.trackFrames[0]
|
|
self.endFrame = self.trackFrames[-1]
|
|
self.startFrame.frame['text'] = ''
|
|
self.startFrame.frame['text_scale'] = TTLocalizer.TPstartFrame
|
|
self.startFrame.frame['image_color'] = Vec4(0.2, 0.2, 0.2, 1)
|
|
self.startFrame.frame['text_fg'] = (1, 1, 1, 1)
|
|
self.startFrame.frame['text_pos'] = (0, 0.08)
|
|
self.startFrame.question.hide()
|
|
self.endFrame.frame['text'] = TTLocalizer.TrackPageDone
|
|
self.endFrame.frame['text_scale'] = TTLocalizer.TPendFrame
|
|
self.endFrame.frame['image_color'] = Vec4(0.2, 0.2, 0.2, 1)
|
|
self.endFrame.frame['text_fg'] = (1, 1, 1, 1)
|
|
self.endFrame.frame['text_pos'] = (0, 0)
|
|
self.endFrame.question.hide()
|
|
return
|
|
|
|
def unload(self):
|
|
del self.title
|
|
del self.subtitle
|
|
del self.trackText
|
|
del self.trackFrames
|
|
ShtikerPage.ShtikerPage.unload(self)
|
|
|
|
def clearPage(self):
|
|
for index in xrange(1, MAX_FRAMES - 1):
|
|
self.trackFrames[index].setUntrained(-1)
|
|
|
|
self.startFrame.frame['text'] = ''
|
|
self.trackText['text'] = TTLocalizer.TrackPageClear
|
|
|
|
def updatePage(self):
|
|
trackId, trackProgress = base.localAvatar.getTrackProgress()
|
|
if trackId == -1:
|
|
self.clearPage()
|
|
else:
|
|
trackName = ToontownBattleGlobals.Tracks[trackId].capitalize()
|
|
self.trackText['text'] = TTLocalizer.TrackPageTraining % (trackName, trackName)
|
|
trackProgressArray = base.localAvatar.getTrackProgressAsArray()
|
|
for index in xrange(1, MAX_FRAMES - 2):
|
|
if trackProgressArray[index - 1]:
|
|
self.trackFrames[index].setTrained(trackId)
|
|
else:
|
|
self.trackFrames[index].setUntrained(trackId)
|
|
|
|
self.trackFrames[MAX_FRAMES - 2].setUntrained(trackId)
|
|
self.startFrame.frame['text'] = TTLocalizer.TrackPageFilmTitle % trackName
|
|
|
|
def enter(self):
|
|
self.updatePage()
|
|
ShtikerPage.ShtikerPage.enter(self)
|
|
|
|
def exit(self):
|
|
self.clearPage()
|
|
ShtikerPage.ShtikerPage.exit(self)
|