protected function collision(obj1:Object, obj2:Object, isStatic:Boolean = true):Object {
/*
* Reverse the y coordinates, so that +y is in the up direction by subtracting from the application's height
* Initialize all other variables for ease of use later on
*/
var x1:Number = obj1.parent.x + obj1.parent.width/2;
var y1:Number = obj1.parent.y + obj1.parent.height/2;
var x2:Number = obj2.parent.x + obj2.parent.width/2;
var y2:Number = obj2.parent.y + obj2.parent.height/2;
var v1xi:Number = obj1.velocity.x;
var v1yi:Number = obj1.velocity.y;
var v2xi:Number = obj2.velocity.x;
var v2yi:Number = obj2.velocity.y;
var m1:Number = obj1.parent.mass;
var m2:Number = obj2.parent.mass;
trace("at_1: " + x1 + "," + y1 + " (" + obj1.parent.x + "," + obj1.parent.y + ")");
trace("at_2: " + x2 + "," + y2 + " (" + obj2.parent.x + "," + obj2.parent.y + ")");
trace("v_i: " + v2xi + "," + v2yi);
var dy:Number = x2-x1;
var dx:Number = y2-y1;
var angle:Number = Math.atan2(dy, dx);
// should always be true: if(dist < b1.rad + b2.rad) cause we're in hitTest
var cosa:Number = Math.cos(angle);
var sina:Number = Math.sin(angle);
var vx1p:Number = cosa*v1xi + sina*v1yi;
var vy1p:Number = cosa*v1yi - sina*v1xi;
var vx2p:Number = cosa*v2xi + sina*v2yi;
var vy2p:Number = cosa*v2yi - sina*v2xi;
var P:Number = vx1p*m1 + vx2p*m2;
var V:Number = vx1p - vx2p;
vx1p = (P-m2*V)/(m1+m2);
vx2p = V+vx1p;
obj2.velocity.x = cosa*vx2p - sina*vy2p;
obj2.velocity.y = cosa*vy2p + sina*vx2p;