forked from: forked from: Box2D Magnet
forked from forked from: Box2D Magnet (diff: 8)
ActionScript3 source code
/**
* Copyright bradsedito ( http://wonderfl.net/user/bradsedito )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/9idu
*/
// forked from Antoan's forked from: Box2D Magnet
// forked from shapevent's Box2D Magnet
package
{
import flash.display.*;
import flash.events.*;
import flash.text.*;
import com.actionsnippet.qbox.*;
import Box2D.Common.Math.*;
public class FlashTest extends MovieClip
{
private var sim:QuickBox2D;
private var lab:TextField, out:TextField;
private var big:QuickObject, little:QuickObject, little2:QuickObject;
private var dir:b2Vec2, currVel:b2Vec2;
private var ang:Number, intensity:Number = 1;
// give 'intensity' a positive value if you want the magnet to attract objects and a negative if you want it to reject them
public function FlashTest()
{
sim = new QuickBox2D(this);
sim.createStageWalls();
big = sim.addCircle({x: 7, y: 7, radius: 0.0001, density: 0});
little = sim.addCircle({x : big.x, y: big.y, radius: 1});
// little2 = sim.addCircle({x : 3, y: 12, radius: 1, friction:5});
sim.start();
sim.mouseDrag();
addEventListener(Event.ENTER_FRAME, onLoop);
lab = new TextField();
lab.x = 50;
lab.y= 50;
lab.autoSize = "left";
lab.text = "set intensity:\n[enter positive values to attract, negative to reflect]";
addChild(lab);
out = new TextField();
out.x = lab.x+70;
out.y = 47;
out.type = "input";
out.border = true;
out.autoSize = "left";
out.text = String(intensity);
addChild(out);
}
// this is where the magnet code happens:
private function onLoop(e:Event):void
{
intensity = Number(out.text);
ang = Math.atan2(big.y-little.y, big.x-little.x);
currVel = little.body.GetLinearVelocity();
dir = new b2Vec2(currVel.x + intensity * Math.cos(ang), currVel.y + intensity * Math.sin(ang));
little.body.SetLinearVelocity(dir);
little2.body.SetLinearVelocity(dir);
}
}
}