All pastes #960949 Raw Edit

Someone

public text v1 · immutable
#960949 ·published 2008-03-28 15:59 UTC
rendered paste body
function checkColl(b1, b2) {
	var dx = b2._x-b1._x;
	var dy = b2._y-b1._y;
	var dist = Math.sqrt(dx*dx+dy*dy);
	if (dist<b1.rad+b2.rad) {
		var angle = Math.atan2(dy, dx);
		cosa = Math.cos(angle);
		sina = Math.sin(angle);
		vx1p = cosa*b1.vx+sina*b1.vy;
		vy1p = cosa*b1.vy-sina*b1.vx;
		vx2p = cosa*b2.vx+sina*b2.vy;
		vy2p = cosa*b2.vy-sina*b2.vx;
		P = vx1p*b1.m+vx2p*b2.m;
		V = vx1p-vx2p;
		vx1p = (P-b2.m*V)/(b1.m+b2.m);
		vx2p = V+vx1p;
		b1.vx = cosa*vx1p-sina*vy1p;
		b1.vy = cosa*vy1p+sina*vx1p;
		b2.vx = cosa*vx2p-sina*vy2p;
		b2.vy = cosa*vy2p+sina*vx2p;
		diff = ((b1.rad+b2.rad)-dist)/2;
		cosd=cosa*diff;
		sind=sina*diff;
		b1._x -= cosd;
		b1._y -= sind;
		b2._x += cosd;
		b2._y += sind;
	}
}

		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;
           	obj1.velocity.x = cosa*vx1p - sina*vy1p;
           	obj1.velocity.y = cosa*vy1p + sina*vx1p;