ToonTownRewritten/otp/level/CutScene.py

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,)