oldschool-toontown/toontown/coghq/DistributedMover.py
Little Cat 1801d2b9fb
all: replace pandac.PandaModules imports.
UD/AI + Client boots up.
2022-12-16 20:40:57 -04:00

126 lines
4.6 KiB
Python

from panda3d.core import *
from direct.interval.IntervalGlobal import *
from .StomperGlobals import *
from direct.distributed import ClockDelta
from direct.showbase.PythonUtil import lerp
import math
from otp.level import DistributedEntity
from direct.directnotify import DirectNotifyGlobal
from panda3d.core import NodePath
from otp.level import BasicEntities
from direct.task import Task
from toontown.toonbase import ToontownGlobals
from toontown.coghq import BattleBlocker
import random
from math import *
class DistributedMover(BasicEntities.DistributedNodePathEntity):
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedMover')
laserFieldModels = ['phase_9/models/cogHQ/square_stomper']
def __init__(self, cr):
BasicEntities.DistributedNodePathEntity.__init__(self, cr)
self.attachedEnt = None
self.oldParent = None
self.entity2Move = None
self.moveTarget = None
self.pos0Wait = 1.0
self.pos0Move = 1.0
self.pos1Wait = 1.0
self.pos1Move = 1.0
self.moverIval = None
return
def generateInit(self):
self.notify.debug('generateInit')
BasicEntities.DistributedNodePathEntity.generateInit(self)
def generate(self):
self.notify.debug('generate')
BasicEntities.DistributedNodePathEntity.generate(self)
def announceGenerate(self):
self.notify.debug('announceGenerate')
BasicEntities.DistributedNodePathEntity.announceGenerate(self)
self.loadModel()
def disable(self):
self.notify.debug('disable')
self.ignoreAll()
taskMgr.remove(self.taskName)
BasicEntities.DistributedNodePathEntity.disable(self)
def delete(self):
self.notify.debug('delete')
if self.moverIval:
self.moverIval.finish()
self.unloadModel()
if self.taskName:
taskMgr.remove(self.taskName)
BasicEntities.DistributedNodePathEntity.delete(self)
def loadModel(self):
self.moverNode = self.attachNewNode('mover')
self.rotateNode = self.attachNewNode('rotate')
self.model = None
if self.entity2Move:
self.setEntity2Move(self.entity2Move)
self.taskName = 'moverUpdate %s' % self.doId
return
def unloadModel(self):
if self.model:
self.model.removeNode()
del self.model
self.model = None
return
def setEntity2Move(self, entId):
self.entity2Move = entId
if entId:
ent = self.level.getEntity(entId)
if self.attachedEnt and not self.attachedEnt.isEmpty():
self.attachedEnt.reparentTo(self.oldParent)
self.oldParent = ent.getParent()
ent.reparentTo(self.moverNode)
self.attachedEnt = ent
def startMove(self, timeStamp):
currentTime = ClockDelta.globalClockDelta.getRealNetworkTime()
timeDiff = (currentTime - timeStamp) / 1000.0
target = self.level.getEntity(self.moveTarget)
if not target:
return
okay2Play = 1
if self.moverIval:
self.moverIval.finish()
if self.moverIval.isPlaying():
okay2Play = 0
if okay2Play and self.moveTarget:
childList = self.getChildren()
for child in childList:
if child != self.moverNode:
child.reparentTo(self.moverNode)
timeLag = 0.0
timeJump = self.pos0Move - timeDiff
if timeJump < 0 or self.cycleType in 'linear':
timeJump = self.pos0Move
timeLag = timeDiff
myBlend = 'easeInOut'
if self.cycleType in 'linear':
myBlend = 'noBlend'
self.moverIval = Sequence()
firstIVal = LerpPosHprInterval(self.moverNode, timeJump, Vec3(target.getPos(self)[0], target.getPos(self)[1], target.getPos(self)[2]), Vec3(target.getHpr(self)[0], target.getHpr(self)[1], target.getHpr(self)[2]), blendType=myBlend, fluid=1)
self.moverIval.append(firstIVal)
if self.cycleType in 'linear':
for linearCycle in range(10):
self.moverIval.append(firstIVal)
if self.cycleType != 'oneWay':
self.moverIval.append(Wait(self.pos1Wait))
self.moverIval.append(LerpPosHprInterval(self.moverNode, self.pos1Move, Vec3(0, 0, 0), Vec3(0, 0, 0), blendType=myBlend, fluid=1))
if self.cycleType == 'loop':
self.moverIval.append(Wait(self.pos0Wait))
self.moverIval.start()
self.moverIval.setT(timeLag)