And here are the actual effects themselves. It generates the actual effect:
function WhirlEmitter(point,color)
{
this.position = point; //Vector
this.velocity =Vector.fromAngle(0,.5); // Vector
this.spread = Math.PI/1; //possible angles = velocity +/- spread
this.drawColor ="#999"; // So we can tell them apart from Fields later
this.particleColor = color;
this.maxParticles = 100;
this.particleSize = 1;
this.numParticles = 0;
this.emissionRate = 1;
this.tether = rand(60,100);
}
WhirlEmitter.prototype.emit = function()
{
var angle =this.velocity.getAngle() + this.spread - (Math.random() * this.spread * 2);
var magnitude =this.velocity.getMagnitude();
var velocity = newVector(0,0);//Vector.fromAngle(angle, magnitude);
var position = newVector(this.position.x + velocity.x * 25, this.position.y + velocity.y * 25);
var particle = newParticle(position,velocity,new Vector(0,0),this.particleColor,2);
particle.action ="whirlParticle";
particle.particleColor =this.particleColor;//'rgb(' + rand(0,255) + ','+ rand(0,255) + ','+ rand(0,255)+ ')'
particle.tether =rand(1,360)/100;
particle.origin = newVector(this.position.x, this.position.y);
//this.position.x++;
return particle;
};
function whirlParticle(particle)
{
//alert(particle.life +":" + particle.tether);
var tmpX = particle.origin.x+ particle.radius * Math.cos(particle.tether);
var tmpY = particle.origin.y+ particle.radius * Math.sin(particle.tether);
particle.position = newVector(tmpX, tmpY);
particle.tether+=.25;
particle.particleSize-=.01;
if(particle.tether > 7)
{
particle.tether = .36;
particle.radius-=5;
}
if(particle.radius < 0 ||particle.particleSize <= 0)
{
return"";
}
return particle;
}