99 lines
4 KiB
Python
99 lines
4 KiB
Python
from direct.showbase import DirectObject
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
import BasicEntities
|
|
from pandac.PandaModules import *
|
|
from pandac.PandaModules import *
|
|
from direct.interval.IntervalGlobal import *
|
|
from direct.distributed.ClockDelta import *
|
|
from toontown.toonbase import ToontownGlobals
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
from direct.fsm import ClassicFSM
|
|
|
|
def nothing(self, track, subjectNodePath, duration):
|
|
return track
|
|
|
|
|
|
def irisInOut(self, track, subjectNodePath, duration):
|
|
track.append(Sequence(Func(base.transitions.irisOut, 0.5), Func(base.transitions.irisIn, 1.5), Wait(duration), Func(base.transitions.irisOut, 1.0), Func(base.transitions.irisIn, 0.5)))
|
|
return track
|
|
|
|
|
|
def letterBox(self, track, subjectNodePath, duration):
|
|
track.append(Sequence(Wait(duration)))
|
|
return track
|
|
|
|
|
|
def foo1(self, track, subjectNodePath, duration):
|
|
track.append(Sequence(Func(base.localAvatar.stopUpdateSmartCamera), PosHprInterval(camera, other=subjectNodePath, pos=Point3(-2, -35, 7.5), hpr=VBase3(-7, 0, 0)), LerpPosHprInterval(nodePath=camera, other=subjectNodePath, duration=duration, pos=Point3(2, -22, 7.5), hpr=VBase3(4, 0, 0), blendType='easeInOut'), PosHprInterval(camera, other=subjectNodePath, pos=Point3(0, -28, 7.5), hpr=VBase3(0, 0, 0)), Func(base.localAvatar.startUpdateSmartCamera)))
|
|
return track
|
|
|
|
|
|
def doorUnlock(self, track, subjectNodePath, duration):
|
|
track.append(Sequence(Func(base.localAvatar.stopUpdateSmartCamera), PosHprInterval(camera, other=self, pos=Point3(-2, -35, 7.5), hpr=VBase3(-7, 0, 0)), LerpPosHprInterval(nodePath=camera, other=self, duration=duration, pos=Point3(2, -22, 7.5), hpr=VBase3(4, 0, 0), blendType='easeInOut'), PosHprInterval(camera, other=self, pos=Point3(0, -28, 7.5), hpr=VBase3(0, 0, 0)), Func(base.localAvatar.startUpdateSmartCamera)))
|
|
return track
|
|
|
|
|
|
class CutScene(BasicEntities.NodePathEntity, DirectObject.DirectObject):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory('CutScene')
|
|
effects = {'nothing': nothing,
|
|
'irisInOut': irisInOut,
|
|
'letterBox': letterBox}
|
|
motions = {'foo1': foo1,
|
|
'doorUnlock': doorUnlock}
|
|
|
|
def __init__(self, level, entId):
|
|
DirectObject.DirectObject.__init__(self)
|
|
BasicEntities.NodePathEntity.__init__(self, level, entId)
|
|
self.track = None
|
|
self.setEffect(self.effect)
|
|
self.setMotion(self.motion)
|
|
self.subjectNodePath = render.attachNewNode('CutScene')
|
|
self.subjectNodePath.setPos(self.pos)
|
|
self.subjectNodePath.setHpr(self.hpr)
|
|
self.setStartStop(self.startStopEvent)
|
|
return
|
|
|
|
def destroy(self):
|
|
self.ignore(self.startStopEvent)
|
|
self.startStopEvent = None
|
|
BasicEntities.NodePathEntity.destroy(self)
|
|
return
|
|
|
|
def setEffect(self, effect):
|
|
self.effect = effect
|
|
self.getEffect = self.effects[effect]
|
|
|
|
def setMotion(self, motion):
|
|
self.motionType = motion
|
|
self.getMotion = self.motions[motion]
|
|
|
|
def setSubjectNodePath(self, subjectNodePath):
|
|
self.subjectNodePath = subjectNodePath
|
|
|
|
def startOrStop(self, start):
|
|
trackName = 'cutSceneTrack-%d' % (id(self),)
|
|
if start:
|
|
if self.track:
|
|
self.track.finish()
|
|
self.track = None
|
|
track = Parallel(name=trackName)
|
|
track = self.getEffect(self, track, self.subjectNodePath, self.duration)
|
|
track = self.getMotion(self, track, self.subjectNodePath, self.duration)
|
|
track = Sequence(Wait(0.4), track)
|
|
track.start(0.0)
|
|
self.track = track
|
|
elif self.track:
|
|
self.track.pause()
|
|
self.track = None
|
|
base.localAvatar.startUpdateSmartCamera()
|
|
return
|
|
|
|
def setStartStop(self, event):
|
|
if self.startStopEvent:
|
|
self.ignore(self.startStopEvent)
|
|
self.startStopEvent = self.getOutputEventName(event)
|
|
if self.startStopEvent:
|
|
self.accept(self.startStopEvent, self.startOrStop)
|
|
|
|
def getName(self):
|
|
return 'switch-%s' % (self.entId,)
|