mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-23 03:35:12 -06:00
88 lines
3.1 KiB
Python
88 lines
3.1 KiB
Python
from panda3d.core import *
|
|
from direct.interval.IntervalGlobal import *
|
|
from direct.showbase import DirectObject
|
|
from toontown.toonbase import ToontownGlobals
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
import types
|
|
|
|
class MovingPlatform(DirectObject.DirectObject, NodePath):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory('MovingPlatform')
|
|
|
|
def __init__(self):
|
|
self.hasLt = 0
|
|
DirectObject.DirectObject.__init__(self)
|
|
NodePath.__init__(self)
|
|
|
|
def setupCopyModel(self, parentToken, model, floorNodeName = None, parentingNode = None):
|
|
if floorNodeName is None:
|
|
floorNodeName = 'floor'
|
|
if type(parentToken) == types.IntType:
|
|
parentToken = ToontownGlobals.SPDynamic + parentToken
|
|
self.parentToken = parentToken
|
|
self.name = 'MovingPlatform-%s' % parentToken
|
|
self.assign(hidden.attachNewNode(self.name))
|
|
self.model = model.copyTo(self)
|
|
self.ownsModel = 1
|
|
floorList = self.model.findAllMatches('**/%s' % floorNodeName)
|
|
if len(floorList) == 0:
|
|
MovingPlatform.notify.warning('no floors in model')
|
|
return
|
|
for floor in floorList:
|
|
floor.setName(self.name)
|
|
|
|
if parentingNode == None:
|
|
parentingNode = self
|
|
base.cr.parentMgr.registerParent(self.parentToken, parentingNode)
|
|
self.parentingNode = parentingNode
|
|
self.accept('enter%s' % self.name, self.__handleEnter)
|
|
self.accept('exit%s' % self.name, self.__handleExit)
|
|
return
|
|
|
|
def destroy(self):
|
|
base.cr.parentMgr.unregisterParent(self.parentToken)
|
|
self.ignoreAll()
|
|
if self.hasLt:
|
|
self.__releaseLt()
|
|
if self.ownsModel:
|
|
self.model.removeNode()
|
|
del self.model
|
|
if hasattr(self, 'parentingNode') and self.parentingNode is self:
|
|
del self.parentingNode
|
|
|
|
def getEnterEvent(self):
|
|
return '%s-enter' % self.name
|
|
|
|
def getExitEvent(self):
|
|
return '%s-exit' % self.name
|
|
|
|
def releaseLocalToon(self):
|
|
if self.hasLt:
|
|
self.__releaseLt()
|
|
|
|
def __handleEnter(self, collEntry):
|
|
self.notify.debug('on movingPlatform %s' % self.name)
|
|
self.__grabLt()
|
|
messenger.send(self.getEnterEvent())
|
|
|
|
def __handleExit(self, collEntry):
|
|
self.notify.debug('off movingPlatform %s' % self.name)
|
|
self.__releaseLt()
|
|
messenger.send(self.getExitEvent())
|
|
|
|
def __handleOnFloor(self, collEntry):
|
|
if collEntry.getIntoNode().getName() == self.name:
|
|
self.__handleEnter(collEntry)
|
|
|
|
def __handleOffFloor(self, collEntry):
|
|
if collEntry.getIntoNode().getName() == self.name:
|
|
self.__handleExit(collEntry)
|
|
|
|
def __grabLt(self):
|
|
base.localAvatar.b_setParent(self.parentToken)
|
|
self.hasLt = 1
|
|
|
|
def __releaseLt(self):
|
|
if base.localAvatar.getParent().compareTo(self.parentingNode) == 0:
|
|
base.localAvatar.b_setParent(ToontownGlobals.SPRender)
|
|
base.localAvatar.controlManager.currentControls.doDeltaPos()
|
|
self.hasLt = 0
|