mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-23 03:35:12 -06:00
86 lines
3.5 KiB
Python
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()
|