ToonTownRewritten/toontown/coghq/CogHQLoader.py
2014-04-20 18:25:15 -07:00

150 lines
5.4 KiB
Python

from direct.directnotify import DirectNotifyGlobal
from direct.fsm import StateData
from direct.fsm import ClassicFSM, State
from direct.fsm import State
import CogHQLobby
from toontown.hood import QuietZoneState
from toontown.hood import ZoneUtil
from toontown.town import TownBattle
from toontown.suit import Suit
from pandac.PandaModules import *
class CogHQLoader(StateData.StateData):
notify = DirectNotifyGlobal.directNotify.newCategory('CogHQLoader')
def __init__(self, hood, parentFSMState, doneEvent):
StateData.StateData.__init__(self, doneEvent)
self.hood = hood
self.parentFSMState = parentFSMState
self.placeDoneEvent = 'cogHQLoaderPlaceDone'
self.townBattleDoneEvent = 'town-battle-done'
self.fsm = ClassicFSM.ClassicFSM('CogHQLoader', [State.State('start', None, None, ['quietZone', 'cogHQExterior', 'cogHQBossBattle']),
State.State('cogHQExterior', self.enterCogHQExterior, self.exitCogHQExterior, ['quietZone', 'cogHQLobby']),
State.State('cogHQLobby', self.enterCogHQLobby, self.exitCogHQLobby, ['quietZone', 'cogHQExterior', 'cogHQBossBattle']),
State.State('cogHQBossBattle', self.enterCogHQBossBattle, self.exitCogHQBossBattle, ['quietZone']),
State.State('quietZone', self.enterQuietZone, self.exitQuietZone, ['cogHQExterior', 'cogHQLobby', 'cogHQBossBattle']),
State.State('final', None, None, ['start'])], 'start', 'final')
return
def load(self, zoneId):
self.parentFSMState.addChild(self.fsm)
self.music = base.loadMusic(self.musicFile)
self.battleMusic = base.loadMusic('phase_9/audio/bgm/encntr_suit_winning.ogg')
self.townBattle = TownBattle.TownBattle(self.townBattleDoneEvent)
self.townBattle.load()
Suit.loadSuits(3)
self.loadPlaceGeom(zoneId)
def loadPlaceGeom(self, zoneId):
pass
def unloadPlaceGeom(self):
pass
def unload(self):
self.unloadPlaceGeom()
self.parentFSMState.removeChild(self.fsm)
del self.parentFSMState
del self.fsm
self.townBattle.unload()
self.townBattle.cleanup()
del self.townBattle
del self.battleMusic
Suit.unloadSuits(3)
Suit.unloadSkelDialog()
del self.hood
ModelPool.garbageCollect()
TexturePool.garbageCollect()
def enter(self, requestStatus):
self.fsm.enterInitialState()
self.fsm.request(requestStatus['where'], [requestStatus])
def exit(self):
self.ignoreAll()
def enterQuietZone(self, requestStatus):
self.quietZoneDoneEvent = uniqueName('quietZoneDone')
self.acceptOnce(self.quietZoneDoneEvent, self.handleQuietZoneDone)
self.quietZoneStateData = QuietZoneState.QuietZoneState(self.quietZoneDoneEvent)
self.quietZoneStateData.load()
self.quietZoneStateData.enter(requestStatus)
def exitQuietZone(self):
self.ignore(self.quietZoneDoneEvent)
del self.quietZoneDoneEvent
self.quietZoneStateData.exit()
self.quietZoneStateData.unload()
self.quietZoneStateData = None
return
def handleQuietZoneDone(self):
status = self.quietZoneStateData.getRequestStatus()
self.fsm.request(status['where'], [status])
def enterPlace(self, requestStatus):
self.acceptOnce(self.placeDoneEvent, self.placeDone)
self.place = self.placeClass(self, self.fsm, self.placeDoneEvent)
base.cr.playGame.setPlace(self.place)
self.place.load()
self.place.enter(requestStatus)
def exitPlace(self):
self.ignore(self.placeDoneEvent)
self.place.exit()
self.place.unload()
self.place = None
base.cr.playGame.setPlace(self.place)
return
def placeDone(self):
self.requestStatus = self.place.doneStatus
status = self.place.doneStatus
if status.get('shardId') == None and self.isInThisHq(status):
self.unloadPlaceGeom()
zoneId = status['zoneId']
self.loadPlaceGeom(zoneId)
self.fsm.request('quietZone', [status])
else:
self.doneStatus = status
messenger.send(self.doneEvent)
return
def isInThisHq(self, status):
if ZoneUtil.isDynamicZone(status['zoneId']):
return status['hoodId'] == self.hood.hoodId
else:
return ZoneUtil.getHoodId(status['zoneId']) == self.hood.hoodId
def enterCogHQExterior(self, requestStatus):
self.placeClass = self.getExteriorPlaceClass()
self.enterPlace(requestStatus)
self.hood.spawnTitleText(requestStatus['zoneId'])
def exitCogHQExterior(self):
taskMgr.remove('titleText')
self.hood.hideTitleText()
self.exitPlace()
self.placeClass = None
return
def enterCogHQLobby(self, requestStatus):
self.placeClass = CogHQLobby.CogHQLobby
self.enterPlace(requestStatus)
self.hood.spawnTitleText(requestStatus['zoneId'])
def exitCogHQLobby(self):
taskMgr.remove('titleText')
self.hood.hideTitleText()
self.exitPlace()
self.placeClass = None
return
def enterCogHQBossBattle(self, requestStatus):
self.placeClass = self.getBossPlaceClass()
self.enterPlace(requestStatus)
def exitCogHQBossBattle(self):
self.exitPlace()
self.placeClass = None
return