mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-24 12:12:36 -06:00
175 lines
6.5 KiB
Python
Executable file
175 lines
6.5 KiB
Python
Executable file
from panda3d.core import *
|
|
from toontown.toonbase.ToontownGlobals import *
|
|
from direct.distributed.ClockDelta import *
|
|
from direct.interval.IntervalGlobal import *
|
|
import random
|
|
from otp.level import DistributedLevel
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
import FactoryBase
|
|
import FactoryEntityCreator
|
|
import FactorySpecs
|
|
from otp.level import LevelSpec
|
|
from otp.level import LevelConstants
|
|
from toontown.toonbase import TTLocalizer
|
|
from toontown.coghq import FactoryCameraViews
|
|
from direct.controls.ControlManager import CollisionHandlerRayStart
|
|
from otp.nametag.NametagConstants import *
|
|
from otp.ai.MagicWordGlobal import *
|
|
|
|
class DistributedFactory(DistributedLevel.DistributedLevel, FactoryBase.FactoryBase):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedFactory')
|
|
|
|
def __init__(self, cr):
|
|
DistributedLevel.DistributedLevel.__init__(self, cr)
|
|
FactoryBase.FactoryBase.__init__(self)
|
|
self.suitIds = []
|
|
self.suits = []
|
|
self.reserveSuits = []
|
|
self.joiningReserves = []
|
|
self.suitsInitialized = 0
|
|
self.goonClipPlanes = {}
|
|
base.localAvatar.physControls.setCollisionRayHeight(10.0)
|
|
|
|
def createEntityCreator(self):
|
|
return FactoryEntityCreator.FactoryEntityCreator(level=self)
|
|
|
|
def generate(self):
|
|
self.notify.debug('generate')
|
|
DistributedLevel.DistributedLevel.generate(self)
|
|
self.factoryViews = FactoryCameraViews.FactoryCameraViews(self)
|
|
base.localAvatar.chatMgr.chatInputSpeedChat.addFactoryMenu()
|
|
self.accept('SOSPanelEnter', self.handleSOSPanel)
|
|
|
|
def delete(self):
|
|
DistributedLevel.DistributedLevel.delete(self)
|
|
base.localAvatar.chatMgr.chatInputSpeedChat.removeFactoryMenu()
|
|
self.factoryViews.delete()
|
|
del self.factoryViews
|
|
self.ignore('SOSPanelEnter')
|
|
base.localAvatar.physControls.setCollisionRayHeight(CollisionHandlerRayStart)
|
|
|
|
def setFactoryId(self, id):
|
|
FactoryBase.FactoryBase.setFactoryId(self, id)
|
|
|
|
def setForemanConfronted(self, avId):
|
|
if avId == base.localAvatar.doId:
|
|
return
|
|
av = base.cr.identifyFriend(avId)
|
|
if av is None:
|
|
return
|
|
base.localAvatar.setSystemMessage(avId, TTLocalizer.ForemanConfrontedMsg % av.getName())
|
|
return
|
|
|
|
def setDefeated(self):
|
|
self.notify.info('setDefeated')
|
|
messenger.send('FactoryWinEvent')
|
|
|
|
def levelAnnounceGenerate(self):
|
|
self.notify.debug('levelAnnounceGenerate')
|
|
DistributedLevel.DistributedLevel.levelAnnounceGenerate(self)
|
|
specModule = FactorySpecs.getFactorySpecModule(self.factoryId)
|
|
factorySpec = LevelSpec.LevelSpec(specModule)
|
|
DistributedLevel.DistributedLevel.initializeLevel(self, factorySpec)
|
|
|
|
def privGotSpec(self, levelSpec):
|
|
firstSetZoneDoneEvent = self.cr.getNextSetZoneDoneEvent()
|
|
|
|
def handleFirstSetZoneDone():
|
|
base.factoryReady = 1
|
|
messenger.send('FactoryReady')
|
|
|
|
self.acceptOnce(firstSetZoneDoneEvent, handleFirstSetZoneDone)
|
|
modelCount = len(levelSpec.getAllEntIds())
|
|
loader.beginBulkLoad('factory', TTLocalizer.HeadingToFactoryTitle % TTLocalizer.FactoryNames[self.factoryId], modelCount, 1, TTLocalizer.TIP_COGHQ, self.factoryId)
|
|
DistributedLevel.DistributedLevel.privGotSpec(self, levelSpec)
|
|
loader.endBulkLoad('factory')
|
|
|
|
def printPos(self = self):
|
|
pos = base.localAvatar.getPos(self.getZoneNode(self.lastToonZone))
|
|
h = base.localAvatar.getH(self.getZoneNode(self.lastToonZone))
|
|
print 'factory pos: %s, h: %s, zone %s' % (repr(pos), h, self.lastToonZone)
|
|
posStr = 'X: %.3f' % pos[0] + '\nY: %.3f' % pos[1] + '\nZ: %.3f' % pos[2] + '\nH: %.3f' % h + '\nZone: %s' % str(self.lastToonZone)
|
|
base.localAvatar.setChatAbsolute(posStr, CFThought | CFTimeout)
|
|
|
|
self.accept('f2', printPos)
|
|
base.localAvatar.setCameraCollisionsCanMove(1)
|
|
self.acceptOnce('leavingFactory', self.announceLeaving)
|
|
|
|
def handleSOSPanel(self, panel):
|
|
avIds = []
|
|
for avId in self.avIdList:
|
|
if base.cr.doId2do.get(avId):
|
|
avIds.append(avId)
|
|
|
|
panel.setFactoryToonIdList(avIds)
|
|
|
|
def disable(self):
|
|
self.notify.debug('disable')
|
|
base.localAvatar.setCameraCollisionsCanMove(0)
|
|
if hasattr(self, 'suits'):
|
|
del self.suits
|
|
if hasattr(self, 'relatedObjectMgrRequest') and self.relatedObjectMgrRequest:
|
|
self.cr.relatedObjectMgr.abortRequest(self.relatedObjectMgrRequest)
|
|
del self.relatedObjectMgrRequest
|
|
DistributedLevel.DistributedLevel.disable(self)
|
|
|
|
def setSuits(self, suitIds, reserveSuitIds):
|
|
oldSuitIds = list(self.suitIds)
|
|
self.suitIds = suitIds
|
|
self.reserveSuitIds = reserveSuitIds
|
|
newSuitIds = []
|
|
for suitId in self.suitIds:
|
|
if suitId not in oldSuitIds:
|
|
newSuitIds.append(suitId)
|
|
|
|
if len(newSuitIds):
|
|
|
|
def bringOutOfReserve(suits):
|
|
for suit in suits:
|
|
if suit:
|
|
suit.comeOutOfReserve()
|
|
|
|
self.relatedObjectMgrRequest = self.cr.relatedObjectMgr.requestObjects(newSuitIds, bringOutOfReserve)
|
|
|
|
def reservesJoining(self):
|
|
pass
|
|
|
|
def getCogSpec(self, cogId):
|
|
cogSpecModule = FactorySpecs.getCogSpecModule(self.factoryId)
|
|
return cogSpecModule.CogData[cogId]
|
|
|
|
def getReserveCogSpec(self, cogId):
|
|
cogSpecModule = FactorySpecs.getCogSpecModule(self.factoryId)
|
|
return cogSpecModule.ReserveCogData[cogId]
|
|
|
|
def getBattleCellSpec(self, battleCellId):
|
|
cogSpecModule = FactorySpecs.getCogSpecModule(self.factoryId)
|
|
return cogSpecModule.BattleCells[battleCellId]
|
|
|
|
def getFloorOuchLevel(self):
|
|
return 2
|
|
|
|
def getGoonPathId(self):
|
|
return 'sellbotFactory'
|
|
|
|
def getTaskZoneId(self):
|
|
return self.factoryId
|
|
|
|
def getBossTaunt(self):
|
|
return TTLocalizer.FactoryBossTaunt
|
|
|
|
def getBossBattleTaunt(self):
|
|
return TTLocalizer.FactoryBossBattleTaunt
|
|
|
|
@magicWord(category=CATEGORY_PROGRAMMER, types=[int])
|
|
def factoryWarp(zoneNum):
|
|
"""
|
|
Warp to a specific factory zone.
|
|
"""
|
|
factory = [base.cr.doFind('DistributedFactory'), base.cr.doFind('DistributedMegaCorp')]
|
|
for f in factory:
|
|
if (not f) or (not isinstance(f, DistributedFactory)):
|
|
return 'You must be in a factory.'
|
|
factory = f
|
|
factory.warpToZone(zoneNum)
|
|
return 'Warped to zone: %d' % zoneNum
|