mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 10:54:24 -04:00
fixed entity cleanup
This commit is contained in:
parent
405c4bed63
commit
39448de889
@ -102,7 +102,7 @@ class DistributedLevel(DistributedObject.DistributedObject,
|
||||
def handleLevelMgrCreated(self):
|
||||
# as soon as the levelMgr has been created, load up the model
|
||||
# and extract zone info
|
||||
self.geom = loader.loadModel(self.modelFilename)
|
||||
self.geom = self.levelMgr.geom
|
||||
|
||||
def findNumberedNodes(baseString, model=self.geom, self=self):
|
||||
# finds nodes whose name follows the pattern 'baseString#'
|
||||
@ -182,6 +182,10 @@ class DistributedLevel(DistributedObject.DistributedObject,
|
||||
|
||||
def disable(self):
|
||||
self.notify.debug('disable')
|
||||
|
||||
# geom is owned by the levelMgr
|
||||
del self.geom
|
||||
|
||||
self.destroyLevel()
|
||||
DistributedObject.DistributedObject.disable(self)
|
||||
self.ignoreAll()
|
||||
|
@ -20,7 +20,7 @@ class EntityCreatorBase:
|
||||
(entType, entId))
|
||||
|
||||
# inheritor must define doCreateEntity
|
||||
self.doCreateEntity(self.entType2Ctor[entType], entId)
|
||||
return self.doCreateEntity(self.entType2Ctor[entType], entId)
|
||||
|
||||
def privRegisterType(self, entType, ctor):
|
||||
if self.entType2Ctor.has_key(entType):
|
||||
|
@ -74,9 +74,15 @@ class LevelBase:
|
||||
self.removeEntityCreationHandlers()
|
||||
|
||||
def destroyLevel(self):
|
||||
for entity in self.createdEntities:
|
||||
entity.destroy()
|
||||
del self.createdEntities
|
||||
if hasattr(self, 'createdEntities'):
|
||||
# destroy the entities in reverse order
|
||||
while len(self.createdEntities) > 0:
|
||||
entity = self.createdEntities.pop()
|
||||
self.notify.debug('destroying %s entity %s' %
|
||||
(self.getEntityType(entity.entId),
|
||||
entity.entId))
|
||||
entity.destroy()
|
||||
del self.createdEntities
|
||||
del self.entities
|
||||
del self.entId2spec
|
||||
del self.spec
|
||||
|
@ -6,7 +6,13 @@ class LevelMgr(Entity.Entity):
|
||||
"""This class manages editable client-side level attributes"""
|
||||
def __init__(self, level, entId):
|
||||
Entity.Entity.__init__(self, level, entId)
|
||||
self.callSetters('modelFilename')
|
||||
self.level.levelMgr = self
|
||||
|
||||
# load the model
|
||||
self.geom = loader.loadModel(self.modelFilename)
|
||||
|
||||
def setModelFilename(self, modelFilename):
|
||||
self.level.modelFilename = modelFilename
|
||||
def destroy(self):
|
||||
del self.level.levelMgr
|
||||
self.geom.removeNode()
|
||||
del self.geom
|
||||
Entity.Entity.destroy(self)
|
||||
|
@ -6,3 +6,5 @@ class LevelMgrAI(Entity.Entity):
|
||||
"""This class manages editable AI level attributes"""
|
||||
def __init__(self, level, entId):
|
||||
Entity.Entity.__init__(self, level, entId)
|
||||
self.level.levelMgr = self
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user