Browse Source

*** empty log message ***

Mike Goslin 24 years ago
parent
commit
21ae42085a

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

@@ -10,7 +10,7 @@ class ForceGroup(DirectObject):
     notify = DirectNotifyGlobal.directNotify.newCategory('ForceGroup')
     id = 1
 
-    def __init__(self, name = None):
+    def __init__(self, name=None):
 	"""__init__(self)"""
 
 	if (name == None):
@@ -24,12 +24,10 @@ class ForceGroup(DirectObject):
         self.fEnabled = 0
 
 	self.particleEffect = None
-	
-	# Default to enabled
-	#self.enable()
 
     def cleanup(self):
-	self.disable()
+	for f in self.asList():
+	    self.removeForce(f)
 	self.nodePath.removeNode()
 	self.node = None
 	self.particleEffect = None
@@ -62,7 +60,7 @@ class ForceGroup(DirectObject):
     def removeForce(self, force):
 	"""removeForce(self, force)"""
 	self.node.removeForce(force)
-	if (self.particleEffect):
+	if (self.particleEffect != None):
 	    self.particleEffect.removeForce(force)
 
     # Get/set

+ 27 - 15
direct/src/particles/ParticleEffect.py

@@ -37,6 +37,12 @@ class ParticleEffect(NodePath):
 	particlesDict = {}
 	self.removeNode()
 
+    def reset(self):
+	self.removeAllForces()
+	self.removeAllParticles()
+	self.forceGroupDict = {}
+	self.particlesDict = {}
+
     def enable(self):
 	"""enable()"""
 	for f in self.forceGroupDict.values():
@@ -67,7 +73,7 @@ class ParticleEffect(NodePath):
 	self.forceGroupDict[forceGroup.getName()] = forceGroup
 
 	# Associate the force group with all particles
-	for f in forceGroup:
+	for f in forceGroup.asList():
 	    self.addForce(f)
 
     def addForce(self, force):
@@ -77,19 +83,23 @@ class ParticleEffect(NodePath):
 
     def removeForceGroup(self, forceGroup):
 	"""removeForceGroup(forceGroup)"""
-	forceGroup.nodePath.reparentTo(hidden)
-	forceGroup.particleEffect = None
-	self.forceGroupDict[forceGroup.getName()] = None
-
 	# Remove forces from all particles
-	for f in forceGroup:
+	for f in forceGroup.asList():
 	    self.removeForce(f)
 
+	forceGroup.nodePath.reparentTo(hidden)
+	forceGroup.particleEffect = None
+	del self.forceGroupDict[forceGroup.getName()]
+
     def removeForce(self, force):
 	"""removeForce(force)"""
 	for p in self.particlesDict.values():
 	    p.removeForce(force)
 
+    def removeAllForces(self):
+	for fg in self.forceGroupDict.values():
+	    self.removeForceGroup(fg)
+
     def addParticles(self, particles):
 	"""addParticles(particles)"""
 	particles.nodePath.reparentTo(self)
@@ -97,19 +107,26 @@ class ParticleEffect(NodePath):
 
 	# Associate all forces in all force groups with the particles
 	for fg in self.forceGroupDict.values():
-	    for f in fg:
+	    for f in fg.asList():
 		particles.addForce(f)
 
     def removeParticles(self, particles):
 	"""removeParticles(particles)"""
+	if (particles == None):
+	    self.notify.warning('removeParticles() - particles == None!')
+	    return
 	particles.nodePath.reparentTo(hidden)
-	self.particlesDict[particles.getName()] = None
+	del self.particlesDict[particles.getName()]
 	
 	# Remove all forces from the particles
 	for fg in self.forceGroupDict.values():
-	    for f in fg:
+	    for f in fg.asList():
 		particles.removeForce(f)
 
+    def removeAllParticles(self):
+	for p in self.particlesDict.values():
+	    self.removeParticles(p)
+
     def getParticlesList(self):
         """getParticles()"""
         return self.particlesDict.values()
@@ -141,12 +158,7 @@ class ParticleEffect(NodePath):
         f.write('\n')
 
 	# Make sure we start with a clean slate
-        f.write('for p in self.getParticlesList():\n')
-        f.write('\tself.removeParticles(p)\n')
-        f.write('for fg in self.getForceGroupList():\n')
-        f.write('\tself.removeForceGroup(fg)\n')
-	f.write('self.particlesDict = {}\n')
-	f.write('self.forceGroupDict = {}\n')
+	f.write('self.reset()\n')
 
         pos = self.getPos()
         hpr = self.getHpr()

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

@@ -71,6 +71,8 @@ class Particles(ParticleSystem.ParticleSystem):
 
     def cleanup(self):
 	self.disable()
+	self.clearLinearForces()
+	self.clearAngularForces()
 	self.setRenderParent(self.node)
 	self.node.removePhysical(self)
 	self.nodePath.removeNode()
@@ -189,6 +191,9 @@ class Particles(ParticleSystem.ParticleSystem):
 
     def removeForce(self, force):
 	"""removeForce(force)"""
+	if (force == None):
+	    self.notify.warning('removeForce() - force == None!')
+	    return
 	if (force.isLinear()):
 	    self.removeLinearForce(force)
 	else: