| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
To convert the old fountain particle system to new particles you can use a cone emitter. Use a force emitter with downwards acceleration so that the fountain particles fall down after a while. Here you see an example of a fountain particle system in the world file:
<meshfact name="fountainFact">
<plugin>crystalspace.mesh.loader.factory.particles</plugin>
<params>
<particlesize x="0.1" y="0.1" />
<emitter type="cone">
<extent x="0" y="2" z="1" />
<coneangle>0.2</coneangle>
<placement>center</placement>
<mass min="7.5" max="10" />
<initialttl min="10" max="10.5" />
<emissionrate>70</emissionrate>
<initialvelocity x="1.8" y="0" z="0" />
</emitter>
<effector type="force">
<acceleration x="0" y="-0.3" z="0" />
</effector>
<effector type="lincolor">
<color red="0" green="0" blue="1" time="10"/>
<color red="0" green="0.5" blue="1" time="5"/>
<color red="1" green="1" blue="1" time="0"/>
</effector>
</params>
</meshfact>
...
<meshobj name="fountain">
<priority>alpha</priority>
<plugin>crystalspace.mesh.loader.particles</plugin>
<ztest />
<params>
<factory>fountainFact</factory>
<mixmode>
<add />
</mixmode>
<material>fountainmaterial</material>
</params>
<move>
<v x="10" y="0" z="10" />
</move>
</meshobj>
|
Here is how this could work in code:
csRef<iMeshFactoryWrapper> mfw = engine->CreateMeshFactory (
"crystalspace.mesh.object.particles", "fountain");
if (!mfw) return;
csRef<iMeshWrapper> exp = engine->CreateMeshWrapper (mfw, "custom fountain",
sector, origin);
exp->SetZBufMode(CS_ZBUF_TEST);
exp->GetMeshObject()->SetMixMode (CS_FX_ADD);
exp->GetMeshObject()->SetMaterialWrapper (mat);
csRef<iParticleBuiltinEmitterFactory> emit_factory =
csLoadPluginCheck<iParticleBuiltinEmitterFactory> (
Sys->object_reg, "crystalspace.mesh.object.particles.emitter", false);
csRef<iParticleBuiltinEffectorFactory> eff_factory =
csLoadPluginCheck<iParticleBuiltinEffectorFactory> (
Sys->object_reg, "crystalspace.mesh.object.particles.effector", false);
csRef<iParticleBuiltinEmitterCone> conemit = emit_factory->CreateCone ();
float velocity = 3.0f;
float seconds_to_live = 1.5f;
conemit->SetExtent (csVector3 (0, 0.5f, 0));
conemit->SetConeAngle (0.3f);
conemit->SetParticlePlacement (CS_PARTICLE_BUILTIN_VOLUME);
conemit->SetEmissionRate (float (num) / seconds_to_live);
conemit->SetInitialMass (8.0f, 10.0f);
conemit->SetInitialTTL (seconds_to_live, seconds_to_live);
conemit->SetInitialVelocity (csVector3 (0, velocity, 0), csVector3 (0));
csRef<iParticleBuiltinEffectorLinColor> lincol = eff_factory->
CreateLinColor ();
lincol->AddColor (csColor4 (0.25f, 0.35f, 0.55f, 1), seconds_to_live);
csRef<iParticleBuiltinEffectorForce> force = eff_factory->
CreateForce ();
force->SetAcceleration (csVector3 (0.0f, -3.0f, 0.0f));
csRef<iParticleSystem> partstate =
scfQueryInterface<iParticleSystem> (exp->GetMeshObject ());
partstate->SetParticleSize (csVector2 (0.1f, 0.1f));
partstate->AddEmitter (conemit);
partstate->AddEffector (lincol);
partstate->AddEffector (force);
|
This document was generated using texi2html 1.76.