49 lines
1.9 KiB
Python
49 lines
1.9 KiB
Python
from direct.directnotify import DirectNotifyGlobal
|
|
from . import DistributedStageAI
|
|
from toontown.toonbase import ToontownGlobals
|
|
from toontown.coghq import StageLayout
|
|
from direct.showbase import DirectObject
|
|
import random
|
|
|
|
class StageManagerAI(DirectObject.DirectObject):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory('StageManagerAI')
|
|
stageId = None
|
|
|
|
def __init__(self, air):
|
|
DirectObject.DirectObject.__init__(self)
|
|
self.air = air
|
|
|
|
def getDoId(self):
|
|
return 0
|
|
|
|
def createStage(self, stageId, players):
|
|
for avId in players:
|
|
if bboard.has('stageId-%s' % avId):
|
|
stageId = bboard.get('stageId-%s' % avId)
|
|
break
|
|
|
|
numFloors = StageLayout.getNumFloors(stageId)
|
|
floor = random.randrange(numFloors)
|
|
for avId in players:
|
|
if bboard.has('stageFloor-%s' % avId):
|
|
floor = bboard.get('stageFloor-%s' % avId)
|
|
floor = max(0, floor)
|
|
floor = min(floor, numFloors - 1)
|
|
break
|
|
|
|
for avId in players:
|
|
if bboard.has('stageRoom-%s' % avId):
|
|
roomId = bboard.get('stageRoom-%s' % avId)
|
|
for i in range(numFloors):
|
|
layout = StageLayout.StageLayout(stageId, i)
|
|
if roomId in layout.getRoomIds():
|
|
floor = i
|
|
else:
|
|
from toontown.coghq import StageRoomSpecs
|
|
roomName = StageRoomSpecs.CashbotStageRoomId2RoomName[roomId]
|
|
StageManagerAI.notify.warning('room %s (%s) not found in any floor of stage %s' % (roomId, roomName, stageId))
|
|
|
|
stageZone = self.air.allocateZone()
|
|
stage = DistributedStageAI.DistributedStageAI(self.air, stageId, stageZone, floor, players)
|
|
stage.generateWithRequired(stageZone)
|
|
return stageZone
|