oldschool-toontown/toontown/battle/DistributedBattleWaiters.py

95 lines
3.7 KiB
Python
Raw Normal View History

2019-11-02 17:27:54 -05:00
import random
from panda3d.core import VBase3, Point3
2019-11-02 17:27:54 -05:00
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 range(len(self.suits)):
2019-11-02 17:27:54 -05:00
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)