mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 10:54:24 -04:00
*** empty log message ***
This commit is contained in:
parent
70dea3303f
commit
5db7fe32a8
@ -21,24 +21,25 @@ class ForceGroup(DirectObject):
|
|||||||
self.nodePath = hidden.attachNewNode(self.node)
|
self.nodePath = hidden.attachNewNode(self.node)
|
||||||
self.fEnabled = 0
|
self.fEnabled = 0
|
||||||
|
|
||||||
|
# Default to enabled
|
||||||
|
self.enable()
|
||||||
|
|
||||||
def enable(self):
|
def enable(self):
|
||||||
"""enable(self)"""
|
"""enable(self)
|
||||||
|
Convenience function to enable all forces in force group"""
|
||||||
|
if (self.fEnabled == 0):
|
||||||
for i in range(self.node.getNumForces()):
|
for i in range(self.node.getNumForces()):
|
||||||
f = self.node.getForce(i)
|
f = self.node.getForce(i)
|
||||||
if (f.isLinear() == 1):
|
f.setActive(1)
|
||||||
physicsMgr.addLinearForce(f)
|
|
||||||
else:
|
|
||||||
physicsMgr.addAngularForce(f)
|
|
||||||
self.fEnabled = 1
|
self.fEnabled = 1
|
||||||
|
|
||||||
def disable(self):
|
def disable(self):
|
||||||
"""disable(self)"""
|
"""disable(self)
|
||||||
|
Convenience function to disable all forces in force group"""
|
||||||
|
if (self.fEnabled == 1):
|
||||||
for i in range(self.node.getNumForces()):
|
for i in range(self.node.getNumForces()):
|
||||||
f = self.node.getForce(i)
|
f = self.node.getForce(i)
|
||||||
if (f.isLinear() == 1):
|
f.setActive(0)
|
||||||
physicsMgr.removeLinearForce(f)
|
|
||||||
else:
|
|
||||||
physicsMgr.removeAngularForce(f)
|
|
||||||
self.fEnabled = 0
|
self.fEnabled = 0
|
||||||
|
|
||||||
def isEnabled(self):
|
def isEnabled(self):
|
||||||
@ -46,15 +47,7 @@ class ForceGroup(DirectObject):
|
|||||||
|
|
||||||
def addForce(self, force):
|
def addForce(self, force):
|
||||||
"""addForce(self, force)"""
|
"""addForce(self, force)"""
|
||||||
if (force.isLinear() == 0):
|
|
||||||
# Physics manager will need an angular integrator
|
|
||||||
base.addAngularIntegrator()
|
|
||||||
self.node.addForce(force)
|
self.node.addForce(force)
|
||||||
if self.fEnabled:
|
|
||||||
if (force.isLinear() == 1):
|
|
||||||
physicsMgr.addLinearForce(force)
|
|
||||||
else:
|
|
||||||
physicsMgr.addAngularForce(force)
|
|
||||||
|
|
||||||
def removeForce(self, force):
|
def removeForce(self, force):
|
||||||
"""removeForce(self, force)"""
|
"""removeForce(self, force)"""
|
||||||
@ -122,5 +115,9 @@ class ForceGroup(DirectObject):
|
|||||||
elif isinstance(f, LinearVectorForce):
|
elif isinstance(f, LinearVectorForce):
|
||||||
vec = f.getVector()
|
vec = f.getVector()
|
||||||
file.write(fname + ' = LinearVectorForce(Vec3(%.4f, %.4f, %.4f), %.4f, %d)\n' % (vec[0], vec[1], vec[2], amplitude, massDependent))
|
file.write(fname + ' = LinearVectorForce(Vec3(%.4f, %.4f, %.4f), %.4f, %d)\n' % (vec[0], vec[1], vec[2], amplitude, massDependent))
|
||||||
|
elif isinstance(f, AngularForce):
|
||||||
|
if isinstance(f, AngularVectorForce):
|
||||||
|
vec = f.getVector()
|
||||||
|
file.write(fname + ' = AngularVectorForce(Vec3(%.4f, %.4f, %.4f))\n' % (vec[0], vec[1], vec[2]))
|
||||||
file.write(fname + '.setActive(%d)\n' % f.getActive())
|
file.write(fname + '.setActive(%d)\n' % f.getActive())
|
||||||
file.write(targ + '.addForce(%s)\n' % fname)
|
file.write(targ + '.addForce(%s)\n' % fname)
|
||||||
|
26
direct/src/particles/GlobalForceGroup.py
Normal file
26
direct/src/particles/GlobalForceGroup.py
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import ForceGroup
|
||||||
|
|
||||||
|
class GlobalForceGroup(ForceGroup.ForceGroup):
|
||||||
|
|
||||||
|
def __init__(self, name = None):
|
||||||
|
"""__init__(self)"""
|
||||||
|
ForceGroup.ForceGroup.__init__(self, name)
|
||||||
|
|
||||||
|
def addForce(self, force):
|
||||||
|
"""addForce(self, force)"""
|
||||||
|
ForceGroup.ForceGroup.addForce(force)
|
||||||
|
if (force.isLinear() == 0):
|
||||||
|
# Physics manager will need an angular integrator
|
||||||
|
base.addAngularIntegrator()
|
||||||
|
if (force.isLinear() == 1):
|
||||||
|
physicsMgr.addLinearForce(force)
|
||||||
|
else:
|
||||||
|
physicsMgr.addAngularForce(force)
|
||||||
|
|
||||||
|
def removeForce(self, force):
|
||||||
|
"""removeForce(self, force)"""
|
||||||
|
ForceGroup.ForceGroup.removeForce(force)
|
||||||
|
if (force.isLinear() == 1):
|
||||||
|
physicsMgr.removeLinearForce(force)
|
||||||
|
else:
|
||||||
|
physicsMgr.removeAngularForce(force)
|
@ -47,12 +47,23 @@ class ParticleEffect(NodePath):
|
|||||||
forceGroup.nodePath.reparentTo(self)
|
forceGroup.nodePath.reparentTo(self)
|
||||||
self.forceGroupDict[forceGroup.getName()] = forceGroup
|
self.forceGroupDict[forceGroup.getName()] = forceGroup
|
||||||
|
|
||||||
|
# Associate the force group with all particles
|
||||||
|
flist = forceGroup.asList()
|
||||||
|
for p in self.particlesDict.values():
|
||||||
|
for f in flist:
|
||||||
|
p.addForce(f)
|
||||||
|
|
||||||
def addParticles(self, particles):
|
def addParticles(self, particles):
|
||||||
"""addParticles(particles)"""
|
"""addParticles(particles)"""
|
||||||
particles.nodePath.reparentTo(self)
|
particles.nodePath.reparentTo(self)
|
||||||
particles.forceNodePath.reparentTo(self)
|
|
||||||
self.particlesDict[particles.getName()] = particles
|
self.particlesDict[particles.getName()] = particles
|
||||||
|
|
||||||
|
# Associate all forces in all force groups with the particles
|
||||||
|
for fg in self.forceGroupDict.values():
|
||||||
|
flist = fg.asList()
|
||||||
|
for f in flist:
|
||||||
|
particles.addForce(f)
|
||||||
|
|
||||||
def getParticlesList(self):
|
def getParticlesList(self):
|
||||||
"""getParticles()"""
|
"""getParticles()"""
|
||||||
return self.particlesDict.values()
|
return self.particlesDict.values()
|
||||||
@ -86,15 +97,6 @@ class ParticleEffect(NodePath):
|
|||||||
# Add a blank line
|
# Add a blank line
|
||||||
f.write('\n')
|
f.write('\n')
|
||||||
|
|
||||||
# Save all the forces to file
|
|
||||||
num = 0
|
|
||||||
for fg in self.forceGroupDict.values():
|
|
||||||
target = 'f%d' % num
|
|
||||||
num = num + 1
|
|
||||||
f.write(target + ' = ForceGroup.ForceGroup(\'%s\')\n' % fg.getName())
|
|
||||||
fg.printParams(f, target)
|
|
||||||
f.write('self.addForceGroup(%s)\n' % target)
|
|
||||||
|
|
||||||
# Save all the particles to file
|
# Save all the particles to file
|
||||||
f.write('self.particlesDict = {}\n')
|
f.write('self.particlesDict = {}\n')
|
||||||
num = 0
|
num = 0
|
||||||
@ -105,6 +107,15 @@ class ParticleEffect(NodePath):
|
|||||||
p.printParams(f, target)
|
p.printParams(f, target)
|
||||||
f.write('self.addParticles(%s)\n' % target)
|
f.write('self.addParticles(%s)\n' % target)
|
||||||
|
|
||||||
|
# Save all the forces to file
|
||||||
|
num = 0
|
||||||
|
for fg in self.forceGroupDict.values():
|
||||||
|
target = 'f%d' % num
|
||||||
|
num = num + 1
|
||||||
|
f.write(target + ' = ForceGroup.ForceGroup(\'%s\')\n' % fg.getName())
|
||||||
|
fg.printParams(f, target)
|
||||||
|
f.write('self.addForceGroup(%s)\n' % target)
|
||||||
|
|
||||||
# Close the file
|
# Close the file
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
|
@ -10,13 +10,13 @@ base.enableParticles()
|
|||||||
# ForceGroup
|
# ForceGroup
|
||||||
gravity = LinearVectorForce(Vec3(0.0, 0.0, -10.0))
|
gravity = LinearVectorForce(Vec3(0.0, 0.0, -10.0))
|
||||||
fg = ForceGroup.ForceGroup()
|
fg = ForceGroup.ForceGroup()
|
||||||
#fg.addForce(gravity)
|
fg.addForce(gravity)
|
||||||
|
|
||||||
# Particle effect
|
# Particle effect
|
||||||
pe = ParticleEffect.ParticleEffect('particle-fx')
|
pe = ParticleEffect.ParticleEffect('particle-fx')
|
||||||
pe.reparentTo(render)
|
pe.reparentTo(render)
|
||||||
pe.setPos(0.0, 5.0, 4.0)
|
pe.setPos(0.0, 5.0, 4.0)
|
||||||
#pe.addForceGroup(fg)
|
pe.addForceGroup(fg)
|
||||||
pe.enable()
|
pe.enable()
|
||||||
|
|
||||||
# Particle Panel
|
# Particle Panel
|
||||||
|
@ -53,10 +53,6 @@ class Particles(ParticleSystem.ParticleSystem):
|
|||||||
self.setRenderParent(self.node)
|
self.setRenderParent(self.node)
|
||||||
self.node.addPhysical(self)
|
self.node.addPhysical(self)
|
||||||
|
|
||||||
# Set up a force node
|
|
||||||
self.forceNode = ForceNode(self.name + '-force')
|
|
||||||
self.forceNodePath = hidden.attachNewNode(self.forceNode)
|
|
||||||
|
|
||||||
self.factory = None
|
self.factory = None
|
||||||
self.factoryType = "undefined"
|
self.factoryType = "undefined"
|
||||||
self.setFactory("PointParticleFactory")
|
self.setFactory("PointParticleFactory")
|
||||||
@ -66,7 +62,9 @@ class Particles(ParticleSystem.ParticleSystem):
|
|||||||
self.emitter = None
|
self.emitter = None
|
||||||
self.emitterType = "undefined"
|
self.emitterType = "undefined"
|
||||||
self.setEmitter("SphereVolumeEmitter")
|
self.setEmitter("SphereVolumeEmitter")
|
||||||
self.fEnabled = 0
|
|
||||||
|
# Enable particles by default
|
||||||
|
self.enable()
|
||||||
|
|
||||||
def enable(self):
|
def enable(self):
|
||||||
"""enable()"""
|
"""enable()"""
|
||||||
@ -170,7 +168,6 @@ class Particles(ParticleSystem.ParticleSystem):
|
|||||||
self.addLinearForce(force)
|
self.addLinearForce(force)
|
||||||
else:
|
else:
|
||||||
self.addAngularForce(force)
|
self.addAngularForce(force)
|
||||||
self.forceNode.addForce(force)
|
|
||||||
|
|
||||||
def removeForce(self, force):
|
def removeForce(self, force):
|
||||||
"""removeForce(force)"""
|
"""removeForce(force)"""
|
||||||
@ -178,7 +175,6 @@ class Particles(ParticleSystem.ParticleSystem):
|
|||||||
self.removeLinearForce(force)
|
self.removeLinearForce(force)
|
||||||
else:
|
else:
|
||||||
self.removeAngularForce(force)
|
self.removeAngularForce(force)
|
||||||
self.forceNode.removeForce(force)
|
|
||||||
|
|
||||||
## Getters ##
|
## Getters ##
|
||||||
def getName(self):
|
def getName(self):
|
||||||
@ -374,41 +370,3 @@ class Particles(ParticleSystem.ParticleSystem):
|
|||||||
elif (self.emitterType == "TangentRingEmitter"):
|
elif (self.emitterType == "TangentRingEmitter"):
|
||||||
file.write('# Tangent Ring parameters\n')
|
file.write('# Tangent Ring parameters\n')
|
||||||
file.write(targ + '.emitter.setRadius(%.4f)\n' % self.emitter.getRadius())
|
file.write(targ + '.emitter.setRadius(%.4f)\n' % self.emitter.getRadius())
|
||||||
|
|
||||||
file.write('# Local Forces\n')
|
|
||||||
for i in range(self.getNumLinearForces()):
|
|
||||||
f = self.getLinearForce(i)
|
|
||||||
fname = 'force%d' % i
|
|
||||||
if isinstance(f, LinearForce):
|
|
||||||
amplitude = f.getAmplitude()
|
|
||||||
massDependent = f.getMassDependent()
|
|
||||||
if isinstance(f, LinearCylinderVortexForce):
|
|
||||||
file.write(fname + ' = LinearCylinderVortexForce(%.4f, %.4f, %.4f, %.4f, %d)\n' % (f.getRadius(), f.getLength(), f.getCoef(), amplitude, massDependent))
|
|
||||||
elif isinstance(f, LinearDistanceForce):
|
|
||||||
radius = f.getRadius()
|
|
||||||
falloffType = f.getFalloffType()
|
|
||||||
ftype = 'FTONEOVERR'
|
|
||||||
if (falloffType == LinearDistanceForce.LinearDistanceForce.FTONEOVERR):
|
|
||||||
ftype = 'FTONEOVERR'
|
|
||||||
elif (falloffType == LinearDistanceForce.LinearDistanceForce.FTONEOVERRSQUARED):
|
|
||||||
ftype = 'FTONEOVERRSQUARED'
|
|
||||||
elif (falloffType == LinearDistanceForce.LinearDistanceForce.FTONEOVERRCUBED):
|
|
||||||
ftype = 'FTONEOVERRCUBED'
|
|
||||||
forceCenter = f.getForceCenter()
|
|
||||||
if isinstance(f, LinearSinkForce):
|
|
||||||
file.write(fname + ' = LinearSinkForce(Vec3(%.4f, %.4f, %.4f), LinearDistanceForce.%s, %.4f, %.4f, %d)\n' % (forceCenter[0], forceCenter[1], forceCenter[2], ftype, radius, amplitude, massDependent))
|
|
||||||
elif isinstance(f, LinearSourceForce):
|
|
||||||
file.write(fname + ' = LinearSourceForce(Vec3(%.4f, %.4f, %.4f), LinearDistanceForce.%s, %.4f, %.4f, %d)\n' % (forceCenter[0], forceCenter[1], forceCenter[2], ftype, radius, amplitude, massDependent))
|
|
||||||
elif isinstance(f, LinearFrictionForce):
|
|
||||||
file.write(fname + ' = LinearFrictionForce(%.4f, %.4f, %d)\n' % (f.getCoef(), amplitude, massDependent))
|
|
||||||
elif isinstance(f, LinearJitterForce):
|
|
||||||
file.write(fname + ' = LinearJitterForce(%.4f, %d)\n' % (amplitude, massDependent))
|
|
||||||
elif isinstance(f, LinearNoiseForce):
|
|
||||||
file.write(fname + ' = LinearNoiseForce(%.4f, %d)\n' % (amplitude, massDependent))
|
|
||||||
elif isinstance(f, LinearVectorForce):
|
|
||||||
vec = f.getVector()
|
|
||||||
file.write(fname + ' = LinearVectorForce(Vec3(%.4f, %.4f, %.4f), %.4f, %d)\n' % (vec[0], vec[1], vec[2], amplitude, massDependent))
|
|
||||||
file.write(fname + '.setActive(%d)\n' % f.getActive())
|
|
||||||
file.write(targ + '.addForce(%s)\n' % fname)
|
|
||||||
for i in range(self.getNumAngularForces()):
|
|
||||||
f = self.getAngularForce(i)
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user