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 self.particleEffect = None
def cleanup(self): def cleanup(self):
for f in self.asList(): self.node.clear()
self.removeForce(f) self.nodePath.removeNode()
self.nodePath.detachNode() del self.nodePath
self.particleEffect = None 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: if ((index < 0) or (index >= numForces)):
raise IndexError
if ((index < 0) | (index >= self.node.getNumForces())):
raise IndexError raise IndexError
return self.node.getForce(index) return self.node.getForce(index)

View File

@ -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(): for i in range(len(forceGroup)):
self.addForce(f) 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(): for i in range(len(forceGroup)):
self.removeForce(f) 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(): for i in range(len(fg)):
particles.addForce(f) particles.addForce(fg[i])
def removeParticles(self, particles): def removeParticles(self, particles):
"""removeParticles(particles)""" """removeParticles(particles)"""

View File

@ -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.nodePath.removeNode()
self.node = None del self.node
self.factory = None del self.nodePath
self.renderer = None del self.factory
self.emitter = None del self.renderer
del self.emitter
def enable(self): def enable(self):
"""enable()""" """enable()"""