mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-23 03:35:12 -06:00
171 lines
5.8 KiB
Python
171 lines
5.8 KiB
Python
import CogHQLobby
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
from direct.fsm import ClassicFSM, State
|
|
from direct.fsm import State
|
|
from direct.fsm import StateData
|
|
from panda3d.core import *
|
|
from toontown.hood import QuietZoneState
|
|
from toontown.hood import ZoneUtil
|
|
from toontown.suit import Suit
|
|
from toontown.town import TownBattle
|
|
|
|
|
|
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')
|
|
|
|
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
|