Parcourir la source

*** empty log message ***

Mike Goslin il y a 25 ans
Parent
commit
d900d25892
2 fichiers modifiés avec 40 ajouts et 2 suppressions
  1. 6 0
      direct/src/particles/ForceGroup.py
  2. 34 2
      direct/src/particles/ParticleEffect.py

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

@@ -20,6 +20,8 @@ class ForceGroup(DirectObject):
  	self.node = ForceNode.ForceNode(self.name)
 	self.nodePath = hidden.attachNewNode(self.node)
         self.fEnabled = 0
+
+	self.particleEffect = None
 	
 	# Default to enabled
 	self.enable()
@@ -46,10 +48,14 @@ class ForceGroup(DirectObject):
     def addForce(self, force):
 	"""addForce(self, force)"""
 	self.node.addForce(force)
+	if (self.particleEffect):
+	    self.particleEffect.addForce(force)
 
     def removeForce(self, force):
 	"""removeForce(self, force)"""
 	self.node.removeForce(force)
+	if (self.particleEffect):
+	    self.particleEffect.removeForce(force)
 
     # Get/set
     def getName(self):

+ 34 - 2
direct/src/particles/ParticleEffect.py

@@ -45,13 +45,34 @@ class ParticleEffect(NodePath):
     def addForceGroup(self, forceGroup):
 	"""addForceGroup(forceGroup)"""
 	forceGroup.nodePath.reparentTo(self)
+	forceGroup.particleEffect = self
 	self.forceGroupDict[forceGroup.getName()] = forceGroup
 
 	# Associate the force group with all particles
 	flist = forceGroup.asList()
+	for f in flist:
+	    self.addForce(f)
+
+    def addForce(self, force):
+	"""addForce(force)"""
 	for p in self.particlesDict.values():
-	    for f in flist:
-	    	p.addForce(f)	
+	    p.addForce(force)
+
+    def removeForceGroup(self, forceGroup):
+	"""removeForceGroup(forceGroup)"""
+	forceGroup.nodePath.reparentTo(hidden)
+	forceGroup.particleEffect = None
+	self.forceGroupDict[forceGroup.getName()] = None
+
+	# Remove forces from all particles
+	flist = forceGroup.asList()
+	for f in flist:
+	    self.removeForce(f)
+
+    def removeForce(self, force):
+	"""removeForce(force)"""
+	for p in self.particlesDict.values():
+	    p.removeForce(force)
 
     def addParticles(self, particles):
 	"""addParticles(particles)"""
@@ -64,6 +85,17 @@ class ParticleEffect(NodePath):
 	    for f in flist:
 		particles.addForce(f)
 
+    def removeParticles(self, particles):
+	"""removeParticles(particles)"""
+	particles.nodePath.reparentTo(hidden)
+	self.particlesDict[particles.getName()] = None
+	
+	# Remove all forces from the particles
+	for fg in self.forceGroupDict.values():
+	    flist = fg.asList()
+	    for f in flist:
+		particles.removeForce(f)
+
     def getParticlesList(self):
         """getParticles()"""
         return self.particlesDict.values()