historical/toontown-classic.git/toontown/suit/SuitInvasionManagerAI.py
2024-01-16 11:20:27 -06:00

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