127 lines
5.1 KiB
Python
127 lines
5.1 KiB
Python
from panda3d.core import *
|
|
from toontown.toonbase import ToontownGlobals
|
|
import Playground
|
|
from toontown.building import Elevator
|
|
from toontown.toontowngui import TTDialog
|
|
from toontown.toonbase import TTLocalizer
|
|
from toontown.racing import RaceGlobals
|
|
from direct.fsm import State
|
|
from toontown.safezone import GolfKart
|
|
|
|
class GZPlayground(Playground.Playground):
|
|
|
|
def __init__(self, loader, parentFSM, doneEvent):
|
|
Playground.Playground.__init__(self, loader, parentFSM, doneEvent)
|
|
self.parentFSM = parentFSM
|
|
self.golfKartBlockDoneEvent = 'golfKartBlockDone'
|
|
self.fsm.addState(State.State('golfKartBlock', self.enterGolfKartBlock, self.exitGolfKartBlock, ['walk']))
|
|
state = self.fsm.getStateNamed('walk')
|
|
state.addTransition('golfKartBlock')
|
|
self.golfKartDoneEvent = 'golfKartDone'
|
|
|
|
def load(self):
|
|
Playground.Playground.load(self)
|
|
self.hub = loader.loadModel('phase_6/models/golf/golf_hub2')
|
|
self.hub.reparentTo(render)
|
|
self.dnaroot = render.find('**/goofy_speedway_DNARoot')
|
|
self.dnaroot = base.cr.playGame.hood.loader.geom.find('**/goofy_speedway_DNARoot')
|
|
if not self.dnaroot.isEmpty():
|
|
self.dnaroot.removeNode()
|
|
|
|
def unload(self):
|
|
Playground.Playground.unload(self)
|
|
self.hub.removeNode()
|
|
|
|
def enter(self, requestStatus):
|
|
Playground.Playground.enter(self, requestStatus)
|
|
blimp = base.cr.playGame.hood.loader.geom.find('**/GS_blimp')
|
|
if blimp.isEmpty():
|
|
return
|
|
blimp.setPos(-70, 250, -70)
|
|
blimpBase = NodePath('blimpBase')
|
|
blimpBase.setPos(0, -200, 25)
|
|
blimpBase.setH(-40)
|
|
blimp.reparentTo(blimpBase)
|
|
blimpRoot = NodePath('blimpRoot')
|
|
blimpRoot.setPos(0, -70, 40)
|
|
blimpRoot.reparentTo(base.cr.playGame.hood.loader.geom)
|
|
blimpBase.reparentTo(blimpRoot)
|
|
self.rotateBlimp = blimpRoot.hprInterval(360, Vec3(360, 0, 0))
|
|
self.rotateBlimp.loop()
|
|
|
|
def exit(self):
|
|
Playground.Playground.exit(self)
|
|
if hasattr(self, 'rotateBlimp'):
|
|
self.rotateBlimp.finish()
|
|
|
|
def enterTeleportIn(self, requestStatus):
|
|
reason = requestStatus.get('reason')
|
|
if reason == RaceGlobals.Exit_Barrier:
|
|
requestStatus['nextState'] = 'popup'
|
|
self.dialog = TTDialog.TTDialog(text=TTLocalizer.KartRace_RaceTimeout, command=self.__cleanupDialog, style=TTDialog.Acknowledge)
|
|
elif reason == RaceGlobals.Exit_Slow:
|
|
requestStatus['nextState'] = 'popup'
|
|
self.dialog = TTDialog.TTDialog(text=TTLocalizer.KartRace_RacerTooSlow, command=self.__cleanupDialog, style=TTDialog.Acknowledge)
|
|
elif reason == RaceGlobals.Exit_BarrierNoRefund:
|
|
requestStatus['nextState'] = 'popup'
|
|
self.dialog = TTDialog.TTDialog(text=TTLocalizer.KartRace_RaceTimeoutNoRefund, command=self.__cleanupDialog, style=TTDialog.Acknowledge)
|
|
Playground.Playground.enterTeleportIn(self, requestStatus)
|
|
|
|
def __cleanupDialog(self, value):
|
|
if self.dialog:
|
|
self.dialog.cleanup()
|
|
self.dialog = None
|
|
if hasattr(self, 'fsm'):
|
|
self.fsm.request('walk', [1])
|
|
return
|
|
|
|
def enterGolfKartBlock(self, golfKart):
|
|
base.localAvatar.laffMeter.start()
|
|
base.localAvatar.b_setAnimState('off', 1)
|
|
self.accept(self.golfKartDoneEvent, self.handleGolfKartDone)
|
|
self.trolley = GolfKart.GolfKart(self, self.fsm, self.golfKartDoneEvent, golfKart.getDoId())
|
|
self.trolley.load()
|
|
self.trolley.enter()
|
|
|
|
def exitGolfKartBlock(self):
|
|
base.localAvatar.laffMeter.stop()
|
|
self.ignore(self.trolleyDoneEvent)
|
|
self.trolley.unload()
|
|
self.trolley.exit()
|
|
del self.trolley
|
|
|
|
def detectedGolfKartCollision(self, golfKart):
|
|
self.notify.debug('detectedGolfkartCollision()')
|
|
self.fsm.request('golfKartBlock', [golfKart])
|
|
|
|
def handleStartingBlockDone(self, doneStatus):
|
|
self.notify.debug('handling StartingBlock done event')
|
|
where = doneStatus['where']
|
|
if where == 'reject':
|
|
self.fsm.request('walk')
|
|
elif where == 'exit':
|
|
self.fsm.request('walk')
|
|
elif where == 'racetrack':
|
|
self.doneStatus = doneStatus
|
|
messenger.send(self.doneEvent)
|
|
else:
|
|
self.notify.error('Unknown mode: ' + where + ' in handleStartingBlockDone')
|
|
|
|
def handleGolfKartDone(self, doneStatus):
|
|
self.notify.debug('handling golf kart done event')
|
|
mode = doneStatus['mode']
|
|
if mode == 'reject':
|
|
self.fsm.request('walk')
|
|
elif mode == 'exit':
|
|
self.fsm.request('walk')
|
|
elif mode == 'golfcourse':
|
|
self.doneStatus = {'loader': 'golfcourse',
|
|
'where': 'golfcourse',
|
|
'hoodId': self.loader.hood.id,
|
|
'zoneId': doneStatus['zoneId'],
|
|
'shardId': None,
|
|
'courseId': doneStatus['courseId']}
|
|
messenger.send(self.doneEvent)
|
|
else:
|
|
self.notify.error('Unknown mode: ' + mode + ' in handleGolfKartDone')
|
|
return
|