Firework Display
This project combines a number of emitters into a single display.
package
{
import org.flintparticles.common.emitters.Emitter;
import org.flintparticles.common.events.EmitterEvent;
import org.flintparticles.common.events.ParticleEvent;
import org.flintparticles.threeD.emitters.Emitter3D;
import org.flintparticles.threeD.particles.Particle3D;
import org.flintparticles.threeD.renderers.BitmapRenderer;
import org.flintparticles.threeD.renderers.controllers.FirstPersonCamera;
import org.flintparticles.threeD.zones.LineZone;
import flash.display.Sprite;
import flash.filters.BlurFilter;
import flash.filters.ColorMatrixFilter;
import flash.geom.Rectangle;
import flash.geom.Vector3D;
[SWF(width='800', height='600', frameRate='60', backgroundColor='#000000')]
public class Main extends Sprite
{
private var orbitter:FirstPersonCamera;
private var renderer:BitmapRenderer;
public function Main()
{
renderer = new BitmapRenderer( new Rectangle( -400, -300, 800, 600 ), false );
renderer.x = 400;
renderer.y = 300;
renderer.addFilter( new BlurFilter( 2, 2, 1 ) );
renderer.addFilter( new ColorMatrixFilter( [ 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0.95,0 ] ) );
addChild( renderer );
renderer.camera.position = new Vector3D( 0, -150, -400 );
renderer.camera.target = new Vector3D( 0, -150, 0 );
renderer.camera.projectionDistance = 400;
orbitter = new FirstPersonCamera( stage, renderer.camera );
orbitter.start();
var emitter:Emitter3D = new Whizzer( new LineZone( new Vector3D( -200, 0, 0 ), new Vector3D( 200, 0, 0) ) );
renderer.addEmitter( emitter );
emitter.addEventListener( ParticleEvent.PARTICLE_DEAD, whizzBang, false, 0, true );
emitter.start();
emitter = new Candle( new Vector3D( 150, 0, 150 ) );
renderer.addEmitter( emitter );
emitter.start();
emitter = new Candle( new Vector3D( -150, 0, 150 ) );
renderer.addEmitter( emitter );
emitter.start();
emitter = new Candle( new Vector3D( 150, 0, -150 ) );
renderer.addEmitter( emitter );
emitter.start();
emitter = new Candle( new Vector3D( -150, 0, -150 ) );
renderer.addEmitter( emitter );
emitter.start();
emitter = new CatherineWheel( new Vector3D( -200, -200, 50 ) );
renderer.addEmitter( emitter );
emitter.start();
emitter = new CatherineWheel( new Vector3D( 0, -200, 50 ) );
renderer.addEmitter( emitter );
emitter.start();
emitter = new CatherineWheel( new Vector3D( 200, -200, 50 ) );
renderer.addEmitter( emitter );
emitter.start();
}
public function whizzBang( ev:ParticleEvent ):void
{
var bang:Emitter3D = new SphereBang( Particle3D( ev.particle ).position );
bang.addEventListener( EmitterEvent.EMITTER_EMPTY, removeEmitter, false, 0, true );
renderer.addEmitter( bang );
bang.start();
}
public function removeEmitter( ev:EmitterEvent ):void
{
Emitter3D( ev.target ).removeEventListener( EmitterEvent.EMITTER_EMPTY, removeEmitter );
renderer.removeEmitter( Emitter3D( ev.target ) );
}
public function destroy():void
{
for each( var e:Emitter in renderer.emitters )
{
e.stop();
}
}
}
}package
{
import org.flintparticles.common.actions.Age;
import org.flintparticles.common.counters.Steady;
import org.flintparticles.common.displayObjects.Dot;
import org.flintparticles.common.initializers.ColorInit;
import org.flintparticles.common.initializers.Lifetime;
import org.flintparticles.common.initializers.SharedImage;
import org.flintparticles.threeD.actions.Accelerate;
import org.flintparticles.threeD.actions.Move;
import org.flintparticles.threeD.emitters.Emitter3D;
import org.flintparticles.threeD.initializers.Position;
import org.flintparticles.threeD.initializers.Velocity;
import org.flintparticles.threeD.zones.DiscZone;
import org.flintparticles.threeD.zones.PointZone;
import flash.geom.Vector3D;
public class Candle extends Emitter3D
{
public function Candle( position:Vector3D )
{
counter = new Steady( 30 );
addInitializer( new SharedImage( new Dot( 1 ) ) );
addInitializer( new ColorInit( 0xFFFFFF00, 0xFFFF6600 ) );
addInitializer( new Position( new PointZone( position ) ) );
addInitializer( new Velocity( new DiscZone( new Vector3D( 0, -80, 0 ), new Vector3D( 0, 1, 0 ), 30 ) ) );
addInitializer( new Lifetime( 2 ) );
addAction( new Move() );
addAction( new Accelerate( new Vector3D( 0, 50, 0 ) ) );
addAction( new Age() );
}
}
}package
{
import org.flintparticles.common.actions.Age;
import org.flintparticles.common.counters.Steady;
import org.flintparticles.common.displayObjects.Dot;
import org.flintparticles.common.initializers.ColorInit;
import org.flintparticles.common.initializers.Lifetime;
import org.flintparticles.common.initializers.SharedImage;
import org.flintparticles.threeD.actions.Accelerate;
import org.flintparticles.threeD.actions.Move;
import org.flintparticles.threeD.activities.RotateEmitter;
import org.flintparticles.threeD.emitters.Emitter3D;
import org.flintparticles.threeD.initializers.Velocity;
import org.flintparticles.threeD.zones.ConeZone;
import flash.geom.Vector3D;
public class CatherineWheel extends Emitter3D
{
public function CatherineWheel( position:Vector3D )
{
counter = new Steady( 80 );
this.position = position;
addActivity( new RotateEmitter( new Vector3D( 0, 0, 1 ), 10 ) );
addInitializer( new SharedImage( new Dot( 1 ) ) );
addInitializer( new ColorInit( 0xFFFFFF00, 0xFFFF6600 ) );
addInitializer( new Velocity( new ConeZone( new Vector3D(), new Vector3D( 1, 0, 0 ), 0.5, 100, 80 ) ) );
addInitializer( new Lifetime( 0.5 ) );
addAction( new Move() );
addAction( new Accelerate( new Vector3D( 0, 50, 0 ) ) );
addAction( new Age() );
}
}
}package
{
import org.flintparticles.common.actions.Age;
import org.flintparticles.common.actions.Fade;
import org.flintparticles.common.counters.Blast;
import org.flintparticles.common.displayObjects.Dot;
import org.flintparticles.common.easing.Quadratic;
import org.flintparticles.common.initializers.ColorInit;
import org.flintparticles.common.initializers.Lifetime;
import org.flintparticles.common.initializers.SharedImage;
import org.flintparticles.threeD.actions.Accelerate;
import org.flintparticles.threeD.actions.LinearDrag;
import org.flintparticles.threeD.actions.Move;
import org.flintparticles.threeD.emitters.Emitter3D;
import org.flintparticles.threeD.initializers.Position;
import org.flintparticles.threeD.initializers.Velocity;
import org.flintparticles.threeD.zones.PointZone;
import org.flintparticles.threeD.zones.SphereZone;
import flash.geom.Vector3D;
public class SphereBang extends Emitter3D
{
public function SphereBang( position:Vector3D )
{
counter = new Blast( 200 );
addInitializer( new SharedImage( new Dot( 1 ) ) );
addInitializer( new ColorInit( 0xFFFFFF00, 0xFFFF6600 ) );
addInitializer( new Position( new PointZone( position ) ) );
addInitializer( new Velocity( new SphereZone( new Vector3D(), 100 ) ) );
addInitializer( new Lifetime( 3 ) );
addAction( new Age( Quadratic.easeIn ) );
addAction( new Move() );
addAction( new Fade() );
addAction( new Accelerate( new Vector3D( 0, 50, 0 ) ) );
addAction( new LinearDrag( 0.5 ) );
}
}
}package
{
import org.flintparticles.common.actions.Age;
import org.flintparticles.common.counters.Steady;
import org.flintparticles.common.displayObjects.Dot;
import org.flintparticles.common.initializers.ColorInit;
import org.flintparticles.common.initializers.Lifetime;
import org.flintparticles.common.initializers.SharedImage;
import org.flintparticles.threeD.actions.Accelerate;
import org.flintparticles.threeD.actions.LinearDrag;
import org.flintparticles.threeD.actions.Move;
import org.flintparticles.threeD.actions.RandomDrift;
import org.flintparticles.threeD.emitters.Emitter3D;
import org.flintparticles.threeD.initializers.Position;
import org.flintparticles.threeD.initializers.Velocity;
import org.flintparticles.threeD.zones.ConeZone;
import org.flintparticles.threeD.zones.Zone3D;
import flash.geom.Vector3D;
public class Whizzer extends Emitter3D
{
public function Whizzer( zone:Zone3D )
{
counter = new Steady( 0.5 );
addInitializer( new SharedImage( new Dot( 4 ) ) );
addInitializer( new ColorInit( 0xFFFFFF00, 0xFFFF6600 ) );
addInitializer( new Position( zone ) );
addInitializer( new Velocity( new ConeZone( new Vector3D(), new Vector3D( 0, -1, 0 ), 0.1, 350, 330 ) ) );
addInitializer( new Lifetime( 3.3 ) );
addAction( new Age() );
addAction( new Move() );
addAction( new Accelerate( new Vector3D( 0, 50, 0 ) ) );
addAction( new LinearDrag( 0.5 ) );
addAction( new RandomDrift( 10, 10, 10 ) );
}
}
}import org.flintparticles.common.events.EmitterEvent;
import org.flintparticles.common.events.ParticleEvent;
import org.flintparticles.threeD.emitters.Emitter3D;
import org.flintparticles.threeD.particles.Particle3D;
import org.flintparticles.threeD.renderers.*;
import org.flintparticles.threeD.renderers.controllers.FirstPersonCamera;
import org.flintparticles.threeD.zones.LineZone;
var renderer:BitmapRenderer = new BitmapRenderer( new Rectangle( -400, -300, 800, 600 ), false );
renderer.x = 400;
renderer.y = 300;
renderer.addFilter( new BlurFilter( 2, 2, 1 ) );
renderer.addFilter( new ColorMatrixFilter( [ 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0.95,0 ] ) );
addChild( renderer );
renderer.camera.position = new Vector3D( 0, -150, -400 );
renderer.camera.target = new Vector3D( 0, -150, 0 );
renderer.camera.projectionDistance = 400;
var orbitter:FirstPersonCamera = new FirstPersonCamera( stage, renderer.camera );
orbitter.start();
var emitter:Emitter3D = new Whizzer( new LineZone( new Vector3D( -200, 0, 0 ), new Vector3D( 200, 0, 0) ) );
renderer.addEmitter( emitter );
emitter.addEventListener( ParticleEvent.PARTICLE_DEAD, whizzBang, false, 0, true );
emitter.start();
emitter = new Candle( new Vector3D( 150, 0, 150 ) );
renderer.addEmitter( emitter );
emitter.start();
emitter = new Candle( new Vector3D( -150, 0, 150 ) );
renderer.addEmitter( emitter );
emitter.start();
emitter = new Candle( new Vector3D( 150, 0, -150 ) );
renderer.addEmitter( emitter );
emitter.start();
emitter = new Candle( new Vector3D( -150, 0, -150 ) );
renderer.addEmitter( emitter );
emitter.start();
emitter = new CatherineWheel( new Vector3D( -200, -200, 50 ) );
renderer.addEmitter( emitter );
emitter.start();
emitter = new CatherineWheel( new Vector3D( 0, -200, 50 ) );
renderer.addEmitter( emitter );
emitter.start();
emitter = new CatherineWheel( new Vector3D( 200, -200, 50 ) );
renderer.addEmitter( emitter );
emitter.start();
function whizzBang( ev:ParticleEvent ):void
{
var bang:Emitter3D = new SphereBang( Particle3D( ev.particle ).position );
bang.addEventListener( EmitterEvent.EMITTER_EMPTY, removeEmitter, false, 0, true );
renderer.addEmitter( bang );
bang.start();
}
function removeEmitter( ev:EmitterEvent ):void
{
ev.target.removeEventListener( EmitterEvent.EMITTER_EMPTY, removeEmitter );
renderer.removeEmitter( Emitter3D( ev.target ) );
}package
{
import org.flintparticles.common.actions.*;
import org.flintparticles.common.counters.*;
import org.flintparticles.common.displayObjects.Dot;
import org.flintparticles.common.initializers.*;
import org.flintparticles.threeD.actions.*;
import org.flintparticles.threeD.emitters.Emitter3D;
import org.flintparticles.threeD.initializers.*;
import org.flintparticles.threeD.zones.*;
import flash.geom.Vector3D;
public class Candle extends Emitter3D
{
public function Candle( position:Vector3D )
{
counter = new Steady( 30 );
addInitializer( new SharedImage( new Dot( 1 ) ) );
addInitializer( new ColorInit( 0xFFFFFF00, 0xFFFF6600 ) );
addInitializer( new Position( new PointZone( position ) ) );
addInitializer( new Velocity( new DiscZone( new Vector3D( 0, -80, 0 ), new Vector3D( 0, 1, 0 ), 30 ) ) );
addInitializer( new Lifetime( 2 ) );
addAction( new Move() );
addAction( new Accelerate( new Vector3D( 0, 50, 0 ) ) );
addAction( new Age() );
}
}
}package
{
import org.flintparticles.common.actions.Age;
import org.flintparticles.common.counters.Steady;
import org.flintparticles.common.displayObjects.Dot;
import org.flintparticles.common.initializers.ColorInit;
import org.flintparticles.common.initializers.Lifetime;
import org.flintparticles.common.initializers.SharedImage;
import org.flintparticles.threeD.actions.Accelerate;
import org.flintparticles.threeD.actions.Move;
import org.flintparticles.threeD.activities.RotateEmitter;
import org.flintparticles.threeD.emitters.Emitter3D;
import org.flintparticles.threeD.initializers.Velocity;
import org.flintparticles.threeD.zones.ConeZone;
import flash.geom.Vector3D;
public class CatherineWheel extends Emitter3D
{
public function CatherineWheel( position:Vector3D )
{
counter = new Steady( 80 );
this.position = position;
addActivity( new RotateEmitter( new Vector3D( 0, 0, 1 ), 10 ) );
addInitializer( new SharedImage( new Dot( 1 ) ) );
addInitializer( new ColorInit( 0xFFFFFF00, 0xFFFF6600 ) );
addInitializer( new Velocity( new ConeZone( new Vector3D(), new Vector3D( 1, 0, 0 ), 0.5, 100, 80 ) ) );
addInitializer( new Lifetime( 0.5 ) );
addAction( new Move() );
addAction( new Accelerate( new Vector3D( 0, 50, 0 ) ) );
addAction( new Age() );
}
}
}package
{
import org.flintparticles.common.actions.*;
import org.flintparticles.common.counters.*;
import org.flintparticles.common.displayObjects.Dot;
import org.flintparticles.common.easing.Quadratic;
import org.flintparticles.common.initializers.*;
import org.flintparticles.threeD.actions.*;
import org.flintparticles.threeD.emitters.Emitter3D;
import org.flintparticles.threeD.initializers.*;
import org.flintparticles.threeD.zones.*;
import flash.geom.Vector3D;
public class SphereBang extends Emitter3D
{
public function SphereBang( position:Vector3D )
{
counter = new Blast( 200 );
addInitializer( new SharedImage( new Dot( 1 ) ) );
addInitializer( new ColorInit( 0xFFFFFF00, 0xFFFF6600 ) );
addInitializer( new Position( new PointZone( position ) ) );
addInitializer( new Velocity( new SphereZone( new Vector3D(), 100 ) ) );
addInitializer( new Lifetime( 3 ) );
addAction( new Age( Quadratic.easeIn ) );
addAction( new Move() );
addAction( new Fade() );
addAction( new Accelerate( new Vector3D( 0, 50, 0 ) ) );
addAction( new LinearDrag( 0.5 ) );
}
}
}package
{
import org.flintparticles.common.actions.*;
import org.flintparticles.common.counters.*;
import org.flintparticles.common.displayObjects.Dot;
import org.flintparticles.common.initializers.*;
import org.flintparticles.threeD.actions.*;
import org.flintparticles.threeD.emitters.Emitter3D;
import org.flintparticles.threeD.initializers.*;
import org.flintparticles.threeD.zones.*;
import flash.geom.Vector3D;
public class Whizzer extends Emitter3D
{
public function Whizzer( zone:Zone3D )
{
counter = new Steady( 0.5 );
addInitializer( new SharedImage( new Dot( 4 ) ) );
addInitializer( new ColorInit( 0xFFFFFF00, 0xFFFF6600 ) );
addInitializer( new Position( zone ) );
addInitializer( new Velocity( new ConeZone( new Vector3D(), new Vector3D( 0, -1, 0 ), 0.1, 350, 330 ) ) );
addInitializer( new Lifetime( 3.3 ) );
addAction( new Age() );
addAction( new Move() );
addAction( new Accelerate( new Vector3D( 0, 50, 0 ) ) );
addAction( new LinearDrag( 0.5 ) );
addAction( new RandomDrift( 10, 10, 10 ) );
}
}
}<?xml version="1.0" encoding="utf-8"?>
<s:Application
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:f="http://flintparticles.org/2009/flint3d"
xmlns:geom="flash.geom.*"
xmlns:filters="flash.filters.*"
xmlns="*"
width="800" height="600"
backgroundColor="#000000" creationComplete="created()">
<fx:Script>
<![CDATA[
import org.flintparticles.common.events.EmitterEvent;
import org.flintparticles.threeD.particles.Particle3D;
import org.flintparticles.common.events.ParticleEvent;
private function created():void
{
whizzer.addEventListener( ParticleEvent.PARTICLE_DEAD, whizzBang, false, 0, true );
}
public function whizzBang( ev:ParticleEvent ):void
{
var bang:SphereBang = new SphereBang();
bang.position = Particle3D( ev.particle ).position;
bang.addEventListener( EmitterEvent.EMITTER_EMPTY, removeEmitter, false, 0, true );
renderer.addEmitter( bang );
bang.start();
}
public function removeEmitter( ev:EmitterEvent ):void
{
SphereBang( ev.target ).removeEventListener( EmitterEvent.EMITTER_EMPTY, removeEmitter );
renderer.removeEmitter( SphereBang( ev.target ) );
}
]]>
</fx:Script>
<f:BitmapRenderer x="0" y="0" id="renderer" width="800" height="600">
<f:camera>
<f:Camera id="camera" projectionDistance="400">
<f:position>
<geom:Vector3D x="0" y="-150" z="-400"/>
</f:position>
<f:target>
<geom:Vector3D x="0" y="-150" z="0"/>
</f:target>
<f:controller>
<f:FirstPersonCamera/>
</f:controller>
</f:Camera>
</f:camera>
<f:preFilters>
<filters:BlurFilter blurX="2" blurY="2" quality="1"/>
<filters:ColorMatrixFilter matrix="{[ 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0.95,0 ]}"/>
</f:preFilters>
<f:emitters>
<Whizzer id="whizzer" autoStart="true">
<zone>
<f:LineZone>
<f:start>
<geom:Vector3D x="-200" y="0" z="0"/>
</f:start>
<f:end>
<geom:Vector3D x="200" y="0" z="0"/>
</f:end>
</f:LineZone>
</zone>
</Whizzer>
<CatherineWheel autoStart="true">
<position>
<geom:Vector3D x="-200" y="-200" z="50"/>
</position>
</CatherineWheel>
<CatherineWheel autoStart="true">
<position>
<geom:Vector3D x="0" y="-200" z="50"/>
</position>
</CatherineWheel>
<CatherineWheel autoStart="true">
<position>
<geom:Vector3D x="200" y="-200" z="50"/>
</position>
</CatherineWheel>
<Candle autoStart="true">
<position>
<geom:Vector3D x="150" y="0" z="150"/>
</position>
</Candle>
<Candle autoStart="true">
<position>
<geom:Vector3D x="-150" y="0" z="150"/>
</position>
</Candle>
<Candle autoStart="true">
<position>
<geom:Vector3D x="150" y="0" z="-150"/>
</position>
</Candle>
<Candle autoStart="true">
<position>
<geom:Vector3D x="-150" y="0" z="-150"/>
</position>
</Candle>
</f:emitters>
</f:BitmapRenderer>
</s:Application><?xml version="1.0" encoding="utf-8"?>
<f:Emitter
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:f="http://flintparticles.org/2009/flint3d"
xmlns:geom="flash.geom.*">
<f:counter>
<f:Steady rate="30"/>
</f:counter>
<f:initializers>
<f:SharedImage>
<f:Dot radius="1"/>
</f:SharedImage>
<f:ColorInit minColor="0xFFFF6600" maxColor="0xFFFFFF00"/>
<f:Velocity>
<f:DiscZone outerRadius="30">
<f:normal>
<geom:Vector3D x="0" y="1" z="0"/>
</f:normal>
<f:center>
<geom:Vector3D x="0" y="-80" z="0"/>
</f:center>
</f:DiscZone>
</f:Velocity>
<f:Lifetime lifetime="2"/>
</f:initializers>
<f:actions>
<f:Move/>
<f:Age/>
<f:Accelerate x="0" y="50" z="0"/>
</f:actions>
</f:Emitter><?xml version="1.0" encoding="utf-8"?>
<f:Emitter
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:f="http://flintparticles.org/2009/flint3d"
xmlns:geom="flash.geom.*">
<f:counter>
<f:Steady rate="80"/>
</f:counter>
<f:activities>
<f:RotateEmitter rotateSpeed="10">
<f:axis>
<geom:Vector3D x="0" y="0" z="1"/>
</f:axis>
</f:RotateEmitter>
</f:activities>
<f:initializers>
<f:SharedImage>
<f:Dot radius="1"/>
</f:SharedImage>
<f:ColorInit minColor="0xFFFF6600" maxColor="0xFFFFFF00"/>
<f:Velocity>
<f:ConeZone angle="0.5" height="100" truncatedHeight="80">
<f:axis>
<geom:Vector3D x="1" y="0" z="0"/>
</f:axis>
</f:ConeZone>
</f:Velocity>
<f:Lifetime lifetime="0.5"/>
</f:initializers>
<f:actions>
<f:Move/>
<f:Age/>
<f:Accelerate x="0" y="50" z="0"/>
</f:actions>
</f:Emitter><?xml version="1.0" encoding="utf-8"?>
<f:Emitter
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:f="http://flintparticles.org/2009/flint3d"
xmlns:geom="flash.geom.*">
<fx:Script>
<![CDATA[
import org.flintparticles.common.easing.Quadratic;
]]>
</fx:Script>
<f:counter>
<f:Blast startCount="200"/>
</f:counter>
<f:initializers>
<f:SharedImage>
<f:Dot radius="1"/>
</f:SharedImage>
<f:ColorInit minColor="0xFFFF6600" maxColor="0xFFFFFF00"/>
<f:Velocity>
<f:SphereZone outerRadius="100"/>
</f:Velocity>
<f:Lifetime lifetime="3"/>
</f:initializers>
<f:actions>
<f:Move/>
<f:Fade/>
<f:Age easing="{Quadratic.easeIn}"/>
<f:Accelerate x="0" y="50" z="0"/>
<f:LinearDrag drag="0.5"/>
</f:actions>
</f:Emitter><?xml version="1.0" encoding="utf-8"?>
<f:Emitter
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:f="http://flintparticles.org/2009/flint3d"
xmlns:geom="flash.geom.*">
<fx:Script>
<![CDATA[
import org.flintparticles.threeD.zones.Zone3D;
[Bindable]
public var zone:Zone3D;
]]>
</fx:Script>
<f:counter>
<f:Steady rate="0.5"/>
</f:counter>
<f:initializers>
<f:SharedImage>
<f:Dot radius="4"/>
</f:SharedImage>
<f:ColorInit minColor="0xFFFF6600" maxColor="0xFFFFFF00"/>
<f:Position zone="{zone}"/>
<f:Velocity>
<f:ConeZone angle="0.1" height="350" truncatedHeight="330">
<f:axis>
<geom:Vector3D x="0" y="-1" z="0"/>
</f:axis>
</f:ConeZone>
</f:Velocity>
<f:Lifetime lifetime="3.3"/>
</f:initializers>
<f:actions>
<f:Move/>
<f:Age/>
<f:Accelerate x="0" y="50" z="0"/>
<f:LinearDrag drag="0.5"/>
<f:RandomDrift driftX="10" driftY="10" driftZ="10"/>
</f:actions>
</f:Emitter>