oldschool-toontown/toontown/shtiker/TrackPage.py

181 lines
7.2 KiB
Python
Raw Normal View History

from panda3d.core import *
from . import ShtikerPage
2019-11-02 17:27:54 -05:00
from direct.gui.DirectGui import *
from panda3d.core import *
2019-11-02 17:27:54 -05:00
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):
if not base.launcher or base.launcher and base.launcher.getPhaseComplete(5):
anim = Track2Anim[trackId]
else:
anim = 'neutral'
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()
if not base.launcher or base.launcher and base.launcher.getPhaseComplete(5):
anim = Track2Anim[trackId]
frame = (self.toon.getNumFrames(anim) - 1) / MAX_FRAMES * self.index
else:
anim = 'neutral'
frame = 0
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 range(3):
rowPos.append(rowY)
rowY += rowSpace
colX = -0.7
colSpace = 0.276
colPos = []
for i in range(6):
colPos.append(colX)
colX += colSpace
for index in range(1, MAX_FRAMES + 1):
frame = self.trackFrames[index - 1]
col = (index - 1) % 6
2019-12-31 13:15:53 -06:00
row = (index - 1) // 6
2019-11-02 17:27:54 -05:00
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 range(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 range(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 range(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)