Flade, opensource 2D physic engine

Today Davide shows to me this link to a new opensource project regarding Flash.
It’s a “free library for simulating 2D physics in Flash using Verlet integration. It currently features particles, stick & angular constraints, wheels, and surfaces composed of line segments. Designed primarily for games with a goal of speed and ease of use”
I immediately downloaded the available “alpha” release and made a first test..

Flade 2D physic engine
Title: Flade (0 click)
Caption: Flade 2D physic engine
Filename: flade.swf
Size: 5 KB

I don’t know if the project is still alive and which is the developement status, but it looks very promising.
…And here the code used for the example above:

var psystem = new ParticleSystem();
psystem.setDamping(1.0);
psystem.setGravity(0.0, 0.4);
// cooefficient of restitution
psystem.setKfr(0.1);
// surface friction for particles
psystem.setFriction(0.5);
// surfaces
var sA = new Surface(new Point(0, 0), new Point(1, 200));
sA.setIsOrientH(false);
psystem.addSurface(sA);
var s0 = new Surface(new Point(1, 200), new Point(100, 200));
psystem.addSurface(s0);
var s2 = new Surface(new Point(220, 170), new Point(300, 200));
psystem.addSurface(s2);
var s3 = new Surface(new Point(300, 200), new Point(400, 150));
psystem.addSurface(s3);
var sB = new Surface(new Point(399, 150), new Point(399, 0));
sB.setIsOrientH(false);
psystem.addSurface(sB);
// circle surface
var circA = new CircleSurface(170, 220, 70);
psystem.addSurface(circA);
var leftX  = 10;
var rightX = 50
var widthX = rightX - leftX;
var midX   = leftX + (widthX / 2);
var topY = 160;
// wheels
var wheelA = psystem.addWheel(leftX, topY, 10);
var wheelB = psystem.addWheel(rightX, topY, 10);
wheelA.coeffSlip = 0.0;
wheelB.coeffSlip = 0.0;
// body
var rectA = psystem.addRectangle(new Vector(midX, topY), widthX, 10);
// wheel struts
var conn1 = psystem.addConstraint(wheelA.wp, rectA.p3);
conn1.setRestLength(5);
var conn2 = psystem.addConstraint(wheelB.wp, rectA.p2);
conn2.setRestLength(5);
var conn1a = psystem.addConstraint(wheelA.wp, rectA.p0);
conn1a.setRestLength(5);
var conn2a = psystem.addConstraint(wheelB.wp, rectA.p1);
conn2a.setRestLength(5);
psystem.paintSurfaces();
this.onEnterFrame = function() {
var keySpeed = 2.0;
if(Key.isDown(Key.LEFT)) {
wheelA.rp.vs = -keySpeed;
wheelB.rp.vs = -keySpeed;
} else if(Key.isDown(Key.RIGHT)) {
wheelA.rp.vs = keySpeed;
wheelB.rp.vs = keySpeed;
} else {
wheelA.rp.vs = 0;
wheelB.rp.vs = 0;
}
if (Key.isDown(Key.UP)) {
if (ang.targetTheta < 2.9) ang.targetTheta += .1;
} else {
if (ang.targetTheta > angDefault) ang.targetTheta -= .1;
}
psystem.timeStep();
psystem.paintWheels();
psystem.paintConstraints();
}