fixed entity cleanup

This commit is contained in:
Darren Ranalli 2003-09-19 23:04:37 +00:00
parent 405c4bed63
commit 39448de889
5 changed files with 26 additions and 8 deletions

View File

@ -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()

View File

@ -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):

View File

@ -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

View File

@ -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)

View File

@ -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