214 lines
8.5 KiB
Python
214 lines
8.5 KiB
Python
import cPickle
|
|
import random
|
|
import ToonInteriorColors
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
from direct.distributed import DistributedObject
|
|
from direct.task.Task import Task
|
|
from panda3d.core import *
|
|
from toontown.toonbase import TTLocalizer
|
|
from toontown.toonbase.ToonBaseGlobal import *
|
|
from toontown.toonbase.ToontownGlobals import *
|
|
from toontown.dna.DNAParser import *
|
|
from toontown.toon.DistributedNPCToonBase import DistributedNPCToonBase
|
|
|
|
|
|
class DistributedHQInterior(DistributedObject.DistributedObject):
|
|
def __init__(self, cr):
|
|
DistributedObject.DistributedObject.__init__(self, cr)
|
|
self.dnaStore = cr.playGame.dnaStore
|
|
self.leaderAvIds = []
|
|
self.leaderNames = []
|
|
self.leaderScores = []
|
|
self.numLeaders = 10
|
|
self.tutorial = 0
|
|
|
|
def generate(self):
|
|
DistributedObject.DistributedObject.generate(self)
|
|
self.interior = loader.loadModel('phase_3.5/models/modules/HQ_interior')
|
|
self.interior.reparentTo(render)
|
|
self.interior.find('**/cream').hide()
|
|
self.buildLeaderBoard()
|
|
|
|
def announceGenerate(self):
|
|
DistributedObject.DistributedObject.announceGenerate(self)
|
|
self.setupDoors()
|
|
self.interior.flattenMedium()
|
|
emptyBoard = self.interior.find('**/empty_board')
|
|
self.leaderBoard.reparentTo(emptyBoard.getChild(0))
|
|
for npcToon in self.cr.doFindAllInstances(DistributedNPCToonBase):
|
|
npcToon.initToonState()
|
|
|
|
def setTutorial(self, flag):
|
|
if self.tutorial == flag:
|
|
return
|
|
else:
|
|
self.tutorial = flag
|
|
if self.tutorial:
|
|
self.interior.find('**/periscope').hide()
|
|
self.interior.find('**/speakers').hide()
|
|
else:
|
|
self.interior.find('**/periscope').show()
|
|
self.interior.find('**/speakers').show()
|
|
|
|
def setZoneIdAndBlock(self, zoneId, block):
|
|
self.zoneId = zoneId
|
|
self.block = block
|
|
|
|
def buildLeaderBoard(self):
|
|
self.leaderBoard = hidden.attachNewNode('leaderBoard')
|
|
self.leaderBoard.setPosHprScale(0.1, 0, 4.5, 90, 0, 0, 0.9, 0.9, 0.9)
|
|
z = 0
|
|
row = self.buildTitleRow()
|
|
row.reparentTo(self.leaderBoard)
|
|
row.setPos(0, 0, z)
|
|
z -= 1
|
|
self.nameTextNodes = []
|
|
self.scoreTextNodes = []
|
|
self.trophyStars = []
|
|
for i in xrange(self.numLeaders):
|
|
(row, nameText, scoreText, trophyStar) = self.buildLeaderRow()
|
|
self.nameTextNodes.append(nameText)
|
|
self.scoreTextNodes.append(scoreText)
|
|
self.trophyStars.append(trophyStar)
|
|
row.reparentTo(self.leaderBoard)
|
|
row.setPos(0, 0, z)
|
|
z -= 1
|
|
|
|
def updateLeaderBoard(self):
|
|
taskMgr.remove(self.uniqueName('starSpinHQ'))
|
|
for i in xrange(len(self.leaderNames)):
|
|
name = self.leaderNames[i]
|
|
score = self.leaderScores[i]
|
|
self.nameTextNodes[i].setText(name)
|
|
self.scoreTextNodes[i].setText(str(score))
|
|
self.updateTrophyStar(self.trophyStars[i], score)
|
|
for i in xrange(len(self.leaderNames), self.numLeaders):
|
|
self.nameTextNodes[i].setText('-')
|
|
self.scoreTextNodes[i].setText('-')
|
|
self.trophyStars[i].hide()
|
|
|
|
def buildTitleRow(self):
|
|
row = hidden.attachNewNode('leaderRow')
|
|
nameText = TextNode('titleRow')
|
|
nameText.setFont(ToontownGlobals.getSignFont())
|
|
nameText.setAlign(TextNode.ACenter)
|
|
nameText.setTextColor(0.5, 0.75, 0.7, 1)
|
|
nameText.setText(TTLocalizer.LeaderboardTitle)
|
|
namePath = row.attachNewNode(nameText)
|
|
namePath.setPos(0, 0, 0)
|
|
return row
|
|
|
|
def buildLeaderRow(self):
|
|
row = hidden.attachNewNode('leaderRow')
|
|
nameText = TextNode('nameText')
|
|
nameText.setFont(ToontownGlobals.getToonFont())
|
|
nameText.setAlign(TextNode.ALeft)
|
|
nameText.setTextColor(1, 1, 1, 0.7)
|
|
nameText.setText('-')
|
|
namePath = row.attachNewNode(nameText)
|
|
namePath.setPos(*TTLocalizer.DHQInamePathPos)
|
|
namePath.setScale(TTLocalizer.DHQInamePath)
|
|
scoreText = TextNode('scoreText')
|
|
scoreText.setFont(ToontownGlobals.getToonFont())
|
|
scoreText.setAlign(TextNode.ARight)
|
|
scoreText.setTextColor(1, 1, 0.1, 0.7)
|
|
scoreText.setText('-')
|
|
scorePath = row.attachNewNode(scoreText)
|
|
scorePath.setPos(*TTLocalizer.DHQIscorePathPos)
|
|
trophyStar = self.buildTrophyStar()
|
|
trophyStar.reparentTo(row)
|
|
return (row, nameText, scoreText, trophyStar)
|
|
|
|
def setLeaderBoard(self, leaderData):
|
|
(avIds, names, scores) = cPickle.loads(leaderData)
|
|
self.notify.debug('setLeaderBoard: avIds: %s, names: %s, scores: %s' % (avIds, names, scores))
|
|
self.leaderAvIds = avIds
|
|
self.leaderNames = names
|
|
self.leaderScores = scores
|
|
self.updateLeaderBoard()
|
|
|
|
def chooseDoor(self):
|
|
doorModelName = 'door_double_round_ul'
|
|
if doorModelName[-1:] == 'r':
|
|
doorModelName = doorModelName[:-1] + 'l'
|
|
else:
|
|
doorModelName = doorModelName[:-1] + 'r'
|
|
door = self.dnaStore.findNode(doorModelName)
|
|
return door
|
|
|
|
def setupDoors(self):
|
|
self.randomGenerator = random.Random()
|
|
self.randomGenerator.seed(self.zoneId)
|
|
self.colors = ToonInteriorColors.colors[ToontownCentral]
|
|
door = self.chooseDoor()
|
|
doorOrigins = render.findAllMatches('**/door_origin*')
|
|
numDoorOrigins = doorOrigins.getNumPaths()
|
|
for npIndex in xrange(numDoorOrigins):
|
|
doorOrigin = doorOrigins[npIndex]
|
|
doorOriginNPName = doorOrigin.getName()
|
|
doorOriginIndexStr = doorOriginNPName[len('door_origin_'):]
|
|
newNode = ModelNode('door_' + doorOriginIndexStr)
|
|
newNodePath = NodePath(newNode)
|
|
newNodePath.reparentTo(self.interior)
|
|
doorNP = door.copyTo(newNodePath)
|
|
doorOrigin.setScale(0.8, 0.8, 0.8)
|
|
doorOrigin.setPos(doorOrigin, 0, -0.025, 0)
|
|
doorColor = self.randomGenerator.choice(self.colors['TI_door'])
|
|
triggerId = str(self.block) + '_' + doorOriginIndexStr
|
|
setupDoor(doorNP, newNodePath, doorOrigin, self.dnaStore, triggerId, doorColor)
|
|
doorFrame = doorNP.find('door_*_flat')
|
|
doorFrame.setColor(doorColor)
|
|
del self.dnaStore
|
|
del self.randomGenerator
|
|
|
|
def disable(self):
|
|
self.leaderBoard.removeNode()
|
|
del self.leaderBoard
|
|
self.interior.removeNode()
|
|
del self.interior
|
|
del self.nameTextNodes
|
|
del self.scoreTextNodes
|
|
del self.trophyStars
|
|
taskMgr.remove(self.uniqueName('starSpinHQ'))
|
|
DistributedObject.DistributedObject.disable(self)
|
|
|
|
def buildTrophyStar(self):
|
|
trophyStar = loader.loadModel('phase_3.5/models/gui/name_star')
|
|
trophyStar.hide()
|
|
trophyStar.setPos(*TTLocalizer.DHQItrophyStarPos)
|
|
return trophyStar
|
|
|
|
def updateTrophyStar(self, trophyStar, score):
|
|
scale = 0.8
|
|
if score >= ToontownGlobals.TrophyStarLevels[4]:
|
|
trophyStar.show()
|
|
trophyStar.setScale(scale)
|
|
trophyStar.setColor(ToontownGlobals.TrophyStarColors[4])
|
|
if score >= ToontownGlobals.TrophyStarLevels[5]:
|
|
task = taskMgr.add(self.__starSpin, self.uniqueName('starSpinHQ'))
|
|
task.trophyStarSpeed = 15
|
|
task.trophyStar = trophyStar
|
|
elif score >= ToontownGlobals.TrophyStarLevels[2]:
|
|
trophyStar.show()
|
|
trophyStar.setScale(0.75 * scale)
|
|
trophyStar.setColor(ToontownGlobals.TrophyStarColors[2])
|
|
if score >= ToontownGlobals.TrophyStarLevels[3]:
|
|
task = taskMgr.add(self.__starSpin, self.uniqueName('starSpinHQ'))
|
|
task.trophyStarSpeed = 10
|
|
task.trophyStar = trophyStar
|
|
elif score >= ToontownGlobals.TrophyStarLevels[0]:
|
|
trophyStar.show()
|
|
trophyStar.setScale(0.75 * scale)
|
|
trophyStar.setColor(ToontownGlobals.TrophyStarColors[0])
|
|
if score >= ToontownGlobals.TrophyStarLevels[1]:
|
|
task = taskMgr.add(self.__starSpin, self.uniqueName('starSpinHQ'))
|
|
task.trophyStarSpeed = 8
|
|
task.trophyStar = trophyStar
|
|
else:
|
|
trophyStar.hide()
|
|
|
|
def __starSpin(self, task):
|
|
now = globalClock.getFrameTime()
|
|
r = now * task.trophyStarSpeed % 360.0
|
|
task.trophyStar.setR(r)
|
|
return Task.cont
|