oldschool-toontown/toontown/hood/ToonHood.py
2019-12-30 01:07:56 -05:00

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