oldschool-toontown/toontown/cogdominium/CogdoFlyingGameMovies.py

144 lines
5.5 KiB
Python
Raw Normal View History

2023-03-26 19:39:59 -05:00
from panda3d.core import Point3, Plane, PlaneNode
2019-11-02 17:27:54 -05:00
from direct.showbase.RandomNumGen import RandomNumGen
from direct.interval.MetaInterval import Sequence, Parallel
from direct.interval.FunctionInterval import Func, Wait
from toontown.toonbase import TTLocalizer
from toontown.toon import Toon, ToonHead, ToonDNA
from toontown.suit import Suit, SuitDNA
from . import CogdoFlyingGameGlobals as Globals
from .CogdoUtil import CogdoGameMovie
from . import CogdoUtil
2019-11-02 17:27:54 -05:00
class CogdoFlyingGameIntro(CogdoGameMovie):
def __init__(self, level, rng):
CogdoGameMovie.__init__(self)
self._level = level
self._rng = RandomNumGen(rng)
self._exit = self._level.getExit()
def _getRandomLine(self, lineList):
return CogdoUtil.getRandomDialogueLine(lineList, self._rng)
def displayLine(self, who, text):
self._dialogueLabel.node().setText(text)
if who == 'toon':
self.toonHead.reparentTo(aspect2d)
self.cogHead.reparentTo(hidden)
self._toonDialogueSfx.play()
self.toonHead.setClipPlane(self.clipPlane)
else:
self.toonHead.reparentTo(hidden)
self.cogHead.reparentTo(aspect2d)
self._cogDialogueSfx.play()
self.cogHead.setClipPlane(self.clipPlane)
def makeSuit(self, suitType):
suit = Suit.Suit()
dna = SuitDNA.SuitDNA()
dna.newSuit(suitType)
suit.setStyle(dna)
suit.isDisguised = 1
suit.generateSuit()
suit.setScale(1, 1, 2)
suit.setPos(0, 0, -4.4)
suit.reparentTo(self.toonHead)
for part in suit.getHeadParts():
part.hide()
suit.loop('neutral')
def load(self):
CogdoGameMovie.load(self)
self.toonDNA = ToonDNA.ToonDNA()
self.toonDNA.newToonFromProperties('dss', 'ss', 'm', 'm', 2, 0, 2, 2, 1, 8, 1, 8, 1, 14)
self.toonHead = Toon.Toon()
self.toonHead.setDNA(self.toonDNA)
self.makeSuit('sc')
self.toonHead.getGeomNode().setDepthWrite(1)
self.toonHead.getGeomNode().setDepthTest(1)
self.toonHead.loop('neutral')
self.toonHead.setPosHprScale(-0.73, 0, -1.27, 180, 0, 0, 0.18, 0.18, 0.18)
self.toonHead.reparentTo(hidden)
self.toonHead.startBlink()
self.cogHead = Suit.Suit()
self.cogDNA = SuitDNA.SuitDNA()
self.cogDNA.newSuit('le')
self.cogHead.setDNA(self.cogDNA)
self.cogHead.getGeomNode().setDepthWrite(1)
self.cogHead.getGeomNode().setDepthTest(1)
self.cogHead.loop('neutral')
self.cogHead.setPosHprScale(-0.74, 0, -1.79, 180, 0, 0, 0.12, 0.14, 0.14)
self.cogHead.reparentTo(hidden)
self.clipPlane = self.toonHead.attachNewNode(PlaneNode('clip'))
self.clipPlane.node().setPlane(Plane(0, 0, 1, 0))
self.clipPlane.setPos(0, 0, 2.45)
audioMgr = base.cogdoGameAudioMgr
self._cogDialogueSfx = audioMgr.createSfx('cogDialogue')
self._toonDialogueSfx = audioMgr.createSfx('toonDialogue')
def start():
camera.wrtReparentTo(render)
self._startUpdateTask()
def end():
self._stopUpdateTask()
introDuration = Globals.Gameplay.IntroDurationSeconds
dialogue = TTLocalizer.CogdoFlyingIntroMovieDialogue
waitDur = introDuration / len(dialogue)
flyDur = introDuration - waitDur * 0.5
flyThroughIval = Parallel(camera.posInterval(flyDur, self._exit.getPos(render) + Point3(0, -22, 1), blendType='easeInOut'), camera.hprInterval(flyDur, Point3(0, 5, 0), blendType='easeInOut'))
self._ival = Sequence(Func(start), Parallel(flyThroughIval, Sequence(Func(self.displayLine, 'cog', self._getRandomLine(dialogue[0])), Wait(waitDur), Func(self.displayLine, 'toon', self._getRandomLine(dialogue[1])), Wait(waitDur), Func(self.displayLine, 'cog', self._getRandomLine(dialogue[2])), Wait(waitDur))), Func(end))
def _updateTask(self, task):
dt = globalClock.getDt()
self._level.update(dt)
return task.cont
def unload(self):
CogdoGameMovie.unload(self)
del self._cogDialogueSfx
del self._toonDialogueSfx
self.toonHead.stopBlink()
self.toonHead.stop()
self.toonHead.removeNode()
self.toonHead.delete()
del self.toonHead
self.cogHead.stop()
self.cogHead.removeNode()
self.cogHead.delete()
del self.cogHead
self._exit = None
self._level = None
return
class CogdoFlyingGameFinish(CogdoGameMovie):
def __init__(self, level, players):
CogdoGameMovie.__init__(self)
self._exit = level.getExit()
self._players = players
def load(self):
CogdoGameMovie.load(self)
def showDoor():
camera.wrtReparentTo(render)
camera.setPos(self._exit, 0, -55, 40)
camera.lookAt(self._exit, 0, 0, -20)
self._exit.open()
exitDur = 1.0
showExitIval = Sequence(Func(camera.wrtReparentTo, render), Parallel(camera.posInterval(exitDur, Point3(0, -55, 40), other=self._exit, blendType='easeInOut'), camera.hprInterval(exitDur, Point3(0, -45, 0), blendType='easeInOut')))
def showPlayersLeaving():
for player in self._players:
self._exit.toonEnters(player.toon)
self._ival = Sequence(showExitIval, Func(self._exit.open), Func(showPlayersLeaving), Wait(Globals.Gameplay.FinishDurationSeconds - exitDur - 1.0), Func(base.transitions.irisOut), Wait(1.0))
def unload(self):
CogdoGameMovie.unload(self)