98 lines
3.2 KiB
Python
98 lines
3.2 KiB
Python
from direct.fsm import ClassicFSM, State
|
|
from toontown.toonbase import ToontownGlobals
|
|
from toontown.hood.Hood import Hood
|
|
|
|
|
|
class CogHood(Hood):
|
|
notify = directNotify.newCategory('CogHood')
|
|
|
|
ID = None
|
|
LOADER_CLASS = None
|
|
SKY_FILE = 'phase_9/models/cogHQ/cog_sky'
|
|
TITLE_COLOR = (0.5, 0.5, 0.5, 1.0)
|
|
|
|
def __init__(self, parentFSM, doneEvent, dnaStore, hoodId):
|
|
Hood.__init__(self, parentFSM, doneEvent, dnaStore, hoodId)
|
|
|
|
self.fsm = ClassicFSM.ClassicFSM(
|
|
'Hood',
|
|
[State.State('start',
|
|
self.enterStart,
|
|
self.exitStart,
|
|
['cogHQLoader']),
|
|
State.State('cogHQLoader',
|
|
self.enterCogHQLoader,
|
|
self.exitCogHQLoader,
|
|
['quietZone']),
|
|
State.State('quietZone',
|
|
self.enterQuietZone,
|
|
self.exitQuietZone,
|
|
['cogHQLoader']),
|
|
State.State('final',
|
|
self.enterFinal,
|
|
self.exitFinal,
|
|
[])
|
|
],
|
|
'start',
|
|
'final')
|
|
self.fsm.enterInitialState()
|
|
|
|
# Until Hood is cleaned up, we will need to define some variables:
|
|
|
|
self.id = self.ID
|
|
self.storageDNAFile = None
|
|
self.skyFile = self.SKY_FILE
|
|
self.titleColor = self.TITLE_COLOR
|
|
|
|
def load(self):
|
|
Hood.load(self)
|
|
|
|
skyInner = self.sky.find('**/InnerGroup')
|
|
skyMiddle = self.sky.find('**/MiddleGroup')
|
|
skyOuter = self.sky.find('**/OutterSky')
|
|
|
|
if not skyOuter.isEmpty():
|
|
skyOuter.setBin('background', 0)
|
|
if not skyMiddle.isEmpty():
|
|
skyMiddle.setDepthWrite(0)
|
|
skyMiddle.setBin('background', 10)
|
|
if not skyInner.isEmpty():
|
|
skyInner.setDepthWrite(0)
|
|
skyInner.setBin('background', 20)
|
|
|
|
self.parentFSM.getStateNamed(self.__class__.__name__).addChild(self.fsm)
|
|
|
|
def unload(self):
|
|
self.parentFSM.getStateNamed(self.__class__.__name__).removeChild(self.fsm)
|
|
|
|
Hood.unload(self)
|
|
|
|
def loadLoader(self, requestStatus):
|
|
loaderName = requestStatus['loader']
|
|
if loaderName == 'cogHQLoader':
|
|
self.loader = self.LOADER_CLASS(self, self.fsm.getStateNamed('cogHQLoader'), self.loaderDoneEvent)
|
|
self.loader.load(requestStatus['zoneId'])
|
|
|
|
def enterCogHQLoader(self, requestStatus):
|
|
self.accept(self.loaderDoneEvent, self.handleCogHQLoaderDone)
|
|
self.loader.enter(requestStatus)
|
|
|
|
def exitCogHQLoader(self):
|
|
self.ignore(self.loaderDoneEvent)
|
|
self.loader.exit()
|
|
self.loader.unload()
|
|
del self.loader
|
|
|
|
def handleCogHQLoaderDone(self):
|
|
doneStatus = self.loader.getDoneStatus()
|
|
if self.isSameHood(doneStatus):
|
|
self.fsm.request('quietZone', [doneStatus])
|
|
else:
|
|
self.doneStatus = doneStatus
|
|
messenger.send(self.doneEvent)
|
|
|
|
def exit(self):
|
|
base.localAvatar.setCameraFov(settings['fov'])
|
|
base.camLens.setNearFar(ToontownGlobals.DefaultCameraNear, ToontownGlobals.DefaultCameraFar)
|
|
|
|
Hood.exit(self)
|