瀏覽代碼

fixed entity cleanup

Darren Ranalli 22 年之前
父節點
當前提交
39448de889

+ 5 - 1
direct/src/level/DistributedLevel.py

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

+ 1 - 1
direct/src/level/EntityCreatorBase.py

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

+ 9 - 3
direct/src/level/LevelBase.py

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

+ 9 - 3
direct/src/level/LevelMgr.py

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

+ 2 - 0
direct/src/level/LevelMgrAI.py

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