I think i figured out how to calculate mass/force based on size. Also changed the center point of all movieclips.
Going to optimize this later and post it:
ActionScript Code:
package
{
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
public class Reclaimer3 extends Sprite
{
private var particlesCurrent:Number = 0;
private var particlesTotal:Number = 50;
private var particleSpeed:Number = 10;
private var particleFadeoutSpeed:Number = .0175;
private var particlesArray:Array;
private var radians:Number;
private var dx:Number;
private var dy:Number;
private var distSQ:Number;
private var dist:Number;
private var forceX:Number;
private var forceY:Number;
public function Reclaimer3():void
{
init();
}
private function init():void
{
radians = 180 / Math.PI;
particlesArray = [];
addEventListener(Event.ENTER_FRAME, onEnterFrameLoop);
thing1.addEventListener(MouseEvent.MOUSE_DOWN, onThingDown);
thing2.addEventListener(MouseEvent.MOUSE_DOWN, onThingDown);
thing3.addEventListener(MouseEvent.MOUSE_DOWN, onThingDown);
thing1.addEventListener(MouseEvent.MOUSE_UP, onThingUp);
thing2.addEventListener(MouseEvent.MOUSE_UP, onThingUp);
thing3.addEventListener(MouseEvent.MOUSE_UP, onThingUp);
}
private function onThingDown(event:MouseEvent):void
{
event.currentTarget.startDrag();
}
private function onThingUp(event:MouseEvent):void
{
event.currentTarget.stopDrag();
}
private function createParticle(target1:MovieClip, target2:MovieClip):void
{
if(particlesTotal <= particlesCurrent)
{
return;
}
particlesCurrent++;
var tempParticle:Particle = new Particle();
tempParticle.x = (target1.x - target1.width / 2) + (Math.random() * target1.width);
tempParticle.y = (target1.y - target1.height / 2) + (Math.random() * target1.height);
tempParticle.rotation = Math.random()*360;
tempParticle.rot = Math.atan2(target1.y - target2.y, target1.x - target2.x);
tempParticle.xSpeed = Math.cos(tempParticle.rot) * radians / particleSpeed;
tempParticle.ySpeed = Math.sin(tempParticle.rot) * radians / particleSpeed;
tempParticle.mass = tempParticle.width / 2 + tempParticle.height / 2;
particlesArray.push(tempParticle);
addChild(tempParticle);
}
private function updateParticle():void
{
for (var i = 0; i < particlesArray.length; i++)
{
var tempParticle:MovieClip = particlesArray[i];
tempParticle.x -= tempParticle.xSpeed;
tempParticle.y -= tempParticle.ySpeed;
tempParticle.alpha -= particleFadeoutSpeed;
dx = tempParticle.x - thing3.x;
dy = tempParticle.y - thing3.y;
distSQ = ((dx * dx) + (dy * dy));
//force = mass x acceleration
forceX = tempParticle.mass * tempParticle.xSpeed;
forceY = tempParticle.mass * tempParticle.ySpeed;
var thing3Mass:Number = (thing3.width / 2 + thing3.height / 2);
tempParticle.x += thing3Mass * (dx+forceX) / distSQ;
tempParticle.y += thing3Mass * (dy+forceY) / distSQ;
if(tempParticle.hitTestObject(thing2))
{
destroyParticle(tempParticle);
}
else if (tempParticle.alpha <= 0)
{
destroyParticle(tempParticle);
}
else if (tempParticle.x < 0)
{
destroyParticle(tempParticle);
}
else if (tempParticle.x > stage.stageWidth)
{
destroyParticle(tempParticle);
}
else if (tempParticle.y < 0)
{
destroyParticle(tempParticle);
}
else if (tempParticle.y > stage.stageHeight)
{
destroyParticle(tempParticle);
}
}
}
private function destroyParticle(particle:MovieClip):void
{
for (var i = 0; i < particlesArray.length; i++)
{
var tempParticle:MovieClip = particlesArray[i];
if (tempParticle == particle)
{
particlesCurrent--;
particlesArray.splice(i,1);
removeChild(tempParticle);
}
}
}
private function onEnterFrameLoop(event:Event):void
{
createParticle(thing1, thing2);
updateParticle();
}
}
}