Particle Phys

by hemingway
Ordinary constructor +
Buffer for Flint +
Flint Emitter
♥0 | Line 153 | Modified 2012-12-29 05:10:12 | MIT License
play

ActionScript3 source code

/**
 * Copyright hemingway ( http://wonderfl.net/user/hemingway )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/yYyg
 */

package
{
    
import net.hires.debug.*;
import flash.display.*;
import flash.system.*;
import flash.events.*;
import flash.utils.*;
import flash.geom.*;
import flash.text.*;

[SWF(width = 465, height = 465, frameRate = 60)]
public class Main extends Sprite
{
        public function Main()
        {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            
            addEventListener(Event.ADDED_TO_STAGE, addedToStage);
        }
        
        public function _init() :void
        {
            graphics.clear     ();
            graphics.lineStyle (1, 0, 0.9);
            graphics.drawRect  (0, 0, 464, 464);
        }
        
        public function addedToStage($e:Event) :void
        {
            removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
            
            addChild(new fBuffer);
            
            _init();
        }
    }
}

import net.hires.debug.*;
import flash.display.*;
import flash.system.*;
import flash.events.*;
import flash.utils.*;
import flash.geom.*;
import flash.text.*;

import org.flintparticles.common.counters.*;
import org.flintparticles.common.particles.*;
import org.flintparticles.common.initializers.*;
import org.flintparticles.common.displayObjects.*;
import org.flintparticles.twoD.zones.*;
import org.flintparticles.twoD.actions.*;
import org.flintparticles.twoD.emitters.*;
import org.flintparticles.twoD.renderers.*;
import org.flintparticles.twoD.initializers.*;

class fBuffer extends Sprite
{
    private var pEmitter :Emitter2D;
    private var pRenderer :BitmapRenderer;
    private var pGravity :GravityWell;
    private var pOutput :Text_Output;
    
    public function fBuffer()
    {
        addEventListener(Event.ADDED_TO_STAGE, addedToStage);
        
        pEmitter = new fTrail;
        pRenderer = new BitmapRenderer(new Rectangle(1, 1, 464, 464));
        pGravity = new GravityWell(0, 1, 1);
        pOutput = new Text_Output("fBuffer");
        pRenderer.addEmitter(pEmitter);
    }
    
    public function _init() :void
    {    
        graphics.beginFill (0, 0.25);
        graphics.drawRect  (0, 0, 465, 465);
        graphics.endFill   ();
    }
    
    public function addedToStage($e:Event) :void
    {
        removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
    
        _init();
        
        addChild(pOutput);
        addChild(pRenderer);

        pEmitter.start();
        pEmitter.addAction(pGravity);
        
        stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
    }
    
    public function onMouseDown($e:MouseEvent) :void
    {
        pGravity.x = $e.stageY;
        pGravity.y = $e.stageX;
        
        //if ($e.target == pEmitter.particlesArray[0]){pEmitter.particlesArray[0].x = $e.stageX; pEmitter.particlesArray[0].y = $e.stageY}
        
        pGravity.power = 3000;
        
        stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
        stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
    }
    
    public function onMouseMove($e:MouseEvent) :void
    {
        pGravity.x = $e.stageX;
        pGravity.y = $e.stageY;
        
        //pEmitter.particlesArray[0].x = $e.stageX; pEmitter.particlesArray[0].y = $e.stageY;
    }

    public function onMouseUp($e:MouseEvent) :void
    {
        stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
        stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);    
    
        pGravity.power = 0;
    }
}

class fTrail extends Emitter2D
{
    public function fTrail()
    {
        counter = new Blast(1);
        
        addInitializer(new MassInit(0.9));
        addInitializer(new CollisionRadiusInit(20));
        addInitializer(new SharedImage(new Dot(20)));
        addInitializer(new ColorInit(0xFF000000, 0xFF000000));
        addInitializer(new Position(new RectangleZone(20, 20, 445, 445)));
        
        addAction(new Move());
        addAction(new Collide());
        addAction(new Friction(50));
        //addAction(new MutualGravity(20, 465, 1000));
        addAction(new BoundingBox(1, 1, 464, 464));
    }
}

class Text_Output extends TextField
{
    private var textFormat :TextFormat;
    
    protected var _content :String;
    protected var _x :Number;
    protected var _y :Number;
    protected var _font :String;
    
    public function Text_Output($content:String, $x:Number = 0, $y:Number = 0, $font:String = "Helvetica")
    {
        addEventListener(Event.ADDED_TO_STAGE, addedToStage);
        
        _content = $content;
        _x = $x;
        _y = $y;
        _font = $font;
        
        multiline = true;
        autoSize = "left";
        selectable = mouseEnabled = false;
        antiAliasType = AntiAliasType.ADVANCED;
    }
    
    public function _init() :void
    {
        text = _content;
        x = _x;
        y = _y;
        
        textFormat = new TextFormat(_font);
        setTextFormat(textFormat);
    }
    
    public function addedToStage($e:Event) :void
    {
       removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
       
       _init(); 
    }
    
    public function get font() :String
    { return _font }
    public function get nWidth() :Number
    { return width }
    
    public function set font($:String) :void
    { _font = $; _init(); }
}