package
{
  import org.flintparticles.common.events.ParticleEvent;
  import org.flintparticles.common.particles.Particle;
  import org.flintparticles.twoD.emitters.Emitter2D;
  import org.flintparticles.twoD.renderers.PixelRenderer;

  import flash.display.Sprite;
  import flash.filters.BlurFilter;
  import flash.filters.ColorMatrixFilter;
  import flash.geom.Rectangle;

  [SWF(width='400', height='200', frameRate='60', backgroundColor='#000000')]
  
  public class Main extends Sprite
  {
    private var startEmitter:Emitter2D;
    private var tween1Emitter:Emitter2D;
    private var tween2Emitter:Emitter2D;
    
    public function Main()
    {
      startEmitter = new FirstEmitter();
      tween1Emitter = new TweenToFlint();
      tween2Emitter = new TweenToParticles();

      var renderer:PixelRenderer = new PixelRenderer( new Rectangle( 0, 0, 400, 200 ) );
      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.97,0 ] ) );
      renderer.addEmitter( startEmitter );
      renderer.addEmitter( tween1Emitter );
      renderer.addEmitter( tween2Emitter );
      addChild( renderer );
      
      startEmitter.addEventListener( ParticleEvent.PARTICLE_DEAD, moveToTween1 );
      tween1Emitter.addEventListener( ParticleEvent.PARTICLE_DEAD, moveToTween2 );
      tween2Emitter.addEventListener( ParticleEvent.PARTICLE_DEAD, moveToTween1 );
      
      startEmitter.start();
      tween1Emitter.start();
      tween2Emitter.start();
    }

    private function moveToTween1( event:ParticleEvent ):void
    {
      event.particle.revive();
      tween1Emitter.addParticles( Vector.<Particle>( [ event.particle ] ), true );
    }
    
    private function moveToTween2( event:ParticleEvent ):void
    {
      event.particle.revive();
      tween2Emitter.addParticles( Vector.<Particle>( [ event.particle ] ), true );
    }
  }
}
package
{
  import org.flintparticles.common.actions.Age;
  import org.flintparticles.common.counters.Blast;
  import org.flintparticles.common.easing.Quadratic;
  import org.flintparticles.common.initializers.ColorInit;
  import org.flintparticles.common.initializers.Lifetime;
  import org.flintparticles.twoD.actions.TweenToZone;
  import org.flintparticles.twoD.emitters.Emitter2D;
  import org.flintparticles.twoD.initializers.Position;
  import org.flintparticles.twoD.zones.BitmapDataZone;

  public class FirstEmitter extends Emitter2D
  {
    public function FirstEmitter()
    {
      counter = new Blast( 5000 );
      
      addInitializer( new ColorInit( 0xFFFFFF00, 0xCC6600 ) );
      addInitializer( new Lifetime( 6 ) );
      addInitializer( new Position( new BitmapDataZone( new FlintImage( 320, 80 ), 40, 60 ) ) );
      
      addAction( new Age( Quadratic.easeInOut ) );
      addAction( new TweenToZone( new BitmapDataZone( new ParticlesImage( 320, 80 ), 40, 60 ) ) );
    }
  }
}
package
{
  import org.flintparticles.common.actions.Age;
  import org.flintparticles.common.easing.Quadratic;
  import org.flintparticles.common.initializers.Lifetime;
  import org.flintparticles.twoD.actions.TweenToZone;
  import org.flintparticles.twoD.emitters.Emitter2D;
  import org.flintparticles.twoD.zones.BitmapDataZone;

  public class TweenToFlint extends Emitter2D
  {
    public function TweenToFlint()
    {
      addInitializer( new Lifetime( 6 ) );
      
      addAction( new Age( Quadratic.easeInOut ) );
      addAction( new TweenToZone( new BitmapDataZone( new FlintImage( 320, 80 ), 40, 60 ) ) );
    }
  }
}
package
{
  import org.flintparticles.common.actions.Age;
  import org.flintparticles.common.easing.Quadratic;
  import org.flintparticles.common.initializers.Lifetime;
  import org.flintparticles.twoD.actions.TweenToZone;
  import org.flintparticles.twoD.emitters.Emitter2D;
  import org.flintparticles.twoD.zones.BitmapDataZone;

  public class TweenToParticles extends Emitter2D
  {
    public function TweenToParticles()
    {
      addInitializer( new Lifetime( 6 ) );
      
      addAction( new Age( Quadratic.easeInOut ) );
      addAction( new TweenToZone( new BitmapDataZone( new ParticlesImage( 320, 80 ), 40, 60 ) ) );
    }
  }
}


import org.flintparticles.common.actions.Age;
import org.flintparticles.common.counters.Blast;
import org.flintparticles.common.easing.Quadratic;
import org.flintparticles.common.events.ParticleEvent;
import org.flintparticles.common.initializers.ColorInit;
import org.flintparticles.common.initializers.Lifetime;
import org.flintparticles.common.particles.Particle;
import org.flintparticles.twoD.actions.TweenToZone;
import org.flintparticles.twoD.emitters.Emitter2D;
import org.flintparticles.twoD.initializers.Position;
import org.flintparticles.twoD.particles.Particle2D;
import org.flintparticles.twoD.renderers.PixelRenderer;  
import org.flintparticles.twoD.zones.BitmapDataZone;

var flintImage:BitmapData = new FlintImage( 320, 80 );
var particlesImage:BitmapData = new ParticlesImage( 320, 80 );

var startEmitter:Emitter2D = new Emitter2D();
startEmitter.counter = new Blast( 5000 );
startEmitter.addInitializer( new ColorInit( 0xFFFFFF00, 0xCC6600 ) );
startEmitter.addInitializer( new Lifetime( 6 ) );
startEmitter.addInitializer( new Position( new BitmapDataZone( flintImage, 40, 60 ) ) );
startEmitter.addAction( new Age( Quadratic.easeInOut ) );
startEmitter.addAction( new TweenToZone( new BitmapDataZone( particlesImage, 40, 60 ) ) );

var tween1Emitter:Emitter2D = new Emitter2D();
tween1Emitter.addInitializer( new Lifetime( 6 ) );
tween1Emitter.addAction( new Age( Quadratic.easeInOut ) );
tween1Emitter.addAction( new TweenToZone( new BitmapDataZone( flintImage, 40, 60 ) ) );

var tween2Emitter:Emitter2D = new Emitter2D();
tween2Emitter.addInitializer( new Lifetime( 6 ) );
tween2Emitter.addAction( new Age( Quadratic.easeInOut ) );
tween2Emitter.addAction( new TweenToZone( new BitmapDataZone( particlesImage, 40, 60 ) ) );

var renderer:PixelRenderer = new PixelRenderer( new Rectangle( 0, 0, 400, 200 ) );
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.97,0 ] ) );
renderer.addEmitter( startEmitter );
renderer.addEmitter( tween1Emitter );
renderer.addEmitter( tween2Emitter );
addChild( renderer );

startEmitter.addEventListener( ParticleEvent.PARTICLE_DEAD, moveToTween1 );
tween1Emitter.addEventListener( ParticleEvent.PARTICLE_DEAD, moveToTween2 );
tween2Emitter.addEventListener( ParticleEvent.PARTICLE_DEAD, moveToTween1 );

startEmitter.start();
tween1Emitter.start();
tween2Emitter.start();

function moveToTween1( event:ParticleEvent ):void
{
  event.particle.revive();
  tween1Emitter.addParticles( Vector.<Particle>( [ event.particle ] ), true );
}

function moveToTween2( event:ParticleEvent ):void
{
  event.particle.revive();
  tween2Emitter.addParticles( Vector.<Particle>( [ event.particle ] ), true );
}