64 lines
2 KiB
Python
64 lines
2 KiB
Python
from direct.directnotify import DirectNotifyGlobal
|
|
|
|
from toontown.toonbase import ToontownGlobals
|
|
|
|
|
|
class SuitInvasionManagerAI:
|
|
notify = DirectNotifyGlobal.directNotify.newCategory('SuitInvasionManagerAI')
|
|
|
|
def __init__(self, air):
|
|
self.air = air
|
|
self.invadingCog = (None, 0)
|
|
self.numSuits = 0
|
|
self.suits = 0
|
|
self.invading = False
|
|
|
|
def setInvadingCog(self, suitName, skeleton):
|
|
self.invadingCog = (suitName, skeleton)
|
|
|
|
def getInvadingCog(self):
|
|
self.suits += 1
|
|
self._checkInvasionStatus()
|
|
return self.invadingCog
|
|
|
|
def getInvading(self):
|
|
return self.invading
|
|
|
|
def _spGetOut(self):
|
|
for suitPlanner in self.air.suitPlanners.values():
|
|
suitPlanner.flySuits()
|
|
|
|
def _checkInvasionStatus(self):
|
|
if self.suits >= self.numSuits:
|
|
self.stopInvasion()
|
|
|
|
def stopInvasion(self, task=None):
|
|
if not self.getInvading():
|
|
return
|
|
|
|
self.air.newsManager.d_setInvasionStatus(ToontownGlobals.SuitInvasionEnd, self.invadingCog[0], self.numSuits,
|
|
self.invadingCog[1])
|
|
if task:
|
|
task.remove()
|
|
else:
|
|
taskMgr.remove('invasion-timeout')
|
|
|
|
self.setInvadingCog(None, 0)
|
|
self.numSuits = 0
|
|
self.suits = 0
|
|
self.invading = False
|
|
self._spGetOut()
|
|
|
|
def startInvasion(self, cogType, numCogs, skeleton):
|
|
if self.getInvading():
|
|
return False
|
|
|
|
self.numSuits = numCogs
|
|
self.setInvadingCog(cogType, skeleton)
|
|
self.invading = True
|
|
self.air.newsManager.d_setInvasionStatus(ToontownGlobals.SuitInvasionBegin, self.invadingCog[0], self.numSuits,
|
|
self.invadingCog[1])
|
|
self._spGetOut()
|
|
timePerSuit = config.GetFloat('invasion-time-per-suit', 1.2)
|
|
taskMgr.doMethodLater(self.numSuits * timePerSuit, self.stopInvasion, 'invasion-timeout')
|
|
return True
|