Browse Source

particle cleanup and optimizations

Joe Shochet 22 years ago
parent
commit
5be70f9340

+ 6 - 7
direct/src/particles/ForceGroup.py

@@ -27,10 +27,11 @@ class ForceGroup(DirectObject):
         self.particleEffect = None
         self.particleEffect = None
 
 
     def cleanup(self):
     def cleanup(self):
-        for f in self.asList():
-            self.removeForce(f)
-        self.nodePath.detachNode()
-        self.particleEffect = None
+        self.node.clear()
+        self.nodePath.removeNode()
+        del self.nodePath
+        del self.node
+        del self.particleEffect
 
 
     def enable(self):
     def enable(self):
         """enable(self)
         """enable(self)
@@ -78,9 +79,7 @@ class ForceGroup(DirectObject):
     def __getitem__(self, index):
     def __getitem__(self, index):
         """__getItem__(self, index)"""
         """__getItem__(self, index)"""
         numForces = self.node.getNumForces()
         numForces = self.node.getNumForces()
-        if numForces == 0:
-            raise IndexError
-        if ((index < 0) | (index >= self.node.getNumForces())):
+        if ((index < 0) or (index >= numForces)):
             raise IndexError
             raise IndexError
         return self.node.getForce(index)
         return self.node.getForce(index)
 
 

+ 11 - 8
direct/src/particles/ParticleEffect.py

@@ -34,12 +34,15 @@ class ParticleEffect(NodePath):
             self.reparentTo(parent)
             self.reparentTo(parent)
 
 
     def cleanup(self):
     def cleanup(self):
-        self.detachNode()
+        self.removeNode()
         self.disable()
         self.disable()
         for f in self.forceGroupDict.values():
         for f in self.forceGroupDict.values():
             f.cleanup()
             f.cleanup()
         for p in self.particlesDict.values():
         for p in self.particlesDict.values():
             p.cleanup()
             p.cleanup()
+        del self.renderParent
+        del self.particlesDict
+        del self.forceGroupDict
 
 
     def reset(self):
     def reset(self):
         self.removeAllForces()
         self.removeAllForces()
@@ -83,8 +86,8 @@ class ParticleEffect(NodePath):
         self.forceGroupDict[forceGroup.getName()] = forceGroup
         self.forceGroupDict[forceGroup.getName()] = forceGroup
 
 
         # Associate the force group with all particles
         # Associate the force group with all particles
-        for f in forceGroup.asList():
-            self.addForce(f)
+        for i in range(len(forceGroup)):
+            self.addForce(forceGroup[i])
 
 
     def addForce(self, force):
     def addForce(self, force):
         """addForce(force)"""
         """addForce(force)"""
@@ -94,10 +97,10 @@ class ParticleEffect(NodePath):
     def removeForceGroup(self, forceGroup):
     def removeForceGroup(self, forceGroup):
         """removeForceGroup(forceGroup)"""
         """removeForceGroup(forceGroup)"""
         # Remove forces from all particles
         # Remove forces from all particles
-        for f in forceGroup.asList():
-            self.removeForce(f)
+        for i in range(len(forceGroup)):
+            self.removeForce(forceGroup[i])
 
 
-        forceGroup.nodePath.detachNode()
+        forceGroup.nodePath.removeNode()
         forceGroup.particleEffect = None
         forceGroup.particleEffect = None
         del self.forceGroupDict[forceGroup.getName()]
         del self.forceGroupDict[forceGroup.getName()]
 
 
@@ -117,8 +120,8 @@ class ParticleEffect(NodePath):
 
 
         # Associate all forces in all force groups with the particles
         # Associate all forces in all force groups with the particles
         for fg in self.forceGroupDict.values():
         for fg in self.forceGroupDict.values():
-            for f in fg.asList():
-                particles.addForce(f)
+            for i in range(len(fg)):
+                particles.addForce(fg[i])
 
 
     def removeParticles(self, particles):
     def removeParticles(self, particles):
         """removeParticles(particles)"""
         """removeParticles(particles)"""

+ 6 - 5
direct/src/particles/Particles.py

@@ -72,11 +72,12 @@ class Particles(ParticleSystem.ParticleSystem):
         self.clearAngularForces()
         self.clearAngularForces()
         self.setRenderParent(self.node)
         self.setRenderParent(self.node)
         self.node.removePhysical(self)
         self.node.removePhysical(self)
-        self.nodePath.detachNode()
-        self.node = None
-        self.factory = None
-        self.renderer = None
-        self.emitter = None
+        self.nodePath.removeNode()
+        del self.node
+        del self.nodePath
+        del self.factory
+        del self.renderer
+        del self.emitter
 
 
     def enable(self):
     def enable(self):
         """enable()"""
         """enable()"""