historical/toontown-classic.git/toontown/cogdominium/DistCogdoCraneCog.py
2024-01-16 11:20:27 -06:00

61 lines
2.4 KiB
Python

from panda3d.core import *
from direct.distributed.ClockDelta import globalClockDelta
from direct.distributed.DistributedObject import DistributedObject
from direct.interval import IntervalGlobal as IG
from toontown.cogdominium import CogdoCraneGameConsts as GameConsts
from toontown.suit.Suit import Suit
class DistCogdoCraneCog(Suit, DistributedObject):
def __init__(self, cr):
DistributedObject.__init__(self, cr)
Suit.__init__(self)
self._moveIval = None
return
def setGameId(self, gameId):
self._gameId = gameId
def getGame(self):
return self.cr.doId2do.get(self._gameId)
def setSpawnInfo(self, entranceId, timestamp):
self._startMoveIval(entranceId, globalClockDelta.networkToLocalTime(timestamp))
def _startMoveIval(self, entranceId, startT):
self._stopMoveIval()
unitVecs = (Vec3(1, 0, 0),
Vec3(0, 1, 0),
Vec3(-1, 0, 0),
Vec3(0, -1, 0))
machineDistance = 4
entranceDistance = 60
startPos = unitVecs[entranceId] * entranceDistance
endPos = unitVecs[entranceId] * machineDistance
walkDur = (endPos - startPos).length() / GameConsts.CogSettings.CogWalkSpeed.get()
sceneRoot = self.getGame().getSceneRoot()
moveIval = IG.Sequence(IG.Func(self.reparentTo, sceneRoot), IG.Func(self.setPos, startPos), IG.Func(self.lookAt, sceneRoot), IG.Func(self.loop, 'walk'), IG.LerpPosInterval(self, walkDur, endPos, startPos=startPos))
interactIval = IG.Sequence(IG.Func(self.loop, 'neutral'), IG.Wait(GameConsts.CogSettings.CogMachineInteractDuration.get()))
flyIval = IG.Sequence(IG.Func(self.pose, 'landing', 0), IG.LerpPosInterval(self, GameConsts.CogSettings.CogFlyAwayDuration.get(), self._getFlyAwayDest, blendType='easeIn'))
self._moveIval = IG.Sequence(moveIval, interactIval, flyIval)
self._moveIval.start(globalClock.getFrameTime() - startT)
def _getFlyAwayDest(self):
return self.getPos() + Vec3(0, 0, GameConsts.CogSettings.CogFlyAwayHeight.get())
def _stopMoveIval(self):
if self._moveIval:
self._moveIval.finish()
self._moveIval = None
return
def disable(self):
self._stopMoveIval()
DistributedObject.disable(self)
def delete(self):
Suit.delete(self)
DistributedObject.delete(self)
def setDNAString(self, dnaString):
Suit.setDNAString(self, dnaString)