Frame 1
CarExample.main(_root);
Symbol 4 MovieClip [fps] Frame 1
function calcFPS() {
numFrames++;
var _local3 = getTimer();
var _local2 = (_local3 - startTime) / 1000;
var _local1 = Math.round(numFrames / _local2);
fpsField.text = _local1;
}
var startTime = getTimer();
var numFrames = 0;
this.onEnterFrame = calcFPS;
Symbol 20480 MovieClip [__Packages.org.cove.flade.surfaces.AbstractTile] Frame 0
class org.cove.flade.surfaces.AbstractTile
{
var center, verts, normal, isVisible, isActivated, dmc, minX, maxX, minY, maxY;
function AbstractTile (cx, cy) {
center = new org.cove.flade.util.Vector(cx, cy);
verts = new Array();
normal = new org.cove.flade.util.Vector(0, 0);
isVisible = true;
isActivated = true;
initializeContainer();
}
function initializeContainer() {
var _local2 = _root.getNextHighestDepth();
var _local3 = "_" + _local2;
dmc = _root.createEmptyMovieClip(_local3, _local2);
}
function setVisible(v) {
isVisible = v;
}
function setActiveState(a) {
isActivated = a;
}
function getActiveState() {
return(isActivated);
}
function createBoundingRect(rw, rh) {
var _local4 = center.y - (rh / 2);
var _local5 = center.y + (rh / 2);
var _local6 = center.x - (rw / 2);
var _local7 = center.x + (rw / 2);
verts.push(new org.cove.flade.util.Vector(_local7, _local5));
verts.push(new org.cove.flade.util.Vector(_local7, _local4));
verts.push(new org.cove.flade.util.Vector(_local6, _local4));
verts.push(new org.cove.flade.util.Vector(_local6, _local5));
setCardProjections();
}
function testIntervals(boxMin, boxMax, tileMin, tileMax) {
if (boxMax < tileMin) {
return(0);
}
if (tileMax < boxMin) {
return(0);
}
var _local6 = tileMax - boxMin;
var _local7 = tileMin - boxMax;
if (Math.abs(_local6) < Math.abs(_local7)) {
return(_local6);
}
return(_local7);
}
function setCardProjections() {
getCardXProjection();
getCardYProjection();
}
function getCardXProjection() {
minX = verts[0].x;
var _local2 = 1;
for ( ; _local2 < verts.length ; _local2++) {
if (verts[_local2].x < minX) {
minX = verts[_local2].x;
}
}
maxX = verts[0].x;
var _local3 = 1;
for ( ; _local3 < verts.length ; _local3++) {
if (verts[_local3].x > maxX) {
maxX = verts[_local3].x;
}
}
}
function getCardYProjection() {
minY = verts[0].y;
var _local2 = 1;
for ( ; _local2 < verts.length ; _local2++) {
if (verts[_local2].y < minY) {
minY = verts[_local2].y;
}
}
maxY = verts[0].y;
var _local3 = 1;
for ( ; _local3 < verts.length ; _local3++) {
if (verts[_local3].y > maxY) {
maxY = verts[_local3].y;
}
}
}
function onContact() {
}
}
Symbol 20481 MovieClip [__Packages.org.cove.flade.surfaces.Surface] Frame 0
class org.cove.flade.surfaces.Surface
{
function Surface () {
}
}
Symbol 20482 MovieClip [__Packages.org.cove.flade.surfaces.RectangleTile] Frame 0
class org.cove.flade.surfaces.RectangleTile extends org.cove.flade.surfaces.AbstractTile implements org.cove.flade.surfaces.Surface
{
var rectWidth, rectHeight, createBoundingRect, isVisible, dmc, center, onContact, normal, testIntervals, minX, maxX, minY, maxY;
function RectangleTile (cx, cy, rw, rh) {
super(cx, cy);
rectWidth = rw;
rectHeight = rh;
createBoundingRect(rw, rh);
}
function paint() {
if (isVisible) {
dmc.clear();
dmc.lineStyle(0, 2237064, 100);
org.cove.flade.graphics.Graphics.paintRectangle(dmc, center.x, center.y, rectWidth, rectHeight);
}
}
function resolveCircleCollision(p, sysObj) {
if (isCircleColliding(p)) {
onContact();
p.resolveCollision(normal, sysObj);
}
}
function resolveRectangleCollision(p, sysObj) {
if (isRectangleColliding(p)) {
onContact();
p.resolveCollision(normal, sysObj);
}
}
function isCircleColliding(p) {
p.getCardXProjection();
var _local3 = testIntervals(p.bmin, p.bmax, minX, maxX);
if (_local3 == 0) {
return(false);
}
p.getCardYProjection();
var _local4 = testIntervals(p.bmin, p.bmax, minY, maxY);
if (_local4 == 0) {
return(false);
}
var _local5 = Math.abs(_local3) < p.radius;
var _local6 = Math.abs(_local4) < p.radius;
if (_local5 && (_local6)) {
var _local7 = center.x + (sign(p.curr.x - center.x) * (rectWidth / 2));
var _local8 = center.y + (sign(p.curr.y - center.y) * (rectHeight / 2));
var _local9 = p.curr.x - _local7;
var _local10 = p.curr.y - _local8;
var _local11 = Math.sqrt((_local9 * _local9) + (_local10 * _local10));
var _local12 = p.radius - _local11;
if (_local12 > 0) {
_local9 = _local9 / _local11;
_local10 = _local10 / _local11;
p.mtd.setTo(_local9 * _local12, _local10 * _local12);
normal.setTo(_local9, _local10);
return(true);
}
return(false);
}
p.setXYMTD(_local3, _local4);
normal.setTo(p.mtd.x / Math.abs(_local3), p.mtd.y / Math.abs(_local4));
return(true);
}
function isRectangleColliding(p) {
p.getCardXProjection();
var _local3 = testIntervals(p.bmin, p.bmax, minX, maxX);
if (_local3 == 0) {
return(false);
}
p.getCardYProjection();
var _local4 = testIntervals(p.bmin, p.bmax, minY, maxY);
if (_local4 == 0) {
return(false);
}
p.setXYMTD(_local3, _local4);
normal.setTo(p.mtd.x / Math.abs(_local3), p.mtd.y / Math.abs(_local4));
return(true);
}
function sign(val) {
if (val < 0) {
return(-1);
}
if (val > 0) {
return(1);
}
}
}
Symbol 20483 MovieClip [__Packages.org.cove.flade.surfaces.CircleTile] Frame 0
class org.cove.flade.surfaces.CircleTile extends org.cove.flade.surfaces.AbstractTile implements org.cove.flade.surfaces.Surface
{
var createBoundingRect, radius, isVisible, dmc, center, onContact, normal, testIntervals, minX, maxX, minY, maxY;
function CircleTile (cx, cy, r) {
super(cx, cy);
createBoundingRect(r * 2, r * 2);
radius = r;
}
function paint() {
if (isVisible) {
dmc.clear();
dmc.lineStyle(0, 2237064, 100);
org.cove.flade.graphics.Graphics.paintCircle(dmc, center.x, center.y, radius);
}
}
function resolveCircleCollision(p, sysObj) {
if (isCircleColliding(p)) {
onContact();
p.resolveCollision(normal, sysObj);
}
}
function resolveRectangleCollision(p, sysObj) {
if (isRectangleColliding(p)) {
onContact();
p.resolveCollision(normal, sysObj);
}
}
function isCircleColliding(p) {
p.getCardXProjection();
var _local3 = testIntervals(p.bmin, p.bmax, minX, maxX);
if (_local3 == 0) {
return(false);
}
p.getCardYProjection();
var _local4 = testIntervals(p.bmin, p.bmax, minY, maxY);
if (_local4 == 0) {
return(false);
}
var _local5 = center.x - p.curr.x;
var _local6 = center.y - p.curr.y;
var _local7 = Math.sqrt((_local5 * _local5) + (_local6 * _local6));
var _local8 = (p.radius + radius) - _local7;
if (_local8 > 0) {
_local5 = _local5 / _local7;
_local6 = _local6 / _local7;
p.mtd.setTo((-_local5) * _local8, (-_local6) * _local8);
normal.setTo(-_local5, -_local6);
return(true);
}
return(false);
}
function isRectangleColliding(p) {
p.getCardXProjection();
var _local3 = testIntervals(p.bmin, p.bmax, minX, maxX);
if (_local3 == 0) {
return(false);
}
p.getCardYProjection();
var _local4 = testIntervals(p.bmin, p.bmax, minY, maxY);
if (_local4 == 0) {
return(false);
}
var _local5 = Math.abs(_local3) < radius;
var _local6 = Math.abs(_local4) < radius;
if (_local5 && (_local6)) {
var _local7 = p.curr.x + (sign(center.x - p.curr.x) * (p.width / 2));
var _local8 = p.curr.y + (sign(center.y - p.curr.y) * (p.height / 2));
p.vertex.setTo(_local7, _local8);
var _local9 = p.vertex.x - center.x;
var _local10 = p.vertex.y - center.y;
var _local11 = Math.sqrt((_local9 * _local9) + (_local10 * _local10));
var _local12 = radius - _local11;
if (_local12 > 0) {
_local9 = _local9 / _local11;
_local10 = _local10 / _local11;
p.mtd.setTo(_local9 * _local12, _local10 * _local12);
normal.setTo(_local9, _local10);
return(true);
}
return(false);
}
p.setXYMTD(_local3, _local4);
normal.setTo(p.mtd.x / Math.abs(_local3), p.mtd.y / Math.abs(_local4));
return(true);
}
function sign(val) {
if (val < 0) {
return(-1);
}
if (val > 0) {
return(1);
}
}
}
Symbol 20484 MovieClip [__Packages.org.cove.flade.primitives.RimParticle] Frame 0
class org.cove.flade.primitives.RimParticle
{
var curr, prev, vs, speed, maxTorque, wr;
function RimParticle (r, mt) {
curr = new org.cove.flade.util.Vector(r, 0);
prev = new org.cove.flade.util.Vector(0, 0);
vs = 0;
speed = 0;
maxTorque = mt;
wr = r;
}
function verlet(sysObj) {
speed = Math.max(-maxTorque, Math.min(maxTorque, speed + vs));
var _local3 = -curr.y;
var _local4 = curr.x;
var _local5 = Math.sqrt((_local3 * _local3) + (_local4 * _local4));
_local3 = _local3 / _local5;
_local4 = _local4 / _local5;
curr.x = curr.x + (speed * _local3);
curr.y = curr.y + (speed * _local4);
var _local6 = prev.x;
var _local7 = prev.y;
var _local8 = (prev.x = curr.x);
var _local9 = (prev.y = curr.y);
curr.x = curr.x + (sysObj.coeffDamp * (_local8 - _local6));
curr.y = curr.y + (sysObj.coeffDamp * (_local9 - _local7));
var _local10 = Math.sqrt((curr.x * curr.x) + (curr.y * curr.y));
var _local11 = (_local10 - wr) / _local10;
curr.x = curr.x - (curr.x * _local11);
curr.y = curr.y - (curr.y * _local11);
}
}
Symbol 20485 MovieClip [__Packages.org.cove.flade.DynamicsEngine] Frame 0
class org.cove.flade.DynamicsEngine
{
var primitives, surfaces, constraints, gravity, coeffRest, coeffFric, coeffDamp;
function DynamicsEngine () {
primitives = new Array();
surfaces = new Array();
constraints = new Array();
gravity = new org.cove.flade.util.Vector(0, 1);
coeffRest = 1 + 0.5;
coeffFric = 0.01;
coeffDamp = 0.99;
}
function addPrimitive(p) {
primitives.push(p);
}
function addSurface(s) {
surfaces.push(s);
}
function addConstraint(c) {
constraints.push(c);
}
function paintSurfaces() {
var _local2 = 0;
for ( ; _local2 < surfaces.length ; _local2++) {
surfaces[_local2].paint();
}
}
function paintPrimitives() {
var _local2 = 0;
for ( ; _local2 < primitives.length ; _local2++) {
primitives[_local2].paint();
}
}
function paintConstraints() {
var _local2 = 0;
for ( ; _local2 < constraints.length ; _local2++) {
constraints[_local2].paint();
}
}
function timeStep() {
verlet();
satisfyConstraints();
checkCollisions();
}
function setSurfaceBounce(kfr) {
coeffRest = 1 + kfr;
}
function setSurfaceFriction(f) {
coeffFric = f;
}
function setDamping(d) {
coeffDamp = d;
}
function setGravity(gx, gy) {
gravity.x = gx;
gravity.y = gy;
}
function verlet() {
var _local2 = 0;
for ( ; _local2 < primitives.length ; _local2++) {
primitives[_local2].verlet(this);
}
}
function satisfyConstraints() {
var _local2 = 0;
for ( ; _local2 < constraints.length ; _local2++) {
constraints[_local2].resolve();
}
}
function checkCollisions() {
var _local2 = 0;
for ( ; _local2 < surfaces.length ; _local2++) {
var _local3 = surfaces[_local2];
if (_local3.getActiveState()) {
var _local4 = 0;
for ( ; _local4 < primitives.length ; _local4++) {
primitives[_local4].checkCollision(_local3, this);
}
}
}
}
}
Symbol 20486 MovieClip [__Packages.org.cove.flade.graphics.Graphics] Frame 0
class org.cove.flade.graphics.Graphics
{
function Graphics () {
}
static function paintLine(dmc, x0, y0, x1, y1) {
dmc.moveTo(x0, y0);
dmc.lineTo(x1, y1);
}
static function paintCircle(dmc, x, y, r) {
var _local6 = Math.tan(Math.PI / 8) * r;
var _local7 = Math.sin(Math.PI / 4) * r;
with (dmc) {
moveTo(x + r, y);
curveTo(r + x, _local6 + y, _local7 + x, _local7 + y);
curveTo(_local6 + x, r + y, x, r + y);
curveTo((-_local6) + x, r + y, (-_local7) + x, _local7 + y);
curveTo((-r) + x, _local6 + y, (-r) + x, y);
curveTo((-r) + x, (-_local6) + y, (-_local7) + x, (-_local7) + y);
curveTo((-_local6) + x, (-r) + y, x, (-r) + y);
curveTo(_local6 + x, (-r) + y, _local7 + x, (-_local7) + y);
curveTo(r + x, (-_local6) + y, r + x, y);
}
}
static function paintRectangle(dmc, x, y, w, h) {
var _local7 = w / 2;
var _local8 = h / 2;
with (dmc) {
moveTo(x - _local7, y - _local8);
lineTo(x + _local7, y - _local8);
lineTo(x + _local7, y + _local8);
lineTo(x - _local7, y + _local8);
lineTo(x - _local7, y - _local8);
}
}
}
Symbol 20487 MovieClip [__Packages.org.cove.flade.util.Line] Frame 0
class org.cove.flade.util.Line
{
var p1, p2;
function Line (p1, p2) {
this.p1 = p1;
this.p2 = p2;
}
}
Symbol 20488 MovieClip [__Packages.org.cove.flade.constraints.Constraint] Frame 0
class org.cove.flade.constraints.Constraint
{
function Constraint () {
}
}
Symbol 20489 MovieClip [__Packages.org.cove.flade.constraints.SpringConstraint] Frame 0
class org.cove.flade.constraints.SpringConstraint implements org.cove.flade.constraints.Constraint
{
var p1, p2, restLength, stiffness, color, isVisible, dmc;
function SpringConstraint (p1, p2) {
this.p1 = p1;
this.p2 = p2;
restLength = p1.curr.distance(p2.curr);
stiffness = 0.5;
color = 10053171 /* 0x996633 */;
initializeContainer();
isVisible = true;
}
function initializeContainer() {
var _local2 = _root.getNextHighestDepth();
var _local3 = "_" + _local2;
dmc = _root.createEmptyMovieClip(_local3, _local2);
}
function resolve() {
var _local2 = p1.curr.minusNew(p2.curr);
var _local3 = p1.curr.distance(p2.curr);
var _local4 = (_local3 - restLength) / _local3;
var _local5 = _local2.mult(_local4 * stiffness);
p1.curr.minus(_local5);
p2.curr.plus(_local5);
}
function setRestLength(r) {
restLength = r;
}
function setStiffness(s) {
stiffness = s;
}
function setVisible(v) {
isVisible = v;
}
function paint() {
if (isVisible) {
dmc.clear();
dmc.lineStyle(0, color, 100);
org.cove.flade.graphics.Graphics.paintLine(dmc, p1.curr.x, p1.curr.y, p2.curr.x, p2.curr.y);
}
}
}
Symbol 20490 MovieClip [__Packages.org.cove.flade.surfaces.LineSurface] Frame 0
class org.cove.flade.surfaces.LineSurface extends org.cove.flade.surfaces.AbstractTile implements org.cove.flade.surfaces.Surface
{
var p1, p2, collNormal, isVisible, dmc, onContact, faceNormal, collisionDepth, testIntervals, minY, maxY, minX, maxX, sideNormal, minS, maxS, minF, maxF, rise, run, sign, slope, invB, setCardProjections, p3, p4, verts;
function LineSurface (p1x, p1y, p2x, p2y) {
super(0, 0);
p1 = new org.cove.flade.util.Vector(p1x, p1y);
p2 = new org.cove.flade.util.Vector(p2x, p2y);
calcFaceNormal();
collNormal = new org.cove.flade.util.Vector(0, 0);
setCollisionDepth(30);
}
function paint() {
if (isVisible) {
dmc.clear();
dmc.lineStyle(0, 2237064, 100);
org.cove.flade.graphics.Graphics.paintLine(dmc, p1.x, p1.y, p2.x, p2.y);
}
}
function resolveCircleCollision(p, sysObj) {
if (isCircleColliding(p)) {
onContact();
p.resolveCollision(faceNormal, sysObj);
}
}
function resolveRectangleCollision(p, sysObj) {
if (isRectangleColliding(p)) {
onContact();
p.resolveCollision(collNormal, sysObj);
}
}
function setCollisionDepth(d) {
collisionDepth = d;
precalculate();
}
function isCircleColliding(p) {
findClosestPoint(p.curr, p.closestPoint);
var _local3 = p.closestPoint.minusNew(p.curr);
_local3.normalize();
if (inequality(p.curr)) {
var _local4 = Math.abs(_local3.x);
_local3.x = ((faceNormal.x < 0) ? (_local4) : (-_local4));
_local3.y = Math.abs(_local3.y);
}
var _local5 = p.curr.plusNew(_local3.mult(p.radius));
if (segmentInequality(_local5)) {
if (_local5.distance(p.closestPoint) > collisionDepth) {
return(false);
}
var _local6 = _local5.x - p.closestPoint.x;
var _local7 = _local5.y - p.closestPoint.y;
p.mtd.setTo(-_local6, -_local7);
return(true);
}
return(false);
}
function isRectangleColliding(p) {
p.getCardYProjection();
var _local3 = testIntervals(p.bmin, p.bmax, minY, maxY);
if (_local3 == 0) {
return(false);
}
p.getCardXProjection();
var _local4 = testIntervals(p.bmin, p.bmax, minX, maxX);
if (_local4 == 0) {
return(false);
}
p.getAxisProjection(sideNormal);
var _local5 = testIntervals(p.bmin, p.bmax, minS, maxS);
if (_local5 == 0) {
return(false);
}
p.getAxisProjection(faceNormal);
var _local6 = testIntervals(p.bmin, p.bmax, minF, maxF);
if (_local6 == 0) {
return(false);
}
var _local7 = Math.abs(_local4);
var _local8 = Math.abs(_local3);
var _local9 = Math.abs(_local5);
var _local10 = Math.abs(_local6);
if ((_local7 <= _local8) && ((_local7 <= _local9) && (_local7 <= _local10))) {
p.mtd.setTo(_local4, 0);
collNormal.setTo(p.mtd.x / _local7, 0);
} else if ((_local8 <= _local7) && ((_local8 <= _local9) && (_local8 <= _local10))) {
p.mtd.setTo(0, _local3);
collNormal.setTo(0, p.mtd.y / _local8);
} else if ((_local10 <= _local7) && ((_local10 <= _local8) && (_local10 <= _local9))) {
p.mtd = faceNormal.multNew(_local6);
collNormal.copy(faceNormal);
} else if ((_local9 <= _local7) && ((_local9 <= _local8) && (_local9 <= _local10))) {
p.mtd = sideNormal.multNew(_local5);
collNormal.copy(sideNormal);
}
return(true);
}
function precalculate() {
rise = p2.y - p1.y;
run = p2.x - p1.x;
sign = ((run >= 0) ? 1 : -1);
slope = rise / run;
invB = 1 / ((run * run) + (rise * rise));
createRectangle();
calcSideNormal();
setCardProjections();
setAxisProjections();
}
function calcFaceNormal() {
faceNormal = new org.cove.flade.util.Vector(0, 0);
var _local2 = p2.x - p1.x;
var _local3 = p2.y - p1.y;
faceNormal.setTo(_local3, -_local2);
faceNormal.normalize();
}
function segmentInequality(toPoint) {
var _local3 = findU(toPoint);
var _local4 = inequality(toPoint);
return((_local3 >= 0) && ((_local3 <= 1) && (_local4)));
}
function inequality(toPoint) {
var _local3 = ((slope * (toPoint.x - p1.x)) + (p1.y - toPoint.y)) * sign;
return(_local3 <= 0);
}
function findClosestPoint(toPoint, returnVect) {
var _local4 = findU(toPoint);
if (_local4 <= 0) {
returnVect.copy(p1);
return(undefined);
}
if (_local4 >= 1) {
returnVect.copy(p2);
return(undefined);
}
var _local5 = p1.x + (_local4 * (p2.x - p1.x));
var _local6 = p1.y + (_local4 * (p2.y - p1.y));
returnVect.setTo(_local5, _local6);
}
function findU(p) {
var _local3 = ((p.x - p1.x) * run) + ((p.y - p1.y) * rise);
return(_local3 * invB);
}
function createRectangle() {
var _local2 = p2.x + ((-faceNormal.x) * collisionDepth);
var _local3 = p2.y + ((-faceNormal.y) * collisionDepth);
var _local4 = p1.x + ((-faceNormal.x) * collisionDepth);
var _local5 = p1.y + ((-faceNormal.y) * collisionDepth);
p3 = new org.cove.flade.util.Vector(_local2, _local3);
p4 = new org.cove.flade.util.Vector(_local4, _local5);
verts.push(p1);
verts.push(p2);
verts.push(p3);
verts.push(p4);
}
function setAxisProjections() {
minF = p2.dot(faceNormal);
maxF = p3.dot(faceNormal);
if (minF > maxF) {
var _local2 = minF;
minF = maxF;
maxF = _local2;
}
minS = p1.dot(sideNormal);
maxS = p2.dot(sideNormal);
if (minS > maxS) {
var _local2 = minS;
minS = maxS;
maxS = _local2;
}
}
function calcSideNormal() {
sideNormal = new org.cove.flade.util.Vector(0, 0);
var _local2 = p3.x - p2.x;
var _local3 = p3.y - p2.y;
sideNormal.setTo(_local3, -_local2);
sideNormal.normalize();
}
}
Symbol 20491 MovieClip [__Packages.org.cove.flade.primitives.Particle] Frame 0
class org.cove.flade.primitives.Particle
{
var init, curr, prev, temp, extents, bmin, bmax, mtd, isVisible, dmc;
function Particle (posX, posY) {
init = new org.cove.flade.util.Vector(posX, posY);
curr = new org.cove.flade.util.Vector(posX, posY);
prev = new org.cove.flade.util.Vector(posX, posY);
temp = new org.cove.flade.util.Vector(0, 0);
extents = new org.cove.flade.util.Vector(0, 0);
bmin = 0;
bmax = 0;
mtd = new org.cove.flade.util.Vector(0, 0);
initializeContainer();
isVisible = true;
}
function initializeContainer() {
var _local2 = _root.getNextHighestDepth();
var _local3 = "_" + _local2;
dmc = _root.createEmptyMovieClip(_local3, _local2);
}
function setVisible(v) {
isVisible = v;
}
function verlet(sysObj) {
temp.x = curr.x;
temp.y = curr.y;
curr.x = curr.x + ((sysObj.coeffDamp * (curr.x - prev.x)) + sysObj.gravity.x);
curr.y = curr.y + ((sysObj.coeffDamp * (curr.y - prev.y)) + sysObj.gravity.y);
prev.x = temp.x;
prev.y = temp.y;
}
function pin() {
curr.x = init.x;
curr.y = init.y;
prev.x = init.x;
prev.y = init.y;
}
function setPos(px, py) {
curr.x = px;
curr.y = py;
prev.x = px;
prev.y = py;
}
function getCardXProjection() {
bmin = curr.x - extents.x;
bmax = curr.x + extents.x;
}
function getCardYProjection() {
bmin = curr.y - extents.y;
bmax = curr.y + extents.y;
}
function getAxisProjection(axis) {
var _local3 = new org.cove.flade.util.Vector(Math.abs(axis.x), Math.abs(axis.y));
var _local4 = curr.dot(axis);
var _local5 = extents.dot(_local3);
bmin = _local4 - _local5;
bmax = _local4 + _local5;
}
function setMTD(depthX, depthY, depthN, surfNormal) {
var _local6 = Math.abs(depthX);
var _local7 = Math.abs(depthY);
var _local8 = Math.abs(depthN);
if ((_local6 < _local7) && (_local6 < _local8)) {
mtd.setTo(depthX, 0);
} else if ((_local7 < _local6) && (_local7 < _local8)) {
mtd.setTo(0, depthY);
} else if ((_local8 < _local6) && (_local8 < _local7)) {
mtd = surfNormal.multNew(depthN);
}
}
function setXYMTD(depthX, depthY) {
var _local4 = Math.abs(depthX);
var _local5 = Math.abs(depthY);
if (_local4 < _local5) {
mtd.setTo(depthX, 0);
} else {
mtd.setTo(0, depthY);
}
}
function resolveCollision(normal, sysObj) {
var _local4 = curr.minusNew(prev);
var _local5 = normal.dot(_local4);
var _local6 = _local4.minusNew(normal.multNew(_local5));
var _local7 = _local6.multNew(sysObj.coeffFric);
var _local8 = normal.multNew(_local5 * sysObj.coeffRest);
var _local9 = _local8.plusNew(_local7);
var _local10 = _local4.minusNew(_local9);
curr.plus(mtd);
prev = curr.minusNew(_local10);
}
function paint() {
}
function checkCollision(surface, sysObj) {
}
}
Symbol 20492 MovieClip [__Packages.org.cove.flade.primitives.CircleParticle] Frame 0
class org.cove.flade.primitives.CircleParticle extends org.cove.flade.primitives.Particle
{
var radius, contactRadius, extents, closestPoint, dmc, curr;
function CircleParticle (px, py, r) {
super(px, py);
radius = r;
contactRadius = r;
extents = new org.cove.flade.util.Vector(r, r);
closestPoint = new org.cove.flade.util.Vector(0, 0);
}
function paint() {
dmc.clear();
dmc.lineStyle(0, 6710886, 100);
org.cove.flade.graphics.Graphics.paintCircle(dmc, curr.x, curr.y, radius);
}
function checkCollision(surface, sysObj) {
surface.resolveCircleCollision(this, sysObj);
}
}
Symbol 20493 MovieClip [__Packages.org.cove.flade.primitives.Wheel] Frame 0
class org.cove.flade.primitives.Wheel extends org.cove.flade.primitives.CircleParticle
{
var rp, coeffSlip, isVisible, curr, dmc, radius, prev;
function Wheel (x, y, r) {
super(x, y, r);
rp = new org.cove.flade.primitives.RimParticle(r, 2);
coeffSlip = 0;
}
function verlet(sysObj) {
rp.verlet(sysObj);
super.verlet(sysObj);
}
function resolveCollision(normal, sysObj) {
super.resolveCollision(normal, sysObj);
resolve(normal);
}
function paint() {
if (isVisible) {
var _local2 = curr.x;
var _local3 = curr.y;
var _local4 = rp.curr.x;
var _local5 = rp.curr.y;
dmc.clear();
dmc.lineStyle(0, 2237064, 100);
org.cove.flade.graphics.Graphics.paintCircle(dmc, _local2, _local3, radius);
dmc.lineStyle(0, 10066329, 100);
org.cove.flade.graphics.Graphics.paintLine(dmc, _local4 + _local2, _local5 + _local3, _local2, _local3);
org.cove.flade.graphics.Graphics.paintLine(dmc, (-_local4) + _local2, (-_local5) + _local3, _local2, _local3);
org.cove.flade.graphics.Graphics.paintLine(dmc, (-_local5) + _local2, _local4 + _local3, _local2, _local3);
org.cove.flade.graphics.Graphics.paintLine(dmc, _local5 + _local2, (-_local4) + _local3, _local2, _local3);
}
}
function setTraction(t) {
coeffSlip = t;
}
function resolve(n) {
var _local3 = -rp.curr.y;
var _local4 = rp.curr.x;
var _local5 = Math.sqrt((_local3 * _local3) + (_local4 * _local4));
_local3 = _local3 / _local5;
_local4 = _local4 / _local5;
var _local6 = _local3 * rp.speed;
var _local7 = _local4 * rp.speed;
var _local8 = curr.x - prev.x;
var _local9 = curr.y - prev.y;
var _local10 = _local8 + _local6;
var _local11 = _local9 + _local7;
var _local12 = ((-n.y) * _local10) + (n.x * _local11);
rp.prev.x = rp.curr.x - (_local12 * _local3);
rp.prev.y = rp.curr.y - (_local12 * _local4);
var _local13 = 1 - coeffSlip;
curr.x = curr.x + ((_local13 * rp.speed) * (-n.y));
curr.y = curr.y + ((_local13 * rp.speed) * n.x);
rp.speed = rp.speed * coeffSlip;
}
}
Symbol 20494 MovieClip [__Packages.org.cove.flade.util.Vector] Frame 0
class org.cove.flade.util.Vector
{
var x, y;
function Vector (px, py) {
x = px;
y = py;
}
function setTo(px, py) {
x = px;
y = py;
}
function copy(v) {
x = v.x;
y = v.y;
}
function dot(v) {
return((x * v.x) + (y * v.y));
}
function cross(v) {
return((x * v.y) - (y * v.x));
}
function plus(v) {
x = x + v.x;
y = y + v.y;
return(this);
}
function plusNew(v) {
return(new org.cove.flade.util.Vector(x + v.x, y + v.y));
}
function minus(v) {
x = x - v.x;
y = y - v.y;
return(this);
}
function minusNew(v) {
return(new org.cove.flade.util.Vector(x - v.x, y - v.y));
}
function mult(s) {
x = x * s;
y = y * s;
return(this);
}
function multNew(s) {
return(new org.cove.flade.util.Vector(x * s, y * s));
}
function distance(v) {
var _local3 = x - v.x;
var _local4 = y - v.y;
return(Math.sqrt((_local3 * _local3) + (_local4 * _local4)));
}
function normalize() {
var _local2 = Math.sqrt((x * x) + (y * y));
x = x / _local2;
y = y / _local2;
return(this);
}
function magnitude() {
return(Math.sqrt((x * x) + (y * y)));
}
function project(b) {
var _local3 = dot(b);
var _local4 = (b.x * b.x) + (b.y * b.y);
var _local5 = new org.cove.flade.util.Vector(0, 0);
_local5.x = (_local3 / _local4) * b.x;
_local5.y = (_local3 / _local4) * b.y;
return(_local5);
}
}
Symbol 20495 MovieClip [__Packages.org.cove.flade.primitives.RectangleParticle] Frame 0
class org.cove.flade.primitives.RectangleParticle extends org.cove.flade.primitives.Particle
{
var width, height, vertex, extents, isVisible, dmc, curr;
function RectangleParticle (px, py, w, h) {
super(px, py);
width = w;
height = h;
vertex = new org.cove.flade.util.Vector(0, 0);
extents = new org.cove.flade.util.Vector(w / 2, h / 2);
}
function paint() {
if (isVisible) {
dmc.clear();
dmc.lineStyle(0, 6710886, 100);
org.cove.flade.graphics.Graphics.paintRectangle(dmc, curr.x, curr.y, width, height);
}
}
function checkCollision(surface, sysObj) {
surface.resolveRectangleCollision(this, sysObj);
}
}
Symbol 20496 MovieClip [__Packages.CarExample] Frame 0
class CarExample
{
var engine, wheelA, wheelB, ang, angDefault;
function CarExample () {
engine = new org.cove.flade.DynamicsEngine();
engine.setDamping(1);
engine.setGravity(0, 0.5);
engine.setSurfaceBounce(0.1);
engine.setSurfaceFriction(0.1);
engine.addSurface(new org.cove.flade.surfaces.RectangleTile(15, 300, 20, 100));
var _local2 = new org.cove.flade.surfaces.LineSurface(25, 350, 150, 350);
engine.addSurface(_local2);
engine.addSurface(new org.cove.flade.surfaces.LineSurface(150, 350, 250, 300));
engine.addSurface(new org.cove.flade.surfaces.RectangleTile(300, 308, 100, 15));
engine.addSurface(new org.cove.flade.surfaces.LineSurface(350, 300, 460, 250));
engine.addSurface(new org.cove.flade.surfaces.RectangleTile(528, 252, 135, 20));
var toggleLine = (new org.cove.flade.surfaces.LineSurface(220, 150, 460, 248));
toggleLine.setActiveState(false);
engine.addSurface(toggleLine);
_local2.onContact = function () {
toggleLine.setActiveState(false);
};
var _local3 = new org.cove.flade.surfaces.RectangleTile(580, 217, 30, 90);
_local3.onContact = function () {
toggleLine.setActiveState(true);
};
engine.addSurface(_local3);
engine.addSurface(new org.cove.flade.surfaces.CircleTile(185, 155, 35));
engine.addSurface(new org.cove.flade.surfaces.RectangleTile(100, 108, 100, 15));
engine.addSurface(new org.cove.flade.surfaces.LineSurface(5, 20, 5, 275));
engine.addSurface(new org.cove.flade.surfaces.CircleTile(32, 195, 26));
var _local4 = 70;
var _local5 = 130;
var _local6 = _local5 - _local4;
var _local7 = _local4 + (_local6 / 2);
var _local8 = 300;
wheelA = new org.cove.flade.primitives.Wheel(_local4, _local8, 20);
engine.addPrimitive(wheelA);
wheelB = new org.cove.flade.primitives.Wheel(_local5, _local8, 20);
engine.addPrimitive(wheelB);
var _local9 = new org.cove.flade.composites.SpringBox(_local7, _local8, _local6, 15, engine);
var _local10 = new org.cove.flade.constraints.SpringConstraint(wheelA, _local9.p3);
engine.addConstraint(_local10);
var _local11 = new org.cove.flade.constraints.SpringConstraint(wheelB, _local9.p2);
engine.addConstraint(_local11);
var _local12 = new org.cove.flade.constraints.SpringConstraint(wheelA, _local9.p0);
engine.addConstraint(_local12);
var _local13 = new org.cove.flade.constraints.SpringConstraint(wheelB, _local9.p1);
engine.addConstraint(_local13);
var _local14 = new org.cove.flade.primitives.CircleParticle(_local7, _local8 - 25, 2, 2);
engine.addPrimitive(_local14);
var _local15 = new org.cove.flade.constraints.SpringConstraint(wheelA, _local14);
engine.addConstraint(_local15);
var _local16 = new org.cove.flade.constraints.SpringConstraint(wheelB, _local14);
engine.addConstraint(_local16);
ang = new org.cove.flade.constraints.AngularConstraint(wheelA, _local14, wheelB);
engine.addConstraint(ang);
angDefault = ang.targetTheta;
var _local17 = new org.cove.flade.primitives.RectangleParticle(_local7, _local8 - 20, 1, 1);
engine.addPrimitive(_local17);
var _local18 = new org.cove.flade.constraints.SpringConstraint(_local14, _local17);
_local18.setRestLength(7);
engine.addConstraint(_local18);
var _local19 = new org.cove.flade.primitives.RectangleParticle(_local7, _local8 - 10, 1, 1);
engine.addPrimitive(_local19);
var _local20 = new org.cove.flade.constraints.SpringConstraint(_local17, _local19);
_local20.setRestLength(7);
engine.addConstraint(_local20);
var _local21 = new org.cove.flade.primitives.RectangleParticle(_local7, _local8 - 5, 7, 7);
engine.addPrimitive(_local21);
var _local22 = new org.cove.flade.constraints.SpringConstraint(_local19, _local21);
_local22.setRestLength(7);
engine.addConstraint(_local22);
engine.paintSurfaces();
}
function run() {
var _local2 = 2;
if (Key.isDown(Key.LEFT)) {
wheelA.rp.vs = -_local2;
wheelB.rp.vs = -_local2;
} else if (Key.isDown(Key.RIGHT)) {
wheelA.rp.vs = _local2;
wheelB.rp.vs = _local2;
} else {
wheelA.rp.vs = 0;
wheelB.rp.vs = 0;
}
if (Key.isDown(Key.UP)) {
if (ang.targetTheta < 2.5) {
ang.targetTheta = ang.targetTheta + 0.1;
}
} else if (ang.targetTheta > angDefault) {
ang.targetTheta = ang.targetTheta - 0.1;
}
engine.timeStep();
engine.paintPrimitives();
engine.paintConstraints();
}
static function main(mc) {
var c = new CarExample();
var _local3 = mc.attachMovie("fps", "fps", _root.getNextHighestDepth());
_local3._x = 6;
_local3._y = 6;
mc.onEnterFrame = function () {
c.run();
};
}
//ASSetPropFlags(_local1, null, 1);
}
Symbol 20497 MovieClip [__Packages.org.cove.flade.composites.SpringBox] Frame 0
class org.cove.flade.composites.SpringBox
{
var p0, p1, p2, p3;
function SpringBox (px, py, w, h, engine) {
p0 = new org.cove.flade.primitives.RectangleParticle(px - (w / 2), py - (h / 2), 1, 1);
p1 = new org.cove.flade.primitives.RectangleParticle(px + (w / 2), py - (h / 2), 1, 1);
p2 = new org.cove.flade.primitives.RectangleParticle(px + (w / 2), py + (h / 2), 1, 1);
p3 = new org.cove.flade.primitives.RectangleParticle(px - (w / 2), py + (h / 2), 1, 1);
p0.setVisible(false);
p1.setVisible(false);
p2.setVisible(false);
p3.setVisible(false);
engine.addPrimitive(p0);
engine.addPrimitive(p1);
engine.addPrimitive(p2);
engine.addPrimitive(p3);
engine.addConstraint(new org.cove.flade.constraints.SpringConstraint(p0, p1));
engine.addConstraint(new org.cove.flade.constraints.SpringConstraint(p1, p2));
engine.addConstraint(new org.cove.flade.constraints.SpringConstraint(p2, p3));
engine.addConstraint(new org.cove.flade.constraints.SpringConstraint(p3, p0));
engine.addConstraint(new org.cove.flade.constraints.SpringConstraint(p0, p2));
engine.addConstraint(new org.cove.flade.constraints.SpringConstraint(p1, p3));
}
}
Symbol 20498 MovieClip [__Packages.org.cove.flade.constraints.AngularConstraint] Frame 0
class org.cove.flade.constraints.AngularConstraint implements org.cove.flade.constraints.Constraint
{
var pA, pB, pC, lineA, lineB, pD, lineC, targetTheta, stiffness;
function AngularConstraint (p1, p2, p3) {
pA = p1.curr;
pB = p2.curr;
pC = p3.curr;
lineA = new org.cove.flade.util.Line(pA, pB);
lineB = new org.cove.flade.util.Line(pB, pC);
pD = new org.cove.flade.util.Vector(pB.x + 0, pB.y - 1);
lineC = new org.cove.flade.util.Line(pB, pD);
targetTheta = calcTheta(pA, pB, pC);
stiffness = 1;
}
function resolve() {
var _local2 = getCentroid();
lineC.p2.x = lineC.p1.x + 0;
lineC.p2.y = lineC.p1.y - 1;
var _local3 = pA.distance(pB);
var _local4 = pB.distance(pC);
var _local5 = calcTheta(pA, pB, pC);
var _local6 = calcTheta(pA, pB, pD);
var _local7 = calcTheta(pC, pB, pD);
var _local8 = (targetTheta - _local5) / 2;
var _local9 = _local6 + (_local8 * stiffness);
var _local10 = _local7 - (_local8 * stiffness);
pA.x = (_local3 * Math.sin(_local9)) + pB.x;
pA.y = (_local3 * Math.cos(_local9)) + pB.y;
pC.x = (_local4 * Math.sin(_local10)) + pB.x;
pC.y = (_local4 * Math.cos(_local10)) + pB.y;
var _local11 = getCentroid();
var _local12 = _local11.x - _local2.x;
var _local13 = _local11.y - _local2.y;
pA.x = pA.x - _local12;
pA.y = pA.y - _local13;
pB.x = pB.x - _local12;
pB.y = pB.y - _local13;
pC.x = pC.x - _local12;
pC.y = pC.y - _local13;
}
function paint() {
}
function setStiffness(s) {
stiffness = s;
}
function calcTheta(pa, pb, pc) {
var _local5 = new org.cove.flade.util.Vector(pb.x - pa.x, pb.y - pa.y);
var _local6 = new org.cove.flade.util.Vector(pc.x - pb.x, pc.y - pb.y);
var _local7 = _local5.dot(_local6);
var _local8 = _local5.cross(_local6);
return(Math.atan2(_local8, _local7));
}
function getCentroid() {
var _local2 = ((pA.x + pB.x) + pC.x) / 3;
var _local3 = ((pA.y + pB.y) + pC.y) / 3;
return(new org.cove.flade.util.Vector(_local2, _local3));
}
}