193 lines
7.9 KiB
Python
193 lines
7.9 KiB
Python
from pandac.PandaModules import *
|
|
from toontown.toonbase.ToonBaseGlobal import *
|
|
from toontown.toonbase.ToontownGlobals import *
|
|
from toontown.distributed.ToontownMsgTypes import *
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
from direct.fsm import ClassicFSM, State
|
|
from direct.fsm import State
|
|
from toontown.minigame import Purchase
|
|
from otp.avatar import DistributedAvatar
|
|
from . import Hood
|
|
from toontown.building import SuitInterior
|
|
from toontown.cogdominium import CogdoInterior
|
|
from toontown.toon.Toon import teleportDebug
|
|
|
|
class ToonHood(Hood.Hood):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory('ToonHood')
|
|
|
|
def __init__(self, parentFSM, doneEvent, dnaStore, hoodId):
|
|
Hood.Hood.__init__(self, parentFSM, doneEvent, dnaStore, hoodId)
|
|
self.suitInteriorDoneEvent = 'suitInteriorDone'
|
|
self.minigameDoneEvent = 'minigameDone'
|
|
self.safeZoneLoaderClass = None
|
|
self.townLoaderClass = None
|
|
self.fsm = ClassicFSM.ClassicFSM('Hood', [State.State('start', self.enterStart, self.exitStart, ['townLoader', 'safeZoneLoader']),
|
|
State.State('townLoader', self.enterTownLoader, self.exitTownLoader, ['quietZone',
|
|
'safeZoneLoader',
|
|
'suitInterior',
|
|
'cogdoInterior']),
|
|
State.State('safeZoneLoader', self.enterSafeZoneLoader, self.exitSafeZoneLoader, ['quietZone',
|
|
'suitInterior',
|
|
'cogdoInterior',
|
|
'townLoader',
|
|
'minigame']),
|
|
State.State('purchase', self.enterPurchase, self.exitPurchase, ['quietZone', 'minigame', 'safeZoneLoader']),
|
|
State.State('suitInterior', self.enterSuitInterior, self.exitSuitInterior, ['quietZone', 'townLoader', 'safeZoneLoader']),
|
|
State.State('cogdoInterior', self.enterCogdoInterior, self.exitCogdoInterior, ['quietZone', 'townLoader', 'safeZoneLoader']),
|
|
State.State('minigame', self.enterMinigame, self.exitMinigame, ['purchase']),
|
|
State.State('quietZone', self.enterQuietZone, self.exitQuietZone, ['safeZoneLoader',
|
|
'townLoader',
|
|
'suitInterior',
|
|
'cogdoInterior',
|
|
'minigame']),
|
|
State.State('final', self.enterFinal, self.exitFinal, [])], 'start', 'final')
|
|
self.fsm.enterInitialState()
|
|
return
|
|
|
|
def load(self):
|
|
Hood.Hood.load(self)
|
|
|
|
def unload(self):
|
|
del self.safeZoneLoaderClass
|
|
del self.townLoaderClass
|
|
Hood.Hood.unload(self)
|
|
|
|
def loadLoader(self, requestStatus):
|
|
loaderName = requestStatus['loader']
|
|
if loaderName == 'safeZoneLoader':
|
|
self.loader = self.safeZoneLoaderClass(self, self.fsm.getStateNamed('safeZoneLoader'), self.loaderDoneEvent)
|
|
self.loader.load()
|
|
elif loaderName == 'townLoader':
|
|
self.loader = self.townLoaderClass(self, self.fsm.getStateNamed('townLoader'), self.loaderDoneEvent)
|
|
self.loader.load(requestStatus['zoneId'])
|
|
|
|
def enterTownLoader(self, requestStatus):
|
|
teleportDebug(requestStatus, 'ToonHood.enterTownLoader, status=%s' % (requestStatus,))
|
|
self.accept(self.loaderDoneEvent, self.handleTownLoaderDone)
|
|
self.loader.enter(requestStatus)
|
|
self.spawnTitleText(requestStatus['zoneId'])
|
|
|
|
def exitTownLoader(self):
|
|
taskMgr.remove('titleText')
|
|
self.hideTitleText()
|
|
self.ignore(self.loaderDoneEvent)
|
|
self.loader.exit()
|
|
self.loader.unload()
|
|
del self.loader
|
|
|
|
def handleTownLoaderDone(self):
|
|
doneStatus = self.loader.getDoneStatus()
|
|
teleportDebug(doneStatus, 'handleTownLoaderDone, doneStatus=%s' % (doneStatus,))
|
|
if self.isSameHood(doneStatus):
|
|
teleportDebug(doneStatus, 'same hood')
|
|
self.fsm.request('quietZone', [doneStatus])
|
|
else:
|
|
teleportDebug(doneStatus, 'different hood')
|
|
self.doneStatus = doneStatus
|
|
messenger.send(self.doneEvent)
|
|
|
|
def enterPurchase(self, pointsAwarded, playerMoney, playerIds, playerStates, remain, metagameRound = -1, votesArray = None):
|
|
messenger.send('enterSafeZone')
|
|
DistributedAvatar.DistributedAvatar.HpTextEnabled = 0
|
|
base.localAvatar.laffMeter.start()
|
|
self.purchaseDoneEvent = 'purchaseDone'
|
|
self.accept(self.purchaseDoneEvent, self.handlePurchaseDone)
|
|
self.purchase = Purchase.Purchase(base.localAvatar, pointsAwarded, playerMoney, playerIds, playerStates, remain, self.purchaseDoneEvent, metagameRound, votesArray)
|
|
self.purchase.load()
|
|
self.purchase.enter()
|
|
|
|
def exitPurchase(self):
|
|
messenger.send('exitSafeZone')
|
|
DistributedAvatar.DistributedAvatar.HpTextEnabled = 1
|
|
base.localAvatar.laffMeter.stop()
|
|
self.ignore(self.purchaseDoneEvent)
|
|
self.purchase.exit()
|
|
self.purchase.unload()
|
|
del self.purchase
|
|
|
|
def handlePurchaseDone(self):
|
|
doneStatus = self.purchase.getDoneStatus()
|
|
if doneStatus['where'] == 'playground':
|
|
self.fsm.request('quietZone', [{'loader': 'safeZoneLoader',
|
|
'where': 'playground',
|
|
'how': 'teleportIn',
|
|
'hoodId': self.hoodId,
|
|
'zoneId': self.hoodId,
|
|
'shardId': None,
|
|
'avId': -1}])
|
|
elif doneStatus['loader'] == 'minigame':
|
|
self.fsm.request('minigame')
|
|
else:
|
|
self.notify.error('handlePurchaseDone: unknown mode')
|
|
return
|
|
|
|
def enterSuitInterior(self, requestStatus = None):
|
|
self.placeDoneEvent = 'suit-interior-done'
|
|
self.acceptOnce(self.placeDoneEvent, self.handleSuitInteriorDone)
|
|
self.place = SuitInterior.SuitInterior(self, self.fsm, self.placeDoneEvent)
|
|
self.place.load()
|
|
self.place.enter(requestStatus)
|
|
base.cr.playGame.setPlace(self.place)
|
|
|
|
def exitSuitInterior(self):
|
|
self.ignore(self.placeDoneEvent)
|
|
del self.placeDoneEvent
|
|
self.place.exit()
|
|
self.place.unload()
|
|
self.place = None
|
|
base.cr.playGame.setPlace(self.place)
|
|
return
|
|
|
|
def handleSuitInteriorDone(self):
|
|
doneStatus = self.place.getDoneStatus()
|
|
if self.isSameHood(doneStatus):
|
|
self.fsm.request('quietZone', [doneStatus])
|
|
else:
|
|
self.doneStatus = doneStatus
|
|
messenger.send(self.doneEvent)
|
|
|
|
def enterCogdoInterior(self, requestStatus = None):
|
|
self.placeDoneEvent = 'cogdo-interior-done'
|
|
self.acceptOnce(self.placeDoneEvent, self.handleCogdoInteriorDone)
|
|
self.place = CogdoInterior.CogdoInterior(self, self.fsm, self.placeDoneEvent)
|
|
self.place.load()
|
|
self.place.enter(requestStatus)
|
|
base.cr.playGame.setPlace(self.place)
|
|
|
|
def exitCogdoInterior(self):
|
|
self.ignore(self.placeDoneEvent)
|
|
del self.placeDoneEvent
|
|
self.place.exit()
|
|
self.place.unload()
|
|
self.place = None
|
|
base.cr.playGame.setPlace(self.place)
|
|
return
|
|
|
|
def handleCogdoInteriorDone(self):
|
|
doneStatus = self.place.getDoneStatus()
|
|
if self.isSameHood(doneStatus):
|
|
self.fsm.request('quietZone', [doneStatus])
|
|
else:
|
|
self.doneStatus = doneStatus
|
|
messenger.send(self.doneEvent)
|
|
|
|
def enterMinigame(self, ignoredParameter = None):
|
|
messenger.send('enterSafeZone')
|
|
DistributedAvatar.DistributedAvatar.HpTextEnabled = 0
|
|
base.localAvatar.laffMeter.start()
|
|
base.cr.forbidCheesyEffects(1)
|
|
self.acceptOnce(self.minigameDoneEvent, self.handleMinigameDone)
|
|
return None
|
|
|
|
def exitMinigame(self):
|
|
messenger.send('exitSafeZone')
|
|
DistributedAvatar.DistributedAvatar.HpTextEnabled = 1
|
|
base.localAvatar.laffMeter.stop()
|
|
base.cr.forbidCheesyEffects(0)
|
|
self.ignore(self.minigameDoneEvent)
|
|
minigameState = self.fsm.getStateNamed('minigame')
|
|
for childFSM in minigameState.getChildren():
|
|
minigameState.removeChild(childFSM)
|
|
|
|
def handleMinigameDone(self):
|
|
return None
|