oldschool-toontown/toontown/coghq/DistributedLawOfficeAI.py
2019-12-30 21:46:25 -05:00

142 lines
5.2 KiB
Python

from otp.level import DistributedLevelAI
from direct.directnotify import DirectNotifyGlobal
from toontown.coghq import LevelSuitPlannerAI, LawOfficeBase
from direct.task import Task
from toontown.coghq import FactoryEntityCreatorAI, FactorySpecs
from otp.level import LevelSpec
from toontown.coghq import CogDisguiseGlobals
from toontown.suit import DistributedFactorySuitAI
from toontown.toonbase import ToontownGlobals, ToontownBattleGlobals
from toontown.coghq import DistributedBattleFactoryAI
from toontown.coghq import LawOfficeLayout
from toontown.coghq import DistributedLawOfficeFloorAI
from toontown.coghq import LawOfficeLayout
from toontown.coghq import DistributedLawOfficeElevatorIntAI
from toontown.building import DistributedElevatorFloorAI
from toontown.ai.ToonBarrier import *
from direct.distributed.DistributedObjectAI import *
from direct.showbase import PythonUtil
class DistributedLawOfficeAI(DistributedObjectAI, LawOfficeBase.LawOfficeBase):
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedLawOfficeAI')
def __init__(self, air, lawOfficeId, zoneId, entranceId, avIds):
DistributedObjectAI.__init__(self, air)
LawOfficeBase.LawOfficeBase.__init__(self)
self.setLawOfficeId(lawOfficeId)
self.layout = None
self.currentFloor = 0
self.elevator = None
self.elevatorB = None
self.activeElevator = 0
self.level = None
self.avIds = avIds
self.entranceId = entranceId
return
def createEntityCreator(self):
return FactoryEntityCreatorAI.FactoryEntityCreatorAI(level=self)
def getBattleCreditMultiplier(self):
return ToontownBattleGlobals.getFactoryCreditMultiplier(self.lawOfficeId)
def generate(self):
self.notify.info('generate')
self.notify.info('start factory %s %s creation, frame=%s' % (self.lawOfficeId, self.doId, globalClock.getFrameCount()))
DistributedObjectAI.generate(self)
self.layout = LawOfficeLayout.LawOfficeLayout(self.lawOfficeId)
self.exitEvents = {}
for avId in self.avIds:
self.exitEvents[avId] = simbase.air.getAvatarExitEvent(avId)
self.accept(self.exitEvents[avId], Functor(self.handleAvatarExit, avId))
self.startOffice()
def handleAvatarExit(self, toonId):
pass
def readyForNextFloor(self):
toonId = self.air.getAvatarIdFromSender()
def generateWithRequired(self, zone):
DistributedObjectAI.generateWithRequired(self, zone)
def startOffice(self):
self.notify.info('loading spec')
specModule = self.layout.getFloorSpec(self.currentFloor)
self.level = DistributedLawOfficeFloorAI.DistributedLawOfficeFloorAI(self.air, self.lawOfficeId, self.zoneId, self.entranceId, self.avIds, specModule)
self.level.setLevelSpec(LevelSpec.LevelSpec(specModule))
self.notify.info('creating entities')
self.level.generateWithRequired(self.zoneId)
self.elevator = DistributedElevatorFloorAI.DistributedElevatorFloorAI(self.air, self.doId, self, self.avIds)
self.elevator.setEntering(0)
self.elevator.generateWithRequired(self.zoneId)
self.elevatorB = DistributedElevatorFloorAI.DistributedElevatorFloorAI(self.air, self.doId, self, self.avIds)
self.elevatorB.setEntering(1)
self.elevatorB.generateWithRequired(self.zoneId)
self.exchangeElevators()
def delete(self):
self.notify.info('delete: %s' % self.doId)
if self.elevator:
del self.elevator
if self.level:
self.level.requestDelete()
self.level = None
self.ignoreAll()
return
def exchangeElevators(self):
if self.activeElevator == 0:
self.elevator.lock()
self.elevatorB.unlock()
self.activeElevator = 1
else:
self.elevator.unlock()
self.elevatorB.lock()
self.activeElevator = 0
def startNextFloor(self):
if self.avIds:
print(self.avIds)
self.currentFloor += 1
specModule = self.layout.getFloorSpec(self.currentFloor)
self.level.requestDelete()
self.level = DistributedLawOfficeFloorAI.DistributedLawOfficeFloorAI(self.air, self.lawOfficeId, self.zoneId, self.entranceId, self.avIds, specModule)
self.level.setLevelSpec(LevelSpec.LevelSpec(specModule))
self.level.generateWithRequired(self.zoneId)
print('exchanging elevators')
self.exchangeElevators()
self.startSignal()
def startSignal(self):
self.sendUpdate('startSignal')
def dumpEveryone(self, optArg=None):
pass
def getTaskZoneId(self):
return self.lawOfficeId
def getLawOfficeId(self):
return self.lawOfficeId
def getCogLevel(self):
return self.level.cogLevel
def d_setSuits(self):
self.sendUpdate('setSuits', [self.getSuits(), self.getReserveSuits()])
def getSuits(self):
suitIds = []
for suit in self.suits:
suitIds.append(suit.doId)
return suitIds
def getReserveSuits(self):
suitIds = []
for suit in self.reserveSuits:
suitIds.append(suit[0].doId)
return suitIds