toontown-just-works/toontown/hood/CogHQAI.py
2024-07-07 18:08:39 -05:00

81 lines
3 KiB
Python

from toontown.building import DoorTypes
from toontown.building.DistributedBoardingPartyAI import DistributedBoardingPartyAI
from toontown.coghq import DistributedCogHQDoorAI, DistributedCogHQExteriorDoorAI, LobbyManagerAI
from toontown.toonbase import TTLocalizer, ToontownGlobals
from toontown.toon import NPCToons
class CogHQAI:
notify = directNotify.newCategory('CogHQAI')
notify.setInfo(True)
def __init__(
self, air, zoneId, lobbyZoneId, lobbyFADoorCode,
lobbyElevatorCtor, bossCtor):
self.air = air
self.zoneId = zoneId
self.lobbyZoneId = lobbyZoneId
self.lobbyFADoorCode = lobbyFADoorCode
self.lobbyElevatorCtor = lobbyElevatorCtor
self.bossCtor = bossCtor
self.lobbyMgr = None
self.lobbyElevator = None
self.boardingParty = None
self.notify.info('Creating objects... ' + self.getLocationName(zoneId))
def getLocationName(self, zoneId):
lookupTable = ToontownGlobals.hoodNameMap
if (zoneId % 1000) != 0:
lookupTable = TTLocalizer.GlobalStreetNames
name = lookupTable.get(zoneId, '')
if isinstance(name, str):
return name
return name[2]
def startup(self):
self.createLobbyManager()
self.createLobbyElevator()
self.extDoor = self.makeCogHQDoor(self.lobbyZoneId, 0, 0, self.lobbyFADoorCode)
if simbase.config.GetBool('want-boarding-groups', True):
self.createBoardingParty()
self.npcs = NPCToons.createNpcsInZone(self.air, self.zoneId)
def shutdown(self):
for npc in self.npcs:
npc.requestDelete()
del self.npcs
def createLobbyManager(self):
self.lobbyMgr = LobbyManagerAI.LobbyManagerAI(self.air, self.bossCtor)
self.lobbyMgr.generateWithRequired(self.lobbyZoneId)
def createLobbyElevator(self):
self.lobbyElevator = self.lobbyElevatorCtor(
self.air, self.lobbyMgr, self.lobbyZoneId)
self.lobbyElevator.generateWithRequired(self.lobbyZoneId)
def makeCogHQDoor(self, destinationZone, intDoorIndex, extDoorIndex, lock=0):
intDoor = DistributedCogHQDoorAI.DistributedCogHQDoorAI(
self.air, 0, DoorTypes.INT_COGHQ, self.zoneId,
doorIndex=intDoorIndex, lockValue=lock)
intDoor.zoneId = destinationZone
extDoor = DistributedCogHQDoorAI.DistributedCogHQDoorAI(
self.air, 0, DoorTypes.EXT_COGHQ, destinationZone,
doorIndex=extDoorIndex, lockValue=lock)
extDoor.setOtherDoor(intDoor)
intDoor.setOtherDoor(extDoor)
intDoor.generateWithRequired(destinationZone)
intDoor.sendUpdate('setDoorIndex', [intDoor.getDoorIndex()])
extDoor.generateWithRequired(self.zoneId)
extDoor.sendUpdate('setDoorIndex', [extDoor.getDoorIndex()])
return extDoor
def createBoardingParty(self):
self.boardingParty = DistributedBoardingPartyAI(self.air, [self.lobbyElevator.doId], 8)
self.boardingParty.generateWithRequired(self.lobbyZoneId)