94 lines
3.7 KiB
Python
94 lines
3.7 KiB
Python
import random
|
|
from pandac.PandaModules import VBase3, Point3
|
|
from direct.interval.IntervalGlobal import Sequence, Wait, Func, Parallel, Track
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
from toontown.battle import DistributedBattleFinal
|
|
from toontown.suit import SuitTimings
|
|
from toontown.toonbase import ToontownGlobals
|
|
|
|
class DistributedBattleWaiters(DistributedBattleFinal.DistributedBattleFinal):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedBattleWaiters')
|
|
|
|
def __init__(self, cr):
|
|
DistributedBattleFinal.DistributedBattleFinal.__init__(self, cr)
|
|
self.initialReservesJoiningDone = False
|
|
base.dbw = self
|
|
|
|
def announceGenerate(self):
|
|
DistributedBattleFinal.DistributedBattleFinal.announceGenerate(self)
|
|
for suit in self.suits:
|
|
suit.makeWaiter()
|
|
|
|
self.moveSuitsToInitialPos()
|
|
|
|
def showSuitsJoining(self, suits, ts, name, callback):
|
|
if len(suits) == 0 and not self.initialReservesJoiningDone:
|
|
self.initialReservesJoiningDone = True
|
|
self.doInitialSuitsJoining(ts, name, callback)
|
|
return
|
|
self.showSuitsFalling(suits, ts, name, callback)
|
|
|
|
def doInitialSuitsJoining(self, ts, name, callback):
|
|
done = Func(callback)
|
|
if self.hasLocalToon():
|
|
self.notify.debug('parenting camera to distributed battle waiters')
|
|
camera.reparentTo(self)
|
|
if random.choice([0, 1]):
|
|
camera.setPosHpr(20, -4, 7, 60, 0, 0)
|
|
else:
|
|
camera.setPosHpr(-20, -4, 7, -60, 0, 0)
|
|
track = Sequence(Wait(0.5), done, name=name)
|
|
track.start(ts)
|
|
self.storeInterval(track, name)
|
|
|
|
def moveSuitsToInitialPos(self):
|
|
battlePts = self.suitPoints[len(self.suitPendingPoints) - 1]
|
|
for i in xrange(len(self.suits)):
|
|
suit = self.suits[i]
|
|
suit.reparentTo(self)
|
|
destPos, destHpr = self.getActorPosHpr(suit, self.suits)
|
|
suit.setPos(destPos)
|
|
suit.setHpr(destHpr)
|
|
|
|
def showSuitsFalling(self, suits, ts, name, callback):
|
|
if self.bossCog == None:
|
|
return
|
|
suitTrack = Parallel()
|
|
delay = 0
|
|
for suit in suits:
|
|
suit.makeWaiter()
|
|
suit.setState('Battle')
|
|
if suit.dna.dept == 'l':
|
|
suit.reparentTo(self.bossCog)
|
|
suit.setPos(0, 0, 0)
|
|
if suit in self.joiningSuits:
|
|
i = len(self.pendingSuits) + self.joiningSuits.index(suit)
|
|
destPos, h = self.suitPendingPoints[i]
|
|
destHpr = VBase3(h, 0, 0)
|
|
else:
|
|
destPos, destHpr = self.getActorPosHpr(suit, self.suits)
|
|
startPos = destPos + Point3(0, 0, SuitTimings.fromSky * ToontownGlobals.SuitWalkSpeed)
|
|
self.notify.debug('startPos for %s = %s' % (suit, startPos))
|
|
suit.reparentTo(self)
|
|
suit.setPos(startPos)
|
|
suit.headsUp(self)
|
|
flyIval = suit.beginSupaFlyMove(destPos, True, 'flyIn')
|
|
suitTrack.append(Track((delay, Sequence(flyIval, Func(suit.loop, 'neutral')))))
|
|
delay += 1
|
|
|
|
if self.hasLocalToon():
|
|
camera.reparentTo(self)
|
|
if random.choice([0, 1]):
|
|
camera.setPosHpr(20, -4, 7, 60, 0, 0)
|
|
else:
|
|
camera.setPosHpr(-20, -4, 7, -60, 0, 0)
|
|
done = Func(callback)
|
|
track = Sequence(suitTrack, done, name=name)
|
|
track.start(ts)
|
|
self.storeInterval(track, name)
|
|
return
|
|
|
|
def enterWaitForInput(self, ts = 0):
|
|
DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput(self, ts)
|
|
if self.hasLocalToon():
|
|
camera.reparentTo(self)
|