mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-23 03:35:12 -06:00
178 lines
7.2 KiB
Python
178 lines
7.2 KiB
Python
import random
|
|
from panda3d.core import *
|
|
from direct.interval.IntervalGlobal import *
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
from toontown.toonbase import ToontownGlobals, ToontownTimer
|
|
from toontown.cogdominium import CogdoBarrelRoomConsts, CogdoBarrelRoomRewardPanel
|
|
from toontown.distributed import DelayDelete
|
|
|
|
class CogdoBarrelRoom:
|
|
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedCogdoBarrelRoom')
|
|
|
|
def __init__(self):
|
|
self.timer = None
|
|
self.model = None
|
|
self._isLoaded = False
|
|
self.dummyElevInNode = None
|
|
self.cogdoBarrelsNode = None
|
|
self.entranceNode = None
|
|
self.nearBattleNode = None
|
|
self.rewardUi = None
|
|
self.rewardUiTaskName = 'CogdoBarrelRoom-RewardUI'
|
|
self.rewardCameraTaskName = 'CogdoBarrelRoom-RewardCamera'
|
|
self.fog = None
|
|
self.defaultFar = None
|
|
self.stomperSfx = None
|
|
|
|
def destroy(self):
|
|
self.unload()
|
|
|
|
def load(self):
|
|
if self._isLoaded:
|
|
return
|
|
self.timer = ToontownTimer.ToontownTimer()
|
|
self.timer.stash()
|
|
self.model = loader.loadModel(CogdoBarrelRoomConsts.BarrelRoomModel)
|
|
self.model.setPos(*CogdoBarrelRoomConsts.BarrelRoomModelPos)
|
|
self.model.reparentTo(render)
|
|
self.model.stash()
|
|
self.entranceNode = self.model.attachNewNode('door-entrance')
|
|
self.entranceNode.setPos(0, -65, 0)
|
|
self.nearBattleNode = self.model.attachNewNode('near-battle')
|
|
self.nearBattleNode.setPos(0, -25, 0)
|
|
self.rewardUi = CogdoBarrelRoomRewardPanel.CogdoBarrelRoomRewardPanel()
|
|
self.hideRewardUi()
|
|
self.stomperSfx = base.loadSfx(CogdoBarrelRoomConsts.StomperSound)
|
|
self.fog = Fog('barrel-room-fog')
|
|
self.fog.setColor(CogdoBarrelRoomConsts.BarrelRoomFogColor)
|
|
self.fog.setLinearRange(*CogdoBarrelRoomConsts.BarrelRoomFogLinearRange)
|
|
self.brBarrel = render.attachNewNode('@@CogdoBarrels')
|
|
for i in xrange(len(CogdoBarrelRoomConsts.BarrelProps)):
|
|
self.bPath = self.brBarrel.attachNewNode('%s%s'% (CogdoBarrelRoomConsts.BarrelPathName, i))
|
|
self.bPath.setPos(CogdoBarrelRoomConsts.BarrelProps[i]['pos'])
|
|
self.bPath.setH(CogdoBarrelRoomConsts.BarrelProps[i]['heading'])
|
|
self._isLoaded = True
|
|
|
|
def unload(self):
|
|
if self.model:
|
|
self.model.removeNode()
|
|
self.model = None
|
|
if self.timer:
|
|
self.timer.destroy()
|
|
self.timer = None
|
|
if self.rewardUi:
|
|
self.rewardUi.destroy()
|
|
self.rewardUi = None
|
|
if hasattr(self, 'fog'):
|
|
if self.fog:
|
|
render.setFogOff()
|
|
del self.fog
|
|
taskMgr.remove(self.rewardUiTaskName)
|
|
taskMgr.remove(self.rewardCameraTaskName)
|
|
self._isLoaded = False
|
|
|
|
def isLoaded(self):
|
|
return self._isLoaded
|
|
|
|
def show(self):
|
|
if not self.cogdoBarrelsNode:
|
|
self.cogdoBarrelsNode = render.find('**/@@CogdoBarrels')
|
|
if not self.cogdoBarrelsNode.isEmpty():
|
|
self.cogdoBarrelsNode.reparentTo(self.model)
|
|
self.cogdoBarrelsNode.unstash()
|
|
base.localAvatar.b_setAnimState('neutral')
|
|
self.defaultFar = base.camLens.getFar()
|
|
base.camLens.setFar(CogdoBarrelRoomConsts.BarrelRoomCameraFar)
|
|
base.camLens.setMinFov(settings['fov']/(4./3.))
|
|
self.showBattleAreaLight(True)
|
|
render.setFog(self.fog)
|
|
self.model.unstash()
|
|
|
|
def hide(self):
|
|
self.model.stash()
|
|
if self.defaultFar is not None:
|
|
base.camLens.setFar(self.defaultFar)
|
|
return
|
|
|
|
def activate(self):
|
|
self.notify.info('Activating barrel room: %d sec timer.' % CogdoBarrelRoomConsts.CollectionTime)
|
|
self.timer.unstash()
|
|
self.timer.posAboveShtikerBook()
|
|
self.timer.countdown(CogdoBarrelRoomConsts.CollectionTime)
|
|
base.cr.playGame.getPlace().fsm.request('walk')
|
|
|
|
def deactivate(self):
|
|
self.notify.info('Deactivating barrel room.')
|
|
self.timer.stop()
|
|
self.timer.stash()
|
|
|
|
def placeToonsAtEntrance(self, toons):
|
|
for i in xrange(len(toons)):
|
|
toons[i].setPosHpr(self.entranceNode, *CogdoBarrelRoomConsts.BarrelRoomPlayerSpawnPoints[i])
|
|
|
|
def placeToonsNearBattle(self, toons):
|
|
for i in xrange(len(toons)):
|
|
toons[i].setPosHpr(self.nearBattleNode, *CogdoBarrelRoomConsts.BarrelRoomPlayerSpawnPoints[i])
|
|
|
|
def showBattleAreaLight(self, visible = True):
|
|
lightConeNode = self.model.find('**/battleCone')
|
|
if lightConeNode != None and not lightConeNode.isEmpty():
|
|
if visible:
|
|
lightConeNode.show()
|
|
else:
|
|
lightConeNode.hide()
|
|
return
|
|
|
|
def getIntroInterval(self):
|
|
avatar = base.localAvatar
|
|
trackName = '__introBarrelRoom-%d' % avatar.doId
|
|
track = Parallel(name=trackName)
|
|
track.append(self.__stomperIntervals())
|
|
track.append(Sequence(Func(camera.reparentTo, render), Func(camera.setPosHpr, self.model, -20.0, -87.9, 12.0, -30, 0, 0), Func(base.transitions.irisIn, 0.5), Wait(1.0), LerpHprInterval(camera, duration=2.0, startHpr=Vec3(-30, 0, 0), hpr=Vec3(0, 0, 0), blendType='easeInOut'), Wait(2.5), LerpHprInterval(camera, duration=3.0, startHpr=Vec3(0, 0, 0), hpr=Vec3(-45, 0, 0), blendType='easeInOut'), Wait(2.5)))
|
|
track.delayDelete = DelayDelete.DelayDelete(avatar, 'introBarrelRoomTrack')
|
|
track.setDoneEvent(trackName)
|
|
return (track, trackName)
|
|
|
|
def __stomperIntervals(self):
|
|
ivals = [SoundInterval(self.stomperSfx)]
|
|
i = 0
|
|
for stomperDef in CogdoBarrelRoomConsts.StomperProps:
|
|
stomperNode = render.find(stomperDef['path'])
|
|
if stomperNode:
|
|
maxZ = random.uniform(10, 20)
|
|
minZ = maxZ - 10
|
|
if stomperDef['motion'] == 'up':
|
|
startZ, destZ = minZ, maxZ
|
|
else:
|
|
startZ, destZ = maxZ, minZ
|
|
stomperNode.setPos(Point3(0, 0, startZ))
|
|
ivals.append(LerpPosInterval(stomperNode, CogdoBarrelRoomConsts.StomperHaltTime, Point3(0, 0, destZ), blendType='easeOut'))
|
|
i += 1
|
|
|
|
return Parallel(*tuple(ivals))
|
|
|
|
def __rewardUiTimeout(self, callback):
|
|
self.hideRewardUi()
|
|
if callback is not None:
|
|
callback()
|
|
return
|
|
|
|
def __rewardCamera(self):
|
|
trackName = 'cogdoBarrelRoom-RewardCamera'
|
|
track = Sequence(Func(camera.reparentTo, render), Func(camera.setPosHpr, self.model, 0, 0, 11.0, 0, -14, 0), Func(self.showBattleAreaLight, False), name=trackName)
|
|
return (track, trackName)
|
|
|
|
def showRewardUi(self, callback = None):
|
|
track, trackName = self.__rewardCamera()
|
|
if CogdoBarrelRoomConsts.ShowRewardUI:
|
|
self.rewardUi.setRewards()
|
|
self.rewardUi.unstash()
|
|
taskMgr.doMethodLater(CogdoBarrelRoomConsts.RewardUiTime, self.__rewardUiTimeout, self.rewardUiTaskName, extraArgs=[callback])
|
|
return (track, trackName)
|
|
|
|
def setRewardResults(self, results):
|
|
self.rewardUi.setRewards(results)
|
|
|
|
def hideRewardUi(self):
|
|
self.rewardUi.stash()
|
|
taskMgr.remove(self.rewardUiTaskName)
|