*** empty log message ***

This commit is contained in:
Mike Goslin 2001-01-30 04:00:58 +00:00
parent 9f4ea73aac
commit e7b772d16f
6 changed files with 116 additions and 14 deletions

View File

@ -110,9 +110,9 @@ class ForceGroup(DirectObject):
ftype = 'FTONEOVERRCUBED'
forceCenter = f.getForceCenter()
if isinstance(f, LinearSinkForce):
file.write(fname + ' = LinearSinkForce(Vec3(%.4f, %.4f, %.4f), %s, %.4f, %.4f, %d)\n' % (forceCenter[0], forceCenter[1], forceCenter[2], ftype, radius, amplitude, massDependent))
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), %s, %.4f, %.4f, %d)\n' % (forceCenter[0], forceCenter[1], forceCenter[2], ftype, radius, amplitude, massDependent))
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):

View File

@ -50,6 +50,7 @@ class ParticleEffect(NodePath):
def addParticles(self, particles):
"""addParticles(particles)"""
particles.nodePath.reparentTo(self)
particles.forceNodePath.reparentTo(self)
self.particlesDict[particles.getName()] = particles
def getParticlesList(self):

View File

@ -10,13 +10,13 @@ base.enableParticles()
# ForceGroup
gravity = LinearVectorForce(Vec3(0.0, 0.0, -10.0))
fg = ForceGroup.ForceGroup()
fg.addForce(gravity)
#fg.addForce(gravity)
# Particle effect
pe = ParticleEffect.ParticleEffect('particle-fx')
pe.reparentTo(render)
pe.setPos(0.0, 5.0, 4.0)
pe.addForceGroup(fg)
#pe.addForceGroup(fg)
pe.enable()
# Particle Panel

View File

@ -53,6 +53,10 @@ class Particles(ParticleSystem.ParticleSystem):
self.setRenderParent(self.node)
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.factoryType = "undefined"
self.setFactory("PointParticleFactory")
@ -160,6 +164,22 @@ class Particles(ParticleSystem.ParticleSystem):
return None
ParticleSystem.ParticleSystem.setEmitter(self, self.emitter)
def addForce(self, force):
"""addForce(force)"""
if (force.isLinear()):
self.addLinearForce(force)
else:
self.addAngularForce(force)
self.forceNode.addForce(force)
def removeForce(self, force):
"""removeForce(force)"""
if (force.isLinear()):
self.removeLinearForce(force)
else:
self.removeAngularForce(force)
self.forceNode.removeForce(force)
## Getters ##
def getName(self):
"""getName()"""
@ -215,7 +235,7 @@ class Particles(ParticleSystem.ParticleSystem):
elif (alphaMode ==
BaseParticleRenderer.BaseParticleRenderer.PRALPHAUSER):
aMode = "PRALPHAUSER"
file.write(targ + '.renderer.setAlphaMode(BaseParticleRenderer.BaseParticleRenderer.' + aMode + ')\n')
file.write(targ + '.renderer.setAlphaMode(BaseParticleRenderer.' + aMode + ')\n')
file.write(targ + '.renderer.setUserAlpha(%.2f)\n' % self.renderer.getUserAlpha())
if (self.rendererType == "Point"):
file.write('# Point parameters\n')
@ -232,7 +252,7 @@ class Particles(ParticleSystem.ParticleSystem):
bType = "PPBLENDLIFE"
elif (blendType == PointParticleRenderer.PointParticleRenderer.PPBLENDVEL):
bType = "PPBLENDVEL"
file.write(targ + '.renderer.setBlendType(PointParticleRenderer.PointParticleRenderer.' + bType + ')\n')
file.write(targ + '.renderer.setBlendType(PointParticleRenderer.' + bType + ')\n')
blendMethod = self.renderer.getBlendMethod()
bMethod = "PPNOBLEND"
if (blendMethod == BaseParticleRenderer.BaseParticleRenderer.PPNOBLEND):
@ -241,7 +261,7 @@ class Particles(ParticleSystem.ParticleSystem):
bMethod = "PPBLENDLINEAR"
elif (blendMethod == BaseParticleRenderer.BaseParticleRenderer.PPBLENDCUBIC):
bMethod = "PPBLENDCUBIC"
file.write(targ + '.renderer.setBlendMethod(BaseParticleRenderer.BaseParticleRenderer.' + bMethod + ')\n')
file.write(targ + '.renderer.setBlendMethod(BaseParticleRenderer.' + bMethod + ')\n')
elif (self.rendererType == "LineParticleRenderer"):
file.write('# Line parameters\n')
sColor = self.renderer.getHeadColor()
@ -264,7 +284,7 @@ class Particles(ParticleSystem.ParticleSystem):
lScale = "SPNOSCALE"
if (lifeScale == SparkleParticleRenderer.SparkleParticleRenderer.SPSCALE):
lScale = "SPSCALE"
file.write(targ + '.renderer.setLifeScale(SparkleParticleRenderer.SparkleParticleRenderer.' + lScale + ')\n')
file.write(targ + '.renderer.setLifeScale(SparkleParticleRenderer.' + lScale + ')\n')
elif (self.rendererType == "SpriteParticleRenderer"):
file.write('# Sprite parameters\n')
tex = self.renderer.getTexture()
@ -287,7 +307,7 @@ class Particles(ParticleSystem.ParticleSystem):
bMethod = "PPBLENDLINEAR"
elif (blendMethod == BaseParticleRenderer.BaseParticleRenderer.PPBLENDCUBIC):
bMethod = "PPBLENDCUBIC"
file.write(targ + '.renderer.setAlphaBlendMethod(BaseParticleRenderer.BaseParticleRenderer.' + bMethod + ')\n')
file.write(targ + '.renderer.setAlphaBlendMethod(BaseParticleRenderer.' + bMethod + ')\n')
file.write(targ + '.renderer.setAlphaDisable(%d)\n' % self.renderer.getAlphaDisable())
file.write('# Emitter parameters\n')
@ -299,7 +319,7 @@ class Particles(ParticleSystem.ParticleSystem):
eType = "ETRADIATE"
elif (emissionType == BaseParticleEmitter.BaseParticleEmitter.ETCUSTOM):
eType = "ETCUSTOM"
file.write(targ + '.emitter.setEmissionType(BaseParticleEmitter.BaseParticleEmitter.' + eType + ')\n')
file.write(targ + '.emitter.setEmissionType(BaseParticleEmitter.' + eType + ')\n')
file.write(targ + '.emitter.setAmplitude(%.4f)\n' % self.emitter.getAmplitude())
file.write(targ + '.emitter.setAmplitudeSpread(%.4f)\n' % self.emitter.getAmplitudeSpread())
oForce = self.emitter.getOffsetForce()
@ -354,3 +374,41 @@ class Particles(ParticleSystem.ParticleSystem):
elif (self.emitterType == "TangentRingEmitter"):
file.write('# Tangent Ring parameters\n')
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)

View File

@ -159,3 +159,41 @@ INLINE const vector< PT(AngularForce) > &Physical::
get_angular_forces(void) const {
return _angular_forces;
}
////////////////////////////////////////////////////////////////////
// Function : get_num_linear_forces
// Access : Public
////////////////////////////////////////////////////////////////////
INLINE int Physical::
get_num_linear_forces(void) const {
return _linear_forces.size();
}
////////////////////////////////////////////////////////////////////
// Function : get_linear_force
// Access : Public
////////////////////////////////////////////////////////////////////
INLINE PT(LinearForce) Physical::
get_linear_force(int index) const {
nassertr(index >= 0 && index < _linear_forces.size(), NULL);
return _linear_forces[index];
}
////////////////////////////////////////////////////////////////////
// Function : get_num_angular_forces
// Access : Public
////////////////////////////////////////////////////////////////////
INLINE int Physical::
get_num_angular_forces(void) const {
return _angular_forces.size();
}
////////////////////////////////////////////////////////////////////
// Function : get_angular_force
// Access : Public
////////////////////////////////////////////////////////////////////
INLINE PT(AngularForce) Physical::
get_angular_force(int index) const {
nassertr(index >= 0 && index < _angular_forces.size(), NULL);
return _angular_forces[index];
}

View File

@ -55,10 +55,6 @@ PUBLISHED:
INLINE PhysicalNode *get_physical_node(void) const;
INLINE PhysicsObject *get_phys_body(void) const;
INLINE const vector< PT(PhysicsObject) > &get_object_vector(void) const;
INLINE const vector< PT(LinearForce) > &get_linear_forces(void) const;
INLINE const vector< PT(AngularForce) > &get_angular_forces(void) const;
INLINE void clear_linear_forces(void);
INLINE void clear_angular_forces(void);
INLINE void clear_physics_objects(void);
@ -68,7 +64,16 @@ PUBLISHED:
INLINE void remove_linear_force(LinearForce *f);
INLINE void remove_angular_force(AngularForce *f);
INLINE int get_num_linear_forces(void) const;
INLINE PT(LinearForce) get_linear_force(int index) const;
INLINE int get_num_angular_forces(void) const;
INLINE PT(AngularForce) get_angular_force(int index) const;
public:
INLINE const vector< PT(PhysicsObject) > &get_object_vector(void) const;
INLINE const vector< PT(LinearForce) > &get_linear_forces(void) const;
INLINE const vector< PT(AngularForce) > &get_angular_forces(void) const;
friend class PhysicsManager;
friend class PhysicalNode;