toontown-just-works/toontown/cogdominium/DistCogdoCraneCog.py
2024-07-07 18:08:39 -05:00

61 lines
2.5 KiB
Python

from pandac import PandaModules as PM
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 = (PM.Vec3(1, 0, 0),
PM.Vec3(0, 1, 0),
PM.Vec3(-1, 0, 0),
PM.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() + PM.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)