mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-10-31 16:57:54 +00:00
144 lines
5.1 KiB
Python
144 lines
5.1 KiB
Python
import cPickle
|
|
|
|
import CogDisguiseGlobals
|
|
import FactoryEntityCreatorAI
|
|
import FactorySpecs
|
|
import LawOfficeBase
|
|
import LevelSuitPlannerAI
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
from direct.distributed.DistributedObjectAI import *
|
|
from direct.showbase import PythonUtil
|
|
from direct.task import Task
|
|
from otp.level import DistributedLevelAI
|
|
from otp.level import LevelSpec
|
|
from toontown.ai.ToonBarrier import *
|
|
from toontown.building import DistributedElevatorFloorAI
|
|
from toontown.coghq import DistributedBattleFactoryAI
|
|
from toontown.coghq import DistributedLawOfficeElevatorIntAI
|
|
from toontown.coghq import DistributedLawOfficeFloorAI
|
|
from toontown.coghq import LawOfficeLayout
|
|
from toontown.suit import DistributedFactorySuitAI
|
|
from toontown.toonbase import ToontownGlobals, ToontownBattleGlobals
|
|
|
|
|
|
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
|
|
|
|
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()
|
|
|
|
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
|