toontown-just-works/toontown/minigame/TwoDBlock.py
2024-07-07 18:08:39 -05:00

86 lines
3.5 KiB
Python

from panda3d.core import *
from direct.distributed.ClockDelta import *
from direct.interval.IntervalGlobal import *
from direct.fsm import ClassicFSM, State
from otp.level import BasicEntities
from toontown.coghq import MovingPlatform
from direct.distributed import DistributedObject
from direct.directnotify import DirectNotifyGlobal
from toontown.minigame import ToonBlitzGlobals
class TwoDBlock(DistributedObject.DistributedObject):
notify = DirectNotifyGlobal.directNotify.newCategory('TwoDBlock')
def __init__(self, model, index, blockAttribs):
self.moveIval = None
self.isMovingBlock = False
self.index = index
self.createNewBlock(model, blockAttribs)
return
def destroy(self):
if self.moveIval:
self.moveIval.pause()
del self.moveIval
if self.platform:
if self.isMovingBlock:
self.platform.destroy()
del self.platform
def createNewBlock(self, model, blockAttribs):
initX, initY, initZ, initH, initP, initR = (0, 0, 0, 0, 0, 0)
finalX, finalY, finalZ, finalH, finalP, finalR = (0, 0, 0, 0, 0, 0)
blockType = blockAttribs[0]
typeAttribs = ToonBlitzGlobals.BlockTypes[blockType]
blockName = blockType + '-' + str(self.index)
self.model = NodePath(blockName)
typeX, typeY, typeZ = typeAttribs[1]
typeH, typeP, typeR = typeAttribs[2]
scaleX, scaleY, scaleZ = typeAttribs[3]
model.setScale(scaleX, scaleY, scaleZ)
blockPosAttribs = blockAttribs[1]
initX, initY, initZ = blockPosAttribs[0]
if len(blockPosAttribs) == 3:
self.isMovingBlock = True
finalX, finalY, finalZ = blockPosAttribs[1]
posIvalDuration = blockPosAttribs[2]
if len(blockAttribs) == 3:
blockHprAttribs = blockAttribs[2]
initH, initP, initR = blockHprAttribs[0]
if len(blockHprAttribs) == 3:
self.isMovingBlock = True
finalH, finalP, finalR = blockHprAttribs[1]
hprIvalDuration = blockHprAttribs[2]
if self.isMovingBlock:
self.platform = MovingPlatform.MovingPlatform()
self.platform.setupCopyModel(blockName, model)
self.platform.reparentTo(self.model)
self.clearMoveIval()
forwardIval = LerpPosInterval(self.model, posIvalDuration, pos=Point3(finalX, finalY, finalZ), startPos=Point3(initX, initY, initZ), name='%s-moveFront' % self.platform.name, fluid=1)
backwardIval = LerpPosInterval(self.model, posIvalDuration, pos=Point3(initX, initY, initZ), startPos=Point3(finalX, finalY, finalZ), name='%s-moveBack' % self.platform.name, fluid=1)
self.moveIval = Sequence(forwardIval, backwardIval)
else:
self.platform = model.copyTo(self.model)
self.model.flattenLight()
self.model.setPos(typeX + initX, typeY + initY, typeZ + initZ)
self.model.setHpr(typeH + initH, typeP + initP, typeR + initR)
def clearMoveIval(self):
if self.moveIval:
self.moveIval.pause()
del self.moveIval
self.moveIval = None
return
def start(self, elapsedTime):
if self.moveIval:
self.moveIval.loop()
self.moveIval.setT(elapsedTime)
def enterPause(self):
if self.moveIval:
self.moveIval.pause()
def exitPause(self):
if self.moveIval:
self.moveIval.resume()