particle cleanup and optimizations

This commit is contained in:
Joe Shochet 2003-06-18 07:15:48 +00:00
parent b2c42c3275
commit 5be70f9340
3 changed files with 23 additions and 20 deletions

View File

@ -27,10 +27,11 @@ class ForceGroup(DirectObject):
self.particleEffect = None
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):
"""enable(self)
@ -78,9 +79,7 @@ class ForceGroup(DirectObject):
def __getitem__(self, index):
"""__getItem__(self, index)"""
numForces = self.node.getNumForces()
if numForces == 0:
raise IndexError
if ((index < 0) | (index >= self.node.getNumForces())):
if ((index < 0) or (index >= numForces)):
raise IndexError
return self.node.getForce(index)

View File

@ -34,12 +34,15 @@ class ParticleEffect(NodePath):
self.reparentTo(parent)
def cleanup(self):
self.detachNode()
self.removeNode()
self.disable()
for f in self.forceGroupDict.values():
f.cleanup()
for p in self.particlesDict.values():
p.cleanup()
del self.renderParent
del self.particlesDict
del self.forceGroupDict
def reset(self):
self.removeAllForces()
@ -83,8 +86,8 @@ class ParticleEffect(NodePath):
self.forceGroupDict[forceGroup.getName()] = forceGroup
# 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):
"""addForce(force)"""
@ -94,10 +97,10 @@ class ParticleEffect(NodePath):
def removeForceGroup(self, forceGroup):
"""removeForceGroup(forceGroup)"""
# 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
del self.forceGroupDict[forceGroup.getName()]
@ -117,8 +120,8 @@ class ParticleEffect(NodePath):
# Associate all forces in all force groups with the particles
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):
"""removeParticles(particles)"""

View File

@ -72,11 +72,12 @@ class Particles(ParticleSystem.ParticleSystem):
self.clearAngularForces()
self.setRenderParent(self.node)
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):
"""enable()"""