Poodletooth-iLand/toontown/coghq/DistributedLawOfficeAI.py
2015-03-03 17:10:12 -05:00

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