historical/toontown-classic.git/toontown/hood/EstateHood.py
2024-01-16 11:20:27 -06:00

150 lines
6.3 KiB
Python

from panda3d.core 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
import SkyUtil
from direct.task.Task import Task
import Hood
from toontown.estate import EstateLoader
from toontown.estate import HouseGlobals
import ZoneUtil
class EstateHood(Hood.Hood):
notify = DirectNotifyGlobal.directNotify.newCategory('EstateHood')
def __init__(self, parentFSM, doneEvent, dnaStore, hoodId):
Hood.Hood.__init__(self, parentFSM, doneEvent, dnaStore, hoodId)
self.fsm = ClassicFSM.ClassicFSM('Hood', [State.State('start', self.enterStart, self.exitStart, ['safeZoneLoader']),
State.State('safeZoneLoader', self.enterSafeZoneLoader, self.exitSafeZoneLoader, ['quietZone']),
State.State('quietZone', self.enterQuietZone, self.exitQuietZone, ['safeZoneLoader']),
State.State('final', self.enterFinal, self.exitFinal, [])], 'start', 'final')
self.fsm.enterInitialState()
self.id = MyEstate
self.safeZoneLoaderClass = EstateLoader.EstateLoader
self.storageDNAFile = 'phase_5.5/dna/storage_estate.dna'
self.holidayStorageDNADict = {WINTER_DECORATIONS: ['phase_5.5/dna/winter_storage_estate.dna'],
WACKY_WINTER_DECORATIONS: ['phase_5.5/dna/winter_storage_estate.dna'],
HALLOWEEN_PROPS: ['phase_5.5/dna/halloween_props_storage_estate.dna'],
SPOOKY_PROPS: ['phase_5.5/dna/halloween_props_storage_estate.dna']}
self.skyFile = 'phase_3.5/models/props/TT_sky'
self.spookySkyFile = 'phase_3.5/models/props/BR_sky'
self.popupInfo = None
return
def load(self):
Hood.Hood.load(self)
def unload(self):
del self.safeZoneLoaderClass
if self.popupInfo:
self.popupInfo.destroy()
self.popupInfo = None
Hood.Hood.unload(self)
return
def enter(self, requestStatus):
hoodId = requestStatus['hoodId']
zoneId = requestStatus['zoneId']
self.accept('kickToPlayground', self.kickToPlayground)
self.fsm.request(requestStatus['loader'], [requestStatus])
def exit(self):
if self.loader:
self.loader.exit()
self.loader.unload()
del self.loader
Hood.Hood.exit(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()
def spawnTitleText(self, zoneId):
pass
def hideTitleTextTask(self, task):
return Task.done
def kickToPlayground(self, retCode):
if retCode == 0:
msg = TTLocalizer.EstateOwnerLeftMessage % HouseGlobals.BOOT_GRACE_PERIOD
self.__popupKickoutMessage(msg)
elif retCode == 1:
zoneId = base.localAvatar.lastHood
self.doneStatus = {'loader': ZoneUtil.getBranchLoaderName(zoneId),
'where': ZoneUtil.getToonWhereName(zoneId),
'how': 'teleportIn',
'hoodId': zoneId,
'zoneId': zoneId,
'shardId': None,
'avId': -1}
messenger.send(self.doneEvent)
elif retCode == 2:
zoneId = base.localAvatar.lastHood
self.doneStatus = {'loader': ZoneUtil.getBranchLoaderName(zoneId),
'where': ZoneUtil.getToonWhereName(zoneId),
'how': 'teleportIn',
'hoodId': zoneId,
'zoneId': zoneId,
'shardId': None,
'avId': -1}
messenger.send(self.doneEvent)
else:
self.notify.error('unknown reason for exiting estate')
return
def __popupKickoutMessage(self, msg):
if self.popupInfo != None:
self.popupInfo.destroy()
self.popupInfo = None
buttons = loader.loadModel('phase_3/models/gui/dialog_box_buttons_gui')
okButtonImage = (buttons.find('**/ChtBx_OKBtn_UP'), buttons.find('**/ChtBx_OKBtn_DN'), buttons.find('**/ChtBx_OKBtn_Rllvr'))
self.popupInfo = DirectFrame(parent=hidden, relief=None, state='normal', text=msg, frameSize=(-1, 1, -1, 1), text_wordwrap=10, geom=DGG.getDefaultDialogGeom(), geom_color=GlobalDialogColor, geom_scale=(0.88, 1, 0.75), geom_pos=(0, 0, -.08), text_scale=TTLocalizer.EHpopupInfo, text_pos=(0, 0.1))
DirectButton(self.popupInfo, image=okButtonImage, relief=None, text=TTLocalizer.EstatePopupOK, text_scale=0.05, text_pos=(0.0, -0.1), textMayChange=0, pos=(0.0, 0.0, -0.3), command=self.__handleKickoutOk)
buttons.removeNode()
self.popupInfo.reparentTo(aspect2d)
return
def __handleKickoutOk(self):
self.popupInfo.reparentTo(hidden)
def skyTrack(self, task):
return SkyUtil.cloudSkyTrack(task)
def startSky(self):
if not self.sky.getTag('sky') == 'Regular':
self.endSpookySky()
SkyUtil.startCloudSky(self)
if base.cloudPlatformsEnabled:
self.loader.startCloudPlatforms()
def stopSky(self):
Hood.Hood.stopSky(self)
self.loader.stopCloudPlatforms()
def startSpookySky(self):
if hasattr(self, 'loader') and self.loader and hasattr(self.loader, 'cloudTrack') and self.loader.cloudTrack:
self.stopSky()
self.sky = loader.loadModel(self.spookySkyFile)
self.sky.setTag('sky', 'Halloween')
self.sky.setScale(1.0)
self.sky.setDepthTest(0)
self.sky.setDepthWrite(0)
self.sky.setColor(0.5, 0.5, 0.5, 1)
self.sky.setBin('background', 100)
self.sky.setFogOff()
self.sky.reparentTo(camera)
self.sky.setTransparency(TransparencyAttrib.MDual, 1)
fadeIn = self.sky.colorScaleInterval(1.5, Vec4(1, 1, 1, 1), startColorScale=Vec4(1, 1, 1, 0.25), blendType='easeInOut')
fadeIn.start()
self.sky.setZ(0.0)
self.sky.setHpr(0.0, 0.0, 0.0)
ce = CompassEffect.make(NodePath(), CompassEffect.PRot | CompassEffect.PZ)
self.sky.node().setEffect(ce)