forked from:Snow
// forked from UJI_UJI's code on 2008-12-26
// write as3 code here..
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.BlendMode;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Matrix;
import flash.geom.Point;
[SWF(width=465, height=465, backgroundColor=0x0, frameRate=120)]
public class fountain extends Sprite
{
private static const GRAVITY:Number = 20;
private static const DRAG:Number = 0.3;
private var canvas:BitmapData;
private var glow:BitmapData;
private var forceMap:BitmapData;
private var drip:Array;
public function fountain():void
{
this.canvas = new BitmapData(465,465,false,0x0);
this.addChild(new Bitmap(this.canvas)) as Bitmap;
this.drip = [];
this.addEventListener(Event.ENTER_FRAME,this.upDate);
}
public function emitParticle(ex:Number, ey:Number, s:Number = 1, vx:Number = 0, vy:Number = 0,c:int = 0xffffff):void
{
var p:dripParticle = new dripParticle();
p.x = ex;
p.y = ey;
p.vx = vx;
p.vy = vy;
p.s = s;
p.c = c;
this.drip.push(p);
}
public function upDate(e:Event):void
{
this.canvas.lock();
this.canvas.fillRect(this.canvas.rect, 0x0);
var n:int = this.drip.length;
var d:Number;
var gravity:Number = GRAVITY / 1000;
while (n--)
{
var p:dripParticle = this.drip[n];
p.vy += gravity * p.s;
p.x += p.vx;
p.y += p.vy;
p.c--;
this.canvas.setPixel32(p.x, p.y, p.c);
if (p.y > this.stage.stageHeight)
{
this.drip.splice(n, 1);
}
}
this.canvas.unlock();
n = 10;
while (n--)
{
this.emitParticle(465/2, 464, Math.random()+0.5, (Math.random() - 0.5)/2, -Math.random()-2);
}
}
}
}
class dripParticle
{
public var x:Number;
public var y:Number;
public var vx:Number;
public var vy:Number;
public var s:Number;
public var c:int;
public function dripParticle()
{
this.x = 0;
this.y = 0;
this.vx = 0;
this.vy = 0;
this.s = 1;
this.c = 0xffffffff;
}
}