diff --git a/examples/example 24 - Box2D Integration/box2d.min.js b/examples/example 24 - Box2D Integration/box2d.min.js new file mode 100644 index 0000000..1b579fd --- /dev/null +++ b/examples/example 24 - Box2D Integration/box2d.min.js @@ -0,0 +1,112 @@ +var b2Settings=function(){};b2Settings.prototype={};b2Settings.USHRT_MAX=65535;b2Settings.b2_pi=Math.PI;b2Settings.b2_massUnitsPerKilogram=1;b2Settings.b2_timeUnitsPerSecond=1;b2Settings.b2_lengthUnitsPerMeter=30;b2Settings.b2_maxManifoldPoints=2;b2Settings.b2_maxShapesPerBody=64;b2Settings.b2_maxPolyVertices=8;b2Settings.b2_maxProxies=1024;b2Settings.b2_maxPairs=8*b2Settings.b2_maxProxies;b2Settings.b2_linearSlop=0.005*b2Settings.b2_lengthUnitsPerMeter;b2Settings.b2_angularSlop=2/180*b2Settings.b2_pi;b2Settings.b2_velocityThreshold=1*b2Settings.b2_lengthUnitsPerMeter/b2Settings.b2_timeUnitsPerSecond;b2Settings.b2_maxLinearCorrection=0.2*b2Settings.b2_lengthUnitsPerMeter;b2Settings.b2_maxAngularCorrection=8/180*b2Settings.b2_pi;b2Settings.b2_contactBaumgarte=0.2;b2Settings.b2_timeToSleep=0.5*b2Settings.b2_timeUnitsPerSecond;b2Settings.b2_linearSleepTolerance=0.01*b2Settings.b2_lengthUnitsPerMeter/b2Settings.b2_timeUnitsPerSecond;b2Settings.b2_angularSleepTolerance=2/180/b2Settings.b2_timeUnitsPerSecond; +b2Settings.b2Assert=function(b){if(!b){var c;c.x++}};Object.extend=function(a,c){for(var b in c){a[b]=c[b]}return a};var b2Vec2=function(a,b){this.x=a;this.y=b};b2Vec2.prototype={SetZero:function(){this.x=0;this.y=0},Set:function(a,b){this.x=a;this.y=b},SetV:function(a){this.x=a.x;this.y=a.y},Negative:function(){return new b2Vec2(-this.x,-this.y)},Copy:function(){return new b2Vec2(this.x,this.y)},Add:function(a){this.x+=a.x;this.y+=a.y},Subtract:function(a){this.x-=a.x;this.y-=a.y},Multiply:function(b){this.x*=b;this.y*=b},MulM:function(b){var a=this.x;this.x=b.col1.x*a+b.col2.x*this.y;this.y=b.col1.y*a+b.col2.y*this.y},MulTM:function(b){var a=b2Math.b2Dot(this,b.col1);this.y=b2Math.b2Dot(this,b.col2);this.x=a},CrossVF:function(b){var a=this.x;this.x=b*this.y;this.y=-b*a},CrossFV:function(b){var a=this.x;this.x=-b*this.y;this.y=b*a},MinV:function(a){this.x=this.xa.x?this.x:a.x;this.y=this.y>a.y?this.y:a.y},Abs:function(){this.x=Math.abs(this.x);this.y=Math.abs(this.y)},Length:function(){return Math.sqrt(this.x*this.x+this.y*this.y) +},Normalize:function(){var b=this.Length();if(b0?b:-b};b2Math.b2AbsV=function(d){var c=new b2Vec2(b2Math.b2Abs(d.x),b2Math.b2Abs(d.y));return c};b2Math.b2AbsM=function(a){var b=new b2Mat22(0,b2Math.b2AbsV(a.col1),b2Math.b2AbsV(a.col2));return b};b2Math.b2Min=function(d,c){return dc?d:c};b2Math.b2MaxV=function(e,d){var f=new b2Vec2(b2Math.b2Max(e.x,d.x),b2Math.b2Max(e.y,d.y));return f};b2Math.b2Clamp=function(c,b,d){return b2Math.b2Max(b,b2Math.b2Min(c,d))};b2Math.b2ClampV=function(c,b,d){return b2Math.b2MaxV(b,b2Math.b2MinV(c,d))};b2Math.b2Swap=function(d,c){var e=d[0];d[0]=c[0];c[0]=e};b2Math.b2Random=function(){return Math.random()*2-1};b2Math.b2NextPowerOfTwo=function(a){a|=(a>>1)&2147483647;a|=(a>>2)&1073741823;a|=(a>>4)&268435455;a|=(a>>8)&16777215; +a|=(a>>16)&65535;return a+1};b2Math.b2IsPowerOfTwo=function(b){var a=b>0&&(b&(b-1))==0;return a};b2Math.tempVec2=new b2Vec2();b2Math.tempVec3=new b2Vec2();b2Math.tempVec4=new b2Vec2();b2Math.tempVec5=new b2Vec2();b2Math.tempMat=new b2Mat22();var b2AABB=function(){this.minVertex=new b2Vec2();this.maxVertex=new b2Vec2()};b2AABB.prototype={IsValid:function(){var b=this.maxVertex.x;var a=this.maxVertex.y;b=this.maxVertex.x;a=this.maxVertex.y;b-=this.minVertex.x;a-=this.minVertex.y;var c=b>=0&&a>=0;c=c&&this.minVertex.IsValid()&&this.maxVertex.IsValid();return c},minVertex:new b2Vec2(),maxVertex:new b2Vec2()};var b2Bound=function(){};b2Bound.prototype={IsLower:function(){return(this.value&1)==0},IsUpper:function(){return(this.value&1)==1},Swap:function(c){var e=this.value;var d=this.proxyId;var a=this.stabbingCount;this.value=c.value;this.proxyId=c.proxyId;this.stabbingCount=c.stabbingCount;c.value=e;c.proxyId=d;c.stabbingCount=a},value:0,proxyId:0,stabbingCount:0};var b2BoundValues=function(){this.lowerValues=[0,0];this.upperValues=[0,0]};b2BoundValues.prototype={lowerValues:[0,0],upperValues:[0,0]};var b2Pair=function(){};b2Pair.prototype={SetBuffered:function(){this.status|=b2Pair.e_pairBuffered},ClearBuffered:function(){this.status&=~b2Pair.e_pairBuffered},IsBuffered:function(){return(this.status&b2Pair.e_pairBuffered)==b2Pair.e_pairBuffered},SetRemoved:function(){this.status|=b2Pair.e_pairRemoved},ClearRemoved:function(){this.status&=~b2Pair.e_pairRemoved},IsRemoved:function(){return(this.status&b2Pair.e_pairRemoved)==b2Pair.e_pairRemoved},SetFinal:function(){this.status|=b2Pair.e_pairFinal},IsFinal:function(){return(this.status&b2Pair.e_pairFinal)==b2Pair.e_pairFinal},userData:null,proxyId1:0,proxyId2:0,next:0,status:0};b2Pair.b2_nullPair=b2Settings.USHRT_MAX;b2Pair.b2_nullProxy=b2Settings.USHRT_MAX;b2Pair.b2_tableCapacity=b2Settings.b2_maxPairs;b2Pair.b2_tableMask=b2Pair.b2_tableCapacity-1;b2Pair.e_pairBuffered=1;b2Pair.e_pairRemoved=2;b2Pair.e_pairFinal=4;var b2PairCallback=function(){};b2PairCallback.prototype={PairAdded:function(b,a){return null},PairRemoved:function(c,b,a){}};var b2BufferedPair=function(){};b2BufferedPair.prototype={proxyId1:0,proxyId2:0};var b2PairManager=function(){var a=0;this.m_hashTable=new Array(b2Pair.b2_tableCapacity);for(a=0;aa){var c=b;b=a;a=c}var d=b2PairManager.Hash(b,a)&b2Pair.b2_tableMask;var f=f=this.FindHash(b,a,d);if(f!=null){return f}var e=this.m_freePair;f=this.m_pairs[e];this.m_freePair=f.next;f.proxyId1=b;f.proxyId2=a;f.status=0;f.userData=null;f.next=this.m_hashTable[d];this.m_hashTable[d]=e;++this.m_pairCount;return f},RemovePair:function(g,f){if(g>f){var i=g;g=f;f=i}var d=b2PairManager.Hash(g,f)&b2Pair.b2_tableMask;var b=this.m_hashTable[d];var h=null;while(b!=b2Pair.b2_nullPair){if(b2PairManager.Equals(this.m_pairs[b],g,f)){var e=b;if(h){h.next=this.m_pairs[b].next}else{this.m_hashTable[d]=this.m_pairs[b].next}var c=this.m_pairs[e];var a=c.userData;c.next=this.m_freePair;c.proxyId1=b2Pair.b2_nullProxy;c.proxyId2=b2Pair.b2_nullProxy;c.userData=null;c.status=0;this.m_freePair=e;--this.m_pairCount;return a}else{h=this.m_pairs[b];b=h.next}}return null},Find:function(b,a){if(b>a){var c=b;b=a;a=c +}var d=b2PairManager.Hash(b,a)&b2Pair.b2_tableMask;return this.FindHash(b,a,d)},FindHash:function(b,a,d){var c=this.m_hashTable[d];while(c!=b2Pair.b2_nullPair&&b2PairManager.Equals(this.m_pairs[c],b,a)==false){c=this.m_pairs[c].next}if(c==b2Pair.b2_nullPair){return null}return this.m_pairs[c]},ValidateBuffer:function(){},ValidateTable:function(){},m_broadPhase:null,m_callback:null,m_pairs:null,m_freePair:0,m_pairCount:0,m_pairBuffer:null,m_pairBufferCount:0,m_hashTable:null};b2PairManager.Hash=function(b,a){var c=((a<<16)&4294901760)|b;c=~c+((c<<15)&4294934528);c=c^((c>>12)&1048575);c=c+((c<<2)&4294967292);c=c^((c>>4)&268435455);c=c*2057;c=c^((c>>16)&65535);return c};b2PairManager.Equals=function(c,b,a){return(c.proxyId1==b&&c.proxyId2==a)};b2PairManager.EqualsPair=function(b,a){return b.proxyId1==a.proxyId1&&b.proxyId2==a.proxyId2};var b2BroadPhase=function(f,g){this.m_pairManager=new b2PairManager();this.m_proxyPool=new Array(b2Settings.b2_maxPairs);this.m_bounds=new Array(2*b2Settings.b2_maxProxies);this.m_queryResults=new Array(b2Settings.b2_maxProxies);this.m_quantizationFactor=new b2Vec2();var d=0;this.m_pairManager.Initialize(this,g);this.m_worldAABB=f;this.m_proxyCount=0;for(d=0;d0&&t0){g=m;while(g0){g=k;while(g0&&bb[c.upperBounds[a]].value){return false}if(b[d.upperBounds[a]].valued[e.upperBounds[c]].value){return false}if(a.upperValues[c]0){var g=c-1;var n=a[g].stabbingCount;while(n){if(a[g].IsLower()){var k=this.m_proxyPool[a[g].proxyId];if(c<=k.upperBounds[b]){this.IncrementOverlapCount(a[g].proxyId);--n}}--g}}h[0]=c;d[0]=l},IncrementOverlapCount:function(b){var a=this.m_proxyPool[b];if(a.timeStampf){e=b-1}else{if(d[b].value0){f[c].id=b[0].id}else{f[c].id=b[1].id}++c}return c};b2Collision.EdgeSeparation=function(p,q,o){var f=p.m_vertices;var g=o.m_vertexCount;var r=o.m_vertices;var e=p.m_normals[q].x;var d=p.m_normals[q].y;var s=e;var l=p.m_R;e=l.col1.x*s+l.col2.x*d;d=l.col1.y*s+l.col2.y*d;var v=e;var u=d;l=o.m_R;s=v*l.col1.x+u*l.col1.y;u=v*l.col2.x+u*l.col2.y;v=s;var n=0;var m=Number.MAX_VALUE;for(var w=0;wa){a=o;h=p}}var n=b2Collision.EdgeSeparation(m,h,l);if(n>0&&w==false){return n}var g=h-1>=0?h-1:j-1;var t=b2Collision.EdgeSeparation(m,g,l);if(t>0&&w==false){return t}var q=h+10&&w==false){return u}var b=0;var k;var v=0;if(t>n&&t>u){v=-1;b=g;k=t}else{if(u>n){v=1;b=q;k=u}else{r[0]=h;return n}}while(true){if(v==-1){h=b-1>=0?b-1:j-1}else{h=b+10&&w==false){return n}if(n>k){b=h;k=n}else{break}}r[0]=b;return k};b2Collision.FindIncidentEdge=function(D,p,q,n){var h=p.m_vertexCount;var f=p.m_vertices;var g=n.m_vertexCount;var s=n.m_vertices;var a=q; +var F=q+1==h?0:q+1;var e=f[F];var C=e.x;var A=e.y;e=f[a];C-=e.x;A-=e.y;var v=C;C=A;A=-v;var E=1/Math.sqrt(C*C+A*A);C*=E;A*=E;var r=C;var o=A;v=r;var l=p.m_R;r=l.col1.x*v+l.col2.x*o;o=l.col1.y*v+l.col2.y*o;var d=r;var b=o;l=n.m_R;v=d*l.col1.x+b*l.col1.y;b=d*l.col2.x+b*l.col2.y;d=v;var k=0;var j=0;var m=Number.MAX_VALUE;for(var B=0;B0&&b==false){return +}var K=0;var g=[K];var E=b2Collision.FindMaxSeparation(g,j,k,b);K=g[0];if(E>0&&b==false){return}var p;var o;var a=0;var R=0;var d=0.98;var O=0.001;if(E>d*F+O){p=j;o=k;a=K;R=1}else{p=k;o=j;a=M;R=0}var c=[new ClipVertex(),new ClipVertex()];b2Collision.FindIncidentEdge(c,p,a,o);var B=p.m_vertexCount;var q=p.m_vertices;var I=q[a];var H=a+1l*l&&b==false){return}var d;if(mg){return}if(t>o){o=t;B=A}}if(og){return}x.pointCount=1;x.normal.Set(n.col1.x*e+n.col2.x*d,n.col1.y*e+n.col2.y*d);h=x.points[0];h.id.features.incidentEdge=b2Collision.b2_nullFeature;h.id.features.incidentVertex=b;h.id.features.referenceFace=b2Collision.b2_nullFeature;h.id.features.flip=0;h.position.x=k.m_position.x-g*x.normal.x;h.position.y=k.m_position.y-g*x.normal.y;h.separation=w-g;return}var q=(z-m.m_vertices[b].x)*r+(y-m.m_vertices[b].y)*p;h=x.points[0];h.id.features.incidentEdge=b2Collision.b2_nullFeature;h.id.features.incidentVertex=b2Collision.b2_nullFeature;h.id.features.referenceFace=b2Collision.b2_nullFeature;h.id.features.flip=0;var l,j;if(q<=0){l=m.m_vertices[b].x;j=m.m_vertices[b].y;h.id.features.incidentVertex=b}else{if(q>=f){l=m.m_vertices[a].x;j=m.m_vertices[a].y;h.id.features.incidentVertex=a}else{l=r*q+m.m_vertices[b].x;j=p*q+m.m_vertices[b].y;h.id.features.incidentEdge=b}}e=z-l;d=y-j;w=Math.sqrt(e*e+d*d);e/=w;d/=w;if(w>g){return}x.pointCount=1;x.normal.Set(n.col1.x*e+n.col2.x*d,n.col1.y*e+n.col2.y*d); +h.position.x=k.m_position.x-g*x.normal.x;h.position.y=k.m_position.y-g*x.normal.y;h.separation=w-g};b2Collision.b2TestOverlap=function(d,c){var i=c.minVertex;var g=d.maxVertex;var f=i.x-g.x;var e=i.y-g.y;i=d.minVertex;g=c.maxVertex;var j=i.x-g.x;var h=i.y-g.y;if(f>0||e>0){return false}if(j>0||h>0){return false}return true};var Features=function(){};Features.prototype={set_referenceFace:function(a){this._referenceFace=a;this._m_id._key=(this._m_id._key&4294967040)|(this._referenceFace&255)},get_referenceFace:function(){return this._referenceFace},_referenceFace:0,set_incidentEdge:function(a){this._incidentEdge=a;this._m_id._key=(this._m_id._key&4294902015)|((this._incidentEdge<<8)&65280)},get_incidentEdge:function(){return this._incidentEdge},_incidentEdge:0,set_incidentVertex:function(a){this._incidentVertex=a;this._m_id._key=(this._m_id._key&4278255615)|((this._incidentVertex<<16)&16711680)},get_incidentVertex:function(){return this._incidentVertex},_incidentVertex:0,set_flip:function(a){this._flip=a;this._m_id._key=(this._m_id._key&16777215)|((this._flip<<24)&4278190080)},get_flip:function(){return this._flip},_flip:0,_m_id:null};var b2ContactID=function(){this.features=new Features();this.features._m_id=this};b2ContactID.prototype={Set:function(a){this.set_key(a._key)},Copy:function(){var a=new b2ContactID();a.set_key(this._key);return a},get_key:function(){return this._key},set_key:function(a){this._key=a;this.features._referenceFace=this._key&255;this.features._incidentEdge=((this._key&65280)>>8)&255;this.features._incidentVertex=((this._key&16711680)>>16)&255;this.features._flip=((this._key&4278190080)>>24)&255},features:new Features(),_key:0};var b2ContactPoint=function(){this.position=new b2Vec2();this.id=new b2ContactID()};b2ContactPoint.prototype={position:new b2Vec2(),separation:null,normalImpulse:null,tangentImpulse:null,id:new b2ContactID()};var b2Distance=function(){};b2Distance.prototype={};b2Distance.ProcessTwo=function(j,h,b,k,i){var f=-i[1].x;var e=-i[1].y;var d=i[0].x-i[1].x;var c=i[0].y-i[1].y;var a=Math.sqrt(d*d+c*c);d/=a;c/=a;var g=f*d+e*c;if(g<=0||a=0&&F>=0){var B=x/(x+F);q.x=m[1].x+B*(m[2].x-m[1].x);q.y=m[1].y+B*(m[2].y-m[1].y);D.x=C[1].x+B*(C[2].x-C[1].x); +D.y=C[1].y+B*(C[2].y-C[1].y);m[0].SetV(m[2]);C[0].SetV(C[2]);G[0].SetV(G[2]);return 2}var f=E*(J*h-I*k);if(f<=0&&j>=0&&o>=0){var B=j/(j+o);q.x=m[0].x+B*(m[2].x-m[0].x);q.y=m[0].y+B*(m[2].y-m[0].y);D.x=C[0].x+B*(C[2].x-C[0].x);D.y=C[0].y+B*(C[2].y-C[0].y);m[1].SetV(m[2]);C[1].SetV(C[2]);G[1].SetV(G[2]);return 2}var d=g+f+e;d=1/d;var A=g*d;var t=f*d;var p=1-A-t;q.x=A*m[0].x+t*m[1].x+p*m[2].x;q.y=A*m[0].y+t*m[1].y+p*m[2].y;D.x=A*C[0].x+t*C[1].x+p*C[2].x;D.y=A*C[0].y+t*C[1].y+p*C[2].y;return 3};b2Distance.InPoinsts=function(a,c,d){for(var b=0;bNumber.MIN_VALUE){D*=1/d;C*=1/d}this.m_coreVertices[w].x=this.m_vertices[w].x-2*b2Settings.b2_linearSlop*D;this.m_coreVertices[w].y=this.m_vertices[w].y-2*b2Settings.b2_linearSlop*C}}var y=Number.MAX_VALUE;var x=Number.MAX_VALUE;var m=-Number.MAX_VALUE;var l=-Number.MAX_VALUE;this.m_maxRadius=0;for(w=0;w0){return false}}return true},syncAABB:new b2AABB(),syncMat:new b2Mat22(),Synchronize:function(c,e,a,b){this.m_R.SetM(b); +this.m_position.x=this.m_body.m_position.x+(b.col1.x*this.m_localCentroid.x+b.col2.x*this.m_localCentroid.y);this.m_position.y=this.m_body.m_position.y+(b.col1.y*this.m_localCentroid.x+b.col2.y*this.m_localCentroid.y);if(this.m_proxyId==b2Pair.b2_nullProxy){return}var m;var l;var k=e.col1;var j=e.col2;var i=this.m_localOBB.R.col1;var h=this.m_localOBB.R.col2;this.syncMat.col1.x=k.x*i.x+j.x*i.y;this.syncMat.col1.y=k.y*i.x+j.y*i.y;this.syncMat.col2.x=k.x*h.x+j.x*h.y;this.syncMat.col2.y=k.y*h.x+j.y*h.y;this.syncMat.Abs();m=this.m_localCentroid.x+this.m_localOBB.center.x;l=this.m_localCentroid.y+this.m_localOBB.center.y;var f=c.x+(e.col1.x*m+e.col2.x*l);var d=c.y+(e.col1.y*m+e.col2.y*l);m=this.syncMat.col1.x*this.m_localOBB.extents.x+this.syncMat.col2.x*this.m_localOBB.extents.y;l=this.syncMat.col1.y*this.m_localOBB.extents.x+this.syncMat.col2.y*this.m_localOBB.extents.y;this.syncAABB.minVertex.x=f-m;this.syncAABB.minVertex.y=d-l;this.syncAABB.maxVertex.x=f+m;this.syncAABB.maxVertex.y=d+l;k=b.col1; +j=b.col2;i=this.m_localOBB.R.col1;h=this.m_localOBB.R.col2;this.syncMat.col1.x=k.x*i.x+j.x*i.y;this.syncMat.col1.y=k.y*i.x+j.y*i.y;this.syncMat.col2.x=k.x*h.x+j.x*h.y;this.syncMat.col2.y=k.y*h.x+j.y*h.y;this.syncMat.Abs();m=this.m_localCentroid.x+this.m_localOBB.center.x;l=this.m_localCentroid.y+this.m_localOBB.center.y;f=a.x+(b.col1.x*m+b.col2.x*l);d=a.y+(b.col1.y*m+b.col2.y*l);m=this.syncMat.col1.x*this.m_localOBB.extents.x+this.syncMat.col2.x*this.m_localOBB.extents.y;l=this.syncMat.col1.y*this.m_localOBB.extents.x+this.syncMat.col2.y*this.m_localOBB.extents.y;this.syncAABB.minVertex.x=Math.min(this.syncAABB.minVertex.x,f-m);this.syncAABB.minVertex.y=Math.min(this.syncAABB.minVertex.y,d-l);this.syncAABB.maxVertex.x=Math.max(this.syncAABB.maxVertex.x,f+m);this.syncAABB.maxVertex.y=Math.max(this.syncAABB.maxVertex.y,d+l);var g=this.m_body.m_world.m_broadPhase;if(g.InRange(this.syncAABB)){g.MoveProxy(this.m_proxyId,this.syncAABB)}else{this.m_body.Freeze()}},QuickSync:function(a,b){this.m_R.SetM(b); +this.m_position.x=a.x+(b.col1.x*this.m_localCentroid.x+b.col2.x*this.m_localCentroid.y);this.m_position.y=a.y+(b.col1.y*this.m_localCentroid.x+b.col2.y*this.m_localCentroid.y)},ResetProxy:function(b){if(this.m_proxyId==b2Pair.b2_nullProxy){return}var e=b.GetProxy(this.m_proxyId);b.DestroyProxy(this.m_proxyId);e=null;var g=b2Math.b2MulMM(this.m_R,this.m_localOBB.R);var d=b2Math.b2AbsM(g);var f=b2Math.b2MulMV(d,this.m_localOBB.extents);var a=b2Math.b2MulMV(this.m_R,this.m_localOBB.center);a.Add(this.m_position);var c=new b2AABB();c.minVertex.SetV(a);c.minVertex.Subtract(f);c.maxVertex.SetV(a);c.maxVertex.Add(f);if(b.InRange(c)){this.m_proxyId=b.CreateProxy(c,this)}else{this.m_proxyId=b2Pair.b2_nullProxy}if(this.m_proxyId==b2Pair.b2_nullProxy){this.m_body.Freeze()}},Support:function(c,a,b){var g=(c*this.m_R.col1.x+a*this.m_R.col1.y);var f=(c*this.m_R.col2.x+a*this.m_R.col2.y);var e=0;var j=(this.m_coreVertices[0].x*g+this.m_coreVertices[0].y*f);for(var d=1;dj){e=d;j=h}}b.Set(this.m_position.x+(this.m_R.col1.x*this.m_coreVertices[e].x+this.m_R.col2.x*this.m_coreVertices[e].y),this.m_position.y+(this.m_R.col1.y*this.m_coreVertices[e].x+this.m_R.col2.y*this.m_coreVertices[e].y))},m_localCentroid:new b2Vec2(),m_localOBB:new b2OBB(),m_vertices:null,m_coreVertices:null,m_vertexCount:0,m_normals:null});b2PolyShape.tempVec=new b2Vec2();b2PolyShape.tAbsR=new b2Mat22();var b2Body=function(f,e){this.sMat0=new b2Mat22();this.m_position=new b2Vec2();this.m_R=new b2Mat22(0);this.m_position0=new b2Vec2();var c=0;var g;var a;this.m_flags=0;this.m_position.SetV(f.position);this.m_rotation=f.rotation;this.m_R.Set(this.m_rotation);this.m_position0.SetV(this.m_position);this.m_rotation0=this.m_rotation;this.m_world=e;this.m_linearDamping=b2Math.b2Clamp(1-f.linearDamping,0,1);this.m_angularDamping=b2Math.b2Clamp(1-f.angularDamping,0,1);this.m_force=new b2Vec2(0,0);this.m_torque=0;this.m_mass=0;var h=new Array(b2Settings.b2_maxShapesPerBody);for(c=0;c0){this.m_center.Multiply(1/this.m_mass);this.m_position.Add(b2Math.b2MulMV(this.m_R,this.m_center)) +}else{this.m_flags|=b2Body.e_staticFlag}this.m_I=0;for(c=0;c0){this.m_invMass=1/this.m_mass}else{this.m_invMass=0}if(this.m_I>0&&f.preventRotation==false){this.m_invI=1/this.m_I}else{this.m_I=0;this.m_invI=0}this.m_linearVelocity=b2Math.AddVV(f.linearVelocity,b2Math.b2CrossFV(f.angularVelocity,this.m_center));this.m_angularVelocity=f.angularVelocity;this.m_jointList=null;this.m_contactList=null;this.m_prev=null;this.m_next=null;this.m_shapeList=null;for(c=0;c0}var c=(b.m_maskBits&a.m_categoryBits)!=0&&(b.m_categoryBits&a.m_maskBits)!=0;return c}};b2CollisionFilter.b2_defaultFilter=new b2CollisionFilter;var b2Island=function(e,d,c,a){var b=0;this.m_bodyCapacity=e;this.m_contactCapacity=d;this.m_jointCapacity=c;this.m_bodyCount=0;this.m_contactCount=0;this.m_jointCount=0;this.m_bodies=new Array(e);for(b=0;bc||b2Math.b2Dot(a.m_linearVelocity,a.m_linearVelocity)>d){a.m_sleepTime=0;e=0}else{a.m_sleepTime+=g;e=b2Math.b2Min(e,a.m_sleepTime)}}if(e>=b2Settings.b2_timeToSleep){for(f=0;f0){a.m_shape1.m_body.WakeUp();a.m_shape2.m_body.WakeUp()}var d=a.m_shape1.m_type;var b=a.m_shape2.m_type;var e=b2Contact.s_registers[d][b].destroyFcn;e(a,c)};b2Contact.s_registers=null;b2Contact.s_initialized=false;var b2ContactConstraint=function(){this.normal=new b2Vec2();this.points=new Array(b2Settings.b2_maxManifoldPoints);for(var a=0;a0){b.velocityBias=-60*b.separation}var h=f+(-F*C)-u-(-G*Q);var g=d+(F*D)-s-(G*S);var P=V.normal.x*h+V.normal.y*g;if(P<-b2Settings.b2_velocityThreshold){b.velocityBias+=-V.restitution*P}}++L}}};b2ContactSolver.prototype={PreSolve:function(){var b;var A;var r;for(var w=0;w=-b2Settings.b2_linearSlop},PostSolve:function(){for(var d=0;d0){this.m_manifoldCount=1 +}else{this.m_manifoldCount=0}},GetManifolds:function(){return this.m_manifold},m_manifold:[new b2Manifold()]});b2CircleContact.Create=function(b,a,c){return new b2CircleContact(b,a)};b2CircleContact.Destroy=function(a,b){};var b2Conservative=function(){};b2Conservative.prototype={};b2Conservative.R1=new b2Mat22();b2Conservative.R2=new b2Mat22();b2Conservative.x1=new b2Vec2();b2Conservative.x2=new b2Vec2();b2Conservative.Conservative=function(k,j){var i=k.GetBody();var h=j.GetBody();var s=i.m_position.x-i.m_position0.x;var q=i.m_position.y-i.m_position0.y;var H=i.m_rotation-i.m_rotation0;var b=h.m_position.x-h.m_position0.x;var a=h.m_position.y-h.m_position0.y;var F=h.m_rotation-h.m_rotation0;var m=k.GetMaxRadius();var l=j.GetMaxRadius();var I=i.m_position0.x;var D=i.m_position0.y;var z=i.m_rotation0;var E=h.m_position0.x;var C=h.m_position0.y;var n=h.m_rotation0;var e=I;var c=D;var J=z;var B=E;var A=C;var G=n;b2Conservative.R1.Set(J);b2Conservative.R2.Set(G);k.QuickSync(p1,b2Conservative.R1);j.QuickSync(p2,b2Conservative.R2);var L=0;var o=10;var u;var t;var y=0;var v=true;for(var w=0;wFLT_EPSILON){d*=b2_linearSlop/p}if(i.IsStatic()){i.m_position.x=e;i.m_position.y=c}else{i.m_position.x=e-u;i.m_position.y=c-t}i.m_rotation=J;i.m_R.Set(J);i.QuickSyncShapes();if(h.IsStatic()){h.m_position.x=B;h.m_position.y=A}else{h.m_position.x=B+u;h.m_position.y=A+t}h.m_position.x=B+u;h.m_position.y=A+t;h.m_rotation=G;h.m_R.Set(G);h.QuickSyncShapes();return true +}k.QuickSync(i.m_position,i.m_R);j.QuickSync(h.m_position,h.m_R);return false};var b2NullContact=function(b,a){this.m_node1=new b2ContactNode();this.m_node2=new b2ContactNode();this.m_flags=0;if(!b||!a){this.m_shape1=null;this.m_shape2=null;return}this.m_shape1=b;this.m_shape2=a;this.m_manifoldCount=0;this.m_friction=Math.sqrt(this.m_shape1.m_friction*this.m_shape2.m_friction);this.m_restitution=b2Math.b2Max(this.m_shape1.m_restitution,this.m_shape2.m_restitution);this.m_prev=null;this.m_next=null;this.m_node1.contact=null;this.m_node1.prev=null;this.m_node1.next=null;this.m_node1.other=null;this.m_node2.contact=null;this.m_node2.prev=null;this.m_node2.next=null;this.m_node2.other=null};Object.extend(b2NullContact.prototype,b2Contact.prototype);Object.extend(b2NullContact.prototype,{Evaluate:function(){},GetManifolds:function(){return null}});var b2PolyAndCircleContact=function(b,a){this.m_node1=new b2ContactNode();this.m_node2=new b2ContactNode();this.m_flags=0;if(!b||!a){this.m_shape1=null;this.m_shape2=null;return}this.m_shape1=b;this.m_shape2=a;this.m_manifoldCount=0;this.m_friction=Math.sqrt(this.m_shape1.m_friction*this.m_shape2.m_friction);this.m_restitution=b2Math.b2Max(this.m_shape1.m_restitution,this.m_shape2.m_restitution);this.m_prev=null;this.m_next=null;this.m_node1.contact=null;this.m_node1.prev=null;this.m_node1.next=null;this.m_node1.other=null;this.m_node2.contact=null;this.m_node2.prev=null;this.m_node2.next=null;this.m_node2.other=null;this.m_manifold=[new b2Manifold()];b2Settings.b2Assert(this.m_shape1.m_type==b2Shape.e_polyShape);b2Settings.b2Assert(this.m_shape2.m_type==b2Shape.e_circleShape);this.m_manifold[0].pointCount=0;this.m_manifold[0].points[0].normalImpulse=0;this.m_manifold[0].points[0].tangentImpulse=0};Object.extend(b2PolyAndCircleContact.prototype,b2Contact.prototype);Object.extend(b2PolyAndCircleContact.prototype,{Evaluate:function(){b2Collision.b2CollidePolyAndCircle(this.m_manifold[0],this.m_shape1,this.m_shape2,false); +if(this.m_manifold[0].pointCount>0){this.m_manifoldCount=1}else{this.m_manifoldCount=0}},GetManifolds:function(){return this.m_manifold},m_manifold:[new b2Manifold()]});b2PolyAndCircleContact.Create=function(b,a,c){return new b2PolyAndCircleContact(b,a)};b2PolyAndCircleContact.Destroy=function(a,b){};var b2PolyContact=function(b,a){this.m_node1=new b2ContactNode();this.m_node2=new b2ContactNode();this.m_flags=0;if(!b||!a){this.m_shape1=null;this.m_shape2=null;return}this.m_shape1=b;this.m_shape2=a;this.m_manifoldCount=0;this.m_friction=Math.sqrt(this.m_shape1.m_friction*this.m_shape2.m_friction);this.m_restitution=b2Math.b2Max(this.m_shape1.m_restitution,this.m_shape2.m_restitution);this.m_prev=null;this.m_next=null;this.m_node1.contact=null;this.m_node1.prev=null;this.m_node1.next=null;this.m_node1.other=null;this.m_node2.contact=null;this.m_node2.prev=null;this.m_node2.next=null;this.m_node2.other=null;this.m0=new b2Manifold();this.m_manifold=[new b2Manifold()];this.m_manifold[0].pointCount=0};Object.extend(b2PolyContact.prototype,b2Contact.prototype);Object.extend(b2PolyContact.prototype,{m0:new b2Manifold(),Evaluate:function(){var a=this.m_manifold[0];var b=this.m0.points;for(var d=0;d0){var h=[false,false];for(var f=0;f0){var e=f.m_shape1.m_body;var d=f.m_shape2.m_body;var b=f.m_node1;var a=f.m_node2;e.WakeUp();d.WakeUp();if(b.prev){b.prev.next=b.next}if(b.next){b.next.prev=b.prev}if(b==e.m_contactList){e.m_contactList=b.next}b.prev=null;b.next=null;if(a.prev){a.prev.next=a.next}if(a.next){a.next.prev=a.prev}if(a==d.m_contactList){d.m_contactList=a.next}a.prev=null;a.next=null}b2Contact.Destroy(f,this.m_world.m_blockAllocator);--this.m_world.m_contactCount},CleanContactList:function(){var b=this.m_world.m_contactList;while(b!=null){var a=b;b=b.m_next;if(a.m_flags&b2Contact.e_destroyFlag){this.DestroyContact(a);a=null}}},Collide:function(){var f;var e;var d;var a;for(var h=this.m_world.m_contactList;h!=null;h=h.m_next){if(h.m_shape1.m_body.IsSleeping()&&h.m_shape2.m_body.IsSleeping()){continue +}var b=h.GetManifoldCount();h.Evaluate();var g=h.GetManifoldCount();if(b==0&&g>0){f=h.m_shape1.m_body;e=h.m_shape2.m_body;d=h.m_node1;a=h.m_node2;d.contact=h;d.other=e;d.prev=null;d.next=f.m_contactList;if(d.next!=null){d.next.prev=h.m_node1}f.m_contactList=h.m_node1;a.contact=h;a.other=f;a.prev=null;a.next=e.m_contactList;if(a.next!=null){a.next.prev=a}e.m_contactList=a}else{if(b>0&&g==0){f=h.m_shape1.m_body;e=h.m_shape2.m_body;d=h.m_node1;a=h.m_node2;if(d.prev){d.prev.next=d.next}if(d.next){d.next.prev=d.prev}if(d==f.m_contactList){f.m_contactList=d.next}d.prev=null;d.next=null;if(a.prev){a.prev.next=a.next}if(a.next){a.next.prev=a.prev}if(a==e.m_contactList){e.m_contactList=a.next}a.prev=null;a.next=null}}}},m_world:null,m_nullContact:new b2NullContact(),m_destroyImmediate:null});var b2World=function(a,d,c){this.step=new b2TimeStep();this.m_contactManager=new b2ContactManager();this.m_listener=null;this.m_filter=b2CollisionFilter.b2_defaultFilter;this.m_bodyList=null;this.m_contactList=null;this.m_jointList=null;this.m_bodyCount=0;this.m_contactCount=0;this.m_jointCount=0;this.m_bodyDestroyList=null;this.m_allowSleep=c;this.m_gravity=d;this.m_contactManager.m_world=this;this.m_broadPhase=new b2BroadPhase(a,this.m_contactManager);var b=new b2BodyDef();this.m_groundBody=this.CreateBody(b)};b2World.prototype={SetListener:function(a){this.m_listener=a},SetFilter:function(a){this.m_filter=a},CreateBody:function(c){var a=new b2Body(c,this);a.m_prev=null;a.m_next=this.m_bodyList;if(this.m_bodyList){this.m_bodyList.m_prev=a}this.m_bodyList=a;++this.m_bodyCount;return a},DestroyBody:function(a){if(a.m_flags&b2Body.e_destroyFlag){return}if(a.m_prev){a.m_prev.m_next=a.m_next}if(a.m_next){a.m_next.m_prev=a.m_prev}if(a==this.m_bodyList){this.m_bodyList=a.m_next}a.m_flags|=b2Body.e_destroyFlag; +--this.m_bodyCount;a.m_prev=null;a.m_next=this.m_bodyDestroyList;this.m_bodyDestroyList=a},CleanBodyList:function(){this.m_contactManager.m_destroyImmediate=true;var c=this.m_bodyDestroyList;while(c){var e=c;c=c.m_next;var d=e.m_jointList;while(d){var a=d;d=d.next;if(this.m_listener){this.m_listener.NotifyJointDestroyed(a.joint)}this.DestroyJoint(a.joint)}e.Destroy()}this.m_bodyDestroyList=null;this.m_contactManager.m_destroyImmediate=false},CreateJoint:function(e){var c=b2Joint.Create(e,this.m_blockAllocator);c.m_prev=null;c.m_next=this.m_jointList;if(this.m_jointList){this.m_jointList.m_prev=c}this.m_jointList=c;++this.m_jointCount;c.m_node1.joint=c;c.m_node1.other=c.m_body2;c.m_node1.prev=null;c.m_node1.next=c.m_body1.m_jointList;if(c.m_body1.m_jointList){c.m_body1.m_jointList.prev=c.m_node1}c.m_body1.m_jointList=c.m_node1;c.m_node2.joint=c;c.m_node2.other=c.m_body1;c.m_node2.prev=null;c.m_node2.next=c.m_body2.m_jointList;if(c.m_body2.m_jointList){c.m_body2.m_jointList.prev=c.m_node2 +}c.m_body2.m_jointList=c.m_node2;if(e.collideConnected==false){var a=e.body1.m_shapeCount0){this.step.inv_dt=1/a}else{this.step.inv_dt=0}this.m_positionIterationCount=0;this.m_contactManager.CleanContactList();this.CleanBodyList();this.m_contactManager.Collide();var n=new b2Island(this.m_bodyCount,this.m_contactCount,this.m_jointCount,this.m_stackAllocator);for(r=this.m_bodyList;r!=null;r=r.m_next){r.m_flags&=~b2Body.e_islandFlag}for(var p=this.m_contactList;p!=null;p=p.m_next){p.m_flags&=~b2Contact.e_islandFlag}for(var h=this.m_jointList;h!=null;h=h.m_next){h.m_islandFlag=false}var u=this.m_bodyCount;var q=new Array(this.m_bodyCount);for(var g=0;g0){r=q[--t];n.AddBody(r);r.m_flags&=~b2Body.e_sleepFlag; +if(r.m_flags&b2Body.e_staticFlag){continue}for(var s=r.m_contactList;s!=null;s=s.next){if(s.contact.m_flags&b2Contact.e_islandFlag){continue}n.AddContact(s.contact);s.contact.m_flags|=b2Contact.e_islandFlag;o=s.other;if(o.m_flags&b2Body.e_islandFlag){continue}q[t++]=o;o.m_flags|=b2Body.e_islandFlag}for(var f=r.m_jointList;f!=null;f=f.next){if(f.joint.m_islandFlag==true){continue}n.AddJoint(f.joint);f.joint.m_islandFlag=true;o=f.other;if(o.m_flags&b2Body.e_islandFlag){continue}q[t++]=o;o.m_flags|=b2Body.e_islandFlag}}n.Solve(this.step,this.m_gravity);this.m_positionIterationCount=b2Math.b2Max(this.m_positionIterationCount,b2Island.m_positionIterationCount);if(this.m_allowSleep){n.UpdateSleep(a)}for(var l=0;lb2Settings.b2_linearSlop){this.m_u.Multiply(1/a)}else{this.m_u.SetZero()}var h=(j*this.m_u.y-i*this.m_u.x);var d=(f*this.m_u.y-e*this.m_u.x);this.m_mass=this.m_body1.m_invMass+this.m_body1.m_invI*h*h+this.m_body2.m_invMass+this.m_body2.m_invI*d*d;this.m_mass=1/this.m_mass;if(b2World.s_enableWarmStarting){var c=this.m_impulse*this.m_u.x;var b=this.m_impulse*this.m_u.y;this.m_body1.m_linearVelocity.x-=this.m_body1.m_invMass*c;this.m_body1.m_linearVelocity.y-=this.m_body1.m_invMass*b;this.m_body1.m_angularVelocity-=this.m_body1.m_invI*(j*b-i*c); +this.m_body2.m_linearVelocity.x+=this.m_body2.m_invMass*c;this.m_body2.m_linearVelocity.y+=this.m_body2.m_invMass*b;this.m_body2.m_angularVelocity+=this.m_body2.m_invI*(f*b-e*c)}else{this.m_impulse=0}},SolveVelocityConstraints:function(b){var j;j=this.m_body1.m_R;var n=j.col1.x*this.m_localAnchor1.x+j.col2.x*this.m_localAnchor1.y;var m=j.col1.y*this.m_localAnchor1.x+j.col2.y*this.m_localAnchor1.y;j=this.m_body2.m_R;var h=j.col1.x*this.m_localAnchor2.x+j.col2.x*this.m_localAnchor2.y;var g=j.col1.y*this.m_localAnchor2.x+j.col2.y*this.m_localAnchor2.y;var l=this.m_body1.m_linearVelocity.x+(-this.m_body1.m_angularVelocity*m);var k=this.m_body1.m_linearVelocity.y+(this.m_body1.m_angularVelocity*n);var f=this.m_body2.m_linearVelocity.x+(-this.m_body2.m_angularVelocity*g);var e=this.m_body2.m_linearVelocity.y+(this.m_body2.m_angularVelocity*h);var i=(this.m_u.x*(f-l)+this.m_u.y*(e-k));var a=-this.m_mass*i;this.m_impulse+=a;var d=a*this.m_u.x;var c=a*this.m_u.y;this.m_body1.m_linearVelocity.x-=this.m_body1.m_invMass*d; +this.m_body1.m_linearVelocity.y-=this.m_body1.m_invMass*c;this.m_body1.m_angularVelocity-=this.m_body1.m_invI*(n*c-m*d);this.m_body2.m_linearVelocity.x+=this.m_body2.m_invMass*d;this.m_body2.m_linearVelocity.y+=this.m_body2.m_invMass*c;this.m_body2.m_angularVelocity+=this.m_body2.m_invI*(h*c-g*d)},SolvePositionConstraints:function(){var j;j=this.m_body1.m_R;var l=j.col1.x*this.m_localAnchor1.x+j.col2.x*this.m_localAnchor1.y;var k=j.col1.y*this.m_localAnchor1.x+j.col2.y*this.m_localAnchor1.y;j=this.m_body2.m_R;var i=j.col1.x*this.m_localAnchor2.x+j.col2.x*this.m_localAnchor2.y;var h=j.col1.y*this.m_localAnchor2.x+j.col2.y*this.m_localAnchor2.y;var g=this.m_body2.m_position.x+i-this.m_body1.m_position.x-l;var f=this.m_body2.m_position.y+h-this.m_body1.m_position.y-k;var c=Math.sqrt(g*g+f*f);g/=c;f/=c;var a=c-this.m_length;a=b2Math.b2Clamp(a,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);var b=-this.m_mass*a;this.m_u.Set(g,f);var e=b*this.m_u.x;var d=b*this.m_u.y;this.m_body1.m_position.x-=this.m_body1.m_invMass*e; +this.m_body1.m_position.y-=this.m_body1.m_invMass*d;this.m_body1.m_rotation-=this.m_body1.m_invI*(l*d-k*e);this.m_body2.m_position.x+=this.m_body2.m_invMass*e;this.m_body2.m_position.y+=this.m_body2.m_invMass*d;this.m_body2.m_rotation+=this.m_body2.m_invI*(i*d-h*e);this.m_body1.m_R.Set(this.m_body1.m_rotation);this.m_body2.m_R.Set(this.m_body2.m_rotation);return b2Math.b2Abs(a)d.dt*this.m_maxForce){this.m_impulse.Multiply(d.dt*this.m_maxForce/b)}e=this.m_impulse.x-j;c=this.m_impulse.y-g;i.m_linearVelocity.x+=i.m_invMass*e;i.m_linearVelocity.y+=i.m_invMass*c; +i.m_angularVelocity+=i.m_invI*(h*c-f*e)},SolvePositionConstraints:function(){return true},m_localAnchor:new b2Vec2(),m_target:new b2Vec2(),m_impulse:new b2Vec2(),m_ptpMass:new b2Mat22(),m_C:new b2Vec2(),m_maxForce:null,m_beta:null,m_gamma:null});var b2MouseJointDef=function(){this.type=b2Joint.e_unknownJoint;this.userData=null;this.body1=null;this.body2=null;this.collideConnected=false;this.target=new b2Vec2();this.type=b2Joint.e_mouseJoint;this.maxForce=0;this.frequencyHz=5;this.dampingRatio=0.7;this.timeStep=1/60};Object.extend(b2MouseJointDef.prototype,b2JointDef.prototype);Object.extend(b2MouseJointDef.prototype,{target:new b2Vec2(),maxForce:null,frequencyHz:null,dampingRatio:null,timeStep:null});var b2PrismaticJoint=function(c){this.m_node1=new b2JointNode();this.m_node2=new b2JointNode();this.m_type=c.type;this.m_prev=null;this.m_next=null;this.m_body1=c.body1;this.m_body2=c.body2;this.m_collideConnected=c.collideConnected;this.m_islandFlag=false;this.m_userData=c.userData;this.m_localAnchor1=new b2Vec2();this.m_localAnchor2=new b2Vec2();this.m_localXAxis1=new b2Vec2();this.m_localYAxis1=new b2Vec2();this.m_linearJacobian=new b2Jacobian();this.m_motorJacobian=new b2Jacobian();var b;var a;var d;b=this.m_body1.m_R;a=(c.anchorPoint.x-this.m_body1.m_position.x);d=(c.anchorPoint.y-this.m_body1.m_position.y);this.m_localAnchor1.Set((a*b.col1.x+d*b.col1.y),(a*b.col2.x+d*b.col2.y));b=this.m_body2.m_R;a=(c.anchorPoint.x-this.m_body2.m_position.x);d=(c.anchorPoint.y-this.m_body2.m_position.y);this.m_localAnchor2.Set((a*b.col1.x+d*b.col1.y),(a*b.col2.x+d*b.col2.y));b=this.m_body1.m_R;a=c.axis.x;d=c.axis.y;this.m_localXAxis1.Set((a*b.col1.x+d*b.col1.y),(a*b.col2.x+d*b.col2.y));this.m_localYAxis1.x=-this.m_localXAxis1.y; +this.m_localYAxis1.y=this.m_localXAxis1.x;this.m_initialAngle=this.m_body2.m_rotation-this.m_body1.m_rotation;this.m_linearJacobian.SetZero();this.m_linearMass=0;this.m_linearImpulse=0;this.m_angularMass=0;this.m_angularImpulse=0;this.m_motorJacobian.SetZero();this.m_motorMass=0;this.m_motorImpulse=0;this.m_limitImpulse=0;this.m_limitPositionImpulse=0;this.m_lowerTranslation=c.lowerTranslation;this.m_upperTranslation=c.upperTranslation;this.m_maxMotorForce=c.motorForce;this.m_motorSpeed=c.motorSpeed;this.m_enableLimit=c.enableLimit;this.m_enableMotor=c.enableMotor};Object.extend(b2PrismaticJoint.prototype,b2Joint.prototype);Object.extend(b2PrismaticJoint.prototype,{GetAnchor1:function(){var a=this.m_body1;var b=new b2Vec2();b.SetV(this.m_localAnchor1);b.MulM(a.m_R);b.Add(a.m_position);return b},GetAnchor2:function(){var a=this.m_body2;var b=new b2Vec2();b.SetV(this.m_localAnchor2);b.MulM(a.m_R);b.Add(a.m_position);return b},GetJointTranslation:function(){var l=this.m_body1;var k=this.m_body2; +var j;j=l.m_R;var p=j.col1.x*this.m_localAnchor1.x+j.col2.x*this.m_localAnchor1.y;var n=j.col1.y*this.m_localAnchor1.x+j.col2.y*this.m_localAnchor1.y;j=k.m_R;var i=j.col1.x*this.m_localAnchor2.x+j.col2.x*this.m_localAnchor2.y;var h=j.col1.y*this.m_localAnchor2.x+j.col2.y*this.m_localAnchor2.y;var g=l.m_position.x+p;var f=l.m_position.y+n;var c=k.m_position.x+i;var b=k.m_position.y+h;var e=c-g;var d=b-f;j=l.m_R;var o=j.col1.x*this.m_localXAxis1.x+j.col2.x*this.m_localXAxis1.y;var m=j.col1.y*this.m_localXAxis1.x+j.col2.y*this.m_localXAxis1.y;var a=o*e+m*d;return a},GetJointSpeed:function(){var j=this.m_body1;var i=this.m_body2;var k;k=j.m_R;var t=k.col1.x*this.m_localAnchor1.x+k.col2.x*this.m_localAnchor1.y;var s=k.col1.y*this.m_localAnchor1.x+k.col2.y*this.m_localAnchor1.y;k=i.m_R;var h=k.col1.x*this.m_localAnchor2.x+k.col2.x*this.m_localAnchor2.y;var g=k.col1.y*this.m_localAnchor2.x+k.col2.y*this.m_localAnchor2.y;var r=j.m_position.x+t;var p=j.m_position.y+s;var c=i.m_position.x+h;var a=i.m_position.y+g; +var f=c-r;var e=a-p;k=j.m_R;var o=k.col1.x*this.m_localXAxis1.x+k.col2.x*this.m_localXAxis1.y;var n=k.col1.y*this.m_localXAxis1.x+k.col2.y*this.m_localXAxis1.y;var d=j.m_linearVelocity;var b=i.m_linearVelocity;var m=j.m_angularVelocity;var l=i.m_angularVelocity;var q=(f*(-m*n)+e*(m*o))+(o*(((b.x+(-l*g))-d.x)-(-m*s))+n*(((b.y+(l*h))-d.y)-(m*t)));return q},GetMotorForce:function(a){return a*this.m_motorImpulse},SetMotorSpeed:function(a){this.m_motorSpeed=a},SetMotorForce:function(a){this.m_maxMotorForce=a},GetReactionForce:function(b){var e=b*this.m_limitImpulse;var d;d=this.m_body1.m_R;var g=e*(d.col1.x*this.m_localXAxis1.x+d.col2.x*this.m_localXAxis1.y);var f=e*(d.col1.y*this.m_localXAxis1.x+d.col2.y*this.m_localXAxis1.y);var c=e*(d.col1.x*this.m_localYAxis1.x+d.col2.x*this.m_localYAxis1.y);var a=e*(d.col1.y*this.m_localYAxis1.x+d.col2.y*this.m_localYAxis1.y);return new b2Vec2(g+c,f+a)},GetReactionTorque:function(a){return a*this.m_angularImpulse},PrepareVelocitySolver:function(){var m=this.m_body1; +var l=this.m_body2;var p;p=m.m_R;var z=p.col1.x*this.m_localAnchor1.x+p.col2.x*this.m_localAnchor1.y;var y=p.col1.y*this.m_localAnchor1.x+p.col2.y*this.m_localAnchor1.y;p=l.m_R;var i=p.col1.x*this.m_localAnchor2.x+p.col2.x*this.m_localAnchor2.y;var g=p.col1.y*this.m_localAnchor2.x+p.col2.y*this.m_localAnchor2.y;var s=m.m_invMass;var r=l.m_invMass;var k=m.m_invI;var j=l.m_invI;p=m.m_R;var h=p.col1.x*this.m_localYAxis1.x+p.col2.x*this.m_localYAxis1.y;var f=p.col1.y*this.m_localYAxis1.x+p.col2.y*this.m_localYAxis1.y;var t=l.m_position.x+i-m.m_position.x;var q=l.m_position.y+g-m.m_position.y;this.m_linearJacobian.linear1.x=-h;this.m_linearJacobian.linear1.y=-f;this.m_linearJacobian.linear2.x=h;this.m_linearJacobian.linear2.y=f;this.m_linearJacobian.angular1=-(t*f-q*h);this.m_linearJacobian.angular2=i*f-g*h;this.m_linearMass=s+k*this.m_linearJacobian.angular1*this.m_linearJacobian.angular1+r+j*this.m_linearJacobian.angular2*this.m_linearJacobian.angular2;this.m_linearMass=1/this.m_linearMass; +this.m_angularMass=1/(k+j);if(this.m_enableLimit||this.m_enableMotor){p=m.m_R;var v=p.col1.x*this.m_localXAxis1.x+p.col2.x*this.m_localXAxis1.y;var u=p.col1.y*this.m_localXAxis1.x+p.col2.y*this.m_localXAxis1.y;this.m_motorJacobian.linear1.x=-v;this.m_motorJacobian.linear1.y=-u;this.m_motorJacobian.linear2.x=v;this.m_motorJacobian.linear2.y=u;this.m_motorJacobian.angular1=-(t*u-q*v);this.m_motorJacobian.angular2=i*u-g*v;this.m_motorMass=s+k*this.m_motorJacobian.angular1*this.m_motorJacobian.angular1+r+j*this.m_motorJacobian.angular2*this.m_motorJacobian.angular2;this.m_motorMass=1/this.m_motorMass;if(this.m_enableLimit){var e=t-z;var d=q-y;var c=v*e+u*d;if(b2Math.b2Abs(this.m_upperTranslation-this.m_lowerTranslation)<2*b2Settings.b2_linearSlop){this.m_limitState=b2Joint.e_equalLimits}else{if(c<=this.m_lowerTranslation){if(this.m_limitState!=b2Joint.e_atLowerLimit){this.m_limitImpulse=0}this.m_limitState=b2Joint.e_atLowerLimit}else{if(c>=this.m_upperTranslation){if(this.m_limitState!=b2Joint.e_atUpperLimit){this.m_limitImpulse=0 +}this.m_limitState=b2Joint.e_atUpperLimit}else{this.m_limitState=b2Joint.e_inactiveLimit;this.m_limitImpulse=0}}}}}if(this.m_enableMotor==false){this.m_motorImpulse=0}if(this.m_enableLimit==false){this.m_limitImpulse=0}if(b2World.s_enableWarmStarting){var b=this.m_linearImpulse*this.m_linearJacobian.linear1.x+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear1.x;var a=this.m_linearImpulse*this.m_linearJacobian.linear1.y+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear1.y;var o=this.m_linearImpulse*this.m_linearJacobian.linear2.x+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear2.x;var n=this.m_linearImpulse*this.m_linearJacobian.linear2.y+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear2.y;var x=this.m_linearImpulse*this.m_linearJacobian.angular1-this.m_angularImpulse+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.angular1;var w=this.m_linearImpulse*this.m_linearJacobian.angular2+this.m_angularImpulse+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.angular2; +m.m_linearVelocity.x+=s*b;m.m_linearVelocity.y+=s*a;m.m_angularVelocity+=k*x;l.m_linearVelocity.x+=r*o;l.m_linearVelocity.y+=r*n;l.m_angularVelocity+=j*w}else{this.m_linearImpulse=0;this.m_angularImpulse=0;this.m_limitImpulse=0;this.m_motorImpulse=0}this.m_limitPositionImpulse=0},SolveVelocityConstraints:function(b){var l=this.m_body1;var k=this.m_body2;var q=l.m_invMass;var o=k.m_invMass;var d=l.m_invI;var c=k.m_invI;var p;var e=this.m_linearJacobian.Compute(l.m_linearVelocity,l.m_angularVelocity,k.m_linearVelocity,k.m_angularVelocity);var j=-this.m_linearMass*e;this.m_linearImpulse+=j;l.m_linearVelocity.x+=(q*j)*this.m_linearJacobian.linear1.x;l.m_linearVelocity.y+=(q*j)*this.m_linearJacobian.linear1.y;l.m_angularVelocity+=d*j*this.m_linearJacobian.angular1;k.m_linearVelocity.x+=(o*j)*this.m_linearJacobian.linear2.x;k.m_linearVelocity.y+=(o*j)*this.m_linearJacobian.linear2.y;k.m_angularVelocity+=c*j*this.m_linearJacobian.angular2;var h=k.m_angularVelocity-l.m_angularVelocity;var a=-this.m_angularMass*h; +this.m_angularImpulse+=a;l.m_angularVelocity-=d*a;k.m_angularVelocity+=c*a;if(this.m_enableMotor&&this.m_limitState!=b2Joint.e_equalLimits){var m=this.m_motorJacobian.Compute(l.m_linearVelocity,l.m_angularVelocity,k.m_linearVelocity,k.m_angularVelocity)-this.m_motorSpeed;var f=-this.m_motorMass*m;var n=this.m_motorImpulse;this.m_motorImpulse=b2Math.b2Clamp(this.m_motorImpulse+f,-b.dt*this.m_maxMotorForce,b.dt*this.m_maxMotorForce);f=this.m_motorImpulse-n;l.m_linearVelocity.x+=(q*f)*this.m_motorJacobian.linear1.x;l.m_linearVelocity.y+=(q*f)*this.m_motorJacobian.linear1.y;l.m_angularVelocity+=d*f*this.m_motorJacobian.angular1;k.m_linearVelocity.x+=(o*f)*this.m_motorJacobian.linear2.x;k.m_linearVelocity.y+=(o*f)*this.m_motorJacobian.linear2.y;k.m_angularVelocity+=c*f*this.m_motorJacobian.angular2}if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){var i=this.m_motorJacobian.Compute(l.m_linearVelocity,l.m_angularVelocity,k.m_linearVelocity,k.m_angularVelocity);var g=-this.m_motorMass*i; +if(this.m_limitState==b2Joint.e_equalLimits){this.m_limitImpulse+=g}else{if(this.m_limitState==b2Joint.e_atLowerLimit){p=this.m_limitImpulse;this.m_limitImpulse=b2Math.b2Max(this.m_limitImpulse+g,0);g=this.m_limitImpulse-p}else{if(this.m_limitState==b2Joint.e_atUpperLimit){p=this.m_limitImpulse;this.m_limitImpulse=b2Math.b2Min(this.m_limitImpulse+g,0);g=this.m_limitImpulse-p}}}l.m_linearVelocity.x+=(q*g)*this.m_motorJacobian.linear1.x;l.m_linearVelocity.y+=(q*g)*this.m_motorJacobian.linear1.y;l.m_angularVelocity+=d*g*this.m_motorJacobian.angular1;k.m_linearVelocity.x+=(o*g)*this.m_motorJacobian.linear2.x;k.m_linearVelocity.y+=(o*g)*this.m_motorJacobian.linear2.y;k.m_angularVelocity+=c*g*this.m_motorJacobian.angular2}},SolvePositionConstraints:function(){var o;var y;var m=this.m_body1;var k=this.m_body2;var t=m.m_invMass;var s=k.m_invMass;var j=m.m_invI;var i=k.m_invI;var q;q=m.m_R;var E=q.col1.x*this.m_localAnchor1.x+q.col2.x*this.m_localAnchor1.y;var D=q.col1.y*this.m_localAnchor1.x+q.col2.y*this.m_localAnchor1.y; +q=k.m_R;var h=q.col1.x*this.m_localAnchor2.x+q.col2.x*this.m_localAnchor2.y;var g=q.col1.y*this.m_localAnchor2.x+q.col2.y*this.m_localAnchor2.y;var B=m.m_position.x+E;var z=m.m_position.y+D;var b=k.m_position.x+h;var a=k.m_position.y+g;var e=b-B;var c=a-z;q=m.m_R;var f=q.col1.x*this.m_localYAxis1.x+q.col2.x*this.m_localYAxis1.y;var d=q.col1.y*this.m_localYAxis1.x+q.col2.y*this.m_localYAxis1.y;var l=f*e+d*c;l=b2Math.b2Clamp(l,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);var x=-this.m_linearMass*l;m.m_position.x+=(t*x)*this.m_linearJacobian.linear1.x;m.m_position.y+=(t*x)*this.m_linearJacobian.linear1.y;m.m_rotation+=j*x*this.m_linearJacobian.angular1;k.m_position.x+=(s*x)*this.m_linearJacobian.linear2.x;k.m_position.y+=(s*x)*this.m_linearJacobian.linear2.y;k.m_rotation+=i*x*this.m_linearJacobian.angular2;var p=b2Math.b2Abs(l);var A=k.m_rotation-m.m_rotation-this.m_initialAngle;A=b2Math.b2Clamp(A,-b2Settings.b2_maxAngularCorrection,b2Settings.b2_maxAngularCorrection); +var r=-this.m_angularMass*A;m.m_rotation-=m.m_invI*r;m.m_R.Set(m.m_rotation);k.m_rotation+=k.m_invI*r;k.m_R.Set(k.m_rotation);var C=b2Math.b2Abs(A);if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){q=m.m_R;E=q.col1.x*this.m_localAnchor1.x+q.col2.x*this.m_localAnchor1.y;D=q.col1.y*this.m_localAnchor1.x+q.col2.y*this.m_localAnchor1.y;q=k.m_R;h=q.col1.x*this.m_localAnchor2.x+q.col2.x*this.m_localAnchor2.y;g=q.col1.y*this.m_localAnchor2.x+q.col2.y*this.m_localAnchor2.y;B=m.m_position.x+E;z=m.m_position.y+D;b=k.m_position.x+h;a=k.m_position.y+g;e=b-B;c=a-z;q=m.m_R;var v=q.col1.x*this.m_localXAxis1.x+q.col2.x*this.m_localXAxis1.y;var u=q.col1.y*this.m_localXAxis1.x+q.col2.y*this.m_localXAxis1.y;var n=(v*e+u*c);var w=0;if(this.m_limitState==b2Joint.e_equalLimits){o=b2Math.b2Clamp(n,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);w=-this.m_motorMass*o;p=b2Math.b2Max(p,b2Math.b2Abs(A))}else{if(this.m_limitState==b2Joint.e_atLowerLimit){o=n-this.m_lowerTranslation; +p=b2Math.b2Max(p,-o);o=b2Math.b2Clamp(o+b2Settings.b2_linearSlop,-b2Settings.b2_maxLinearCorrection,0);w=-this.m_motorMass*o;y=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Max(this.m_limitPositionImpulse+w,0);w=this.m_limitPositionImpulse-y}else{if(this.m_limitState==b2Joint.e_atUpperLimit){o=n-this.m_upperTranslation;p=b2Math.b2Max(p,o);o=b2Math.b2Clamp(o-b2Settings.b2_linearSlop,0,b2Settings.b2_maxLinearCorrection);w=-this.m_motorMass*o;y=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Min(this.m_limitPositionImpulse+w,0);w=this.m_limitPositionImpulse-y}}}m.m_position.x+=(t*w)*this.m_motorJacobian.linear1.x;m.m_position.y+=(t*w)*this.m_motorJacobian.linear1.y;m.m_rotation+=j*w*this.m_motorJacobian.angular1;m.m_R.Set(m.m_rotation);k.m_position.x+=(s*w)*this.m_motorJacobian.linear2.x;k.m_position.y+=(s*w)*this.m_motorJacobian.linear2.y;k.m_rotation+=i*w*this.m_motorJacobian.angular2;k.m_R.Set(k.m_rotation)}return p<=b2Settings.b2_linearSlop&&C<=b2Settings.b2_angularSlop +},m_localAnchor1:new b2Vec2(),m_localAnchor2:new b2Vec2(),m_localXAxis1:new b2Vec2(),m_localYAxis1:new b2Vec2(),m_initialAngle:null,m_linearJacobian:new b2Jacobian(),m_linearMass:null,m_linearImpulse:null,m_angularMass:null,m_angularImpulse:null,m_motorJacobian:new b2Jacobian(),m_motorMass:null,m_motorImpulse:null,m_limitImpulse:null,m_limitPositionImpulse:null,m_lowerTranslation:null,m_upperTranslation:null,m_maxMotorForce:null,m_motorSpeed:null,m_enableLimit:null,m_enableMotor:null,m_limitState:0});var b2PrismaticJointDef=function(){this.type=b2Joint.e_unknownJoint;this.userData=null;this.body1=null;this.body2=null;this.collideConnected=false;this.type=b2Joint.e_prismaticJoint;this.anchorPoint=new b2Vec2(0,0);this.axis=new b2Vec2(0,0);this.lowerTranslation=0;this.upperTranslation=0;this.motorForce=0;this.motorSpeed=0;this.enableLimit=false;this.enableMotor=false};Object.extend(b2PrismaticJointDef.prototype,b2JointDef.prototype);Object.extend(b2PrismaticJointDef.prototype,{anchorPoint:null,axis:null,lowerTranslation:null,upperTranslation:null,motorForce:null,motorSpeed:null,enableLimit:null,enableMotor:null,Initialize:function(b,a,d,c){this.body1=b;this.body2=a;this.anchorPoint=d;this.axis=c}});var b2PulleyJoint=function(d){this.m_node1=new b2JointNode();this.m_node2=new b2JointNode();this.m_type=d.type;this.m_prev=null;this.m_next=null;this.m_body1=d.body1;this.m_body2=d.body2;this.m_collideConnected=d.collideConnected;this.m_islandFlag=false;this.m_userData=d.userData;this.m_groundAnchor1=new b2Vec2();this.m_groundAnchor2=new b2Vec2();this.m_localAnchor1=new b2Vec2();this.m_localAnchor2=new b2Vec2();this.m_u1=new b2Vec2();this.m_u2=new b2Vec2();var b;var a;var h;this.m_ground=this.m_body1.m_world.m_groundBody;this.m_groundAnchor1.x=d.groundPoint1.x-this.m_ground.m_position.x;this.m_groundAnchor1.y=d.groundPoint1.y-this.m_ground.m_position.y;this.m_groundAnchor2.x=d.groundPoint2.x-this.m_ground.m_position.x;this.m_groundAnchor2.y=d.groundPoint2.y-this.m_ground.m_position.y;b=this.m_body1.m_R;a=d.anchorPoint1.x-this.m_body1.m_position.x;h=d.anchorPoint1.y-this.m_body1.m_position.y;this.m_localAnchor1.x=a*b.col1.x+h*b.col1.y;this.m_localAnchor1.y=a*b.col2.x+h*b.col2.y;b=this.m_body2.m_R; +a=d.anchorPoint2.x-this.m_body2.m_position.x;h=d.anchorPoint2.y-this.m_body2.m_position.y;this.m_localAnchor2.x=a*b.col1.x+h*b.col1.y;this.m_localAnchor2.y=a*b.col2.x+h*b.col2.y;this.m_ratio=d.ratio;a=d.groundPoint1.x-d.anchorPoint1.x;h=d.groundPoint1.y-d.anchorPoint1.y;var f=Math.sqrt(a*a+h*h);a=d.groundPoint2.x-d.anchorPoint2.x;h=d.groundPoint2.y-d.anchorPoint2.y;var c=Math.sqrt(a*a+h*h);var g=b2Math.b2Max(0.5*b2PulleyJoint.b2_minPulleyLength,f);var e=b2Math.b2Max(0.5*b2PulleyJoint.b2_minPulleyLength,c);this.m_constant=g+this.m_ratio*e;this.m_maxLength1=b2Math.b2Clamp(d.maxLength1,g,this.m_constant-this.m_ratio*b2PulleyJoint.b2_minPulleyLength);this.m_maxLength2=b2Math.b2Clamp(d.maxLength2,e,(this.m_constant-b2PulleyJoint.b2_minPulleyLength)/this.m_ratio);this.m_pulleyImpulse=0;this.m_limitImpulse1=0;this.m_limitImpulse2=0};Object.extend(b2PulleyJoint.prototype,b2Joint.prototype);Object.extend(b2PulleyJoint.prototype,{GetAnchor1:function(){var a=this.m_body1.m_R;return new b2Vec2(this.m_body1.m_position.x+(a.col1.x*this.m_localAnchor1.x+a.col2.x*this.m_localAnchor1.y),this.m_body1.m_position.y+(a.col1.y*this.m_localAnchor1.x+a.col2.y*this.m_localAnchor1.y)) +},GetAnchor2:function(){var a=this.m_body2.m_R;return new b2Vec2(this.m_body2.m_position.x+(a.col1.x*this.m_localAnchor2.x+a.col2.x*this.m_localAnchor2.y),this.m_body2.m_position.y+(a.col1.y*this.m_localAnchor2.x+a.col2.y*this.m_localAnchor2.y))},GetGroundPoint1:function(){return new b2Vec2(this.m_ground.m_position.x+this.m_groundAnchor1.x,this.m_ground.m_position.y+this.m_groundAnchor1.y)},GetGroundPoint2:function(){return new b2Vec2(this.m_ground.m_position.x+this.m_groundAnchor2.x,this.m_ground.m_position.y+this.m_groundAnchor2.y)},GetReactionForce:function(a){return new b2Vec2()},GetReactionTorque:function(a){return 0},GetLength1:function(){var e;e=this.m_body1.m_R;var d=this.m_body1.m_position.x+(e.col1.x*this.m_localAnchor1.x+e.col2.x*this.m_localAnchor1.y);var c=this.m_body1.m_position.y+(e.col1.y*this.m_localAnchor1.x+e.col2.y*this.m_localAnchor1.y);var b=d-(this.m_ground.m_position.x+this.m_groundAnchor1.x);var a=c-(this.m_ground.m_position.y+this.m_groundAnchor1.y);return Math.sqrt(b*b+a*a) +},GetLength2:function(){var e;e=this.m_body2.m_R;var d=this.m_body2.m_position.x+(e.col1.x*this.m_localAnchor2.x+e.col2.x*this.m_localAnchor2.y);var c=this.m_body2.m_position.y+(e.col1.y*this.m_localAnchor2.x+e.col2.y*this.m_localAnchor2.y);var b=d-(this.m_ground.m_position.x+this.m_groundAnchor2.x);var a=c-(this.m_ground.m_position.y+this.m_groundAnchor2.y);return Math.sqrt(b*b+a*a)},GetRatio:function(){return this.m_ratio},PrepareVelocitySolver:function(){var h=this.m_body1;var g=this.m_body2;var l;l=h.m_R;var v=l.col1.x*this.m_localAnchor1.x+l.col2.x*this.m_localAnchor1.y;var u=l.col1.y*this.m_localAnchor1.x+l.col2.y*this.m_localAnchor1.y;l=g.m_R;var f=l.col1.x*this.m_localAnchor2.x+l.col2.x*this.m_localAnchor2.y;var e=l.col1.y*this.m_localAnchor2.x+l.col2.y*this.m_localAnchor2.y;var t=h.m_position.x+v;var r=h.m_position.y+u;var d=g.m_position.x+f;var c=g.m_position.y+e;var m=this.m_ground.m_position.x+this.m_groundAnchor1.x;var k=this.m_ground.m_position.y+this.m_groundAnchor1.y;var s=this.m_ground.m_position.x+this.m_groundAnchor2.x; +var q=this.m_ground.m_position.y+this.m_groundAnchor2.y;this.m_u1.Set(t-m,r-k);this.m_u2.Set(d-s,c-q);var p=this.m_u1.Length();var o=this.m_u2.Length();if(p>b2Settings.b2_linearSlop){this.m_u1.Multiply(1/p)}else{this.m_u1.SetZero()}if(o>b2Settings.b2_linearSlop){this.m_u2.Multiply(1/o)}else{this.m_u2.SetZero()}if(pb2Settings.b2_linearSlop){this.m_u1.Multiply(1/n)}else{this.m_u1.SetZero()}if(m>b2Settings.b2_linearSlop){this.m_u2.Multiply(1/m)}else{this.m_u2.SetZero()}l=this.m_constant-n-this.m_ratio*m;e=b2Math.b2Max(e,Math.abs(l));l=b2Math.b2Clamp(l,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);h=-this.m_pulleyMass*l;r=-h*this.m_u1.x;p=-h*this.m_u1.y;b=-this.m_ratio*h*this.m_u2.x;a=-this.m_ratio*h*this.m_u2.y;g.m_position.x+=g.m_invMass*r;g.m_position.y+=g.m_invMass*p;g.m_rotation+=g.m_invI*(u*p-t*r);f.m_position.x+=f.m_invMass*b;f.m_position.y+=f.m_invMass*a;f.m_rotation+=f.m_invI*(d*a-c*b);g.m_R.Set(g.m_rotation);f.m_R.Set(f.m_rotation);if(this.m_limitState1==b2Joint.e_atUpperLimit){j=g.m_R;u=j.col1.x*this.m_localAnchor1.x+j.col2.x*this.m_localAnchor1.y;t=j.col1.y*this.m_localAnchor1.x+j.col2.y*this.m_localAnchor1.y; +r=g.m_position.x+u;p=g.m_position.y+t;this.m_u1.Set(r-k,p-i);n=this.m_u1.Length();if(n>b2Settings.b2_linearSlop){this.m_u1.x*=1/n;this.m_u1.y*=1/n}else{this.m_u1.SetZero()}l=this.m_maxLength1-n;e=b2Math.b2Max(e,-l);l=b2Math.b2Clamp(l+b2Settings.b2_linearSlop,-b2Settings.b2_maxLinearCorrection,0);h=-this.m_limitMass1*l;s=this.m_limitPositionImpulse1;this.m_limitPositionImpulse1=b2Math.b2Max(0,this.m_limitPositionImpulse1+h);h=this.m_limitPositionImpulse1-s;r=-h*this.m_u1.x;p=-h*this.m_u1.y;g.m_position.x+=g.m_invMass*r;g.m_position.y+=g.m_invMass*p;g.m_rotation+=g.m_invI*(u*p-t*r);g.m_R.Set(g.m_rotation)}if(this.m_limitState2==b2Joint.e_atUpperLimit){j=f.m_R;d=j.col1.x*this.m_localAnchor2.x+j.col2.x*this.m_localAnchor2.y;c=j.col1.y*this.m_localAnchor2.x+j.col2.y*this.m_localAnchor2.y;b=f.m_position.x+d;a=f.m_position.y+c;this.m_u2.Set(b-q,a-o);m=this.m_u2.Length();if(m>b2Settings.b2_linearSlop){this.m_u2.x*=1/m;this.m_u2.y*=1/m}else{this.m_u2.SetZero()}l=this.m_maxLength2-m;e=b2Math.b2Max(e,-l); +l=b2Math.b2Clamp(l+b2Settings.b2_linearSlop,-b2Settings.b2_maxLinearCorrection,0);h=-this.m_limitMass2*l;s=this.m_limitPositionImpulse2;this.m_limitPositionImpulse2=b2Math.b2Max(0,this.m_limitPositionImpulse2+h);h=this.m_limitPositionImpulse2-s;b=-h*this.m_u2.x;a=-h*this.m_u2.y;f.m_position.x+=f.m_invMass*b;f.m_position.y+=f.m_invMass*a;f.m_rotation+=f.m_invI*(d*a-c*b);f.m_R.Set(f.m_rotation)}return e=this.m_upperAngle){if(this.m_limitState!=b2Joint.e_atUpperLimit){this.m_limitImpulse=0}this.m_limitState=b2Joint.e_atUpperLimit}else{this.m_limitState=b2Joint.e_inactiveLimit;this.m_limitImpulse=0}}}}else{this.m_limitImpulse=0}if(b2World.s_enableWarmStarting){h.m_linearVelocity.x-=l*this.m_ptpImpulse.x;h.m_linearVelocity.y-=l*this.m_ptpImpulse.y;h.m_angularVelocity-=c*((k*this.m_ptpImpulse.y-i*this.m_ptpImpulse.x)+this.m_motorImpulse+this.m_limitImpulse); +g.m_linearVelocity.x+=j*this.m_ptpImpulse.x;g.m_linearVelocity.y+=j*this.m_ptpImpulse.y;g.m_angularVelocity+=b*((e*this.m_ptpImpulse.y-d*this.m_ptpImpulse.x)+this.m_motorImpulse+this.m_limitImpulse)}else{this.m_ptpImpulse.SetZero();this.m_motorImpulse=0;this.m_limitImpulse=0}this.m_limitPositionImpulse=0},SolveVelocityConstraints:function(f){var g=this.m_body1;var e=this.m_body2;var i;i=g.m_R;var o=i.col1.x*this.m_localAnchor1.x+i.col2.x*this.m_localAnchor1.y;var n=i.col1.y*this.m_localAnchor1.x+i.col2.y*this.m_localAnchor1.y;i=e.m_R;var b=i.col1.x*this.m_localAnchor2.x+i.col2.x*this.m_localAnchor2.y;var a=i.col1.y*this.m_localAnchor2.x+i.col2.y*this.m_localAnchor2.y;var k;var q=e.m_linearVelocity.x+(-e.m_angularVelocity*a)-g.m_linearVelocity.x-(-g.m_angularVelocity*n);var p=e.m_linearVelocity.y+(e.m_angularVelocity*b)-g.m_linearVelocity.y-(g.m_angularVelocity*o);var m=-(this.m_ptpMass.col1.x*q+this.m_ptpMass.col2.x*p);var l=-(this.m_ptpMass.col1.y*q+this.m_ptpMass.col2.y*p);this.m_ptpImpulse.x+=m; +this.m_ptpImpulse.y+=l;g.m_linearVelocity.x-=g.m_invMass*m;g.m_linearVelocity.y-=g.m_invMass*l;g.m_angularVelocity-=g.m_invI*(o*l-n*m);e.m_linearVelocity.x+=e.m_invMass*m;e.m_linearVelocity.y+=e.m_invMass*l;e.m_angularVelocity+=e.m_invI*(b*l-a*m);if(this.m_enableMotor&&this.m_limitState!=b2Joint.e_equalLimits){var r=e.m_angularVelocity-g.m_angularVelocity-this.m_motorSpeed;var c=-this.m_motorMass*r;var d=this.m_motorImpulse;this.m_motorImpulse=b2Math.b2Clamp(this.m_motorImpulse+c,-f.dt*this.m_maxMotorTorque,f.dt*this.m_maxMotorTorque);c=this.m_motorImpulse-d;g.m_angularVelocity-=g.m_invI*c;e.m_angularVelocity+=e.m_invI*c}if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){var h=e.m_angularVelocity-g.m_angularVelocity;var j=-this.m_motorMass*h;if(this.m_limitState==b2Joint.e_equalLimits){this.m_limitImpulse+=j}else{if(this.m_limitState==b2Joint.e_atLowerLimit){k=this.m_limitImpulse;this.m_limitImpulse=b2Math.b2Max(this.m_limitImpulse+j,0);j=this.m_limitImpulse-k}else{if(this.m_limitState==b2Joint.e_atUpperLimit){k=this.m_limitImpulse; +this.m_limitImpulse=b2Math.b2Min(this.m_limitImpulse+j,0);j=this.m_limitImpulse-k}}}g.m_angularVelocity-=g.m_invI*j;e.m_angularVelocity+=e.m_invI*j}},SolvePositionConstraints:function(){var s;var m;var l=this.m_body1;var k=this.m_body2;var o=0;var n;n=l.m_R;var y=n.col1.x*this.m_localAnchor1.x+n.col2.x*this.m_localAnchor1.y;var x=n.col1.y*this.m_localAnchor1.x+n.col2.y*this.m_localAnchor1.y;n=k.m_R;var f=n.col1.x*this.m_localAnchor2.x+n.col2.x*this.m_localAnchor2.y;var e=n.col1.y*this.m_localAnchor2.x+n.col2.y*this.m_localAnchor2.y;var u=l.m_position.x+y;var t=l.m_position.y+x;var d=k.m_position.x+f;var c=k.m_position.y+e;var j=d-u;var i=c-t;o=Math.sqrt(j*j+i*i);var q=l.m_invMass;var p=k.m_invMass;var h=l.m_invI;var g=k.m_invI;this.K1.col1.x=q+p;this.K1.col2.x=0;this.K1.col1.y=0;this.K1.col2.y=q+p;this.K2.col1.x=h*x*x;this.K2.col2.x=-h*y*x;this.K2.col1.y=-h*y*x;this.K2.col2.y=h*y*y;this.K3.col1.x=g*e*e;this.K3.col2.x=-g*f*e;this.K3.col1.y=-g*f*e;this.K3.col2.y=g*f*f;this.K.SetM(this.K1); +this.K.AddM(this.K2);this.K.AddM(this.K3);this.K.Solve(b2RevoluteJoint.tImpulse,-j,-i);var b=b2RevoluteJoint.tImpulse.x;var a=b2RevoluteJoint.tImpulse.y;l.m_position.x-=l.m_invMass*b;l.m_position.y-=l.m_invMass*a;l.m_rotation-=l.m_invI*(y*a-x*b);l.m_R.Set(l.m_rotation);k.m_position.x+=k.m_invMass*b;k.m_position.y+=k.m_invMass*a;k.m_rotation+=k.m_invI*(f*a-e*b);k.m_R.Set(k.m_rotation);var w=0;if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){var v=k.m_rotation-l.m_rotation-this.m_intialAngle;var r=0;if(this.m_limitState==b2Joint.e_equalLimits){m=b2Math.b2Clamp(v,-b2Settings.b2_maxAngularCorrection,b2Settings.b2_maxAngularCorrection);r=-this.m_motorMass*m;w=b2Math.b2Abs(m)}else{if(this.m_limitState==b2Joint.e_atLowerLimit){m=v-this.m_lowerAngle;w=b2Math.b2Max(0,-m);m=b2Math.b2Clamp(m+b2Settings.b2_angularSlop,-b2Settings.b2_maxAngularCorrection,0);r=-this.m_motorMass*m;s=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Max(this.m_limitPositionImpulse+r,0); +r=this.m_limitPositionImpulse-s}else{if(this.m_limitState==b2Joint.e_atUpperLimit){m=v-this.m_upperAngle;w=b2Math.b2Max(0,m);m=b2Math.b2Clamp(m-b2Settings.b2_angularSlop,0,b2Settings.b2_maxAngularCorrection);r=-this.m_motorMass*m;s=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Min(this.m_limitPositionImpulse+r,0);r=this.m_limitPositionImpulse-s}}}l.m_rotation-=l.m_invI*r;l.m_R.Set(l.m_rotation);k.m_rotation+=k.m_invI*r;k.m_R.Set(k.m_rotation)}return o<=b2Settings.b2_linearSlop&&w<=b2Settings.b2_angularSlop},m_localAnchor1:new b2Vec2(),m_localAnchor2:new b2Vec2(),m_ptpImpulse:new b2Vec2(),m_motorImpulse:null,m_limitImpulse:null,m_limitPositionImpulse:null,m_ptpMass:new b2Mat22(),m_motorMass:null,m_intialAngle:null,m_lowerAngle:null,m_upperAngle:null,m_maxMotorTorque:null,m_motorSpeed:null,m_enableLimit:null,m_enableMotor:null,m_limitState:0});b2RevoluteJoint.tImpulse=new b2Vec2();var b2RevoluteJointDef=function(){this.type=b2Joint.e_unknownJoint;this.userData=null;this.body1=null;this.body2=null;this.collideConnected=false;this.type=b2Joint.e_revoluteJoint;this.anchorPoint=new b2Vec2(0,0);this.lowerAngle=0;this.upperAngle=0;this.motorTorque=0;this.motorSpeed=0;this.enableLimit=false;this.enableMotor=false};Object.extend(b2RevoluteJointDef.prototype,b2JointDef.prototype);Object.extend(b2RevoluteJointDef.prototype,{anchorPoint:null,lowerAngle:null,upperAngle:null,motorTorque:null,motorSpeed:null,enableLimit:null,enableMotor:null,Initialize:function(b,a,c){this.body1=b;this.body2=a;this.anchorPoint=c}}); \ No newline at end of file diff --git a/examples/example 24 - Box2D Integration/box2d.min.js b/examples/example 24 - Box2D Integration/box2d.min.js new file mode 100644 index 0000000..1b579fd --- /dev/null +++ b/examples/example 24 - Box2D Integration/box2d.min.js @@ -0,0 +1,112 @@ +var b2Settings=function(){};b2Settings.prototype={};b2Settings.USHRT_MAX=65535;b2Settings.b2_pi=Math.PI;b2Settings.b2_massUnitsPerKilogram=1;b2Settings.b2_timeUnitsPerSecond=1;b2Settings.b2_lengthUnitsPerMeter=30;b2Settings.b2_maxManifoldPoints=2;b2Settings.b2_maxShapesPerBody=64;b2Settings.b2_maxPolyVertices=8;b2Settings.b2_maxProxies=1024;b2Settings.b2_maxPairs=8*b2Settings.b2_maxProxies;b2Settings.b2_linearSlop=0.005*b2Settings.b2_lengthUnitsPerMeter;b2Settings.b2_angularSlop=2/180*b2Settings.b2_pi;b2Settings.b2_velocityThreshold=1*b2Settings.b2_lengthUnitsPerMeter/b2Settings.b2_timeUnitsPerSecond;b2Settings.b2_maxLinearCorrection=0.2*b2Settings.b2_lengthUnitsPerMeter;b2Settings.b2_maxAngularCorrection=8/180*b2Settings.b2_pi;b2Settings.b2_contactBaumgarte=0.2;b2Settings.b2_timeToSleep=0.5*b2Settings.b2_timeUnitsPerSecond;b2Settings.b2_linearSleepTolerance=0.01*b2Settings.b2_lengthUnitsPerMeter/b2Settings.b2_timeUnitsPerSecond;b2Settings.b2_angularSleepTolerance=2/180/b2Settings.b2_timeUnitsPerSecond; +b2Settings.b2Assert=function(b){if(!b){var c;c.x++}};Object.extend=function(a,c){for(var b in c){a[b]=c[b]}return a};var b2Vec2=function(a,b){this.x=a;this.y=b};b2Vec2.prototype={SetZero:function(){this.x=0;this.y=0},Set:function(a,b){this.x=a;this.y=b},SetV:function(a){this.x=a.x;this.y=a.y},Negative:function(){return new b2Vec2(-this.x,-this.y)},Copy:function(){return new b2Vec2(this.x,this.y)},Add:function(a){this.x+=a.x;this.y+=a.y},Subtract:function(a){this.x-=a.x;this.y-=a.y},Multiply:function(b){this.x*=b;this.y*=b},MulM:function(b){var a=this.x;this.x=b.col1.x*a+b.col2.x*this.y;this.y=b.col1.y*a+b.col2.y*this.y},MulTM:function(b){var a=b2Math.b2Dot(this,b.col1);this.y=b2Math.b2Dot(this,b.col2);this.x=a},CrossVF:function(b){var a=this.x;this.x=b*this.y;this.y=-b*a},CrossFV:function(b){var a=this.x;this.x=-b*this.y;this.y=b*a},MinV:function(a){this.x=this.xa.x?this.x:a.x;this.y=this.y>a.y?this.y:a.y},Abs:function(){this.x=Math.abs(this.x);this.y=Math.abs(this.y)},Length:function(){return Math.sqrt(this.x*this.x+this.y*this.y) +},Normalize:function(){var b=this.Length();if(b0?b:-b};b2Math.b2AbsV=function(d){var c=new b2Vec2(b2Math.b2Abs(d.x),b2Math.b2Abs(d.y));return c};b2Math.b2AbsM=function(a){var b=new b2Mat22(0,b2Math.b2AbsV(a.col1),b2Math.b2AbsV(a.col2));return b};b2Math.b2Min=function(d,c){return dc?d:c};b2Math.b2MaxV=function(e,d){var f=new b2Vec2(b2Math.b2Max(e.x,d.x),b2Math.b2Max(e.y,d.y));return f};b2Math.b2Clamp=function(c,b,d){return b2Math.b2Max(b,b2Math.b2Min(c,d))};b2Math.b2ClampV=function(c,b,d){return b2Math.b2MaxV(b,b2Math.b2MinV(c,d))};b2Math.b2Swap=function(d,c){var e=d[0];d[0]=c[0];c[0]=e};b2Math.b2Random=function(){return Math.random()*2-1};b2Math.b2NextPowerOfTwo=function(a){a|=(a>>1)&2147483647;a|=(a>>2)&1073741823;a|=(a>>4)&268435455;a|=(a>>8)&16777215; +a|=(a>>16)&65535;return a+1};b2Math.b2IsPowerOfTwo=function(b){var a=b>0&&(b&(b-1))==0;return a};b2Math.tempVec2=new b2Vec2();b2Math.tempVec3=new b2Vec2();b2Math.tempVec4=new b2Vec2();b2Math.tempVec5=new b2Vec2();b2Math.tempMat=new b2Mat22();var b2AABB=function(){this.minVertex=new b2Vec2();this.maxVertex=new b2Vec2()};b2AABB.prototype={IsValid:function(){var b=this.maxVertex.x;var a=this.maxVertex.y;b=this.maxVertex.x;a=this.maxVertex.y;b-=this.minVertex.x;a-=this.minVertex.y;var c=b>=0&&a>=0;c=c&&this.minVertex.IsValid()&&this.maxVertex.IsValid();return c},minVertex:new b2Vec2(),maxVertex:new b2Vec2()};var b2Bound=function(){};b2Bound.prototype={IsLower:function(){return(this.value&1)==0},IsUpper:function(){return(this.value&1)==1},Swap:function(c){var e=this.value;var d=this.proxyId;var a=this.stabbingCount;this.value=c.value;this.proxyId=c.proxyId;this.stabbingCount=c.stabbingCount;c.value=e;c.proxyId=d;c.stabbingCount=a},value:0,proxyId:0,stabbingCount:0};var b2BoundValues=function(){this.lowerValues=[0,0];this.upperValues=[0,0]};b2BoundValues.prototype={lowerValues:[0,0],upperValues:[0,0]};var b2Pair=function(){};b2Pair.prototype={SetBuffered:function(){this.status|=b2Pair.e_pairBuffered},ClearBuffered:function(){this.status&=~b2Pair.e_pairBuffered},IsBuffered:function(){return(this.status&b2Pair.e_pairBuffered)==b2Pair.e_pairBuffered},SetRemoved:function(){this.status|=b2Pair.e_pairRemoved},ClearRemoved:function(){this.status&=~b2Pair.e_pairRemoved},IsRemoved:function(){return(this.status&b2Pair.e_pairRemoved)==b2Pair.e_pairRemoved},SetFinal:function(){this.status|=b2Pair.e_pairFinal},IsFinal:function(){return(this.status&b2Pair.e_pairFinal)==b2Pair.e_pairFinal},userData:null,proxyId1:0,proxyId2:0,next:0,status:0};b2Pair.b2_nullPair=b2Settings.USHRT_MAX;b2Pair.b2_nullProxy=b2Settings.USHRT_MAX;b2Pair.b2_tableCapacity=b2Settings.b2_maxPairs;b2Pair.b2_tableMask=b2Pair.b2_tableCapacity-1;b2Pair.e_pairBuffered=1;b2Pair.e_pairRemoved=2;b2Pair.e_pairFinal=4;var b2PairCallback=function(){};b2PairCallback.prototype={PairAdded:function(b,a){return null},PairRemoved:function(c,b,a){}};var b2BufferedPair=function(){};b2BufferedPair.prototype={proxyId1:0,proxyId2:0};var b2PairManager=function(){var a=0;this.m_hashTable=new Array(b2Pair.b2_tableCapacity);for(a=0;aa){var c=b;b=a;a=c}var d=b2PairManager.Hash(b,a)&b2Pair.b2_tableMask;var f=f=this.FindHash(b,a,d);if(f!=null){return f}var e=this.m_freePair;f=this.m_pairs[e];this.m_freePair=f.next;f.proxyId1=b;f.proxyId2=a;f.status=0;f.userData=null;f.next=this.m_hashTable[d];this.m_hashTable[d]=e;++this.m_pairCount;return f},RemovePair:function(g,f){if(g>f){var i=g;g=f;f=i}var d=b2PairManager.Hash(g,f)&b2Pair.b2_tableMask;var b=this.m_hashTable[d];var h=null;while(b!=b2Pair.b2_nullPair){if(b2PairManager.Equals(this.m_pairs[b],g,f)){var e=b;if(h){h.next=this.m_pairs[b].next}else{this.m_hashTable[d]=this.m_pairs[b].next}var c=this.m_pairs[e];var a=c.userData;c.next=this.m_freePair;c.proxyId1=b2Pair.b2_nullProxy;c.proxyId2=b2Pair.b2_nullProxy;c.userData=null;c.status=0;this.m_freePair=e;--this.m_pairCount;return a}else{h=this.m_pairs[b];b=h.next}}return null},Find:function(b,a){if(b>a){var c=b;b=a;a=c +}var d=b2PairManager.Hash(b,a)&b2Pair.b2_tableMask;return this.FindHash(b,a,d)},FindHash:function(b,a,d){var c=this.m_hashTable[d];while(c!=b2Pair.b2_nullPair&&b2PairManager.Equals(this.m_pairs[c],b,a)==false){c=this.m_pairs[c].next}if(c==b2Pair.b2_nullPair){return null}return this.m_pairs[c]},ValidateBuffer:function(){},ValidateTable:function(){},m_broadPhase:null,m_callback:null,m_pairs:null,m_freePair:0,m_pairCount:0,m_pairBuffer:null,m_pairBufferCount:0,m_hashTable:null};b2PairManager.Hash=function(b,a){var c=((a<<16)&4294901760)|b;c=~c+((c<<15)&4294934528);c=c^((c>>12)&1048575);c=c+((c<<2)&4294967292);c=c^((c>>4)&268435455);c=c*2057;c=c^((c>>16)&65535);return c};b2PairManager.Equals=function(c,b,a){return(c.proxyId1==b&&c.proxyId2==a)};b2PairManager.EqualsPair=function(b,a){return b.proxyId1==a.proxyId1&&b.proxyId2==a.proxyId2};var b2BroadPhase=function(f,g){this.m_pairManager=new b2PairManager();this.m_proxyPool=new Array(b2Settings.b2_maxPairs);this.m_bounds=new Array(2*b2Settings.b2_maxProxies);this.m_queryResults=new Array(b2Settings.b2_maxProxies);this.m_quantizationFactor=new b2Vec2();var d=0;this.m_pairManager.Initialize(this,g);this.m_worldAABB=f;this.m_proxyCount=0;for(d=0;d0&&t0){g=m;while(g0){g=k;while(g0&&bb[c.upperBounds[a]].value){return false}if(b[d.upperBounds[a]].valued[e.upperBounds[c]].value){return false}if(a.upperValues[c]0){var g=c-1;var n=a[g].stabbingCount;while(n){if(a[g].IsLower()){var k=this.m_proxyPool[a[g].proxyId];if(c<=k.upperBounds[b]){this.IncrementOverlapCount(a[g].proxyId);--n}}--g}}h[0]=c;d[0]=l},IncrementOverlapCount:function(b){var a=this.m_proxyPool[b];if(a.timeStampf){e=b-1}else{if(d[b].value0){f[c].id=b[0].id}else{f[c].id=b[1].id}++c}return c};b2Collision.EdgeSeparation=function(p,q,o){var f=p.m_vertices;var g=o.m_vertexCount;var r=o.m_vertices;var e=p.m_normals[q].x;var d=p.m_normals[q].y;var s=e;var l=p.m_R;e=l.col1.x*s+l.col2.x*d;d=l.col1.y*s+l.col2.y*d;var v=e;var u=d;l=o.m_R;s=v*l.col1.x+u*l.col1.y;u=v*l.col2.x+u*l.col2.y;v=s;var n=0;var m=Number.MAX_VALUE;for(var w=0;wa){a=o;h=p}}var n=b2Collision.EdgeSeparation(m,h,l);if(n>0&&w==false){return n}var g=h-1>=0?h-1:j-1;var t=b2Collision.EdgeSeparation(m,g,l);if(t>0&&w==false){return t}var q=h+10&&w==false){return u}var b=0;var k;var v=0;if(t>n&&t>u){v=-1;b=g;k=t}else{if(u>n){v=1;b=q;k=u}else{r[0]=h;return n}}while(true){if(v==-1){h=b-1>=0?b-1:j-1}else{h=b+10&&w==false){return n}if(n>k){b=h;k=n}else{break}}r[0]=b;return k};b2Collision.FindIncidentEdge=function(D,p,q,n){var h=p.m_vertexCount;var f=p.m_vertices;var g=n.m_vertexCount;var s=n.m_vertices;var a=q; +var F=q+1==h?0:q+1;var e=f[F];var C=e.x;var A=e.y;e=f[a];C-=e.x;A-=e.y;var v=C;C=A;A=-v;var E=1/Math.sqrt(C*C+A*A);C*=E;A*=E;var r=C;var o=A;v=r;var l=p.m_R;r=l.col1.x*v+l.col2.x*o;o=l.col1.y*v+l.col2.y*o;var d=r;var b=o;l=n.m_R;v=d*l.col1.x+b*l.col1.y;b=d*l.col2.x+b*l.col2.y;d=v;var k=0;var j=0;var m=Number.MAX_VALUE;for(var B=0;B0&&b==false){return +}var K=0;var g=[K];var E=b2Collision.FindMaxSeparation(g,j,k,b);K=g[0];if(E>0&&b==false){return}var p;var o;var a=0;var R=0;var d=0.98;var O=0.001;if(E>d*F+O){p=j;o=k;a=K;R=1}else{p=k;o=j;a=M;R=0}var c=[new ClipVertex(),new ClipVertex()];b2Collision.FindIncidentEdge(c,p,a,o);var B=p.m_vertexCount;var q=p.m_vertices;var I=q[a];var H=a+1l*l&&b==false){return}var d;if(mg){return}if(t>o){o=t;B=A}}if(og){return}x.pointCount=1;x.normal.Set(n.col1.x*e+n.col2.x*d,n.col1.y*e+n.col2.y*d);h=x.points[0];h.id.features.incidentEdge=b2Collision.b2_nullFeature;h.id.features.incidentVertex=b;h.id.features.referenceFace=b2Collision.b2_nullFeature;h.id.features.flip=0;h.position.x=k.m_position.x-g*x.normal.x;h.position.y=k.m_position.y-g*x.normal.y;h.separation=w-g;return}var q=(z-m.m_vertices[b].x)*r+(y-m.m_vertices[b].y)*p;h=x.points[0];h.id.features.incidentEdge=b2Collision.b2_nullFeature;h.id.features.incidentVertex=b2Collision.b2_nullFeature;h.id.features.referenceFace=b2Collision.b2_nullFeature;h.id.features.flip=0;var l,j;if(q<=0){l=m.m_vertices[b].x;j=m.m_vertices[b].y;h.id.features.incidentVertex=b}else{if(q>=f){l=m.m_vertices[a].x;j=m.m_vertices[a].y;h.id.features.incidentVertex=a}else{l=r*q+m.m_vertices[b].x;j=p*q+m.m_vertices[b].y;h.id.features.incidentEdge=b}}e=z-l;d=y-j;w=Math.sqrt(e*e+d*d);e/=w;d/=w;if(w>g){return}x.pointCount=1;x.normal.Set(n.col1.x*e+n.col2.x*d,n.col1.y*e+n.col2.y*d); +h.position.x=k.m_position.x-g*x.normal.x;h.position.y=k.m_position.y-g*x.normal.y;h.separation=w-g};b2Collision.b2TestOverlap=function(d,c){var i=c.minVertex;var g=d.maxVertex;var f=i.x-g.x;var e=i.y-g.y;i=d.minVertex;g=c.maxVertex;var j=i.x-g.x;var h=i.y-g.y;if(f>0||e>0){return false}if(j>0||h>0){return false}return true};var Features=function(){};Features.prototype={set_referenceFace:function(a){this._referenceFace=a;this._m_id._key=(this._m_id._key&4294967040)|(this._referenceFace&255)},get_referenceFace:function(){return this._referenceFace},_referenceFace:0,set_incidentEdge:function(a){this._incidentEdge=a;this._m_id._key=(this._m_id._key&4294902015)|((this._incidentEdge<<8)&65280)},get_incidentEdge:function(){return this._incidentEdge},_incidentEdge:0,set_incidentVertex:function(a){this._incidentVertex=a;this._m_id._key=(this._m_id._key&4278255615)|((this._incidentVertex<<16)&16711680)},get_incidentVertex:function(){return this._incidentVertex},_incidentVertex:0,set_flip:function(a){this._flip=a;this._m_id._key=(this._m_id._key&16777215)|((this._flip<<24)&4278190080)},get_flip:function(){return this._flip},_flip:0,_m_id:null};var b2ContactID=function(){this.features=new Features();this.features._m_id=this};b2ContactID.prototype={Set:function(a){this.set_key(a._key)},Copy:function(){var a=new b2ContactID();a.set_key(this._key);return a},get_key:function(){return this._key},set_key:function(a){this._key=a;this.features._referenceFace=this._key&255;this.features._incidentEdge=((this._key&65280)>>8)&255;this.features._incidentVertex=((this._key&16711680)>>16)&255;this.features._flip=((this._key&4278190080)>>24)&255},features:new Features(),_key:0};var b2ContactPoint=function(){this.position=new b2Vec2();this.id=new b2ContactID()};b2ContactPoint.prototype={position:new b2Vec2(),separation:null,normalImpulse:null,tangentImpulse:null,id:new b2ContactID()};var b2Distance=function(){};b2Distance.prototype={};b2Distance.ProcessTwo=function(j,h,b,k,i){var f=-i[1].x;var e=-i[1].y;var d=i[0].x-i[1].x;var c=i[0].y-i[1].y;var a=Math.sqrt(d*d+c*c);d/=a;c/=a;var g=f*d+e*c;if(g<=0||a=0&&F>=0){var B=x/(x+F);q.x=m[1].x+B*(m[2].x-m[1].x);q.y=m[1].y+B*(m[2].y-m[1].y);D.x=C[1].x+B*(C[2].x-C[1].x); +D.y=C[1].y+B*(C[2].y-C[1].y);m[0].SetV(m[2]);C[0].SetV(C[2]);G[0].SetV(G[2]);return 2}var f=E*(J*h-I*k);if(f<=0&&j>=0&&o>=0){var B=j/(j+o);q.x=m[0].x+B*(m[2].x-m[0].x);q.y=m[0].y+B*(m[2].y-m[0].y);D.x=C[0].x+B*(C[2].x-C[0].x);D.y=C[0].y+B*(C[2].y-C[0].y);m[1].SetV(m[2]);C[1].SetV(C[2]);G[1].SetV(G[2]);return 2}var d=g+f+e;d=1/d;var A=g*d;var t=f*d;var p=1-A-t;q.x=A*m[0].x+t*m[1].x+p*m[2].x;q.y=A*m[0].y+t*m[1].y+p*m[2].y;D.x=A*C[0].x+t*C[1].x+p*C[2].x;D.y=A*C[0].y+t*C[1].y+p*C[2].y;return 3};b2Distance.InPoinsts=function(a,c,d){for(var b=0;bNumber.MIN_VALUE){D*=1/d;C*=1/d}this.m_coreVertices[w].x=this.m_vertices[w].x-2*b2Settings.b2_linearSlop*D;this.m_coreVertices[w].y=this.m_vertices[w].y-2*b2Settings.b2_linearSlop*C}}var y=Number.MAX_VALUE;var x=Number.MAX_VALUE;var m=-Number.MAX_VALUE;var l=-Number.MAX_VALUE;this.m_maxRadius=0;for(w=0;w0){return false}}return true},syncAABB:new b2AABB(),syncMat:new b2Mat22(),Synchronize:function(c,e,a,b){this.m_R.SetM(b); +this.m_position.x=this.m_body.m_position.x+(b.col1.x*this.m_localCentroid.x+b.col2.x*this.m_localCentroid.y);this.m_position.y=this.m_body.m_position.y+(b.col1.y*this.m_localCentroid.x+b.col2.y*this.m_localCentroid.y);if(this.m_proxyId==b2Pair.b2_nullProxy){return}var m;var l;var k=e.col1;var j=e.col2;var i=this.m_localOBB.R.col1;var h=this.m_localOBB.R.col2;this.syncMat.col1.x=k.x*i.x+j.x*i.y;this.syncMat.col1.y=k.y*i.x+j.y*i.y;this.syncMat.col2.x=k.x*h.x+j.x*h.y;this.syncMat.col2.y=k.y*h.x+j.y*h.y;this.syncMat.Abs();m=this.m_localCentroid.x+this.m_localOBB.center.x;l=this.m_localCentroid.y+this.m_localOBB.center.y;var f=c.x+(e.col1.x*m+e.col2.x*l);var d=c.y+(e.col1.y*m+e.col2.y*l);m=this.syncMat.col1.x*this.m_localOBB.extents.x+this.syncMat.col2.x*this.m_localOBB.extents.y;l=this.syncMat.col1.y*this.m_localOBB.extents.x+this.syncMat.col2.y*this.m_localOBB.extents.y;this.syncAABB.minVertex.x=f-m;this.syncAABB.minVertex.y=d-l;this.syncAABB.maxVertex.x=f+m;this.syncAABB.maxVertex.y=d+l;k=b.col1; +j=b.col2;i=this.m_localOBB.R.col1;h=this.m_localOBB.R.col2;this.syncMat.col1.x=k.x*i.x+j.x*i.y;this.syncMat.col1.y=k.y*i.x+j.y*i.y;this.syncMat.col2.x=k.x*h.x+j.x*h.y;this.syncMat.col2.y=k.y*h.x+j.y*h.y;this.syncMat.Abs();m=this.m_localCentroid.x+this.m_localOBB.center.x;l=this.m_localCentroid.y+this.m_localOBB.center.y;f=a.x+(b.col1.x*m+b.col2.x*l);d=a.y+(b.col1.y*m+b.col2.y*l);m=this.syncMat.col1.x*this.m_localOBB.extents.x+this.syncMat.col2.x*this.m_localOBB.extents.y;l=this.syncMat.col1.y*this.m_localOBB.extents.x+this.syncMat.col2.y*this.m_localOBB.extents.y;this.syncAABB.minVertex.x=Math.min(this.syncAABB.minVertex.x,f-m);this.syncAABB.minVertex.y=Math.min(this.syncAABB.minVertex.y,d-l);this.syncAABB.maxVertex.x=Math.max(this.syncAABB.maxVertex.x,f+m);this.syncAABB.maxVertex.y=Math.max(this.syncAABB.maxVertex.y,d+l);var g=this.m_body.m_world.m_broadPhase;if(g.InRange(this.syncAABB)){g.MoveProxy(this.m_proxyId,this.syncAABB)}else{this.m_body.Freeze()}},QuickSync:function(a,b){this.m_R.SetM(b); +this.m_position.x=a.x+(b.col1.x*this.m_localCentroid.x+b.col2.x*this.m_localCentroid.y);this.m_position.y=a.y+(b.col1.y*this.m_localCentroid.x+b.col2.y*this.m_localCentroid.y)},ResetProxy:function(b){if(this.m_proxyId==b2Pair.b2_nullProxy){return}var e=b.GetProxy(this.m_proxyId);b.DestroyProxy(this.m_proxyId);e=null;var g=b2Math.b2MulMM(this.m_R,this.m_localOBB.R);var d=b2Math.b2AbsM(g);var f=b2Math.b2MulMV(d,this.m_localOBB.extents);var a=b2Math.b2MulMV(this.m_R,this.m_localOBB.center);a.Add(this.m_position);var c=new b2AABB();c.minVertex.SetV(a);c.minVertex.Subtract(f);c.maxVertex.SetV(a);c.maxVertex.Add(f);if(b.InRange(c)){this.m_proxyId=b.CreateProxy(c,this)}else{this.m_proxyId=b2Pair.b2_nullProxy}if(this.m_proxyId==b2Pair.b2_nullProxy){this.m_body.Freeze()}},Support:function(c,a,b){var g=(c*this.m_R.col1.x+a*this.m_R.col1.y);var f=(c*this.m_R.col2.x+a*this.m_R.col2.y);var e=0;var j=(this.m_coreVertices[0].x*g+this.m_coreVertices[0].y*f);for(var d=1;dj){e=d;j=h}}b.Set(this.m_position.x+(this.m_R.col1.x*this.m_coreVertices[e].x+this.m_R.col2.x*this.m_coreVertices[e].y),this.m_position.y+(this.m_R.col1.y*this.m_coreVertices[e].x+this.m_R.col2.y*this.m_coreVertices[e].y))},m_localCentroid:new b2Vec2(),m_localOBB:new b2OBB(),m_vertices:null,m_coreVertices:null,m_vertexCount:0,m_normals:null});b2PolyShape.tempVec=new b2Vec2();b2PolyShape.tAbsR=new b2Mat22();var b2Body=function(f,e){this.sMat0=new b2Mat22();this.m_position=new b2Vec2();this.m_R=new b2Mat22(0);this.m_position0=new b2Vec2();var c=0;var g;var a;this.m_flags=0;this.m_position.SetV(f.position);this.m_rotation=f.rotation;this.m_R.Set(this.m_rotation);this.m_position0.SetV(this.m_position);this.m_rotation0=this.m_rotation;this.m_world=e;this.m_linearDamping=b2Math.b2Clamp(1-f.linearDamping,0,1);this.m_angularDamping=b2Math.b2Clamp(1-f.angularDamping,0,1);this.m_force=new b2Vec2(0,0);this.m_torque=0;this.m_mass=0;var h=new Array(b2Settings.b2_maxShapesPerBody);for(c=0;c0){this.m_center.Multiply(1/this.m_mass);this.m_position.Add(b2Math.b2MulMV(this.m_R,this.m_center)) +}else{this.m_flags|=b2Body.e_staticFlag}this.m_I=0;for(c=0;c0){this.m_invMass=1/this.m_mass}else{this.m_invMass=0}if(this.m_I>0&&f.preventRotation==false){this.m_invI=1/this.m_I}else{this.m_I=0;this.m_invI=0}this.m_linearVelocity=b2Math.AddVV(f.linearVelocity,b2Math.b2CrossFV(f.angularVelocity,this.m_center));this.m_angularVelocity=f.angularVelocity;this.m_jointList=null;this.m_contactList=null;this.m_prev=null;this.m_next=null;this.m_shapeList=null;for(c=0;c0}var c=(b.m_maskBits&a.m_categoryBits)!=0&&(b.m_categoryBits&a.m_maskBits)!=0;return c}};b2CollisionFilter.b2_defaultFilter=new b2CollisionFilter;var b2Island=function(e,d,c,a){var b=0;this.m_bodyCapacity=e;this.m_contactCapacity=d;this.m_jointCapacity=c;this.m_bodyCount=0;this.m_contactCount=0;this.m_jointCount=0;this.m_bodies=new Array(e);for(b=0;bc||b2Math.b2Dot(a.m_linearVelocity,a.m_linearVelocity)>d){a.m_sleepTime=0;e=0}else{a.m_sleepTime+=g;e=b2Math.b2Min(e,a.m_sleepTime)}}if(e>=b2Settings.b2_timeToSleep){for(f=0;f0){a.m_shape1.m_body.WakeUp();a.m_shape2.m_body.WakeUp()}var d=a.m_shape1.m_type;var b=a.m_shape2.m_type;var e=b2Contact.s_registers[d][b].destroyFcn;e(a,c)};b2Contact.s_registers=null;b2Contact.s_initialized=false;var b2ContactConstraint=function(){this.normal=new b2Vec2();this.points=new Array(b2Settings.b2_maxManifoldPoints);for(var a=0;a0){b.velocityBias=-60*b.separation}var h=f+(-F*C)-u-(-G*Q);var g=d+(F*D)-s-(G*S);var P=V.normal.x*h+V.normal.y*g;if(P<-b2Settings.b2_velocityThreshold){b.velocityBias+=-V.restitution*P}}++L}}};b2ContactSolver.prototype={PreSolve:function(){var b;var A;var r;for(var w=0;w=-b2Settings.b2_linearSlop},PostSolve:function(){for(var d=0;d0){this.m_manifoldCount=1 +}else{this.m_manifoldCount=0}},GetManifolds:function(){return this.m_manifold},m_manifold:[new b2Manifold()]});b2CircleContact.Create=function(b,a,c){return new b2CircleContact(b,a)};b2CircleContact.Destroy=function(a,b){};var b2Conservative=function(){};b2Conservative.prototype={};b2Conservative.R1=new b2Mat22();b2Conservative.R2=new b2Mat22();b2Conservative.x1=new b2Vec2();b2Conservative.x2=new b2Vec2();b2Conservative.Conservative=function(k,j){var i=k.GetBody();var h=j.GetBody();var s=i.m_position.x-i.m_position0.x;var q=i.m_position.y-i.m_position0.y;var H=i.m_rotation-i.m_rotation0;var b=h.m_position.x-h.m_position0.x;var a=h.m_position.y-h.m_position0.y;var F=h.m_rotation-h.m_rotation0;var m=k.GetMaxRadius();var l=j.GetMaxRadius();var I=i.m_position0.x;var D=i.m_position0.y;var z=i.m_rotation0;var E=h.m_position0.x;var C=h.m_position0.y;var n=h.m_rotation0;var e=I;var c=D;var J=z;var B=E;var A=C;var G=n;b2Conservative.R1.Set(J);b2Conservative.R2.Set(G);k.QuickSync(p1,b2Conservative.R1);j.QuickSync(p2,b2Conservative.R2);var L=0;var o=10;var u;var t;var y=0;var v=true;for(var w=0;wFLT_EPSILON){d*=b2_linearSlop/p}if(i.IsStatic()){i.m_position.x=e;i.m_position.y=c}else{i.m_position.x=e-u;i.m_position.y=c-t}i.m_rotation=J;i.m_R.Set(J);i.QuickSyncShapes();if(h.IsStatic()){h.m_position.x=B;h.m_position.y=A}else{h.m_position.x=B+u;h.m_position.y=A+t}h.m_position.x=B+u;h.m_position.y=A+t;h.m_rotation=G;h.m_R.Set(G);h.QuickSyncShapes();return true +}k.QuickSync(i.m_position,i.m_R);j.QuickSync(h.m_position,h.m_R);return false};var b2NullContact=function(b,a){this.m_node1=new b2ContactNode();this.m_node2=new b2ContactNode();this.m_flags=0;if(!b||!a){this.m_shape1=null;this.m_shape2=null;return}this.m_shape1=b;this.m_shape2=a;this.m_manifoldCount=0;this.m_friction=Math.sqrt(this.m_shape1.m_friction*this.m_shape2.m_friction);this.m_restitution=b2Math.b2Max(this.m_shape1.m_restitution,this.m_shape2.m_restitution);this.m_prev=null;this.m_next=null;this.m_node1.contact=null;this.m_node1.prev=null;this.m_node1.next=null;this.m_node1.other=null;this.m_node2.contact=null;this.m_node2.prev=null;this.m_node2.next=null;this.m_node2.other=null};Object.extend(b2NullContact.prototype,b2Contact.prototype);Object.extend(b2NullContact.prototype,{Evaluate:function(){},GetManifolds:function(){return null}});var b2PolyAndCircleContact=function(b,a){this.m_node1=new b2ContactNode();this.m_node2=new b2ContactNode();this.m_flags=0;if(!b||!a){this.m_shape1=null;this.m_shape2=null;return}this.m_shape1=b;this.m_shape2=a;this.m_manifoldCount=0;this.m_friction=Math.sqrt(this.m_shape1.m_friction*this.m_shape2.m_friction);this.m_restitution=b2Math.b2Max(this.m_shape1.m_restitution,this.m_shape2.m_restitution);this.m_prev=null;this.m_next=null;this.m_node1.contact=null;this.m_node1.prev=null;this.m_node1.next=null;this.m_node1.other=null;this.m_node2.contact=null;this.m_node2.prev=null;this.m_node2.next=null;this.m_node2.other=null;this.m_manifold=[new b2Manifold()];b2Settings.b2Assert(this.m_shape1.m_type==b2Shape.e_polyShape);b2Settings.b2Assert(this.m_shape2.m_type==b2Shape.e_circleShape);this.m_manifold[0].pointCount=0;this.m_manifold[0].points[0].normalImpulse=0;this.m_manifold[0].points[0].tangentImpulse=0};Object.extend(b2PolyAndCircleContact.prototype,b2Contact.prototype);Object.extend(b2PolyAndCircleContact.prototype,{Evaluate:function(){b2Collision.b2CollidePolyAndCircle(this.m_manifold[0],this.m_shape1,this.m_shape2,false); +if(this.m_manifold[0].pointCount>0){this.m_manifoldCount=1}else{this.m_manifoldCount=0}},GetManifolds:function(){return this.m_manifold},m_manifold:[new b2Manifold()]});b2PolyAndCircleContact.Create=function(b,a,c){return new b2PolyAndCircleContact(b,a)};b2PolyAndCircleContact.Destroy=function(a,b){};var b2PolyContact=function(b,a){this.m_node1=new b2ContactNode();this.m_node2=new b2ContactNode();this.m_flags=0;if(!b||!a){this.m_shape1=null;this.m_shape2=null;return}this.m_shape1=b;this.m_shape2=a;this.m_manifoldCount=0;this.m_friction=Math.sqrt(this.m_shape1.m_friction*this.m_shape2.m_friction);this.m_restitution=b2Math.b2Max(this.m_shape1.m_restitution,this.m_shape2.m_restitution);this.m_prev=null;this.m_next=null;this.m_node1.contact=null;this.m_node1.prev=null;this.m_node1.next=null;this.m_node1.other=null;this.m_node2.contact=null;this.m_node2.prev=null;this.m_node2.next=null;this.m_node2.other=null;this.m0=new b2Manifold();this.m_manifold=[new b2Manifold()];this.m_manifold[0].pointCount=0};Object.extend(b2PolyContact.prototype,b2Contact.prototype);Object.extend(b2PolyContact.prototype,{m0:new b2Manifold(),Evaluate:function(){var a=this.m_manifold[0];var b=this.m0.points;for(var d=0;d0){var h=[false,false];for(var f=0;f0){var e=f.m_shape1.m_body;var d=f.m_shape2.m_body;var b=f.m_node1;var a=f.m_node2;e.WakeUp();d.WakeUp();if(b.prev){b.prev.next=b.next}if(b.next){b.next.prev=b.prev}if(b==e.m_contactList){e.m_contactList=b.next}b.prev=null;b.next=null;if(a.prev){a.prev.next=a.next}if(a.next){a.next.prev=a.prev}if(a==d.m_contactList){d.m_contactList=a.next}a.prev=null;a.next=null}b2Contact.Destroy(f,this.m_world.m_blockAllocator);--this.m_world.m_contactCount},CleanContactList:function(){var b=this.m_world.m_contactList;while(b!=null){var a=b;b=b.m_next;if(a.m_flags&b2Contact.e_destroyFlag){this.DestroyContact(a);a=null}}},Collide:function(){var f;var e;var d;var a;for(var h=this.m_world.m_contactList;h!=null;h=h.m_next){if(h.m_shape1.m_body.IsSleeping()&&h.m_shape2.m_body.IsSleeping()){continue +}var b=h.GetManifoldCount();h.Evaluate();var g=h.GetManifoldCount();if(b==0&&g>0){f=h.m_shape1.m_body;e=h.m_shape2.m_body;d=h.m_node1;a=h.m_node2;d.contact=h;d.other=e;d.prev=null;d.next=f.m_contactList;if(d.next!=null){d.next.prev=h.m_node1}f.m_contactList=h.m_node1;a.contact=h;a.other=f;a.prev=null;a.next=e.m_contactList;if(a.next!=null){a.next.prev=a}e.m_contactList=a}else{if(b>0&&g==0){f=h.m_shape1.m_body;e=h.m_shape2.m_body;d=h.m_node1;a=h.m_node2;if(d.prev){d.prev.next=d.next}if(d.next){d.next.prev=d.prev}if(d==f.m_contactList){f.m_contactList=d.next}d.prev=null;d.next=null;if(a.prev){a.prev.next=a.next}if(a.next){a.next.prev=a.prev}if(a==e.m_contactList){e.m_contactList=a.next}a.prev=null;a.next=null}}}},m_world:null,m_nullContact:new b2NullContact(),m_destroyImmediate:null});var b2World=function(a,d,c){this.step=new b2TimeStep();this.m_contactManager=new b2ContactManager();this.m_listener=null;this.m_filter=b2CollisionFilter.b2_defaultFilter;this.m_bodyList=null;this.m_contactList=null;this.m_jointList=null;this.m_bodyCount=0;this.m_contactCount=0;this.m_jointCount=0;this.m_bodyDestroyList=null;this.m_allowSleep=c;this.m_gravity=d;this.m_contactManager.m_world=this;this.m_broadPhase=new b2BroadPhase(a,this.m_contactManager);var b=new b2BodyDef();this.m_groundBody=this.CreateBody(b)};b2World.prototype={SetListener:function(a){this.m_listener=a},SetFilter:function(a){this.m_filter=a},CreateBody:function(c){var a=new b2Body(c,this);a.m_prev=null;a.m_next=this.m_bodyList;if(this.m_bodyList){this.m_bodyList.m_prev=a}this.m_bodyList=a;++this.m_bodyCount;return a},DestroyBody:function(a){if(a.m_flags&b2Body.e_destroyFlag){return}if(a.m_prev){a.m_prev.m_next=a.m_next}if(a.m_next){a.m_next.m_prev=a.m_prev}if(a==this.m_bodyList){this.m_bodyList=a.m_next}a.m_flags|=b2Body.e_destroyFlag; +--this.m_bodyCount;a.m_prev=null;a.m_next=this.m_bodyDestroyList;this.m_bodyDestroyList=a},CleanBodyList:function(){this.m_contactManager.m_destroyImmediate=true;var c=this.m_bodyDestroyList;while(c){var e=c;c=c.m_next;var d=e.m_jointList;while(d){var a=d;d=d.next;if(this.m_listener){this.m_listener.NotifyJointDestroyed(a.joint)}this.DestroyJoint(a.joint)}e.Destroy()}this.m_bodyDestroyList=null;this.m_contactManager.m_destroyImmediate=false},CreateJoint:function(e){var c=b2Joint.Create(e,this.m_blockAllocator);c.m_prev=null;c.m_next=this.m_jointList;if(this.m_jointList){this.m_jointList.m_prev=c}this.m_jointList=c;++this.m_jointCount;c.m_node1.joint=c;c.m_node1.other=c.m_body2;c.m_node1.prev=null;c.m_node1.next=c.m_body1.m_jointList;if(c.m_body1.m_jointList){c.m_body1.m_jointList.prev=c.m_node1}c.m_body1.m_jointList=c.m_node1;c.m_node2.joint=c;c.m_node2.other=c.m_body1;c.m_node2.prev=null;c.m_node2.next=c.m_body2.m_jointList;if(c.m_body2.m_jointList){c.m_body2.m_jointList.prev=c.m_node2 +}c.m_body2.m_jointList=c.m_node2;if(e.collideConnected==false){var a=e.body1.m_shapeCount0){this.step.inv_dt=1/a}else{this.step.inv_dt=0}this.m_positionIterationCount=0;this.m_contactManager.CleanContactList();this.CleanBodyList();this.m_contactManager.Collide();var n=new b2Island(this.m_bodyCount,this.m_contactCount,this.m_jointCount,this.m_stackAllocator);for(r=this.m_bodyList;r!=null;r=r.m_next){r.m_flags&=~b2Body.e_islandFlag}for(var p=this.m_contactList;p!=null;p=p.m_next){p.m_flags&=~b2Contact.e_islandFlag}for(var h=this.m_jointList;h!=null;h=h.m_next){h.m_islandFlag=false}var u=this.m_bodyCount;var q=new Array(this.m_bodyCount);for(var g=0;g0){r=q[--t];n.AddBody(r);r.m_flags&=~b2Body.e_sleepFlag; +if(r.m_flags&b2Body.e_staticFlag){continue}for(var s=r.m_contactList;s!=null;s=s.next){if(s.contact.m_flags&b2Contact.e_islandFlag){continue}n.AddContact(s.contact);s.contact.m_flags|=b2Contact.e_islandFlag;o=s.other;if(o.m_flags&b2Body.e_islandFlag){continue}q[t++]=o;o.m_flags|=b2Body.e_islandFlag}for(var f=r.m_jointList;f!=null;f=f.next){if(f.joint.m_islandFlag==true){continue}n.AddJoint(f.joint);f.joint.m_islandFlag=true;o=f.other;if(o.m_flags&b2Body.e_islandFlag){continue}q[t++]=o;o.m_flags|=b2Body.e_islandFlag}}n.Solve(this.step,this.m_gravity);this.m_positionIterationCount=b2Math.b2Max(this.m_positionIterationCount,b2Island.m_positionIterationCount);if(this.m_allowSleep){n.UpdateSleep(a)}for(var l=0;lb2Settings.b2_linearSlop){this.m_u.Multiply(1/a)}else{this.m_u.SetZero()}var h=(j*this.m_u.y-i*this.m_u.x);var d=(f*this.m_u.y-e*this.m_u.x);this.m_mass=this.m_body1.m_invMass+this.m_body1.m_invI*h*h+this.m_body2.m_invMass+this.m_body2.m_invI*d*d;this.m_mass=1/this.m_mass;if(b2World.s_enableWarmStarting){var c=this.m_impulse*this.m_u.x;var b=this.m_impulse*this.m_u.y;this.m_body1.m_linearVelocity.x-=this.m_body1.m_invMass*c;this.m_body1.m_linearVelocity.y-=this.m_body1.m_invMass*b;this.m_body1.m_angularVelocity-=this.m_body1.m_invI*(j*b-i*c); +this.m_body2.m_linearVelocity.x+=this.m_body2.m_invMass*c;this.m_body2.m_linearVelocity.y+=this.m_body2.m_invMass*b;this.m_body2.m_angularVelocity+=this.m_body2.m_invI*(f*b-e*c)}else{this.m_impulse=0}},SolveVelocityConstraints:function(b){var j;j=this.m_body1.m_R;var n=j.col1.x*this.m_localAnchor1.x+j.col2.x*this.m_localAnchor1.y;var m=j.col1.y*this.m_localAnchor1.x+j.col2.y*this.m_localAnchor1.y;j=this.m_body2.m_R;var h=j.col1.x*this.m_localAnchor2.x+j.col2.x*this.m_localAnchor2.y;var g=j.col1.y*this.m_localAnchor2.x+j.col2.y*this.m_localAnchor2.y;var l=this.m_body1.m_linearVelocity.x+(-this.m_body1.m_angularVelocity*m);var k=this.m_body1.m_linearVelocity.y+(this.m_body1.m_angularVelocity*n);var f=this.m_body2.m_linearVelocity.x+(-this.m_body2.m_angularVelocity*g);var e=this.m_body2.m_linearVelocity.y+(this.m_body2.m_angularVelocity*h);var i=(this.m_u.x*(f-l)+this.m_u.y*(e-k));var a=-this.m_mass*i;this.m_impulse+=a;var d=a*this.m_u.x;var c=a*this.m_u.y;this.m_body1.m_linearVelocity.x-=this.m_body1.m_invMass*d; +this.m_body1.m_linearVelocity.y-=this.m_body1.m_invMass*c;this.m_body1.m_angularVelocity-=this.m_body1.m_invI*(n*c-m*d);this.m_body2.m_linearVelocity.x+=this.m_body2.m_invMass*d;this.m_body2.m_linearVelocity.y+=this.m_body2.m_invMass*c;this.m_body2.m_angularVelocity+=this.m_body2.m_invI*(h*c-g*d)},SolvePositionConstraints:function(){var j;j=this.m_body1.m_R;var l=j.col1.x*this.m_localAnchor1.x+j.col2.x*this.m_localAnchor1.y;var k=j.col1.y*this.m_localAnchor1.x+j.col2.y*this.m_localAnchor1.y;j=this.m_body2.m_R;var i=j.col1.x*this.m_localAnchor2.x+j.col2.x*this.m_localAnchor2.y;var h=j.col1.y*this.m_localAnchor2.x+j.col2.y*this.m_localAnchor2.y;var g=this.m_body2.m_position.x+i-this.m_body1.m_position.x-l;var f=this.m_body2.m_position.y+h-this.m_body1.m_position.y-k;var c=Math.sqrt(g*g+f*f);g/=c;f/=c;var a=c-this.m_length;a=b2Math.b2Clamp(a,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);var b=-this.m_mass*a;this.m_u.Set(g,f);var e=b*this.m_u.x;var d=b*this.m_u.y;this.m_body1.m_position.x-=this.m_body1.m_invMass*e; +this.m_body1.m_position.y-=this.m_body1.m_invMass*d;this.m_body1.m_rotation-=this.m_body1.m_invI*(l*d-k*e);this.m_body2.m_position.x+=this.m_body2.m_invMass*e;this.m_body2.m_position.y+=this.m_body2.m_invMass*d;this.m_body2.m_rotation+=this.m_body2.m_invI*(i*d-h*e);this.m_body1.m_R.Set(this.m_body1.m_rotation);this.m_body2.m_R.Set(this.m_body2.m_rotation);return b2Math.b2Abs(a)d.dt*this.m_maxForce){this.m_impulse.Multiply(d.dt*this.m_maxForce/b)}e=this.m_impulse.x-j;c=this.m_impulse.y-g;i.m_linearVelocity.x+=i.m_invMass*e;i.m_linearVelocity.y+=i.m_invMass*c; +i.m_angularVelocity+=i.m_invI*(h*c-f*e)},SolvePositionConstraints:function(){return true},m_localAnchor:new b2Vec2(),m_target:new b2Vec2(),m_impulse:new b2Vec2(),m_ptpMass:new b2Mat22(),m_C:new b2Vec2(),m_maxForce:null,m_beta:null,m_gamma:null});var b2MouseJointDef=function(){this.type=b2Joint.e_unknownJoint;this.userData=null;this.body1=null;this.body2=null;this.collideConnected=false;this.target=new b2Vec2();this.type=b2Joint.e_mouseJoint;this.maxForce=0;this.frequencyHz=5;this.dampingRatio=0.7;this.timeStep=1/60};Object.extend(b2MouseJointDef.prototype,b2JointDef.prototype);Object.extend(b2MouseJointDef.prototype,{target:new b2Vec2(),maxForce:null,frequencyHz:null,dampingRatio:null,timeStep:null});var b2PrismaticJoint=function(c){this.m_node1=new b2JointNode();this.m_node2=new b2JointNode();this.m_type=c.type;this.m_prev=null;this.m_next=null;this.m_body1=c.body1;this.m_body2=c.body2;this.m_collideConnected=c.collideConnected;this.m_islandFlag=false;this.m_userData=c.userData;this.m_localAnchor1=new b2Vec2();this.m_localAnchor2=new b2Vec2();this.m_localXAxis1=new b2Vec2();this.m_localYAxis1=new b2Vec2();this.m_linearJacobian=new b2Jacobian();this.m_motorJacobian=new b2Jacobian();var b;var a;var d;b=this.m_body1.m_R;a=(c.anchorPoint.x-this.m_body1.m_position.x);d=(c.anchorPoint.y-this.m_body1.m_position.y);this.m_localAnchor1.Set((a*b.col1.x+d*b.col1.y),(a*b.col2.x+d*b.col2.y));b=this.m_body2.m_R;a=(c.anchorPoint.x-this.m_body2.m_position.x);d=(c.anchorPoint.y-this.m_body2.m_position.y);this.m_localAnchor2.Set((a*b.col1.x+d*b.col1.y),(a*b.col2.x+d*b.col2.y));b=this.m_body1.m_R;a=c.axis.x;d=c.axis.y;this.m_localXAxis1.Set((a*b.col1.x+d*b.col1.y),(a*b.col2.x+d*b.col2.y));this.m_localYAxis1.x=-this.m_localXAxis1.y; +this.m_localYAxis1.y=this.m_localXAxis1.x;this.m_initialAngle=this.m_body2.m_rotation-this.m_body1.m_rotation;this.m_linearJacobian.SetZero();this.m_linearMass=0;this.m_linearImpulse=0;this.m_angularMass=0;this.m_angularImpulse=0;this.m_motorJacobian.SetZero();this.m_motorMass=0;this.m_motorImpulse=0;this.m_limitImpulse=0;this.m_limitPositionImpulse=0;this.m_lowerTranslation=c.lowerTranslation;this.m_upperTranslation=c.upperTranslation;this.m_maxMotorForce=c.motorForce;this.m_motorSpeed=c.motorSpeed;this.m_enableLimit=c.enableLimit;this.m_enableMotor=c.enableMotor};Object.extend(b2PrismaticJoint.prototype,b2Joint.prototype);Object.extend(b2PrismaticJoint.prototype,{GetAnchor1:function(){var a=this.m_body1;var b=new b2Vec2();b.SetV(this.m_localAnchor1);b.MulM(a.m_R);b.Add(a.m_position);return b},GetAnchor2:function(){var a=this.m_body2;var b=new b2Vec2();b.SetV(this.m_localAnchor2);b.MulM(a.m_R);b.Add(a.m_position);return b},GetJointTranslation:function(){var l=this.m_body1;var k=this.m_body2; +var j;j=l.m_R;var p=j.col1.x*this.m_localAnchor1.x+j.col2.x*this.m_localAnchor1.y;var n=j.col1.y*this.m_localAnchor1.x+j.col2.y*this.m_localAnchor1.y;j=k.m_R;var i=j.col1.x*this.m_localAnchor2.x+j.col2.x*this.m_localAnchor2.y;var h=j.col1.y*this.m_localAnchor2.x+j.col2.y*this.m_localAnchor2.y;var g=l.m_position.x+p;var f=l.m_position.y+n;var c=k.m_position.x+i;var b=k.m_position.y+h;var e=c-g;var d=b-f;j=l.m_R;var o=j.col1.x*this.m_localXAxis1.x+j.col2.x*this.m_localXAxis1.y;var m=j.col1.y*this.m_localXAxis1.x+j.col2.y*this.m_localXAxis1.y;var a=o*e+m*d;return a},GetJointSpeed:function(){var j=this.m_body1;var i=this.m_body2;var k;k=j.m_R;var t=k.col1.x*this.m_localAnchor1.x+k.col2.x*this.m_localAnchor1.y;var s=k.col1.y*this.m_localAnchor1.x+k.col2.y*this.m_localAnchor1.y;k=i.m_R;var h=k.col1.x*this.m_localAnchor2.x+k.col2.x*this.m_localAnchor2.y;var g=k.col1.y*this.m_localAnchor2.x+k.col2.y*this.m_localAnchor2.y;var r=j.m_position.x+t;var p=j.m_position.y+s;var c=i.m_position.x+h;var a=i.m_position.y+g; +var f=c-r;var e=a-p;k=j.m_R;var o=k.col1.x*this.m_localXAxis1.x+k.col2.x*this.m_localXAxis1.y;var n=k.col1.y*this.m_localXAxis1.x+k.col2.y*this.m_localXAxis1.y;var d=j.m_linearVelocity;var b=i.m_linearVelocity;var m=j.m_angularVelocity;var l=i.m_angularVelocity;var q=(f*(-m*n)+e*(m*o))+(o*(((b.x+(-l*g))-d.x)-(-m*s))+n*(((b.y+(l*h))-d.y)-(m*t)));return q},GetMotorForce:function(a){return a*this.m_motorImpulse},SetMotorSpeed:function(a){this.m_motorSpeed=a},SetMotorForce:function(a){this.m_maxMotorForce=a},GetReactionForce:function(b){var e=b*this.m_limitImpulse;var d;d=this.m_body1.m_R;var g=e*(d.col1.x*this.m_localXAxis1.x+d.col2.x*this.m_localXAxis1.y);var f=e*(d.col1.y*this.m_localXAxis1.x+d.col2.y*this.m_localXAxis1.y);var c=e*(d.col1.x*this.m_localYAxis1.x+d.col2.x*this.m_localYAxis1.y);var a=e*(d.col1.y*this.m_localYAxis1.x+d.col2.y*this.m_localYAxis1.y);return new b2Vec2(g+c,f+a)},GetReactionTorque:function(a){return a*this.m_angularImpulse},PrepareVelocitySolver:function(){var m=this.m_body1; +var l=this.m_body2;var p;p=m.m_R;var z=p.col1.x*this.m_localAnchor1.x+p.col2.x*this.m_localAnchor1.y;var y=p.col1.y*this.m_localAnchor1.x+p.col2.y*this.m_localAnchor1.y;p=l.m_R;var i=p.col1.x*this.m_localAnchor2.x+p.col2.x*this.m_localAnchor2.y;var g=p.col1.y*this.m_localAnchor2.x+p.col2.y*this.m_localAnchor2.y;var s=m.m_invMass;var r=l.m_invMass;var k=m.m_invI;var j=l.m_invI;p=m.m_R;var h=p.col1.x*this.m_localYAxis1.x+p.col2.x*this.m_localYAxis1.y;var f=p.col1.y*this.m_localYAxis1.x+p.col2.y*this.m_localYAxis1.y;var t=l.m_position.x+i-m.m_position.x;var q=l.m_position.y+g-m.m_position.y;this.m_linearJacobian.linear1.x=-h;this.m_linearJacobian.linear1.y=-f;this.m_linearJacobian.linear2.x=h;this.m_linearJacobian.linear2.y=f;this.m_linearJacobian.angular1=-(t*f-q*h);this.m_linearJacobian.angular2=i*f-g*h;this.m_linearMass=s+k*this.m_linearJacobian.angular1*this.m_linearJacobian.angular1+r+j*this.m_linearJacobian.angular2*this.m_linearJacobian.angular2;this.m_linearMass=1/this.m_linearMass; +this.m_angularMass=1/(k+j);if(this.m_enableLimit||this.m_enableMotor){p=m.m_R;var v=p.col1.x*this.m_localXAxis1.x+p.col2.x*this.m_localXAxis1.y;var u=p.col1.y*this.m_localXAxis1.x+p.col2.y*this.m_localXAxis1.y;this.m_motorJacobian.linear1.x=-v;this.m_motorJacobian.linear1.y=-u;this.m_motorJacobian.linear2.x=v;this.m_motorJacobian.linear2.y=u;this.m_motorJacobian.angular1=-(t*u-q*v);this.m_motorJacobian.angular2=i*u-g*v;this.m_motorMass=s+k*this.m_motorJacobian.angular1*this.m_motorJacobian.angular1+r+j*this.m_motorJacobian.angular2*this.m_motorJacobian.angular2;this.m_motorMass=1/this.m_motorMass;if(this.m_enableLimit){var e=t-z;var d=q-y;var c=v*e+u*d;if(b2Math.b2Abs(this.m_upperTranslation-this.m_lowerTranslation)<2*b2Settings.b2_linearSlop){this.m_limitState=b2Joint.e_equalLimits}else{if(c<=this.m_lowerTranslation){if(this.m_limitState!=b2Joint.e_atLowerLimit){this.m_limitImpulse=0}this.m_limitState=b2Joint.e_atLowerLimit}else{if(c>=this.m_upperTranslation){if(this.m_limitState!=b2Joint.e_atUpperLimit){this.m_limitImpulse=0 +}this.m_limitState=b2Joint.e_atUpperLimit}else{this.m_limitState=b2Joint.e_inactiveLimit;this.m_limitImpulse=0}}}}}if(this.m_enableMotor==false){this.m_motorImpulse=0}if(this.m_enableLimit==false){this.m_limitImpulse=0}if(b2World.s_enableWarmStarting){var b=this.m_linearImpulse*this.m_linearJacobian.linear1.x+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear1.x;var a=this.m_linearImpulse*this.m_linearJacobian.linear1.y+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear1.y;var o=this.m_linearImpulse*this.m_linearJacobian.linear2.x+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear2.x;var n=this.m_linearImpulse*this.m_linearJacobian.linear2.y+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear2.y;var x=this.m_linearImpulse*this.m_linearJacobian.angular1-this.m_angularImpulse+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.angular1;var w=this.m_linearImpulse*this.m_linearJacobian.angular2+this.m_angularImpulse+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.angular2; +m.m_linearVelocity.x+=s*b;m.m_linearVelocity.y+=s*a;m.m_angularVelocity+=k*x;l.m_linearVelocity.x+=r*o;l.m_linearVelocity.y+=r*n;l.m_angularVelocity+=j*w}else{this.m_linearImpulse=0;this.m_angularImpulse=0;this.m_limitImpulse=0;this.m_motorImpulse=0}this.m_limitPositionImpulse=0},SolveVelocityConstraints:function(b){var l=this.m_body1;var k=this.m_body2;var q=l.m_invMass;var o=k.m_invMass;var d=l.m_invI;var c=k.m_invI;var p;var e=this.m_linearJacobian.Compute(l.m_linearVelocity,l.m_angularVelocity,k.m_linearVelocity,k.m_angularVelocity);var j=-this.m_linearMass*e;this.m_linearImpulse+=j;l.m_linearVelocity.x+=(q*j)*this.m_linearJacobian.linear1.x;l.m_linearVelocity.y+=(q*j)*this.m_linearJacobian.linear1.y;l.m_angularVelocity+=d*j*this.m_linearJacobian.angular1;k.m_linearVelocity.x+=(o*j)*this.m_linearJacobian.linear2.x;k.m_linearVelocity.y+=(o*j)*this.m_linearJacobian.linear2.y;k.m_angularVelocity+=c*j*this.m_linearJacobian.angular2;var h=k.m_angularVelocity-l.m_angularVelocity;var a=-this.m_angularMass*h; +this.m_angularImpulse+=a;l.m_angularVelocity-=d*a;k.m_angularVelocity+=c*a;if(this.m_enableMotor&&this.m_limitState!=b2Joint.e_equalLimits){var m=this.m_motorJacobian.Compute(l.m_linearVelocity,l.m_angularVelocity,k.m_linearVelocity,k.m_angularVelocity)-this.m_motorSpeed;var f=-this.m_motorMass*m;var n=this.m_motorImpulse;this.m_motorImpulse=b2Math.b2Clamp(this.m_motorImpulse+f,-b.dt*this.m_maxMotorForce,b.dt*this.m_maxMotorForce);f=this.m_motorImpulse-n;l.m_linearVelocity.x+=(q*f)*this.m_motorJacobian.linear1.x;l.m_linearVelocity.y+=(q*f)*this.m_motorJacobian.linear1.y;l.m_angularVelocity+=d*f*this.m_motorJacobian.angular1;k.m_linearVelocity.x+=(o*f)*this.m_motorJacobian.linear2.x;k.m_linearVelocity.y+=(o*f)*this.m_motorJacobian.linear2.y;k.m_angularVelocity+=c*f*this.m_motorJacobian.angular2}if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){var i=this.m_motorJacobian.Compute(l.m_linearVelocity,l.m_angularVelocity,k.m_linearVelocity,k.m_angularVelocity);var g=-this.m_motorMass*i; +if(this.m_limitState==b2Joint.e_equalLimits){this.m_limitImpulse+=g}else{if(this.m_limitState==b2Joint.e_atLowerLimit){p=this.m_limitImpulse;this.m_limitImpulse=b2Math.b2Max(this.m_limitImpulse+g,0);g=this.m_limitImpulse-p}else{if(this.m_limitState==b2Joint.e_atUpperLimit){p=this.m_limitImpulse;this.m_limitImpulse=b2Math.b2Min(this.m_limitImpulse+g,0);g=this.m_limitImpulse-p}}}l.m_linearVelocity.x+=(q*g)*this.m_motorJacobian.linear1.x;l.m_linearVelocity.y+=(q*g)*this.m_motorJacobian.linear1.y;l.m_angularVelocity+=d*g*this.m_motorJacobian.angular1;k.m_linearVelocity.x+=(o*g)*this.m_motorJacobian.linear2.x;k.m_linearVelocity.y+=(o*g)*this.m_motorJacobian.linear2.y;k.m_angularVelocity+=c*g*this.m_motorJacobian.angular2}},SolvePositionConstraints:function(){var o;var y;var m=this.m_body1;var k=this.m_body2;var t=m.m_invMass;var s=k.m_invMass;var j=m.m_invI;var i=k.m_invI;var q;q=m.m_R;var E=q.col1.x*this.m_localAnchor1.x+q.col2.x*this.m_localAnchor1.y;var D=q.col1.y*this.m_localAnchor1.x+q.col2.y*this.m_localAnchor1.y; +q=k.m_R;var h=q.col1.x*this.m_localAnchor2.x+q.col2.x*this.m_localAnchor2.y;var g=q.col1.y*this.m_localAnchor2.x+q.col2.y*this.m_localAnchor2.y;var B=m.m_position.x+E;var z=m.m_position.y+D;var b=k.m_position.x+h;var a=k.m_position.y+g;var e=b-B;var c=a-z;q=m.m_R;var f=q.col1.x*this.m_localYAxis1.x+q.col2.x*this.m_localYAxis1.y;var d=q.col1.y*this.m_localYAxis1.x+q.col2.y*this.m_localYAxis1.y;var l=f*e+d*c;l=b2Math.b2Clamp(l,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);var x=-this.m_linearMass*l;m.m_position.x+=(t*x)*this.m_linearJacobian.linear1.x;m.m_position.y+=(t*x)*this.m_linearJacobian.linear1.y;m.m_rotation+=j*x*this.m_linearJacobian.angular1;k.m_position.x+=(s*x)*this.m_linearJacobian.linear2.x;k.m_position.y+=(s*x)*this.m_linearJacobian.linear2.y;k.m_rotation+=i*x*this.m_linearJacobian.angular2;var p=b2Math.b2Abs(l);var A=k.m_rotation-m.m_rotation-this.m_initialAngle;A=b2Math.b2Clamp(A,-b2Settings.b2_maxAngularCorrection,b2Settings.b2_maxAngularCorrection); +var r=-this.m_angularMass*A;m.m_rotation-=m.m_invI*r;m.m_R.Set(m.m_rotation);k.m_rotation+=k.m_invI*r;k.m_R.Set(k.m_rotation);var C=b2Math.b2Abs(A);if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){q=m.m_R;E=q.col1.x*this.m_localAnchor1.x+q.col2.x*this.m_localAnchor1.y;D=q.col1.y*this.m_localAnchor1.x+q.col2.y*this.m_localAnchor1.y;q=k.m_R;h=q.col1.x*this.m_localAnchor2.x+q.col2.x*this.m_localAnchor2.y;g=q.col1.y*this.m_localAnchor2.x+q.col2.y*this.m_localAnchor2.y;B=m.m_position.x+E;z=m.m_position.y+D;b=k.m_position.x+h;a=k.m_position.y+g;e=b-B;c=a-z;q=m.m_R;var v=q.col1.x*this.m_localXAxis1.x+q.col2.x*this.m_localXAxis1.y;var u=q.col1.y*this.m_localXAxis1.x+q.col2.y*this.m_localXAxis1.y;var n=(v*e+u*c);var w=0;if(this.m_limitState==b2Joint.e_equalLimits){o=b2Math.b2Clamp(n,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);w=-this.m_motorMass*o;p=b2Math.b2Max(p,b2Math.b2Abs(A))}else{if(this.m_limitState==b2Joint.e_atLowerLimit){o=n-this.m_lowerTranslation; +p=b2Math.b2Max(p,-o);o=b2Math.b2Clamp(o+b2Settings.b2_linearSlop,-b2Settings.b2_maxLinearCorrection,0);w=-this.m_motorMass*o;y=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Max(this.m_limitPositionImpulse+w,0);w=this.m_limitPositionImpulse-y}else{if(this.m_limitState==b2Joint.e_atUpperLimit){o=n-this.m_upperTranslation;p=b2Math.b2Max(p,o);o=b2Math.b2Clamp(o-b2Settings.b2_linearSlop,0,b2Settings.b2_maxLinearCorrection);w=-this.m_motorMass*o;y=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Min(this.m_limitPositionImpulse+w,0);w=this.m_limitPositionImpulse-y}}}m.m_position.x+=(t*w)*this.m_motorJacobian.linear1.x;m.m_position.y+=(t*w)*this.m_motorJacobian.linear1.y;m.m_rotation+=j*w*this.m_motorJacobian.angular1;m.m_R.Set(m.m_rotation);k.m_position.x+=(s*w)*this.m_motorJacobian.linear2.x;k.m_position.y+=(s*w)*this.m_motorJacobian.linear2.y;k.m_rotation+=i*w*this.m_motorJacobian.angular2;k.m_R.Set(k.m_rotation)}return p<=b2Settings.b2_linearSlop&&C<=b2Settings.b2_angularSlop +},m_localAnchor1:new b2Vec2(),m_localAnchor2:new b2Vec2(),m_localXAxis1:new b2Vec2(),m_localYAxis1:new b2Vec2(),m_initialAngle:null,m_linearJacobian:new b2Jacobian(),m_linearMass:null,m_linearImpulse:null,m_angularMass:null,m_angularImpulse:null,m_motorJacobian:new b2Jacobian(),m_motorMass:null,m_motorImpulse:null,m_limitImpulse:null,m_limitPositionImpulse:null,m_lowerTranslation:null,m_upperTranslation:null,m_maxMotorForce:null,m_motorSpeed:null,m_enableLimit:null,m_enableMotor:null,m_limitState:0});var b2PrismaticJointDef=function(){this.type=b2Joint.e_unknownJoint;this.userData=null;this.body1=null;this.body2=null;this.collideConnected=false;this.type=b2Joint.e_prismaticJoint;this.anchorPoint=new b2Vec2(0,0);this.axis=new b2Vec2(0,0);this.lowerTranslation=0;this.upperTranslation=0;this.motorForce=0;this.motorSpeed=0;this.enableLimit=false;this.enableMotor=false};Object.extend(b2PrismaticJointDef.prototype,b2JointDef.prototype);Object.extend(b2PrismaticJointDef.prototype,{anchorPoint:null,axis:null,lowerTranslation:null,upperTranslation:null,motorForce:null,motorSpeed:null,enableLimit:null,enableMotor:null,Initialize:function(b,a,d,c){this.body1=b;this.body2=a;this.anchorPoint=d;this.axis=c}});var b2PulleyJoint=function(d){this.m_node1=new b2JointNode();this.m_node2=new b2JointNode();this.m_type=d.type;this.m_prev=null;this.m_next=null;this.m_body1=d.body1;this.m_body2=d.body2;this.m_collideConnected=d.collideConnected;this.m_islandFlag=false;this.m_userData=d.userData;this.m_groundAnchor1=new b2Vec2();this.m_groundAnchor2=new b2Vec2();this.m_localAnchor1=new b2Vec2();this.m_localAnchor2=new b2Vec2();this.m_u1=new b2Vec2();this.m_u2=new b2Vec2();var b;var a;var h;this.m_ground=this.m_body1.m_world.m_groundBody;this.m_groundAnchor1.x=d.groundPoint1.x-this.m_ground.m_position.x;this.m_groundAnchor1.y=d.groundPoint1.y-this.m_ground.m_position.y;this.m_groundAnchor2.x=d.groundPoint2.x-this.m_ground.m_position.x;this.m_groundAnchor2.y=d.groundPoint2.y-this.m_ground.m_position.y;b=this.m_body1.m_R;a=d.anchorPoint1.x-this.m_body1.m_position.x;h=d.anchorPoint1.y-this.m_body1.m_position.y;this.m_localAnchor1.x=a*b.col1.x+h*b.col1.y;this.m_localAnchor1.y=a*b.col2.x+h*b.col2.y;b=this.m_body2.m_R; +a=d.anchorPoint2.x-this.m_body2.m_position.x;h=d.anchorPoint2.y-this.m_body2.m_position.y;this.m_localAnchor2.x=a*b.col1.x+h*b.col1.y;this.m_localAnchor2.y=a*b.col2.x+h*b.col2.y;this.m_ratio=d.ratio;a=d.groundPoint1.x-d.anchorPoint1.x;h=d.groundPoint1.y-d.anchorPoint1.y;var f=Math.sqrt(a*a+h*h);a=d.groundPoint2.x-d.anchorPoint2.x;h=d.groundPoint2.y-d.anchorPoint2.y;var c=Math.sqrt(a*a+h*h);var g=b2Math.b2Max(0.5*b2PulleyJoint.b2_minPulleyLength,f);var e=b2Math.b2Max(0.5*b2PulleyJoint.b2_minPulleyLength,c);this.m_constant=g+this.m_ratio*e;this.m_maxLength1=b2Math.b2Clamp(d.maxLength1,g,this.m_constant-this.m_ratio*b2PulleyJoint.b2_minPulleyLength);this.m_maxLength2=b2Math.b2Clamp(d.maxLength2,e,(this.m_constant-b2PulleyJoint.b2_minPulleyLength)/this.m_ratio);this.m_pulleyImpulse=0;this.m_limitImpulse1=0;this.m_limitImpulse2=0};Object.extend(b2PulleyJoint.prototype,b2Joint.prototype);Object.extend(b2PulleyJoint.prototype,{GetAnchor1:function(){var a=this.m_body1.m_R;return new b2Vec2(this.m_body1.m_position.x+(a.col1.x*this.m_localAnchor1.x+a.col2.x*this.m_localAnchor1.y),this.m_body1.m_position.y+(a.col1.y*this.m_localAnchor1.x+a.col2.y*this.m_localAnchor1.y)) +},GetAnchor2:function(){var a=this.m_body2.m_R;return new b2Vec2(this.m_body2.m_position.x+(a.col1.x*this.m_localAnchor2.x+a.col2.x*this.m_localAnchor2.y),this.m_body2.m_position.y+(a.col1.y*this.m_localAnchor2.x+a.col2.y*this.m_localAnchor2.y))},GetGroundPoint1:function(){return new b2Vec2(this.m_ground.m_position.x+this.m_groundAnchor1.x,this.m_ground.m_position.y+this.m_groundAnchor1.y)},GetGroundPoint2:function(){return new b2Vec2(this.m_ground.m_position.x+this.m_groundAnchor2.x,this.m_ground.m_position.y+this.m_groundAnchor2.y)},GetReactionForce:function(a){return new b2Vec2()},GetReactionTorque:function(a){return 0},GetLength1:function(){var e;e=this.m_body1.m_R;var d=this.m_body1.m_position.x+(e.col1.x*this.m_localAnchor1.x+e.col2.x*this.m_localAnchor1.y);var c=this.m_body1.m_position.y+(e.col1.y*this.m_localAnchor1.x+e.col2.y*this.m_localAnchor1.y);var b=d-(this.m_ground.m_position.x+this.m_groundAnchor1.x);var a=c-(this.m_ground.m_position.y+this.m_groundAnchor1.y);return Math.sqrt(b*b+a*a) +},GetLength2:function(){var e;e=this.m_body2.m_R;var d=this.m_body2.m_position.x+(e.col1.x*this.m_localAnchor2.x+e.col2.x*this.m_localAnchor2.y);var c=this.m_body2.m_position.y+(e.col1.y*this.m_localAnchor2.x+e.col2.y*this.m_localAnchor2.y);var b=d-(this.m_ground.m_position.x+this.m_groundAnchor2.x);var a=c-(this.m_ground.m_position.y+this.m_groundAnchor2.y);return Math.sqrt(b*b+a*a)},GetRatio:function(){return this.m_ratio},PrepareVelocitySolver:function(){var h=this.m_body1;var g=this.m_body2;var l;l=h.m_R;var v=l.col1.x*this.m_localAnchor1.x+l.col2.x*this.m_localAnchor1.y;var u=l.col1.y*this.m_localAnchor1.x+l.col2.y*this.m_localAnchor1.y;l=g.m_R;var f=l.col1.x*this.m_localAnchor2.x+l.col2.x*this.m_localAnchor2.y;var e=l.col1.y*this.m_localAnchor2.x+l.col2.y*this.m_localAnchor2.y;var t=h.m_position.x+v;var r=h.m_position.y+u;var d=g.m_position.x+f;var c=g.m_position.y+e;var m=this.m_ground.m_position.x+this.m_groundAnchor1.x;var k=this.m_ground.m_position.y+this.m_groundAnchor1.y;var s=this.m_ground.m_position.x+this.m_groundAnchor2.x; +var q=this.m_ground.m_position.y+this.m_groundAnchor2.y;this.m_u1.Set(t-m,r-k);this.m_u2.Set(d-s,c-q);var p=this.m_u1.Length();var o=this.m_u2.Length();if(p>b2Settings.b2_linearSlop){this.m_u1.Multiply(1/p)}else{this.m_u1.SetZero()}if(o>b2Settings.b2_linearSlop){this.m_u2.Multiply(1/o)}else{this.m_u2.SetZero()}if(pb2Settings.b2_linearSlop){this.m_u1.Multiply(1/n)}else{this.m_u1.SetZero()}if(m>b2Settings.b2_linearSlop){this.m_u2.Multiply(1/m)}else{this.m_u2.SetZero()}l=this.m_constant-n-this.m_ratio*m;e=b2Math.b2Max(e,Math.abs(l));l=b2Math.b2Clamp(l,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);h=-this.m_pulleyMass*l;r=-h*this.m_u1.x;p=-h*this.m_u1.y;b=-this.m_ratio*h*this.m_u2.x;a=-this.m_ratio*h*this.m_u2.y;g.m_position.x+=g.m_invMass*r;g.m_position.y+=g.m_invMass*p;g.m_rotation+=g.m_invI*(u*p-t*r);f.m_position.x+=f.m_invMass*b;f.m_position.y+=f.m_invMass*a;f.m_rotation+=f.m_invI*(d*a-c*b);g.m_R.Set(g.m_rotation);f.m_R.Set(f.m_rotation);if(this.m_limitState1==b2Joint.e_atUpperLimit){j=g.m_R;u=j.col1.x*this.m_localAnchor1.x+j.col2.x*this.m_localAnchor1.y;t=j.col1.y*this.m_localAnchor1.x+j.col2.y*this.m_localAnchor1.y; +r=g.m_position.x+u;p=g.m_position.y+t;this.m_u1.Set(r-k,p-i);n=this.m_u1.Length();if(n>b2Settings.b2_linearSlop){this.m_u1.x*=1/n;this.m_u1.y*=1/n}else{this.m_u1.SetZero()}l=this.m_maxLength1-n;e=b2Math.b2Max(e,-l);l=b2Math.b2Clamp(l+b2Settings.b2_linearSlop,-b2Settings.b2_maxLinearCorrection,0);h=-this.m_limitMass1*l;s=this.m_limitPositionImpulse1;this.m_limitPositionImpulse1=b2Math.b2Max(0,this.m_limitPositionImpulse1+h);h=this.m_limitPositionImpulse1-s;r=-h*this.m_u1.x;p=-h*this.m_u1.y;g.m_position.x+=g.m_invMass*r;g.m_position.y+=g.m_invMass*p;g.m_rotation+=g.m_invI*(u*p-t*r);g.m_R.Set(g.m_rotation)}if(this.m_limitState2==b2Joint.e_atUpperLimit){j=f.m_R;d=j.col1.x*this.m_localAnchor2.x+j.col2.x*this.m_localAnchor2.y;c=j.col1.y*this.m_localAnchor2.x+j.col2.y*this.m_localAnchor2.y;b=f.m_position.x+d;a=f.m_position.y+c;this.m_u2.Set(b-q,a-o);m=this.m_u2.Length();if(m>b2Settings.b2_linearSlop){this.m_u2.x*=1/m;this.m_u2.y*=1/m}else{this.m_u2.SetZero()}l=this.m_maxLength2-m;e=b2Math.b2Max(e,-l); +l=b2Math.b2Clamp(l+b2Settings.b2_linearSlop,-b2Settings.b2_maxLinearCorrection,0);h=-this.m_limitMass2*l;s=this.m_limitPositionImpulse2;this.m_limitPositionImpulse2=b2Math.b2Max(0,this.m_limitPositionImpulse2+h);h=this.m_limitPositionImpulse2-s;b=-h*this.m_u2.x;a=-h*this.m_u2.y;f.m_position.x+=f.m_invMass*b;f.m_position.y+=f.m_invMass*a;f.m_rotation+=f.m_invI*(d*a-c*b);f.m_R.Set(f.m_rotation)}return e=this.m_upperAngle){if(this.m_limitState!=b2Joint.e_atUpperLimit){this.m_limitImpulse=0}this.m_limitState=b2Joint.e_atUpperLimit}else{this.m_limitState=b2Joint.e_inactiveLimit;this.m_limitImpulse=0}}}}else{this.m_limitImpulse=0}if(b2World.s_enableWarmStarting){h.m_linearVelocity.x-=l*this.m_ptpImpulse.x;h.m_linearVelocity.y-=l*this.m_ptpImpulse.y;h.m_angularVelocity-=c*((k*this.m_ptpImpulse.y-i*this.m_ptpImpulse.x)+this.m_motorImpulse+this.m_limitImpulse); +g.m_linearVelocity.x+=j*this.m_ptpImpulse.x;g.m_linearVelocity.y+=j*this.m_ptpImpulse.y;g.m_angularVelocity+=b*((e*this.m_ptpImpulse.y-d*this.m_ptpImpulse.x)+this.m_motorImpulse+this.m_limitImpulse)}else{this.m_ptpImpulse.SetZero();this.m_motorImpulse=0;this.m_limitImpulse=0}this.m_limitPositionImpulse=0},SolveVelocityConstraints:function(f){var g=this.m_body1;var e=this.m_body2;var i;i=g.m_R;var o=i.col1.x*this.m_localAnchor1.x+i.col2.x*this.m_localAnchor1.y;var n=i.col1.y*this.m_localAnchor1.x+i.col2.y*this.m_localAnchor1.y;i=e.m_R;var b=i.col1.x*this.m_localAnchor2.x+i.col2.x*this.m_localAnchor2.y;var a=i.col1.y*this.m_localAnchor2.x+i.col2.y*this.m_localAnchor2.y;var k;var q=e.m_linearVelocity.x+(-e.m_angularVelocity*a)-g.m_linearVelocity.x-(-g.m_angularVelocity*n);var p=e.m_linearVelocity.y+(e.m_angularVelocity*b)-g.m_linearVelocity.y-(g.m_angularVelocity*o);var m=-(this.m_ptpMass.col1.x*q+this.m_ptpMass.col2.x*p);var l=-(this.m_ptpMass.col1.y*q+this.m_ptpMass.col2.y*p);this.m_ptpImpulse.x+=m; +this.m_ptpImpulse.y+=l;g.m_linearVelocity.x-=g.m_invMass*m;g.m_linearVelocity.y-=g.m_invMass*l;g.m_angularVelocity-=g.m_invI*(o*l-n*m);e.m_linearVelocity.x+=e.m_invMass*m;e.m_linearVelocity.y+=e.m_invMass*l;e.m_angularVelocity+=e.m_invI*(b*l-a*m);if(this.m_enableMotor&&this.m_limitState!=b2Joint.e_equalLimits){var r=e.m_angularVelocity-g.m_angularVelocity-this.m_motorSpeed;var c=-this.m_motorMass*r;var d=this.m_motorImpulse;this.m_motorImpulse=b2Math.b2Clamp(this.m_motorImpulse+c,-f.dt*this.m_maxMotorTorque,f.dt*this.m_maxMotorTorque);c=this.m_motorImpulse-d;g.m_angularVelocity-=g.m_invI*c;e.m_angularVelocity+=e.m_invI*c}if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){var h=e.m_angularVelocity-g.m_angularVelocity;var j=-this.m_motorMass*h;if(this.m_limitState==b2Joint.e_equalLimits){this.m_limitImpulse+=j}else{if(this.m_limitState==b2Joint.e_atLowerLimit){k=this.m_limitImpulse;this.m_limitImpulse=b2Math.b2Max(this.m_limitImpulse+j,0);j=this.m_limitImpulse-k}else{if(this.m_limitState==b2Joint.e_atUpperLimit){k=this.m_limitImpulse; +this.m_limitImpulse=b2Math.b2Min(this.m_limitImpulse+j,0);j=this.m_limitImpulse-k}}}g.m_angularVelocity-=g.m_invI*j;e.m_angularVelocity+=e.m_invI*j}},SolvePositionConstraints:function(){var s;var m;var l=this.m_body1;var k=this.m_body2;var o=0;var n;n=l.m_R;var y=n.col1.x*this.m_localAnchor1.x+n.col2.x*this.m_localAnchor1.y;var x=n.col1.y*this.m_localAnchor1.x+n.col2.y*this.m_localAnchor1.y;n=k.m_R;var f=n.col1.x*this.m_localAnchor2.x+n.col2.x*this.m_localAnchor2.y;var e=n.col1.y*this.m_localAnchor2.x+n.col2.y*this.m_localAnchor2.y;var u=l.m_position.x+y;var t=l.m_position.y+x;var d=k.m_position.x+f;var c=k.m_position.y+e;var j=d-u;var i=c-t;o=Math.sqrt(j*j+i*i);var q=l.m_invMass;var p=k.m_invMass;var h=l.m_invI;var g=k.m_invI;this.K1.col1.x=q+p;this.K1.col2.x=0;this.K1.col1.y=0;this.K1.col2.y=q+p;this.K2.col1.x=h*x*x;this.K2.col2.x=-h*y*x;this.K2.col1.y=-h*y*x;this.K2.col2.y=h*y*y;this.K3.col1.x=g*e*e;this.K3.col2.x=-g*f*e;this.K3.col1.y=-g*f*e;this.K3.col2.y=g*f*f;this.K.SetM(this.K1); +this.K.AddM(this.K2);this.K.AddM(this.K3);this.K.Solve(b2RevoluteJoint.tImpulse,-j,-i);var b=b2RevoluteJoint.tImpulse.x;var a=b2RevoluteJoint.tImpulse.y;l.m_position.x-=l.m_invMass*b;l.m_position.y-=l.m_invMass*a;l.m_rotation-=l.m_invI*(y*a-x*b);l.m_R.Set(l.m_rotation);k.m_position.x+=k.m_invMass*b;k.m_position.y+=k.m_invMass*a;k.m_rotation+=k.m_invI*(f*a-e*b);k.m_R.Set(k.m_rotation);var w=0;if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){var v=k.m_rotation-l.m_rotation-this.m_intialAngle;var r=0;if(this.m_limitState==b2Joint.e_equalLimits){m=b2Math.b2Clamp(v,-b2Settings.b2_maxAngularCorrection,b2Settings.b2_maxAngularCorrection);r=-this.m_motorMass*m;w=b2Math.b2Abs(m)}else{if(this.m_limitState==b2Joint.e_atLowerLimit){m=v-this.m_lowerAngle;w=b2Math.b2Max(0,-m);m=b2Math.b2Clamp(m+b2Settings.b2_angularSlop,-b2Settings.b2_maxAngularCorrection,0);r=-this.m_motorMass*m;s=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Max(this.m_limitPositionImpulse+r,0); +r=this.m_limitPositionImpulse-s}else{if(this.m_limitState==b2Joint.e_atUpperLimit){m=v-this.m_upperAngle;w=b2Math.b2Max(0,m);m=b2Math.b2Clamp(m-b2Settings.b2_angularSlop,0,b2Settings.b2_maxAngularCorrection);r=-this.m_motorMass*m;s=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Min(this.m_limitPositionImpulse+r,0);r=this.m_limitPositionImpulse-s}}}l.m_rotation-=l.m_invI*r;l.m_R.Set(l.m_rotation);k.m_rotation+=k.m_invI*r;k.m_R.Set(k.m_rotation)}return o<=b2Settings.b2_linearSlop&&w<=b2Settings.b2_angularSlop},m_localAnchor1:new b2Vec2(),m_localAnchor2:new b2Vec2(),m_ptpImpulse:new b2Vec2(),m_motorImpulse:null,m_limitImpulse:null,m_limitPositionImpulse:null,m_ptpMass:new b2Mat22(),m_motorMass:null,m_intialAngle:null,m_lowerAngle:null,m_upperAngle:null,m_maxMotorTorque:null,m_motorSpeed:null,m_enableLimit:null,m_enableMotor:null,m_limitState:0});b2RevoluteJoint.tImpulse=new b2Vec2();var b2RevoluteJointDef=function(){this.type=b2Joint.e_unknownJoint;this.userData=null;this.body1=null;this.body2=null;this.collideConnected=false;this.type=b2Joint.e_revoluteJoint;this.anchorPoint=new b2Vec2(0,0);this.lowerAngle=0;this.upperAngle=0;this.motorTorque=0;this.motorSpeed=0;this.enableLimit=false;this.enableMotor=false};Object.extend(b2RevoluteJointDef.prototype,b2JointDef.prototype);Object.extend(b2RevoluteJointDef.prototype,{anchorPoint:null,lowerAngle:null,upperAngle:null,motorTorque:null,motorSpeed:null,enableLimit:null,enableMotor:null,Initialize:function(b,a,c){this.body1=b;this.body2=a;this.anchorPoint=c}}); \ No newline at end of file diff --git a/examples/example 24 - Box2D Integration/bricks.png b/examples/example 24 - Box2D Integration/bricks.png new file mode 100644 index 0000000..4495016 --- /dev/null +++ b/examples/example 24 - Box2D Integration/bricks.png Binary files differ diff --git a/examples/example 24 - Box2D Integration/box2d.min.js b/examples/example 24 - Box2D Integration/box2d.min.js new file mode 100644 index 0000000..1b579fd --- /dev/null +++ b/examples/example 24 - Box2D Integration/box2d.min.js @@ -0,0 +1,112 @@ +var b2Settings=function(){};b2Settings.prototype={};b2Settings.USHRT_MAX=65535;b2Settings.b2_pi=Math.PI;b2Settings.b2_massUnitsPerKilogram=1;b2Settings.b2_timeUnitsPerSecond=1;b2Settings.b2_lengthUnitsPerMeter=30;b2Settings.b2_maxManifoldPoints=2;b2Settings.b2_maxShapesPerBody=64;b2Settings.b2_maxPolyVertices=8;b2Settings.b2_maxProxies=1024;b2Settings.b2_maxPairs=8*b2Settings.b2_maxProxies;b2Settings.b2_linearSlop=0.005*b2Settings.b2_lengthUnitsPerMeter;b2Settings.b2_angularSlop=2/180*b2Settings.b2_pi;b2Settings.b2_velocityThreshold=1*b2Settings.b2_lengthUnitsPerMeter/b2Settings.b2_timeUnitsPerSecond;b2Settings.b2_maxLinearCorrection=0.2*b2Settings.b2_lengthUnitsPerMeter;b2Settings.b2_maxAngularCorrection=8/180*b2Settings.b2_pi;b2Settings.b2_contactBaumgarte=0.2;b2Settings.b2_timeToSleep=0.5*b2Settings.b2_timeUnitsPerSecond;b2Settings.b2_linearSleepTolerance=0.01*b2Settings.b2_lengthUnitsPerMeter/b2Settings.b2_timeUnitsPerSecond;b2Settings.b2_angularSleepTolerance=2/180/b2Settings.b2_timeUnitsPerSecond; +b2Settings.b2Assert=function(b){if(!b){var c;c.x++}};Object.extend=function(a,c){for(var b in c){a[b]=c[b]}return a};var b2Vec2=function(a,b){this.x=a;this.y=b};b2Vec2.prototype={SetZero:function(){this.x=0;this.y=0},Set:function(a,b){this.x=a;this.y=b},SetV:function(a){this.x=a.x;this.y=a.y},Negative:function(){return new b2Vec2(-this.x,-this.y)},Copy:function(){return new b2Vec2(this.x,this.y)},Add:function(a){this.x+=a.x;this.y+=a.y},Subtract:function(a){this.x-=a.x;this.y-=a.y},Multiply:function(b){this.x*=b;this.y*=b},MulM:function(b){var a=this.x;this.x=b.col1.x*a+b.col2.x*this.y;this.y=b.col1.y*a+b.col2.y*this.y},MulTM:function(b){var a=b2Math.b2Dot(this,b.col1);this.y=b2Math.b2Dot(this,b.col2);this.x=a},CrossVF:function(b){var a=this.x;this.x=b*this.y;this.y=-b*a},CrossFV:function(b){var a=this.x;this.x=-b*this.y;this.y=b*a},MinV:function(a){this.x=this.xa.x?this.x:a.x;this.y=this.y>a.y?this.y:a.y},Abs:function(){this.x=Math.abs(this.x);this.y=Math.abs(this.y)},Length:function(){return Math.sqrt(this.x*this.x+this.y*this.y) +},Normalize:function(){var b=this.Length();if(b0?b:-b};b2Math.b2AbsV=function(d){var c=new b2Vec2(b2Math.b2Abs(d.x),b2Math.b2Abs(d.y));return c};b2Math.b2AbsM=function(a){var b=new b2Mat22(0,b2Math.b2AbsV(a.col1),b2Math.b2AbsV(a.col2));return b};b2Math.b2Min=function(d,c){return dc?d:c};b2Math.b2MaxV=function(e,d){var f=new b2Vec2(b2Math.b2Max(e.x,d.x),b2Math.b2Max(e.y,d.y));return f};b2Math.b2Clamp=function(c,b,d){return b2Math.b2Max(b,b2Math.b2Min(c,d))};b2Math.b2ClampV=function(c,b,d){return b2Math.b2MaxV(b,b2Math.b2MinV(c,d))};b2Math.b2Swap=function(d,c){var e=d[0];d[0]=c[0];c[0]=e};b2Math.b2Random=function(){return Math.random()*2-1};b2Math.b2NextPowerOfTwo=function(a){a|=(a>>1)&2147483647;a|=(a>>2)&1073741823;a|=(a>>4)&268435455;a|=(a>>8)&16777215; +a|=(a>>16)&65535;return a+1};b2Math.b2IsPowerOfTwo=function(b){var a=b>0&&(b&(b-1))==0;return a};b2Math.tempVec2=new b2Vec2();b2Math.tempVec3=new b2Vec2();b2Math.tempVec4=new b2Vec2();b2Math.tempVec5=new b2Vec2();b2Math.tempMat=new b2Mat22();var b2AABB=function(){this.minVertex=new b2Vec2();this.maxVertex=new b2Vec2()};b2AABB.prototype={IsValid:function(){var b=this.maxVertex.x;var a=this.maxVertex.y;b=this.maxVertex.x;a=this.maxVertex.y;b-=this.minVertex.x;a-=this.minVertex.y;var c=b>=0&&a>=0;c=c&&this.minVertex.IsValid()&&this.maxVertex.IsValid();return c},minVertex:new b2Vec2(),maxVertex:new b2Vec2()};var b2Bound=function(){};b2Bound.prototype={IsLower:function(){return(this.value&1)==0},IsUpper:function(){return(this.value&1)==1},Swap:function(c){var e=this.value;var d=this.proxyId;var a=this.stabbingCount;this.value=c.value;this.proxyId=c.proxyId;this.stabbingCount=c.stabbingCount;c.value=e;c.proxyId=d;c.stabbingCount=a},value:0,proxyId:0,stabbingCount:0};var b2BoundValues=function(){this.lowerValues=[0,0];this.upperValues=[0,0]};b2BoundValues.prototype={lowerValues:[0,0],upperValues:[0,0]};var b2Pair=function(){};b2Pair.prototype={SetBuffered:function(){this.status|=b2Pair.e_pairBuffered},ClearBuffered:function(){this.status&=~b2Pair.e_pairBuffered},IsBuffered:function(){return(this.status&b2Pair.e_pairBuffered)==b2Pair.e_pairBuffered},SetRemoved:function(){this.status|=b2Pair.e_pairRemoved},ClearRemoved:function(){this.status&=~b2Pair.e_pairRemoved},IsRemoved:function(){return(this.status&b2Pair.e_pairRemoved)==b2Pair.e_pairRemoved},SetFinal:function(){this.status|=b2Pair.e_pairFinal},IsFinal:function(){return(this.status&b2Pair.e_pairFinal)==b2Pair.e_pairFinal},userData:null,proxyId1:0,proxyId2:0,next:0,status:0};b2Pair.b2_nullPair=b2Settings.USHRT_MAX;b2Pair.b2_nullProxy=b2Settings.USHRT_MAX;b2Pair.b2_tableCapacity=b2Settings.b2_maxPairs;b2Pair.b2_tableMask=b2Pair.b2_tableCapacity-1;b2Pair.e_pairBuffered=1;b2Pair.e_pairRemoved=2;b2Pair.e_pairFinal=4;var b2PairCallback=function(){};b2PairCallback.prototype={PairAdded:function(b,a){return null},PairRemoved:function(c,b,a){}};var b2BufferedPair=function(){};b2BufferedPair.prototype={proxyId1:0,proxyId2:0};var b2PairManager=function(){var a=0;this.m_hashTable=new Array(b2Pair.b2_tableCapacity);for(a=0;aa){var c=b;b=a;a=c}var d=b2PairManager.Hash(b,a)&b2Pair.b2_tableMask;var f=f=this.FindHash(b,a,d);if(f!=null){return f}var e=this.m_freePair;f=this.m_pairs[e];this.m_freePair=f.next;f.proxyId1=b;f.proxyId2=a;f.status=0;f.userData=null;f.next=this.m_hashTable[d];this.m_hashTable[d]=e;++this.m_pairCount;return f},RemovePair:function(g,f){if(g>f){var i=g;g=f;f=i}var d=b2PairManager.Hash(g,f)&b2Pair.b2_tableMask;var b=this.m_hashTable[d];var h=null;while(b!=b2Pair.b2_nullPair){if(b2PairManager.Equals(this.m_pairs[b],g,f)){var e=b;if(h){h.next=this.m_pairs[b].next}else{this.m_hashTable[d]=this.m_pairs[b].next}var c=this.m_pairs[e];var a=c.userData;c.next=this.m_freePair;c.proxyId1=b2Pair.b2_nullProxy;c.proxyId2=b2Pair.b2_nullProxy;c.userData=null;c.status=0;this.m_freePair=e;--this.m_pairCount;return a}else{h=this.m_pairs[b];b=h.next}}return null},Find:function(b,a){if(b>a){var c=b;b=a;a=c +}var d=b2PairManager.Hash(b,a)&b2Pair.b2_tableMask;return this.FindHash(b,a,d)},FindHash:function(b,a,d){var c=this.m_hashTable[d];while(c!=b2Pair.b2_nullPair&&b2PairManager.Equals(this.m_pairs[c],b,a)==false){c=this.m_pairs[c].next}if(c==b2Pair.b2_nullPair){return null}return this.m_pairs[c]},ValidateBuffer:function(){},ValidateTable:function(){},m_broadPhase:null,m_callback:null,m_pairs:null,m_freePair:0,m_pairCount:0,m_pairBuffer:null,m_pairBufferCount:0,m_hashTable:null};b2PairManager.Hash=function(b,a){var c=((a<<16)&4294901760)|b;c=~c+((c<<15)&4294934528);c=c^((c>>12)&1048575);c=c+((c<<2)&4294967292);c=c^((c>>4)&268435455);c=c*2057;c=c^((c>>16)&65535);return c};b2PairManager.Equals=function(c,b,a){return(c.proxyId1==b&&c.proxyId2==a)};b2PairManager.EqualsPair=function(b,a){return b.proxyId1==a.proxyId1&&b.proxyId2==a.proxyId2};var b2BroadPhase=function(f,g){this.m_pairManager=new b2PairManager();this.m_proxyPool=new Array(b2Settings.b2_maxPairs);this.m_bounds=new Array(2*b2Settings.b2_maxProxies);this.m_queryResults=new Array(b2Settings.b2_maxProxies);this.m_quantizationFactor=new b2Vec2();var d=0;this.m_pairManager.Initialize(this,g);this.m_worldAABB=f;this.m_proxyCount=0;for(d=0;d0&&t0){g=m;while(g0){g=k;while(g0&&bb[c.upperBounds[a]].value){return false}if(b[d.upperBounds[a]].valued[e.upperBounds[c]].value){return false}if(a.upperValues[c]0){var g=c-1;var n=a[g].stabbingCount;while(n){if(a[g].IsLower()){var k=this.m_proxyPool[a[g].proxyId];if(c<=k.upperBounds[b]){this.IncrementOverlapCount(a[g].proxyId);--n}}--g}}h[0]=c;d[0]=l},IncrementOverlapCount:function(b){var a=this.m_proxyPool[b];if(a.timeStampf){e=b-1}else{if(d[b].value0){f[c].id=b[0].id}else{f[c].id=b[1].id}++c}return c};b2Collision.EdgeSeparation=function(p,q,o){var f=p.m_vertices;var g=o.m_vertexCount;var r=o.m_vertices;var e=p.m_normals[q].x;var d=p.m_normals[q].y;var s=e;var l=p.m_R;e=l.col1.x*s+l.col2.x*d;d=l.col1.y*s+l.col2.y*d;var v=e;var u=d;l=o.m_R;s=v*l.col1.x+u*l.col1.y;u=v*l.col2.x+u*l.col2.y;v=s;var n=0;var m=Number.MAX_VALUE;for(var w=0;wa){a=o;h=p}}var n=b2Collision.EdgeSeparation(m,h,l);if(n>0&&w==false){return n}var g=h-1>=0?h-1:j-1;var t=b2Collision.EdgeSeparation(m,g,l);if(t>0&&w==false){return t}var q=h+10&&w==false){return u}var b=0;var k;var v=0;if(t>n&&t>u){v=-1;b=g;k=t}else{if(u>n){v=1;b=q;k=u}else{r[0]=h;return n}}while(true){if(v==-1){h=b-1>=0?b-1:j-1}else{h=b+10&&w==false){return n}if(n>k){b=h;k=n}else{break}}r[0]=b;return k};b2Collision.FindIncidentEdge=function(D,p,q,n){var h=p.m_vertexCount;var f=p.m_vertices;var g=n.m_vertexCount;var s=n.m_vertices;var a=q; +var F=q+1==h?0:q+1;var e=f[F];var C=e.x;var A=e.y;e=f[a];C-=e.x;A-=e.y;var v=C;C=A;A=-v;var E=1/Math.sqrt(C*C+A*A);C*=E;A*=E;var r=C;var o=A;v=r;var l=p.m_R;r=l.col1.x*v+l.col2.x*o;o=l.col1.y*v+l.col2.y*o;var d=r;var b=o;l=n.m_R;v=d*l.col1.x+b*l.col1.y;b=d*l.col2.x+b*l.col2.y;d=v;var k=0;var j=0;var m=Number.MAX_VALUE;for(var B=0;B0&&b==false){return +}var K=0;var g=[K];var E=b2Collision.FindMaxSeparation(g,j,k,b);K=g[0];if(E>0&&b==false){return}var p;var o;var a=0;var R=0;var d=0.98;var O=0.001;if(E>d*F+O){p=j;o=k;a=K;R=1}else{p=k;o=j;a=M;R=0}var c=[new ClipVertex(),new ClipVertex()];b2Collision.FindIncidentEdge(c,p,a,o);var B=p.m_vertexCount;var q=p.m_vertices;var I=q[a];var H=a+1l*l&&b==false){return}var d;if(mg){return}if(t>o){o=t;B=A}}if(og){return}x.pointCount=1;x.normal.Set(n.col1.x*e+n.col2.x*d,n.col1.y*e+n.col2.y*d);h=x.points[0];h.id.features.incidentEdge=b2Collision.b2_nullFeature;h.id.features.incidentVertex=b;h.id.features.referenceFace=b2Collision.b2_nullFeature;h.id.features.flip=0;h.position.x=k.m_position.x-g*x.normal.x;h.position.y=k.m_position.y-g*x.normal.y;h.separation=w-g;return}var q=(z-m.m_vertices[b].x)*r+(y-m.m_vertices[b].y)*p;h=x.points[0];h.id.features.incidentEdge=b2Collision.b2_nullFeature;h.id.features.incidentVertex=b2Collision.b2_nullFeature;h.id.features.referenceFace=b2Collision.b2_nullFeature;h.id.features.flip=0;var l,j;if(q<=0){l=m.m_vertices[b].x;j=m.m_vertices[b].y;h.id.features.incidentVertex=b}else{if(q>=f){l=m.m_vertices[a].x;j=m.m_vertices[a].y;h.id.features.incidentVertex=a}else{l=r*q+m.m_vertices[b].x;j=p*q+m.m_vertices[b].y;h.id.features.incidentEdge=b}}e=z-l;d=y-j;w=Math.sqrt(e*e+d*d);e/=w;d/=w;if(w>g){return}x.pointCount=1;x.normal.Set(n.col1.x*e+n.col2.x*d,n.col1.y*e+n.col2.y*d); +h.position.x=k.m_position.x-g*x.normal.x;h.position.y=k.m_position.y-g*x.normal.y;h.separation=w-g};b2Collision.b2TestOverlap=function(d,c){var i=c.minVertex;var g=d.maxVertex;var f=i.x-g.x;var e=i.y-g.y;i=d.minVertex;g=c.maxVertex;var j=i.x-g.x;var h=i.y-g.y;if(f>0||e>0){return false}if(j>0||h>0){return false}return true};var Features=function(){};Features.prototype={set_referenceFace:function(a){this._referenceFace=a;this._m_id._key=(this._m_id._key&4294967040)|(this._referenceFace&255)},get_referenceFace:function(){return this._referenceFace},_referenceFace:0,set_incidentEdge:function(a){this._incidentEdge=a;this._m_id._key=(this._m_id._key&4294902015)|((this._incidentEdge<<8)&65280)},get_incidentEdge:function(){return this._incidentEdge},_incidentEdge:0,set_incidentVertex:function(a){this._incidentVertex=a;this._m_id._key=(this._m_id._key&4278255615)|((this._incidentVertex<<16)&16711680)},get_incidentVertex:function(){return this._incidentVertex},_incidentVertex:0,set_flip:function(a){this._flip=a;this._m_id._key=(this._m_id._key&16777215)|((this._flip<<24)&4278190080)},get_flip:function(){return this._flip},_flip:0,_m_id:null};var b2ContactID=function(){this.features=new Features();this.features._m_id=this};b2ContactID.prototype={Set:function(a){this.set_key(a._key)},Copy:function(){var a=new b2ContactID();a.set_key(this._key);return a},get_key:function(){return this._key},set_key:function(a){this._key=a;this.features._referenceFace=this._key&255;this.features._incidentEdge=((this._key&65280)>>8)&255;this.features._incidentVertex=((this._key&16711680)>>16)&255;this.features._flip=((this._key&4278190080)>>24)&255},features:new Features(),_key:0};var b2ContactPoint=function(){this.position=new b2Vec2();this.id=new b2ContactID()};b2ContactPoint.prototype={position:new b2Vec2(),separation:null,normalImpulse:null,tangentImpulse:null,id:new b2ContactID()};var b2Distance=function(){};b2Distance.prototype={};b2Distance.ProcessTwo=function(j,h,b,k,i){var f=-i[1].x;var e=-i[1].y;var d=i[0].x-i[1].x;var c=i[0].y-i[1].y;var a=Math.sqrt(d*d+c*c);d/=a;c/=a;var g=f*d+e*c;if(g<=0||a=0&&F>=0){var B=x/(x+F);q.x=m[1].x+B*(m[2].x-m[1].x);q.y=m[1].y+B*(m[2].y-m[1].y);D.x=C[1].x+B*(C[2].x-C[1].x); +D.y=C[1].y+B*(C[2].y-C[1].y);m[0].SetV(m[2]);C[0].SetV(C[2]);G[0].SetV(G[2]);return 2}var f=E*(J*h-I*k);if(f<=0&&j>=0&&o>=0){var B=j/(j+o);q.x=m[0].x+B*(m[2].x-m[0].x);q.y=m[0].y+B*(m[2].y-m[0].y);D.x=C[0].x+B*(C[2].x-C[0].x);D.y=C[0].y+B*(C[2].y-C[0].y);m[1].SetV(m[2]);C[1].SetV(C[2]);G[1].SetV(G[2]);return 2}var d=g+f+e;d=1/d;var A=g*d;var t=f*d;var p=1-A-t;q.x=A*m[0].x+t*m[1].x+p*m[2].x;q.y=A*m[0].y+t*m[1].y+p*m[2].y;D.x=A*C[0].x+t*C[1].x+p*C[2].x;D.y=A*C[0].y+t*C[1].y+p*C[2].y;return 3};b2Distance.InPoinsts=function(a,c,d){for(var b=0;bNumber.MIN_VALUE){D*=1/d;C*=1/d}this.m_coreVertices[w].x=this.m_vertices[w].x-2*b2Settings.b2_linearSlop*D;this.m_coreVertices[w].y=this.m_vertices[w].y-2*b2Settings.b2_linearSlop*C}}var y=Number.MAX_VALUE;var x=Number.MAX_VALUE;var m=-Number.MAX_VALUE;var l=-Number.MAX_VALUE;this.m_maxRadius=0;for(w=0;w0){return false}}return true},syncAABB:new b2AABB(),syncMat:new b2Mat22(),Synchronize:function(c,e,a,b){this.m_R.SetM(b); +this.m_position.x=this.m_body.m_position.x+(b.col1.x*this.m_localCentroid.x+b.col2.x*this.m_localCentroid.y);this.m_position.y=this.m_body.m_position.y+(b.col1.y*this.m_localCentroid.x+b.col2.y*this.m_localCentroid.y);if(this.m_proxyId==b2Pair.b2_nullProxy){return}var m;var l;var k=e.col1;var j=e.col2;var i=this.m_localOBB.R.col1;var h=this.m_localOBB.R.col2;this.syncMat.col1.x=k.x*i.x+j.x*i.y;this.syncMat.col1.y=k.y*i.x+j.y*i.y;this.syncMat.col2.x=k.x*h.x+j.x*h.y;this.syncMat.col2.y=k.y*h.x+j.y*h.y;this.syncMat.Abs();m=this.m_localCentroid.x+this.m_localOBB.center.x;l=this.m_localCentroid.y+this.m_localOBB.center.y;var f=c.x+(e.col1.x*m+e.col2.x*l);var d=c.y+(e.col1.y*m+e.col2.y*l);m=this.syncMat.col1.x*this.m_localOBB.extents.x+this.syncMat.col2.x*this.m_localOBB.extents.y;l=this.syncMat.col1.y*this.m_localOBB.extents.x+this.syncMat.col2.y*this.m_localOBB.extents.y;this.syncAABB.minVertex.x=f-m;this.syncAABB.minVertex.y=d-l;this.syncAABB.maxVertex.x=f+m;this.syncAABB.maxVertex.y=d+l;k=b.col1; +j=b.col2;i=this.m_localOBB.R.col1;h=this.m_localOBB.R.col2;this.syncMat.col1.x=k.x*i.x+j.x*i.y;this.syncMat.col1.y=k.y*i.x+j.y*i.y;this.syncMat.col2.x=k.x*h.x+j.x*h.y;this.syncMat.col2.y=k.y*h.x+j.y*h.y;this.syncMat.Abs();m=this.m_localCentroid.x+this.m_localOBB.center.x;l=this.m_localCentroid.y+this.m_localOBB.center.y;f=a.x+(b.col1.x*m+b.col2.x*l);d=a.y+(b.col1.y*m+b.col2.y*l);m=this.syncMat.col1.x*this.m_localOBB.extents.x+this.syncMat.col2.x*this.m_localOBB.extents.y;l=this.syncMat.col1.y*this.m_localOBB.extents.x+this.syncMat.col2.y*this.m_localOBB.extents.y;this.syncAABB.minVertex.x=Math.min(this.syncAABB.minVertex.x,f-m);this.syncAABB.minVertex.y=Math.min(this.syncAABB.minVertex.y,d-l);this.syncAABB.maxVertex.x=Math.max(this.syncAABB.maxVertex.x,f+m);this.syncAABB.maxVertex.y=Math.max(this.syncAABB.maxVertex.y,d+l);var g=this.m_body.m_world.m_broadPhase;if(g.InRange(this.syncAABB)){g.MoveProxy(this.m_proxyId,this.syncAABB)}else{this.m_body.Freeze()}},QuickSync:function(a,b){this.m_R.SetM(b); +this.m_position.x=a.x+(b.col1.x*this.m_localCentroid.x+b.col2.x*this.m_localCentroid.y);this.m_position.y=a.y+(b.col1.y*this.m_localCentroid.x+b.col2.y*this.m_localCentroid.y)},ResetProxy:function(b){if(this.m_proxyId==b2Pair.b2_nullProxy){return}var e=b.GetProxy(this.m_proxyId);b.DestroyProxy(this.m_proxyId);e=null;var g=b2Math.b2MulMM(this.m_R,this.m_localOBB.R);var d=b2Math.b2AbsM(g);var f=b2Math.b2MulMV(d,this.m_localOBB.extents);var a=b2Math.b2MulMV(this.m_R,this.m_localOBB.center);a.Add(this.m_position);var c=new b2AABB();c.minVertex.SetV(a);c.minVertex.Subtract(f);c.maxVertex.SetV(a);c.maxVertex.Add(f);if(b.InRange(c)){this.m_proxyId=b.CreateProxy(c,this)}else{this.m_proxyId=b2Pair.b2_nullProxy}if(this.m_proxyId==b2Pair.b2_nullProxy){this.m_body.Freeze()}},Support:function(c,a,b){var g=(c*this.m_R.col1.x+a*this.m_R.col1.y);var f=(c*this.m_R.col2.x+a*this.m_R.col2.y);var e=0;var j=(this.m_coreVertices[0].x*g+this.m_coreVertices[0].y*f);for(var d=1;dj){e=d;j=h}}b.Set(this.m_position.x+(this.m_R.col1.x*this.m_coreVertices[e].x+this.m_R.col2.x*this.m_coreVertices[e].y),this.m_position.y+(this.m_R.col1.y*this.m_coreVertices[e].x+this.m_R.col2.y*this.m_coreVertices[e].y))},m_localCentroid:new b2Vec2(),m_localOBB:new b2OBB(),m_vertices:null,m_coreVertices:null,m_vertexCount:0,m_normals:null});b2PolyShape.tempVec=new b2Vec2();b2PolyShape.tAbsR=new b2Mat22();var b2Body=function(f,e){this.sMat0=new b2Mat22();this.m_position=new b2Vec2();this.m_R=new b2Mat22(0);this.m_position0=new b2Vec2();var c=0;var g;var a;this.m_flags=0;this.m_position.SetV(f.position);this.m_rotation=f.rotation;this.m_R.Set(this.m_rotation);this.m_position0.SetV(this.m_position);this.m_rotation0=this.m_rotation;this.m_world=e;this.m_linearDamping=b2Math.b2Clamp(1-f.linearDamping,0,1);this.m_angularDamping=b2Math.b2Clamp(1-f.angularDamping,0,1);this.m_force=new b2Vec2(0,0);this.m_torque=0;this.m_mass=0;var h=new Array(b2Settings.b2_maxShapesPerBody);for(c=0;c0){this.m_center.Multiply(1/this.m_mass);this.m_position.Add(b2Math.b2MulMV(this.m_R,this.m_center)) +}else{this.m_flags|=b2Body.e_staticFlag}this.m_I=0;for(c=0;c0){this.m_invMass=1/this.m_mass}else{this.m_invMass=0}if(this.m_I>0&&f.preventRotation==false){this.m_invI=1/this.m_I}else{this.m_I=0;this.m_invI=0}this.m_linearVelocity=b2Math.AddVV(f.linearVelocity,b2Math.b2CrossFV(f.angularVelocity,this.m_center));this.m_angularVelocity=f.angularVelocity;this.m_jointList=null;this.m_contactList=null;this.m_prev=null;this.m_next=null;this.m_shapeList=null;for(c=0;c0}var c=(b.m_maskBits&a.m_categoryBits)!=0&&(b.m_categoryBits&a.m_maskBits)!=0;return c}};b2CollisionFilter.b2_defaultFilter=new b2CollisionFilter;var b2Island=function(e,d,c,a){var b=0;this.m_bodyCapacity=e;this.m_contactCapacity=d;this.m_jointCapacity=c;this.m_bodyCount=0;this.m_contactCount=0;this.m_jointCount=0;this.m_bodies=new Array(e);for(b=0;bc||b2Math.b2Dot(a.m_linearVelocity,a.m_linearVelocity)>d){a.m_sleepTime=0;e=0}else{a.m_sleepTime+=g;e=b2Math.b2Min(e,a.m_sleepTime)}}if(e>=b2Settings.b2_timeToSleep){for(f=0;f0){a.m_shape1.m_body.WakeUp();a.m_shape2.m_body.WakeUp()}var d=a.m_shape1.m_type;var b=a.m_shape2.m_type;var e=b2Contact.s_registers[d][b].destroyFcn;e(a,c)};b2Contact.s_registers=null;b2Contact.s_initialized=false;var b2ContactConstraint=function(){this.normal=new b2Vec2();this.points=new Array(b2Settings.b2_maxManifoldPoints);for(var a=0;a0){b.velocityBias=-60*b.separation}var h=f+(-F*C)-u-(-G*Q);var g=d+(F*D)-s-(G*S);var P=V.normal.x*h+V.normal.y*g;if(P<-b2Settings.b2_velocityThreshold){b.velocityBias+=-V.restitution*P}}++L}}};b2ContactSolver.prototype={PreSolve:function(){var b;var A;var r;for(var w=0;w=-b2Settings.b2_linearSlop},PostSolve:function(){for(var d=0;d0){this.m_manifoldCount=1 +}else{this.m_manifoldCount=0}},GetManifolds:function(){return this.m_manifold},m_manifold:[new b2Manifold()]});b2CircleContact.Create=function(b,a,c){return new b2CircleContact(b,a)};b2CircleContact.Destroy=function(a,b){};var b2Conservative=function(){};b2Conservative.prototype={};b2Conservative.R1=new b2Mat22();b2Conservative.R2=new b2Mat22();b2Conservative.x1=new b2Vec2();b2Conservative.x2=new b2Vec2();b2Conservative.Conservative=function(k,j){var i=k.GetBody();var h=j.GetBody();var s=i.m_position.x-i.m_position0.x;var q=i.m_position.y-i.m_position0.y;var H=i.m_rotation-i.m_rotation0;var b=h.m_position.x-h.m_position0.x;var a=h.m_position.y-h.m_position0.y;var F=h.m_rotation-h.m_rotation0;var m=k.GetMaxRadius();var l=j.GetMaxRadius();var I=i.m_position0.x;var D=i.m_position0.y;var z=i.m_rotation0;var E=h.m_position0.x;var C=h.m_position0.y;var n=h.m_rotation0;var e=I;var c=D;var J=z;var B=E;var A=C;var G=n;b2Conservative.R1.Set(J);b2Conservative.R2.Set(G);k.QuickSync(p1,b2Conservative.R1);j.QuickSync(p2,b2Conservative.R2);var L=0;var o=10;var u;var t;var y=0;var v=true;for(var w=0;wFLT_EPSILON){d*=b2_linearSlop/p}if(i.IsStatic()){i.m_position.x=e;i.m_position.y=c}else{i.m_position.x=e-u;i.m_position.y=c-t}i.m_rotation=J;i.m_R.Set(J);i.QuickSyncShapes();if(h.IsStatic()){h.m_position.x=B;h.m_position.y=A}else{h.m_position.x=B+u;h.m_position.y=A+t}h.m_position.x=B+u;h.m_position.y=A+t;h.m_rotation=G;h.m_R.Set(G);h.QuickSyncShapes();return true +}k.QuickSync(i.m_position,i.m_R);j.QuickSync(h.m_position,h.m_R);return false};var b2NullContact=function(b,a){this.m_node1=new b2ContactNode();this.m_node2=new b2ContactNode();this.m_flags=0;if(!b||!a){this.m_shape1=null;this.m_shape2=null;return}this.m_shape1=b;this.m_shape2=a;this.m_manifoldCount=0;this.m_friction=Math.sqrt(this.m_shape1.m_friction*this.m_shape2.m_friction);this.m_restitution=b2Math.b2Max(this.m_shape1.m_restitution,this.m_shape2.m_restitution);this.m_prev=null;this.m_next=null;this.m_node1.contact=null;this.m_node1.prev=null;this.m_node1.next=null;this.m_node1.other=null;this.m_node2.contact=null;this.m_node2.prev=null;this.m_node2.next=null;this.m_node2.other=null};Object.extend(b2NullContact.prototype,b2Contact.prototype);Object.extend(b2NullContact.prototype,{Evaluate:function(){},GetManifolds:function(){return null}});var b2PolyAndCircleContact=function(b,a){this.m_node1=new b2ContactNode();this.m_node2=new b2ContactNode();this.m_flags=0;if(!b||!a){this.m_shape1=null;this.m_shape2=null;return}this.m_shape1=b;this.m_shape2=a;this.m_manifoldCount=0;this.m_friction=Math.sqrt(this.m_shape1.m_friction*this.m_shape2.m_friction);this.m_restitution=b2Math.b2Max(this.m_shape1.m_restitution,this.m_shape2.m_restitution);this.m_prev=null;this.m_next=null;this.m_node1.contact=null;this.m_node1.prev=null;this.m_node1.next=null;this.m_node1.other=null;this.m_node2.contact=null;this.m_node2.prev=null;this.m_node2.next=null;this.m_node2.other=null;this.m_manifold=[new b2Manifold()];b2Settings.b2Assert(this.m_shape1.m_type==b2Shape.e_polyShape);b2Settings.b2Assert(this.m_shape2.m_type==b2Shape.e_circleShape);this.m_manifold[0].pointCount=0;this.m_manifold[0].points[0].normalImpulse=0;this.m_manifold[0].points[0].tangentImpulse=0};Object.extend(b2PolyAndCircleContact.prototype,b2Contact.prototype);Object.extend(b2PolyAndCircleContact.prototype,{Evaluate:function(){b2Collision.b2CollidePolyAndCircle(this.m_manifold[0],this.m_shape1,this.m_shape2,false); +if(this.m_manifold[0].pointCount>0){this.m_manifoldCount=1}else{this.m_manifoldCount=0}},GetManifolds:function(){return this.m_manifold},m_manifold:[new b2Manifold()]});b2PolyAndCircleContact.Create=function(b,a,c){return new b2PolyAndCircleContact(b,a)};b2PolyAndCircleContact.Destroy=function(a,b){};var b2PolyContact=function(b,a){this.m_node1=new b2ContactNode();this.m_node2=new b2ContactNode();this.m_flags=0;if(!b||!a){this.m_shape1=null;this.m_shape2=null;return}this.m_shape1=b;this.m_shape2=a;this.m_manifoldCount=0;this.m_friction=Math.sqrt(this.m_shape1.m_friction*this.m_shape2.m_friction);this.m_restitution=b2Math.b2Max(this.m_shape1.m_restitution,this.m_shape2.m_restitution);this.m_prev=null;this.m_next=null;this.m_node1.contact=null;this.m_node1.prev=null;this.m_node1.next=null;this.m_node1.other=null;this.m_node2.contact=null;this.m_node2.prev=null;this.m_node2.next=null;this.m_node2.other=null;this.m0=new b2Manifold();this.m_manifold=[new b2Manifold()];this.m_manifold[0].pointCount=0};Object.extend(b2PolyContact.prototype,b2Contact.prototype);Object.extend(b2PolyContact.prototype,{m0:new b2Manifold(),Evaluate:function(){var a=this.m_manifold[0];var b=this.m0.points;for(var d=0;d0){var h=[false,false];for(var f=0;f0){var e=f.m_shape1.m_body;var d=f.m_shape2.m_body;var b=f.m_node1;var a=f.m_node2;e.WakeUp();d.WakeUp();if(b.prev){b.prev.next=b.next}if(b.next){b.next.prev=b.prev}if(b==e.m_contactList){e.m_contactList=b.next}b.prev=null;b.next=null;if(a.prev){a.prev.next=a.next}if(a.next){a.next.prev=a.prev}if(a==d.m_contactList){d.m_contactList=a.next}a.prev=null;a.next=null}b2Contact.Destroy(f,this.m_world.m_blockAllocator);--this.m_world.m_contactCount},CleanContactList:function(){var b=this.m_world.m_contactList;while(b!=null){var a=b;b=b.m_next;if(a.m_flags&b2Contact.e_destroyFlag){this.DestroyContact(a);a=null}}},Collide:function(){var f;var e;var d;var a;for(var h=this.m_world.m_contactList;h!=null;h=h.m_next){if(h.m_shape1.m_body.IsSleeping()&&h.m_shape2.m_body.IsSleeping()){continue +}var b=h.GetManifoldCount();h.Evaluate();var g=h.GetManifoldCount();if(b==0&&g>0){f=h.m_shape1.m_body;e=h.m_shape2.m_body;d=h.m_node1;a=h.m_node2;d.contact=h;d.other=e;d.prev=null;d.next=f.m_contactList;if(d.next!=null){d.next.prev=h.m_node1}f.m_contactList=h.m_node1;a.contact=h;a.other=f;a.prev=null;a.next=e.m_contactList;if(a.next!=null){a.next.prev=a}e.m_contactList=a}else{if(b>0&&g==0){f=h.m_shape1.m_body;e=h.m_shape2.m_body;d=h.m_node1;a=h.m_node2;if(d.prev){d.prev.next=d.next}if(d.next){d.next.prev=d.prev}if(d==f.m_contactList){f.m_contactList=d.next}d.prev=null;d.next=null;if(a.prev){a.prev.next=a.next}if(a.next){a.next.prev=a.prev}if(a==e.m_contactList){e.m_contactList=a.next}a.prev=null;a.next=null}}}},m_world:null,m_nullContact:new b2NullContact(),m_destroyImmediate:null});var b2World=function(a,d,c){this.step=new b2TimeStep();this.m_contactManager=new b2ContactManager();this.m_listener=null;this.m_filter=b2CollisionFilter.b2_defaultFilter;this.m_bodyList=null;this.m_contactList=null;this.m_jointList=null;this.m_bodyCount=0;this.m_contactCount=0;this.m_jointCount=0;this.m_bodyDestroyList=null;this.m_allowSleep=c;this.m_gravity=d;this.m_contactManager.m_world=this;this.m_broadPhase=new b2BroadPhase(a,this.m_contactManager);var b=new b2BodyDef();this.m_groundBody=this.CreateBody(b)};b2World.prototype={SetListener:function(a){this.m_listener=a},SetFilter:function(a){this.m_filter=a},CreateBody:function(c){var a=new b2Body(c,this);a.m_prev=null;a.m_next=this.m_bodyList;if(this.m_bodyList){this.m_bodyList.m_prev=a}this.m_bodyList=a;++this.m_bodyCount;return a},DestroyBody:function(a){if(a.m_flags&b2Body.e_destroyFlag){return}if(a.m_prev){a.m_prev.m_next=a.m_next}if(a.m_next){a.m_next.m_prev=a.m_prev}if(a==this.m_bodyList){this.m_bodyList=a.m_next}a.m_flags|=b2Body.e_destroyFlag; +--this.m_bodyCount;a.m_prev=null;a.m_next=this.m_bodyDestroyList;this.m_bodyDestroyList=a},CleanBodyList:function(){this.m_contactManager.m_destroyImmediate=true;var c=this.m_bodyDestroyList;while(c){var e=c;c=c.m_next;var d=e.m_jointList;while(d){var a=d;d=d.next;if(this.m_listener){this.m_listener.NotifyJointDestroyed(a.joint)}this.DestroyJoint(a.joint)}e.Destroy()}this.m_bodyDestroyList=null;this.m_contactManager.m_destroyImmediate=false},CreateJoint:function(e){var c=b2Joint.Create(e,this.m_blockAllocator);c.m_prev=null;c.m_next=this.m_jointList;if(this.m_jointList){this.m_jointList.m_prev=c}this.m_jointList=c;++this.m_jointCount;c.m_node1.joint=c;c.m_node1.other=c.m_body2;c.m_node1.prev=null;c.m_node1.next=c.m_body1.m_jointList;if(c.m_body1.m_jointList){c.m_body1.m_jointList.prev=c.m_node1}c.m_body1.m_jointList=c.m_node1;c.m_node2.joint=c;c.m_node2.other=c.m_body1;c.m_node2.prev=null;c.m_node2.next=c.m_body2.m_jointList;if(c.m_body2.m_jointList){c.m_body2.m_jointList.prev=c.m_node2 +}c.m_body2.m_jointList=c.m_node2;if(e.collideConnected==false){var a=e.body1.m_shapeCount0){this.step.inv_dt=1/a}else{this.step.inv_dt=0}this.m_positionIterationCount=0;this.m_contactManager.CleanContactList();this.CleanBodyList();this.m_contactManager.Collide();var n=new b2Island(this.m_bodyCount,this.m_contactCount,this.m_jointCount,this.m_stackAllocator);for(r=this.m_bodyList;r!=null;r=r.m_next){r.m_flags&=~b2Body.e_islandFlag}for(var p=this.m_contactList;p!=null;p=p.m_next){p.m_flags&=~b2Contact.e_islandFlag}for(var h=this.m_jointList;h!=null;h=h.m_next){h.m_islandFlag=false}var u=this.m_bodyCount;var q=new Array(this.m_bodyCount);for(var g=0;g0){r=q[--t];n.AddBody(r);r.m_flags&=~b2Body.e_sleepFlag; +if(r.m_flags&b2Body.e_staticFlag){continue}for(var s=r.m_contactList;s!=null;s=s.next){if(s.contact.m_flags&b2Contact.e_islandFlag){continue}n.AddContact(s.contact);s.contact.m_flags|=b2Contact.e_islandFlag;o=s.other;if(o.m_flags&b2Body.e_islandFlag){continue}q[t++]=o;o.m_flags|=b2Body.e_islandFlag}for(var f=r.m_jointList;f!=null;f=f.next){if(f.joint.m_islandFlag==true){continue}n.AddJoint(f.joint);f.joint.m_islandFlag=true;o=f.other;if(o.m_flags&b2Body.e_islandFlag){continue}q[t++]=o;o.m_flags|=b2Body.e_islandFlag}}n.Solve(this.step,this.m_gravity);this.m_positionIterationCount=b2Math.b2Max(this.m_positionIterationCount,b2Island.m_positionIterationCount);if(this.m_allowSleep){n.UpdateSleep(a)}for(var l=0;lb2Settings.b2_linearSlop){this.m_u.Multiply(1/a)}else{this.m_u.SetZero()}var h=(j*this.m_u.y-i*this.m_u.x);var d=(f*this.m_u.y-e*this.m_u.x);this.m_mass=this.m_body1.m_invMass+this.m_body1.m_invI*h*h+this.m_body2.m_invMass+this.m_body2.m_invI*d*d;this.m_mass=1/this.m_mass;if(b2World.s_enableWarmStarting){var c=this.m_impulse*this.m_u.x;var b=this.m_impulse*this.m_u.y;this.m_body1.m_linearVelocity.x-=this.m_body1.m_invMass*c;this.m_body1.m_linearVelocity.y-=this.m_body1.m_invMass*b;this.m_body1.m_angularVelocity-=this.m_body1.m_invI*(j*b-i*c); +this.m_body2.m_linearVelocity.x+=this.m_body2.m_invMass*c;this.m_body2.m_linearVelocity.y+=this.m_body2.m_invMass*b;this.m_body2.m_angularVelocity+=this.m_body2.m_invI*(f*b-e*c)}else{this.m_impulse=0}},SolveVelocityConstraints:function(b){var j;j=this.m_body1.m_R;var n=j.col1.x*this.m_localAnchor1.x+j.col2.x*this.m_localAnchor1.y;var m=j.col1.y*this.m_localAnchor1.x+j.col2.y*this.m_localAnchor1.y;j=this.m_body2.m_R;var h=j.col1.x*this.m_localAnchor2.x+j.col2.x*this.m_localAnchor2.y;var g=j.col1.y*this.m_localAnchor2.x+j.col2.y*this.m_localAnchor2.y;var l=this.m_body1.m_linearVelocity.x+(-this.m_body1.m_angularVelocity*m);var k=this.m_body1.m_linearVelocity.y+(this.m_body1.m_angularVelocity*n);var f=this.m_body2.m_linearVelocity.x+(-this.m_body2.m_angularVelocity*g);var e=this.m_body2.m_linearVelocity.y+(this.m_body2.m_angularVelocity*h);var i=(this.m_u.x*(f-l)+this.m_u.y*(e-k));var a=-this.m_mass*i;this.m_impulse+=a;var d=a*this.m_u.x;var c=a*this.m_u.y;this.m_body1.m_linearVelocity.x-=this.m_body1.m_invMass*d; +this.m_body1.m_linearVelocity.y-=this.m_body1.m_invMass*c;this.m_body1.m_angularVelocity-=this.m_body1.m_invI*(n*c-m*d);this.m_body2.m_linearVelocity.x+=this.m_body2.m_invMass*d;this.m_body2.m_linearVelocity.y+=this.m_body2.m_invMass*c;this.m_body2.m_angularVelocity+=this.m_body2.m_invI*(h*c-g*d)},SolvePositionConstraints:function(){var j;j=this.m_body1.m_R;var l=j.col1.x*this.m_localAnchor1.x+j.col2.x*this.m_localAnchor1.y;var k=j.col1.y*this.m_localAnchor1.x+j.col2.y*this.m_localAnchor1.y;j=this.m_body2.m_R;var i=j.col1.x*this.m_localAnchor2.x+j.col2.x*this.m_localAnchor2.y;var h=j.col1.y*this.m_localAnchor2.x+j.col2.y*this.m_localAnchor2.y;var g=this.m_body2.m_position.x+i-this.m_body1.m_position.x-l;var f=this.m_body2.m_position.y+h-this.m_body1.m_position.y-k;var c=Math.sqrt(g*g+f*f);g/=c;f/=c;var a=c-this.m_length;a=b2Math.b2Clamp(a,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);var b=-this.m_mass*a;this.m_u.Set(g,f);var e=b*this.m_u.x;var d=b*this.m_u.y;this.m_body1.m_position.x-=this.m_body1.m_invMass*e; +this.m_body1.m_position.y-=this.m_body1.m_invMass*d;this.m_body1.m_rotation-=this.m_body1.m_invI*(l*d-k*e);this.m_body2.m_position.x+=this.m_body2.m_invMass*e;this.m_body2.m_position.y+=this.m_body2.m_invMass*d;this.m_body2.m_rotation+=this.m_body2.m_invI*(i*d-h*e);this.m_body1.m_R.Set(this.m_body1.m_rotation);this.m_body2.m_R.Set(this.m_body2.m_rotation);return b2Math.b2Abs(a)d.dt*this.m_maxForce){this.m_impulse.Multiply(d.dt*this.m_maxForce/b)}e=this.m_impulse.x-j;c=this.m_impulse.y-g;i.m_linearVelocity.x+=i.m_invMass*e;i.m_linearVelocity.y+=i.m_invMass*c; +i.m_angularVelocity+=i.m_invI*(h*c-f*e)},SolvePositionConstraints:function(){return true},m_localAnchor:new b2Vec2(),m_target:new b2Vec2(),m_impulse:new b2Vec2(),m_ptpMass:new b2Mat22(),m_C:new b2Vec2(),m_maxForce:null,m_beta:null,m_gamma:null});var b2MouseJointDef=function(){this.type=b2Joint.e_unknownJoint;this.userData=null;this.body1=null;this.body2=null;this.collideConnected=false;this.target=new b2Vec2();this.type=b2Joint.e_mouseJoint;this.maxForce=0;this.frequencyHz=5;this.dampingRatio=0.7;this.timeStep=1/60};Object.extend(b2MouseJointDef.prototype,b2JointDef.prototype);Object.extend(b2MouseJointDef.prototype,{target:new b2Vec2(),maxForce:null,frequencyHz:null,dampingRatio:null,timeStep:null});var b2PrismaticJoint=function(c){this.m_node1=new b2JointNode();this.m_node2=new b2JointNode();this.m_type=c.type;this.m_prev=null;this.m_next=null;this.m_body1=c.body1;this.m_body2=c.body2;this.m_collideConnected=c.collideConnected;this.m_islandFlag=false;this.m_userData=c.userData;this.m_localAnchor1=new b2Vec2();this.m_localAnchor2=new b2Vec2();this.m_localXAxis1=new b2Vec2();this.m_localYAxis1=new b2Vec2();this.m_linearJacobian=new b2Jacobian();this.m_motorJacobian=new b2Jacobian();var b;var a;var d;b=this.m_body1.m_R;a=(c.anchorPoint.x-this.m_body1.m_position.x);d=(c.anchorPoint.y-this.m_body1.m_position.y);this.m_localAnchor1.Set((a*b.col1.x+d*b.col1.y),(a*b.col2.x+d*b.col2.y));b=this.m_body2.m_R;a=(c.anchorPoint.x-this.m_body2.m_position.x);d=(c.anchorPoint.y-this.m_body2.m_position.y);this.m_localAnchor2.Set((a*b.col1.x+d*b.col1.y),(a*b.col2.x+d*b.col2.y));b=this.m_body1.m_R;a=c.axis.x;d=c.axis.y;this.m_localXAxis1.Set((a*b.col1.x+d*b.col1.y),(a*b.col2.x+d*b.col2.y));this.m_localYAxis1.x=-this.m_localXAxis1.y; +this.m_localYAxis1.y=this.m_localXAxis1.x;this.m_initialAngle=this.m_body2.m_rotation-this.m_body1.m_rotation;this.m_linearJacobian.SetZero();this.m_linearMass=0;this.m_linearImpulse=0;this.m_angularMass=0;this.m_angularImpulse=0;this.m_motorJacobian.SetZero();this.m_motorMass=0;this.m_motorImpulse=0;this.m_limitImpulse=0;this.m_limitPositionImpulse=0;this.m_lowerTranslation=c.lowerTranslation;this.m_upperTranslation=c.upperTranslation;this.m_maxMotorForce=c.motorForce;this.m_motorSpeed=c.motorSpeed;this.m_enableLimit=c.enableLimit;this.m_enableMotor=c.enableMotor};Object.extend(b2PrismaticJoint.prototype,b2Joint.prototype);Object.extend(b2PrismaticJoint.prototype,{GetAnchor1:function(){var a=this.m_body1;var b=new b2Vec2();b.SetV(this.m_localAnchor1);b.MulM(a.m_R);b.Add(a.m_position);return b},GetAnchor2:function(){var a=this.m_body2;var b=new b2Vec2();b.SetV(this.m_localAnchor2);b.MulM(a.m_R);b.Add(a.m_position);return b},GetJointTranslation:function(){var l=this.m_body1;var k=this.m_body2; +var j;j=l.m_R;var p=j.col1.x*this.m_localAnchor1.x+j.col2.x*this.m_localAnchor1.y;var n=j.col1.y*this.m_localAnchor1.x+j.col2.y*this.m_localAnchor1.y;j=k.m_R;var i=j.col1.x*this.m_localAnchor2.x+j.col2.x*this.m_localAnchor2.y;var h=j.col1.y*this.m_localAnchor2.x+j.col2.y*this.m_localAnchor2.y;var g=l.m_position.x+p;var f=l.m_position.y+n;var c=k.m_position.x+i;var b=k.m_position.y+h;var e=c-g;var d=b-f;j=l.m_R;var o=j.col1.x*this.m_localXAxis1.x+j.col2.x*this.m_localXAxis1.y;var m=j.col1.y*this.m_localXAxis1.x+j.col2.y*this.m_localXAxis1.y;var a=o*e+m*d;return a},GetJointSpeed:function(){var j=this.m_body1;var i=this.m_body2;var k;k=j.m_R;var t=k.col1.x*this.m_localAnchor1.x+k.col2.x*this.m_localAnchor1.y;var s=k.col1.y*this.m_localAnchor1.x+k.col2.y*this.m_localAnchor1.y;k=i.m_R;var h=k.col1.x*this.m_localAnchor2.x+k.col2.x*this.m_localAnchor2.y;var g=k.col1.y*this.m_localAnchor2.x+k.col2.y*this.m_localAnchor2.y;var r=j.m_position.x+t;var p=j.m_position.y+s;var c=i.m_position.x+h;var a=i.m_position.y+g; +var f=c-r;var e=a-p;k=j.m_R;var o=k.col1.x*this.m_localXAxis1.x+k.col2.x*this.m_localXAxis1.y;var n=k.col1.y*this.m_localXAxis1.x+k.col2.y*this.m_localXAxis1.y;var d=j.m_linearVelocity;var b=i.m_linearVelocity;var m=j.m_angularVelocity;var l=i.m_angularVelocity;var q=(f*(-m*n)+e*(m*o))+(o*(((b.x+(-l*g))-d.x)-(-m*s))+n*(((b.y+(l*h))-d.y)-(m*t)));return q},GetMotorForce:function(a){return a*this.m_motorImpulse},SetMotorSpeed:function(a){this.m_motorSpeed=a},SetMotorForce:function(a){this.m_maxMotorForce=a},GetReactionForce:function(b){var e=b*this.m_limitImpulse;var d;d=this.m_body1.m_R;var g=e*(d.col1.x*this.m_localXAxis1.x+d.col2.x*this.m_localXAxis1.y);var f=e*(d.col1.y*this.m_localXAxis1.x+d.col2.y*this.m_localXAxis1.y);var c=e*(d.col1.x*this.m_localYAxis1.x+d.col2.x*this.m_localYAxis1.y);var a=e*(d.col1.y*this.m_localYAxis1.x+d.col2.y*this.m_localYAxis1.y);return new b2Vec2(g+c,f+a)},GetReactionTorque:function(a){return a*this.m_angularImpulse},PrepareVelocitySolver:function(){var m=this.m_body1; +var l=this.m_body2;var p;p=m.m_R;var z=p.col1.x*this.m_localAnchor1.x+p.col2.x*this.m_localAnchor1.y;var y=p.col1.y*this.m_localAnchor1.x+p.col2.y*this.m_localAnchor1.y;p=l.m_R;var i=p.col1.x*this.m_localAnchor2.x+p.col2.x*this.m_localAnchor2.y;var g=p.col1.y*this.m_localAnchor2.x+p.col2.y*this.m_localAnchor2.y;var s=m.m_invMass;var r=l.m_invMass;var k=m.m_invI;var j=l.m_invI;p=m.m_R;var h=p.col1.x*this.m_localYAxis1.x+p.col2.x*this.m_localYAxis1.y;var f=p.col1.y*this.m_localYAxis1.x+p.col2.y*this.m_localYAxis1.y;var t=l.m_position.x+i-m.m_position.x;var q=l.m_position.y+g-m.m_position.y;this.m_linearJacobian.linear1.x=-h;this.m_linearJacobian.linear1.y=-f;this.m_linearJacobian.linear2.x=h;this.m_linearJacobian.linear2.y=f;this.m_linearJacobian.angular1=-(t*f-q*h);this.m_linearJacobian.angular2=i*f-g*h;this.m_linearMass=s+k*this.m_linearJacobian.angular1*this.m_linearJacobian.angular1+r+j*this.m_linearJacobian.angular2*this.m_linearJacobian.angular2;this.m_linearMass=1/this.m_linearMass; +this.m_angularMass=1/(k+j);if(this.m_enableLimit||this.m_enableMotor){p=m.m_R;var v=p.col1.x*this.m_localXAxis1.x+p.col2.x*this.m_localXAxis1.y;var u=p.col1.y*this.m_localXAxis1.x+p.col2.y*this.m_localXAxis1.y;this.m_motorJacobian.linear1.x=-v;this.m_motorJacobian.linear1.y=-u;this.m_motorJacobian.linear2.x=v;this.m_motorJacobian.linear2.y=u;this.m_motorJacobian.angular1=-(t*u-q*v);this.m_motorJacobian.angular2=i*u-g*v;this.m_motorMass=s+k*this.m_motorJacobian.angular1*this.m_motorJacobian.angular1+r+j*this.m_motorJacobian.angular2*this.m_motorJacobian.angular2;this.m_motorMass=1/this.m_motorMass;if(this.m_enableLimit){var e=t-z;var d=q-y;var c=v*e+u*d;if(b2Math.b2Abs(this.m_upperTranslation-this.m_lowerTranslation)<2*b2Settings.b2_linearSlop){this.m_limitState=b2Joint.e_equalLimits}else{if(c<=this.m_lowerTranslation){if(this.m_limitState!=b2Joint.e_atLowerLimit){this.m_limitImpulse=0}this.m_limitState=b2Joint.e_atLowerLimit}else{if(c>=this.m_upperTranslation){if(this.m_limitState!=b2Joint.e_atUpperLimit){this.m_limitImpulse=0 +}this.m_limitState=b2Joint.e_atUpperLimit}else{this.m_limitState=b2Joint.e_inactiveLimit;this.m_limitImpulse=0}}}}}if(this.m_enableMotor==false){this.m_motorImpulse=0}if(this.m_enableLimit==false){this.m_limitImpulse=0}if(b2World.s_enableWarmStarting){var b=this.m_linearImpulse*this.m_linearJacobian.linear1.x+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear1.x;var a=this.m_linearImpulse*this.m_linearJacobian.linear1.y+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear1.y;var o=this.m_linearImpulse*this.m_linearJacobian.linear2.x+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear2.x;var n=this.m_linearImpulse*this.m_linearJacobian.linear2.y+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear2.y;var x=this.m_linearImpulse*this.m_linearJacobian.angular1-this.m_angularImpulse+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.angular1;var w=this.m_linearImpulse*this.m_linearJacobian.angular2+this.m_angularImpulse+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.angular2; +m.m_linearVelocity.x+=s*b;m.m_linearVelocity.y+=s*a;m.m_angularVelocity+=k*x;l.m_linearVelocity.x+=r*o;l.m_linearVelocity.y+=r*n;l.m_angularVelocity+=j*w}else{this.m_linearImpulse=0;this.m_angularImpulse=0;this.m_limitImpulse=0;this.m_motorImpulse=0}this.m_limitPositionImpulse=0},SolveVelocityConstraints:function(b){var l=this.m_body1;var k=this.m_body2;var q=l.m_invMass;var o=k.m_invMass;var d=l.m_invI;var c=k.m_invI;var p;var e=this.m_linearJacobian.Compute(l.m_linearVelocity,l.m_angularVelocity,k.m_linearVelocity,k.m_angularVelocity);var j=-this.m_linearMass*e;this.m_linearImpulse+=j;l.m_linearVelocity.x+=(q*j)*this.m_linearJacobian.linear1.x;l.m_linearVelocity.y+=(q*j)*this.m_linearJacobian.linear1.y;l.m_angularVelocity+=d*j*this.m_linearJacobian.angular1;k.m_linearVelocity.x+=(o*j)*this.m_linearJacobian.linear2.x;k.m_linearVelocity.y+=(o*j)*this.m_linearJacobian.linear2.y;k.m_angularVelocity+=c*j*this.m_linearJacobian.angular2;var h=k.m_angularVelocity-l.m_angularVelocity;var a=-this.m_angularMass*h; +this.m_angularImpulse+=a;l.m_angularVelocity-=d*a;k.m_angularVelocity+=c*a;if(this.m_enableMotor&&this.m_limitState!=b2Joint.e_equalLimits){var m=this.m_motorJacobian.Compute(l.m_linearVelocity,l.m_angularVelocity,k.m_linearVelocity,k.m_angularVelocity)-this.m_motorSpeed;var f=-this.m_motorMass*m;var n=this.m_motorImpulse;this.m_motorImpulse=b2Math.b2Clamp(this.m_motorImpulse+f,-b.dt*this.m_maxMotorForce,b.dt*this.m_maxMotorForce);f=this.m_motorImpulse-n;l.m_linearVelocity.x+=(q*f)*this.m_motorJacobian.linear1.x;l.m_linearVelocity.y+=(q*f)*this.m_motorJacobian.linear1.y;l.m_angularVelocity+=d*f*this.m_motorJacobian.angular1;k.m_linearVelocity.x+=(o*f)*this.m_motorJacobian.linear2.x;k.m_linearVelocity.y+=(o*f)*this.m_motorJacobian.linear2.y;k.m_angularVelocity+=c*f*this.m_motorJacobian.angular2}if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){var i=this.m_motorJacobian.Compute(l.m_linearVelocity,l.m_angularVelocity,k.m_linearVelocity,k.m_angularVelocity);var g=-this.m_motorMass*i; +if(this.m_limitState==b2Joint.e_equalLimits){this.m_limitImpulse+=g}else{if(this.m_limitState==b2Joint.e_atLowerLimit){p=this.m_limitImpulse;this.m_limitImpulse=b2Math.b2Max(this.m_limitImpulse+g,0);g=this.m_limitImpulse-p}else{if(this.m_limitState==b2Joint.e_atUpperLimit){p=this.m_limitImpulse;this.m_limitImpulse=b2Math.b2Min(this.m_limitImpulse+g,0);g=this.m_limitImpulse-p}}}l.m_linearVelocity.x+=(q*g)*this.m_motorJacobian.linear1.x;l.m_linearVelocity.y+=(q*g)*this.m_motorJacobian.linear1.y;l.m_angularVelocity+=d*g*this.m_motorJacobian.angular1;k.m_linearVelocity.x+=(o*g)*this.m_motorJacobian.linear2.x;k.m_linearVelocity.y+=(o*g)*this.m_motorJacobian.linear2.y;k.m_angularVelocity+=c*g*this.m_motorJacobian.angular2}},SolvePositionConstraints:function(){var o;var y;var m=this.m_body1;var k=this.m_body2;var t=m.m_invMass;var s=k.m_invMass;var j=m.m_invI;var i=k.m_invI;var q;q=m.m_R;var E=q.col1.x*this.m_localAnchor1.x+q.col2.x*this.m_localAnchor1.y;var D=q.col1.y*this.m_localAnchor1.x+q.col2.y*this.m_localAnchor1.y; +q=k.m_R;var h=q.col1.x*this.m_localAnchor2.x+q.col2.x*this.m_localAnchor2.y;var g=q.col1.y*this.m_localAnchor2.x+q.col2.y*this.m_localAnchor2.y;var B=m.m_position.x+E;var z=m.m_position.y+D;var b=k.m_position.x+h;var a=k.m_position.y+g;var e=b-B;var c=a-z;q=m.m_R;var f=q.col1.x*this.m_localYAxis1.x+q.col2.x*this.m_localYAxis1.y;var d=q.col1.y*this.m_localYAxis1.x+q.col2.y*this.m_localYAxis1.y;var l=f*e+d*c;l=b2Math.b2Clamp(l,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);var x=-this.m_linearMass*l;m.m_position.x+=(t*x)*this.m_linearJacobian.linear1.x;m.m_position.y+=(t*x)*this.m_linearJacobian.linear1.y;m.m_rotation+=j*x*this.m_linearJacobian.angular1;k.m_position.x+=(s*x)*this.m_linearJacobian.linear2.x;k.m_position.y+=(s*x)*this.m_linearJacobian.linear2.y;k.m_rotation+=i*x*this.m_linearJacobian.angular2;var p=b2Math.b2Abs(l);var A=k.m_rotation-m.m_rotation-this.m_initialAngle;A=b2Math.b2Clamp(A,-b2Settings.b2_maxAngularCorrection,b2Settings.b2_maxAngularCorrection); +var r=-this.m_angularMass*A;m.m_rotation-=m.m_invI*r;m.m_R.Set(m.m_rotation);k.m_rotation+=k.m_invI*r;k.m_R.Set(k.m_rotation);var C=b2Math.b2Abs(A);if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){q=m.m_R;E=q.col1.x*this.m_localAnchor1.x+q.col2.x*this.m_localAnchor1.y;D=q.col1.y*this.m_localAnchor1.x+q.col2.y*this.m_localAnchor1.y;q=k.m_R;h=q.col1.x*this.m_localAnchor2.x+q.col2.x*this.m_localAnchor2.y;g=q.col1.y*this.m_localAnchor2.x+q.col2.y*this.m_localAnchor2.y;B=m.m_position.x+E;z=m.m_position.y+D;b=k.m_position.x+h;a=k.m_position.y+g;e=b-B;c=a-z;q=m.m_R;var v=q.col1.x*this.m_localXAxis1.x+q.col2.x*this.m_localXAxis1.y;var u=q.col1.y*this.m_localXAxis1.x+q.col2.y*this.m_localXAxis1.y;var n=(v*e+u*c);var w=0;if(this.m_limitState==b2Joint.e_equalLimits){o=b2Math.b2Clamp(n,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);w=-this.m_motorMass*o;p=b2Math.b2Max(p,b2Math.b2Abs(A))}else{if(this.m_limitState==b2Joint.e_atLowerLimit){o=n-this.m_lowerTranslation; +p=b2Math.b2Max(p,-o);o=b2Math.b2Clamp(o+b2Settings.b2_linearSlop,-b2Settings.b2_maxLinearCorrection,0);w=-this.m_motorMass*o;y=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Max(this.m_limitPositionImpulse+w,0);w=this.m_limitPositionImpulse-y}else{if(this.m_limitState==b2Joint.e_atUpperLimit){o=n-this.m_upperTranslation;p=b2Math.b2Max(p,o);o=b2Math.b2Clamp(o-b2Settings.b2_linearSlop,0,b2Settings.b2_maxLinearCorrection);w=-this.m_motorMass*o;y=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Min(this.m_limitPositionImpulse+w,0);w=this.m_limitPositionImpulse-y}}}m.m_position.x+=(t*w)*this.m_motorJacobian.linear1.x;m.m_position.y+=(t*w)*this.m_motorJacobian.linear1.y;m.m_rotation+=j*w*this.m_motorJacobian.angular1;m.m_R.Set(m.m_rotation);k.m_position.x+=(s*w)*this.m_motorJacobian.linear2.x;k.m_position.y+=(s*w)*this.m_motorJacobian.linear2.y;k.m_rotation+=i*w*this.m_motorJacobian.angular2;k.m_R.Set(k.m_rotation)}return p<=b2Settings.b2_linearSlop&&C<=b2Settings.b2_angularSlop +},m_localAnchor1:new b2Vec2(),m_localAnchor2:new b2Vec2(),m_localXAxis1:new b2Vec2(),m_localYAxis1:new b2Vec2(),m_initialAngle:null,m_linearJacobian:new b2Jacobian(),m_linearMass:null,m_linearImpulse:null,m_angularMass:null,m_angularImpulse:null,m_motorJacobian:new b2Jacobian(),m_motorMass:null,m_motorImpulse:null,m_limitImpulse:null,m_limitPositionImpulse:null,m_lowerTranslation:null,m_upperTranslation:null,m_maxMotorForce:null,m_motorSpeed:null,m_enableLimit:null,m_enableMotor:null,m_limitState:0});var b2PrismaticJointDef=function(){this.type=b2Joint.e_unknownJoint;this.userData=null;this.body1=null;this.body2=null;this.collideConnected=false;this.type=b2Joint.e_prismaticJoint;this.anchorPoint=new b2Vec2(0,0);this.axis=new b2Vec2(0,0);this.lowerTranslation=0;this.upperTranslation=0;this.motorForce=0;this.motorSpeed=0;this.enableLimit=false;this.enableMotor=false};Object.extend(b2PrismaticJointDef.prototype,b2JointDef.prototype);Object.extend(b2PrismaticJointDef.prototype,{anchorPoint:null,axis:null,lowerTranslation:null,upperTranslation:null,motorForce:null,motorSpeed:null,enableLimit:null,enableMotor:null,Initialize:function(b,a,d,c){this.body1=b;this.body2=a;this.anchorPoint=d;this.axis=c}});var b2PulleyJoint=function(d){this.m_node1=new b2JointNode();this.m_node2=new b2JointNode();this.m_type=d.type;this.m_prev=null;this.m_next=null;this.m_body1=d.body1;this.m_body2=d.body2;this.m_collideConnected=d.collideConnected;this.m_islandFlag=false;this.m_userData=d.userData;this.m_groundAnchor1=new b2Vec2();this.m_groundAnchor2=new b2Vec2();this.m_localAnchor1=new b2Vec2();this.m_localAnchor2=new b2Vec2();this.m_u1=new b2Vec2();this.m_u2=new b2Vec2();var b;var a;var h;this.m_ground=this.m_body1.m_world.m_groundBody;this.m_groundAnchor1.x=d.groundPoint1.x-this.m_ground.m_position.x;this.m_groundAnchor1.y=d.groundPoint1.y-this.m_ground.m_position.y;this.m_groundAnchor2.x=d.groundPoint2.x-this.m_ground.m_position.x;this.m_groundAnchor2.y=d.groundPoint2.y-this.m_ground.m_position.y;b=this.m_body1.m_R;a=d.anchorPoint1.x-this.m_body1.m_position.x;h=d.anchorPoint1.y-this.m_body1.m_position.y;this.m_localAnchor1.x=a*b.col1.x+h*b.col1.y;this.m_localAnchor1.y=a*b.col2.x+h*b.col2.y;b=this.m_body2.m_R; +a=d.anchorPoint2.x-this.m_body2.m_position.x;h=d.anchorPoint2.y-this.m_body2.m_position.y;this.m_localAnchor2.x=a*b.col1.x+h*b.col1.y;this.m_localAnchor2.y=a*b.col2.x+h*b.col2.y;this.m_ratio=d.ratio;a=d.groundPoint1.x-d.anchorPoint1.x;h=d.groundPoint1.y-d.anchorPoint1.y;var f=Math.sqrt(a*a+h*h);a=d.groundPoint2.x-d.anchorPoint2.x;h=d.groundPoint2.y-d.anchorPoint2.y;var c=Math.sqrt(a*a+h*h);var g=b2Math.b2Max(0.5*b2PulleyJoint.b2_minPulleyLength,f);var e=b2Math.b2Max(0.5*b2PulleyJoint.b2_minPulleyLength,c);this.m_constant=g+this.m_ratio*e;this.m_maxLength1=b2Math.b2Clamp(d.maxLength1,g,this.m_constant-this.m_ratio*b2PulleyJoint.b2_minPulleyLength);this.m_maxLength2=b2Math.b2Clamp(d.maxLength2,e,(this.m_constant-b2PulleyJoint.b2_minPulleyLength)/this.m_ratio);this.m_pulleyImpulse=0;this.m_limitImpulse1=0;this.m_limitImpulse2=0};Object.extend(b2PulleyJoint.prototype,b2Joint.prototype);Object.extend(b2PulleyJoint.prototype,{GetAnchor1:function(){var a=this.m_body1.m_R;return new b2Vec2(this.m_body1.m_position.x+(a.col1.x*this.m_localAnchor1.x+a.col2.x*this.m_localAnchor1.y),this.m_body1.m_position.y+(a.col1.y*this.m_localAnchor1.x+a.col2.y*this.m_localAnchor1.y)) +},GetAnchor2:function(){var a=this.m_body2.m_R;return new b2Vec2(this.m_body2.m_position.x+(a.col1.x*this.m_localAnchor2.x+a.col2.x*this.m_localAnchor2.y),this.m_body2.m_position.y+(a.col1.y*this.m_localAnchor2.x+a.col2.y*this.m_localAnchor2.y))},GetGroundPoint1:function(){return new b2Vec2(this.m_ground.m_position.x+this.m_groundAnchor1.x,this.m_ground.m_position.y+this.m_groundAnchor1.y)},GetGroundPoint2:function(){return new b2Vec2(this.m_ground.m_position.x+this.m_groundAnchor2.x,this.m_ground.m_position.y+this.m_groundAnchor2.y)},GetReactionForce:function(a){return new b2Vec2()},GetReactionTorque:function(a){return 0},GetLength1:function(){var e;e=this.m_body1.m_R;var d=this.m_body1.m_position.x+(e.col1.x*this.m_localAnchor1.x+e.col2.x*this.m_localAnchor1.y);var c=this.m_body1.m_position.y+(e.col1.y*this.m_localAnchor1.x+e.col2.y*this.m_localAnchor1.y);var b=d-(this.m_ground.m_position.x+this.m_groundAnchor1.x);var a=c-(this.m_ground.m_position.y+this.m_groundAnchor1.y);return Math.sqrt(b*b+a*a) +},GetLength2:function(){var e;e=this.m_body2.m_R;var d=this.m_body2.m_position.x+(e.col1.x*this.m_localAnchor2.x+e.col2.x*this.m_localAnchor2.y);var c=this.m_body2.m_position.y+(e.col1.y*this.m_localAnchor2.x+e.col2.y*this.m_localAnchor2.y);var b=d-(this.m_ground.m_position.x+this.m_groundAnchor2.x);var a=c-(this.m_ground.m_position.y+this.m_groundAnchor2.y);return Math.sqrt(b*b+a*a)},GetRatio:function(){return this.m_ratio},PrepareVelocitySolver:function(){var h=this.m_body1;var g=this.m_body2;var l;l=h.m_R;var v=l.col1.x*this.m_localAnchor1.x+l.col2.x*this.m_localAnchor1.y;var u=l.col1.y*this.m_localAnchor1.x+l.col2.y*this.m_localAnchor1.y;l=g.m_R;var f=l.col1.x*this.m_localAnchor2.x+l.col2.x*this.m_localAnchor2.y;var e=l.col1.y*this.m_localAnchor2.x+l.col2.y*this.m_localAnchor2.y;var t=h.m_position.x+v;var r=h.m_position.y+u;var d=g.m_position.x+f;var c=g.m_position.y+e;var m=this.m_ground.m_position.x+this.m_groundAnchor1.x;var k=this.m_ground.m_position.y+this.m_groundAnchor1.y;var s=this.m_ground.m_position.x+this.m_groundAnchor2.x; +var q=this.m_ground.m_position.y+this.m_groundAnchor2.y;this.m_u1.Set(t-m,r-k);this.m_u2.Set(d-s,c-q);var p=this.m_u1.Length();var o=this.m_u2.Length();if(p>b2Settings.b2_linearSlop){this.m_u1.Multiply(1/p)}else{this.m_u1.SetZero()}if(o>b2Settings.b2_linearSlop){this.m_u2.Multiply(1/o)}else{this.m_u2.SetZero()}if(pb2Settings.b2_linearSlop){this.m_u1.Multiply(1/n)}else{this.m_u1.SetZero()}if(m>b2Settings.b2_linearSlop){this.m_u2.Multiply(1/m)}else{this.m_u2.SetZero()}l=this.m_constant-n-this.m_ratio*m;e=b2Math.b2Max(e,Math.abs(l));l=b2Math.b2Clamp(l,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);h=-this.m_pulleyMass*l;r=-h*this.m_u1.x;p=-h*this.m_u1.y;b=-this.m_ratio*h*this.m_u2.x;a=-this.m_ratio*h*this.m_u2.y;g.m_position.x+=g.m_invMass*r;g.m_position.y+=g.m_invMass*p;g.m_rotation+=g.m_invI*(u*p-t*r);f.m_position.x+=f.m_invMass*b;f.m_position.y+=f.m_invMass*a;f.m_rotation+=f.m_invI*(d*a-c*b);g.m_R.Set(g.m_rotation);f.m_R.Set(f.m_rotation);if(this.m_limitState1==b2Joint.e_atUpperLimit){j=g.m_R;u=j.col1.x*this.m_localAnchor1.x+j.col2.x*this.m_localAnchor1.y;t=j.col1.y*this.m_localAnchor1.x+j.col2.y*this.m_localAnchor1.y; +r=g.m_position.x+u;p=g.m_position.y+t;this.m_u1.Set(r-k,p-i);n=this.m_u1.Length();if(n>b2Settings.b2_linearSlop){this.m_u1.x*=1/n;this.m_u1.y*=1/n}else{this.m_u1.SetZero()}l=this.m_maxLength1-n;e=b2Math.b2Max(e,-l);l=b2Math.b2Clamp(l+b2Settings.b2_linearSlop,-b2Settings.b2_maxLinearCorrection,0);h=-this.m_limitMass1*l;s=this.m_limitPositionImpulse1;this.m_limitPositionImpulse1=b2Math.b2Max(0,this.m_limitPositionImpulse1+h);h=this.m_limitPositionImpulse1-s;r=-h*this.m_u1.x;p=-h*this.m_u1.y;g.m_position.x+=g.m_invMass*r;g.m_position.y+=g.m_invMass*p;g.m_rotation+=g.m_invI*(u*p-t*r);g.m_R.Set(g.m_rotation)}if(this.m_limitState2==b2Joint.e_atUpperLimit){j=f.m_R;d=j.col1.x*this.m_localAnchor2.x+j.col2.x*this.m_localAnchor2.y;c=j.col1.y*this.m_localAnchor2.x+j.col2.y*this.m_localAnchor2.y;b=f.m_position.x+d;a=f.m_position.y+c;this.m_u2.Set(b-q,a-o);m=this.m_u2.Length();if(m>b2Settings.b2_linearSlop){this.m_u2.x*=1/m;this.m_u2.y*=1/m}else{this.m_u2.SetZero()}l=this.m_maxLength2-m;e=b2Math.b2Max(e,-l); +l=b2Math.b2Clamp(l+b2Settings.b2_linearSlop,-b2Settings.b2_maxLinearCorrection,0);h=-this.m_limitMass2*l;s=this.m_limitPositionImpulse2;this.m_limitPositionImpulse2=b2Math.b2Max(0,this.m_limitPositionImpulse2+h);h=this.m_limitPositionImpulse2-s;b=-h*this.m_u2.x;a=-h*this.m_u2.y;f.m_position.x+=f.m_invMass*b;f.m_position.y+=f.m_invMass*a;f.m_rotation+=f.m_invI*(d*a-c*b);f.m_R.Set(f.m_rotation)}return e=this.m_upperAngle){if(this.m_limitState!=b2Joint.e_atUpperLimit){this.m_limitImpulse=0}this.m_limitState=b2Joint.e_atUpperLimit}else{this.m_limitState=b2Joint.e_inactiveLimit;this.m_limitImpulse=0}}}}else{this.m_limitImpulse=0}if(b2World.s_enableWarmStarting){h.m_linearVelocity.x-=l*this.m_ptpImpulse.x;h.m_linearVelocity.y-=l*this.m_ptpImpulse.y;h.m_angularVelocity-=c*((k*this.m_ptpImpulse.y-i*this.m_ptpImpulse.x)+this.m_motorImpulse+this.m_limitImpulse); +g.m_linearVelocity.x+=j*this.m_ptpImpulse.x;g.m_linearVelocity.y+=j*this.m_ptpImpulse.y;g.m_angularVelocity+=b*((e*this.m_ptpImpulse.y-d*this.m_ptpImpulse.x)+this.m_motorImpulse+this.m_limitImpulse)}else{this.m_ptpImpulse.SetZero();this.m_motorImpulse=0;this.m_limitImpulse=0}this.m_limitPositionImpulse=0},SolveVelocityConstraints:function(f){var g=this.m_body1;var e=this.m_body2;var i;i=g.m_R;var o=i.col1.x*this.m_localAnchor1.x+i.col2.x*this.m_localAnchor1.y;var n=i.col1.y*this.m_localAnchor1.x+i.col2.y*this.m_localAnchor1.y;i=e.m_R;var b=i.col1.x*this.m_localAnchor2.x+i.col2.x*this.m_localAnchor2.y;var a=i.col1.y*this.m_localAnchor2.x+i.col2.y*this.m_localAnchor2.y;var k;var q=e.m_linearVelocity.x+(-e.m_angularVelocity*a)-g.m_linearVelocity.x-(-g.m_angularVelocity*n);var p=e.m_linearVelocity.y+(e.m_angularVelocity*b)-g.m_linearVelocity.y-(g.m_angularVelocity*o);var m=-(this.m_ptpMass.col1.x*q+this.m_ptpMass.col2.x*p);var l=-(this.m_ptpMass.col1.y*q+this.m_ptpMass.col2.y*p);this.m_ptpImpulse.x+=m; +this.m_ptpImpulse.y+=l;g.m_linearVelocity.x-=g.m_invMass*m;g.m_linearVelocity.y-=g.m_invMass*l;g.m_angularVelocity-=g.m_invI*(o*l-n*m);e.m_linearVelocity.x+=e.m_invMass*m;e.m_linearVelocity.y+=e.m_invMass*l;e.m_angularVelocity+=e.m_invI*(b*l-a*m);if(this.m_enableMotor&&this.m_limitState!=b2Joint.e_equalLimits){var r=e.m_angularVelocity-g.m_angularVelocity-this.m_motorSpeed;var c=-this.m_motorMass*r;var d=this.m_motorImpulse;this.m_motorImpulse=b2Math.b2Clamp(this.m_motorImpulse+c,-f.dt*this.m_maxMotorTorque,f.dt*this.m_maxMotorTorque);c=this.m_motorImpulse-d;g.m_angularVelocity-=g.m_invI*c;e.m_angularVelocity+=e.m_invI*c}if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){var h=e.m_angularVelocity-g.m_angularVelocity;var j=-this.m_motorMass*h;if(this.m_limitState==b2Joint.e_equalLimits){this.m_limitImpulse+=j}else{if(this.m_limitState==b2Joint.e_atLowerLimit){k=this.m_limitImpulse;this.m_limitImpulse=b2Math.b2Max(this.m_limitImpulse+j,0);j=this.m_limitImpulse-k}else{if(this.m_limitState==b2Joint.e_atUpperLimit){k=this.m_limitImpulse; +this.m_limitImpulse=b2Math.b2Min(this.m_limitImpulse+j,0);j=this.m_limitImpulse-k}}}g.m_angularVelocity-=g.m_invI*j;e.m_angularVelocity+=e.m_invI*j}},SolvePositionConstraints:function(){var s;var m;var l=this.m_body1;var k=this.m_body2;var o=0;var n;n=l.m_R;var y=n.col1.x*this.m_localAnchor1.x+n.col2.x*this.m_localAnchor1.y;var x=n.col1.y*this.m_localAnchor1.x+n.col2.y*this.m_localAnchor1.y;n=k.m_R;var f=n.col1.x*this.m_localAnchor2.x+n.col2.x*this.m_localAnchor2.y;var e=n.col1.y*this.m_localAnchor2.x+n.col2.y*this.m_localAnchor2.y;var u=l.m_position.x+y;var t=l.m_position.y+x;var d=k.m_position.x+f;var c=k.m_position.y+e;var j=d-u;var i=c-t;o=Math.sqrt(j*j+i*i);var q=l.m_invMass;var p=k.m_invMass;var h=l.m_invI;var g=k.m_invI;this.K1.col1.x=q+p;this.K1.col2.x=0;this.K1.col1.y=0;this.K1.col2.y=q+p;this.K2.col1.x=h*x*x;this.K2.col2.x=-h*y*x;this.K2.col1.y=-h*y*x;this.K2.col2.y=h*y*y;this.K3.col1.x=g*e*e;this.K3.col2.x=-g*f*e;this.K3.col1.y=-g*f*e;this.K3.col2.y=g*f*f;this.K.SetM(this.K1); +this.K.AddM(this.K2);this.K.AddM(this.K3);this.K.Solve(b2RevoluteJoint.tImpulse,-j,-i);var b=b2RevoluteJoint.tImpulse.x;var a=b2RevoluteJoint.tImpulse.y;l.m_position.x-=l.m_invMass*b;l.m_position.y-=l.m_invMass*a;l.m_rotation-=l.m_invI*(y*a-x*b);l.m_R.Set(l.m_rotation);k.m_position.x+=k.m_invMass*b;k.m_position.y+=k.m_invMass*a;k.m_rotation+=k.m_invI*(f*a-e*b);k.m_R.Set(k.m_rotation);var w=0;if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){var v=k.m_rotation-l.m_rotation-this.m_intialAngle;var r=0;if(this.m_limitState==b2Joint.e_equalLimits){m=b2Math.b2Clamp(v,-b2Settings.b2_maxAngularCorrection,b2Settings.b2_maxAngularCorrection);r=-this.m_motorMass*m;w=b2Math.b2Abs(m)}else{if(this.m_limitState==b2Joint.e_atLowerLimit){m=v-this.m_lowerAngle;w=b2Math.b2Max(0,-m);m=b2Math.b2Clamp(m+b2Settings.b2_angularSlop,-b2Settings.b2_maxAngularCorrection,0);r=-this.m_motorMass*m;s=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Max(this.m_limitPositionImpulse+r,0); +r=this.m_limitPositionImpulse-s}else{if(this.m_limitState==b2Joint.e_atUpperLimit){m=v-this.m_upperAngle;w=b2Math.b2Max(0,m);m=b2Math.b2Clamp(m-b2Settings.b2_angularSlop,0,b2Settings.b2_maxAngularCorrection);r=-this.m_motorMass*m;s=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Min(this.m_limitPositionImpulse+r,0);r=this.m_limitPositionImpulse-s}}}l.m_rotation-=l.m_invI*r;l.m_R.Set(l.m_rotation);k.m_rotation+=k.m_invI*r;k.m_R.Set(k.m_rotation)}return o<=b2Settings.b2_linearSlop&&w<=b2Settings.b2_angularSlop},m_localAnchor1:new b2Vec2(),m_localAnchor2:new b2Vec2(),m_ptpImpulse:new b2Vec2(),m_motorImpulse:null,m_limitImpulse:null,m_limitPositionImpulse:null,m_ptpMass:new b2Mat22(),m_motorMass:null,m_intialAngle:null,m_lowerAngle:null,m_upperAngle:null,m_maxMotorTorque:null,m_motorSpeed:null,m_enableLimit:null,m_enableMotor:null,m_limitState:0});b2RevoluteJoint.tImpulse=new b2Vec2();var b2RevoluteJointDef=function(){this.type=b2Joint.e_unknownJoint;this.userData=null;this.body1=null;this.body2=null;this.collideConnected=false;this.type=b2Joint.e_revoluteJoint;this.anchorPoint=new b2Vec2(0,0);this.lowerAngle=0;this.upperAngle=0;this.motorTorque=0;this.motorSpeed=0;this.enableLimit=false;this.enableMotor=false};Object.extend(b2RevoluteJointDef.prototype,b2JointDef.prototype);Object.extend(b2RevoluteJointDef.prototype,{anchorPoint:null,lowerAngle:null,upperAngle:null,motorTorque:null,motorSpeed:null,enableLimit:null,enableMotor:null,Initialize:function(b,a,c){this.body1=b;this.body2=a;this.anchorPoint=c}}); \ No newline at end of file diff --git a/examples/example 24 - Box2D Integration/bricks.png b/examples/example 24 - Box2D Integration/bricks.png new file mode 100644 index 0000000..4495016 --- /dev/null +++ b/examples/example 24 - Box2D Integration/bricks.png Binary files differ diff --git a/examples/example 24 - Box2D Integration/bunny.png b/examples/example 24 - Box2D Integration/bunny.png new file mode 100644 index 0000000..79c3167 --- /dev/null +++ b/examples/example 24 - Box2D Integration/bunny.png Binary files differ diff --git a/examples/example 24 - Box2D Integration/box2d.min.js b/examples/example 24 - Box2D Integration/box2d.min.js new file mode 100644 index 0000000..1b579fd --- /dev/null +++ b/examples/example 24 - Box2D Integration/box2d.min.js @@ -0,0 +1,112 @@ +var b2Settings=function(){};b2Settings.prototype={};b2Settings.USHRT_MAX=65535;b2Settings.b2_pi=Math.PI;b2Settings.b2_massUnitsPerKilogram=1;b2Settings.b2_timeUnitsPerSecond=1;b2Settings.b2_lengthUnitsPerMeter=30;b2Settings.b2_maxManifoldPoints=2;b2Settings.b2_maxShapesPerBody=64;b2Settings.b2_maxPolyVertices=8;b2Settings.b2_maxProxies=1024;b2Settings.b2_maxPairs=8*b2Settings.b2_maxProxies;b2Settings.b2_linearSlop=0.005*b2Settings.b2_lengthUnitsPerMeter;b2Settings.b2_angularSlop=2/180*b2Settings.b2_pi;b2Settings.b2_velocityThreshold=1*b2Settings.b2_lengthUnitsPerMeter/b2Settings.b2_timeUnitsPerSecond;b2Settings.b2_maxLinearCorrection=0.2*b2Settings.b2_lengthUnitsPerMeter;b2Settings.b2_maxAngularCorrection=8/180*b2Settings.b2_pi;b2Settings.b2_contactBaumgarte=0.2;b2Settings.b2_timeToSleep=0.5*b2Settings.b2_timeUnitsPerSecond;b2Settings.b2_linearSleepTolerance=0.01*b2Settings.b2_lengthUnitsPerMeter/b2Settings.b2_timeUnitsPerSecond;b2Settings.b2_angularSleepTolerance=2/180/b2Settings.b2_timeUnitsPerSecond; +b2Settings.b2Assert=function(b){if(!b){var c;c.x++}};Object.extend=function(a,c){for(var b in c){a[b]=c[b]}return a};var b2Vec2=function(a,b){this.x=a;this.y=b};b2Vec2.prototype={SetZero:function(){this.x=0;this.y=0},Set:function(a,b){this.x=a;this.y=b},SetV:function(a){this.x=a.x;this.y=a.y},Negative:function(){return new b2Vec2(-this.x,-this.y)},Copy:function(){return new b2Vec2(this.x,this.y)},Add:function(a){this.x+=a.x;this.y+=a.y},Subtract:function(a){this.x-=a.x;this.y-=a.y},Multiply:function(b){this.x*=b;this.y*=b},MulM:function(b){var a=this.x;this.x=b.col1.x*a+b.col2.x*this.y;this.y=b.col1.y*a+b.col2.y*this.y},MulTM:function(b){var a=b2Math.b2Dot(this,b.col1);this.y=b2Math.b2Dot(this,b.col2);this.x=a},CrossVF:function(b){var a=this.x;this.x=b*this.y;this.y=-b*a},CrossFV:function(b){var a=this.x;this.x=-b*this.y;this.y=b*a},MinV:function(a){this.x=this.xa.x?this.x:a.x;this.y=this.y>a.y?this.y:a.y},Abs:function(){this.x=Math.abs(this.x);this.y=Math.abs(this.y)},Length:function(){return Math.sqrt(this.x*this.x+this.y*this.y) +},Normalize:function(){var b=this.Length();if(b0?b:-b};b2Math.b2AbsV=function(d){var c=new b2Vec2(b2Math.b2Abs(d.x),b2Math.b2Abs(d.y));return c};b2Math.b2AbsM=function(a){var b=new b2Mat22(0,b2Math.b2AbsV(a.col1),b2Math.b2AbsV(a.col2));return b};b2Math.b2Min=function(d,c){return dc?d:c};b2Math.b2MaxV=function(e,d){var f=new b2Vec2(b2Math.b2Max(e.x,d.x),b2Math.b2Max(e.y,d.y));return f};b2Math.b2Clamp=function(c,b,d){return b2Math.b2Max(b,b2Math.b2Min(c,d))};b2Math.b2ClampV=function(c,b,d){return b2Math.b2MaxV(b,b2Math.b2MinV(c,d))};b2Math.b2Swap=function(d,c){var e=d[0];d[0]=c[0];c[0]=e};b2Math.b2Random=function(){return Math.random()*2-1};b2Math.b2NextPowerOfTwo=function(a){a|=(a>>1)&2147483647;a|=(a>>2)&1073741823;a|=(a>>4)&268435455;a|=(a>>8)&16777215; +a|=(a>>16)&65535;return a+1};b2Math.b2IsPowerOfTwo=function(b){var a=b>0&&(b&(b-1))==0;return a};b2Math.tempVec2=new b2Vec2();b2Math.tempVec3=new b2Vec2();b2Math.tempVec4=new b2Vec2();b2Math.tempVec5=new b2Vec2();b2Math.tempMat=new b2Mat22();var b2AABB=function(){this.minVertex=new b2Vec2();this.maxVertex=new b2Vec2()};b2AABB.prototype={IsValid:function(){var b=this.maxVertex.x;var a=this.maxVertex.y;b=this.maxVertex.x;a=this.maxVertex.y;b-=this.minVertex.x;a-=this.minVertex.y;var c=b>=0&&a>=0;c=c&&this.minVertex.IsValid()&&this.maxVertex.IsValid();return c},minVertex:new b2Vec2(),maxVertex:new b2Vec2()};var b2Bound=function(){};b2Bound.prototype={IsLower:function(){return(this.value&1)==0},IsUpper:function(){return(this.value&1)==1},Swap:function(c){var e=this.value;var d=this.proxyId;var a=this.stabbingCount;this.value=c.value;this.proxyId=c.proxyId;this.stabbingCount=c.stabbingCount;c.value=e;c.proxyId=d;c.stabbingCount=a},value:0,proxyId:0,stabbingCount:0};var b2BoundValues=function(){this.lowerValues=[0,0];this.upperValues=[0,0]};b2BoundValues.prototype={lowerValues:[0,0],upperValues:[0,0]};var b2Pair=function(){};b2Pair.prototype={SetBuffered:function(){this.status|=b2Pair.e_pairBuffered},ClearBuffered:function(){this.status&=~b2Pair.e_pairBuffered},IsBuffered:function(){return(this.status&b2Pair.e_pairBuffered)==b2Pair.e_pairBuffered},SetRemoved:function(){this.status|=b2Pair.e_pairRemoved},ClearRemoved:function(){this.status&=~b2Pair.e_pairRemoved},IsRemoved:function(){return(this.status&b2Pair.e_pairRemoved)==b2Pair.e_pairRemoved},SetFinal:function(){this.status|=b2Pair.e_pairFinal},IsFinal:function(){return(this.status&b2Pair.e_pairFinal)==b2Pair.e_pairFinal},userData:null,proxyId1:0,proxyId2:0,next:0,status:0};b2Pair.b2_nullPair=b2Settings.USHRT_MAX;b2Pair.b2_nullProxy=b2Settings.USHRT_MAX;b2Pair.b2_tableCapacity=b2Settings.b2_maxPairs;b2Pair.b2_tableMask=b2Pair.b2_tableCapacity-1;b2Pair.e_pairBuffered=1;b2Pair.e_pairRemoved=2;b2Pair.e_pairFinal=4;var b2PairCallback=function(){};b2PairCallback.prototype={PairAdded:function(b,a){return null},PairRemoved:function(c,b,a){}};var b2BufferedPair=function(){};b2BufferedPair.prototype={proxyId1:0,proxyId2:0};var b2PairManager=function(){var a=0;this.m_hashTable=new Array(b2Pair.b2_tableCapacity);for(a=0;aa){var c=b;b=a;a=c}var d=b2PairManager.Hash(b,a)&b2Pair.b2_tableMask;var f=f=this.FindHash(b,a,d);if(f!=null){return f}var e=this.m_freePair;f=this.m_pairs[e];this.m_freePair=f.next;f.proxyId1=b;f.proxyId2=a;f.status=0;f.userData=null;f.next=this.m_hashTable[d];this.m_hashTable[d]=e;++this.m_pairCount;return f},RemovePair:function(g,f){if(g>f){var i=g;g=f;f=i}var d=b2PairManager.Hash(g,f)&b2Pair.b2_tableMask;var b=this.m_hashTable[d];var h=null;while(b!=b2Pair.b2_nullPair){if(b2PairManager.Equals(this.m_pairs[b],g,f)){var e=b;if(h){h.next=this.m_pairs[b].next}else{this.m_hashTable[d]=this.m_pairs[b].next}var c=this.m_pairs[e];var a=c.userData;c.next=this.m_freePair;c.proxyId1=b2Pair.b2_nullProxy;c.proxyId2=b2Pair.b2_nullProxy;c.userData=null;c.status=0;this.m_freePair=e;--this.m_pairCount;return a}else{h=this.m_pairs[b];b=h.next}}return null},Find:function(b,a){if(b>a){var c=b;b=a;a=c +}var d=b2PairManager.Hash(b,a)&b2Pair.b2_tableMask;return this.FindHash(b,a,d)},FindHash:function(b,a,d){var c=this.m_hashTable[d];while(c!=b2Pair.b2_nullPair&&b2PairManager.Equals(this.m_pairs[c],b,a)==false){c=this.m_pairs[c].next}if(c==b2Pair.b2_nullPair){return null}return this.m_pairs[c]},ValidateBuffer:function(){},ValidateTable:function(){},m_broadPhase:null,m_callback:null,m_pairs:null,m_freePair:0,m_pairCount:0,m_pairBuffer:null,m_pairBufferCount:0,m_hashTable:null};b2PairManager.Hash=function(b,a){var c=((a<<16)&4294901760)|b;c=~c+((c<<15)&4294934528);c=c^((c>>12)&1048575);c=c+((c<<2)&4294967292);c=c^((c>>4)&268435455);c=c*2057;c=c^((c>>16)&65535);return c};b2PairManager.Equals=function(c,b,a){return(c.proxyId1==b&&c.proxyId2==a)};b2PairManager.EqualsPair=function(b,a){return b.proxyId1==a.proxyId1&&b.proxyId2==a.proxyId2};var b2BroadPhase=function(f,g){this.m_pairManager=new b2PairManager();this.m_proxyPool=new Array(b2Settings.b2_maxPairs);this.m_bounds=new Array(2*b2Settings.b2_maxProxies);this.m_queryResults=new Array(b2Settings.b2_maxProxies);this.m_quantizationFactor=new b2Vec2();var d=0;this.m_pairManager.Initialize(this,g);this.m_worldAABB=f;this.m_proxyCount=0;for(d=0;d0&&t0){g=m;while(g0){g=k;while(g0&&bb[c.upperBounds[a]].value){return false}if(b[d.upperBounds[a]].valued[e.upperBounds[c]].value){return false}if(a.upperValues[c]0){var g=c-1;var n=a[g].stabbingCount;while(n){if(a[g].IsLower()){var k=this.m_proxyPool[a[g].proxyId];if(c<=k.upperBounds[b]){this.IncrementOverlapCount(a[g].proxyId);--n}}--g}}h[0]=c;d[0]=l},IncrementOverlapCount:function(b){var a=this.m_proxyPool[b];if(a.timeStampf){e=b-1}else{if(d[b].value0){f[c].id=b[0].id}else{f[c].id=b[1].id}++c}return c};b2Collision.EdgeSeparation=function(p,q,o){var f=p.m_vertices;var g=o.m_vertexCount;var r=o.m_vertices;var e=p.m_normals[q].x;var d=p.m_normals[q].y;var s=e;var l=p.m_R;e=l.col1.x*s+l.col2.x*d;d=l.col1.y*s+l.col2.y*d;var v=e;var u=d;l=o.m_R;s=v*l.col1.x+u*l.col1.y;u=v*l.col2.x+u*l.col2.y;v=s;var n=0;var m=Number.MAX_VALUE;for(var w=0;wa){a=o;h=p}}var n=b2Collision.EdgeSeparation(m,h,l);if(n>0&&w==false){return n}var g=h-1>=0?h-1:j-1;var t=b2Collision.EdgeSeparation(m,g,l);if(t>0&&w==false){return t}var q=h+10&&w==false){return u}var b=0;var k;var v=0;if(t>n&&t>u){v=-1;b=g;k=t}else{if(u>n){v=1;b=q;k=u}else{r[0]=h;return n}}while(true){if(v==-1){h=b-1>=0?b-1:j-1}else{h=b+10&&w==false){return n}if(n>k){b=h;k=n}else{break}}r[0]=b;return k};b2Collision.FindIncidentEdge=function(D,p,q,n){var h=p.m_vertexCount;var f=p.m_vertices;var g=n.m_vertexCount;var s=n.m_vertices;var a=q; +var F=q+1==h?0:q+1;var e=f[F];var C=e.x;var A=e.y;e=f[a];C-=e.x;A-=e.y;var v=C;C=A;A=-v;var E=1/Math.sqrt(C*C+A*A);C*=E;A*=E;var r=C;var o=A;v=r;var l=p.m_R;r=l.col1.x*v+l.col2.x*o;o=l.col1.y*v+l.col2.y*o;var d=r;var b=o;l=n.m_R;v=d*l.col1.x+b*l.col1.y;b=d*l.col2.x+b*l.col2.y;d=v;var k=0;var j=0;var m=Number.MAX_VALUE;for(var B=0;B0&&b==false){return +}var K=0;var g=[K];var E=b2Collision.FindMaxSeparation(g,j,k,b);K=g[0];if(E>0&&b==false){return}var p;var o;var a=0;var R=0;var d=0.98;var O=0.001;if(E>d*F+O){p=j;o=k;a=K;R=1}else{p=k;o=j;a=M;R=0}var c=[new ClipVertex(),new ClipVertex()];b2Collision.FindIncidentEdge(c,p,a,o);var B=p.m_vertexCount;var q=p.m_vertices;var I=q[a];var H=a+1l*l&&b==false){return}var d;if(mg){return}if(t>o){o=t;B=A}}if(og){return}x.pointCount=1;x.normal.Set(n.col1.x*e+n.col2.x*d,n.col1.y*e+n.col2.y*d);h=x.points[0];h.id.features.incidentEdge=b2Collision.b2_nullFeature;h.id.features.incidentVertex=b;h.id.features.referenceFace=b2Collision.b2_nullFeature;h.id.features.flip=0;h.position.x=k.m_position.x-g*x.normal.x;h.position.y=k.m_position.y-g*x.normal.y;h.separation=w-g;return}var q=(z-m.m_vertices[b].x)*r+(y-m.m_vertices[b].y)*p;h=x.points[0];h.id.features.incidentEdge=b2Collision.b2_nullFeature;h.id.features.incidentVertex=b2Collision.b2_nullFeature;h.id.features.referenceFace=b2Collision.b2_nullFeature;h.id.features.flip=0;var l,j;if(q<=0){l=m.m_vertices[b].x;j=m.m_vertices[b].y;h.id.features.incidentVertex=b}else{if(q>=f){l=m.m_vertices[a].x;j=m.m_vertices[a].y;h.id.features.incidentVertex=a}else{l=r*q+m.m_vertices[b].x;j=p*q+m.m_vertices[b].y;h.id.features.incidentEdge=b}}e=z-l;d=y-j;w=Math.sqrt(e*e+d*d);e/=w;d/=w;if(w>g){return}x.pointCount=1;x.normal.Set(n.col1.x*e+n.col2.x*d,n.col1.y*e+n.col2.y*d); +h.position.x=k.m_position.x-g*x.normal.x;h.position.y=k.m_position.y-g*x.normal.y;h.separation=w-g};b2Collision.b2TestOverlap=function(d,c){var i=c.minVertex;var g=d.maxVertex;var f=i.x-g.x;var e=i.y-g.y;i=d.minVertex;g=c.maxVertex;var j=i.x-g.x;var h=i.y-g.y;if(f>0||e>0){return false}if(j>0||h>0){return false}return true};var Features=function(){};Features.prototype={set_referenceFace:function(a){this._referenceFace=a;this._m_id._key=(this._m_id._key&4294967040)|(this._referenceFace&255)},get_referenceFace:function(){return this._referenceFace},_referenceFace:0,set_incidentEdge:function(a){this._incidentEdge=a;this._m_id._key=(this._m_id._key&4294902015)|((this._incidentEdge<<8)&65280)},get_incidentEdge:function(){return this._incidentEdge},_incidentEdge:0,set_incidentVertex:function(a){this._incidentVertex=a;this._m_id._key=(this._m_id._key&4278255615)|((this._incidentVertex<<16)&16711680)},get_incidentVertex:function(){return this._incidentVertex},_incidentVertex:0,set_flip:function(a){this._flip=a;this._m_id._key=(this._m_id._key&16777215)|((this._flip<<24)&4278190080)},get_flip:function(){return this._flip},_flip:0,_m_id:null};var b2ContactID=function(){this.features=new Features();this.features._m_id=this};b2ContactID.prototype={Set:function(a){this.set_key(a._key)},Copy:function(){var a=new b2ContactID();a.set_key(this._key);return a},get_key:function(){return this._key},set_key:function(a){this._key=a;this.features._referenceFace=this._key&255;this.features._incidentEdge=((this._key&65280)>>8)&255;this.features._incidentVertex=((this._key&16711680)>>16)&255;this.features._flip=((this._key&4278190080)>>24)&255},features:new Features(),_key:0};var b2ContactPoint=function(){this.position=new b2Vec2();this.id=new b2ContactID()};b2ContactPoint.prototype={position:new b2Vec2(),separation:null,normalImpulse:null,tangentImpulse:null,id:new b2ContactID()};var b2Distance=function(){};b2Distance.prototype={};b2Distance.ProcessTwo=function(j,h,b,k,i){var f=-i[1].x;var e=-i[1].y;var d=i[0].x-i[1].x;var c=i[0].y-i[1].y;var a=Math.sqrt(d*d+c*c);d/=a;c/=a;var g=f*d+e*c;if(g<=0||a=0&&F>=0){var B=x/(x+F);q.x=m[1].x+B*(m[2].x-m[1].x);q.y=m[1].y+B*(m[2].y-m[1].y);D.x=C[1].x+B*(C[2].x-C[1].x); +D.y=C[1].y+B*(C[2].y-C[1].y);m[0].SetV(m[2]);C[0].SetV(C[2]);G[0].SetV(G[2]);return 2}var f=E*(J*h-I*k);if(f<=0&&j>=0&&o>=0){var B=j/(j+o);q.x=m[0].x+B*(m[2].x-m[0].x);q.y=m[0].y+B*(m[2].y-m[0].y);D.x=C[0].x+B*(C[2].x-C[0].x);D.y=C[0].y+B*(C[2].y-C[0].y);m[1].SetV(m[2]);C[1].SetV(C[2]);G[1].SetV(G[2]);return 2}var d=g+f+e;d=1/d;var A=g*d;var t=f*d;var p=1-A-t;q.x=A*m[0].x+t*m[1].x+p*m[2].x;q.y=A*m[0].y+t*m[1].y+p*m[2].y;D.x=A*C[0].x+t*C[1].x+p*C[2].x;D.y=A*C[0].y+t*C[1].y+p*C[2].y;return 3};b2Distance.InPoinsts=function(a,c,d){for(var b=0;bNumber.MIN_VALUE){D*=1/d;C*=1/d}this.m_coreVertices[w].x=this.m_vertices[w].x-2*b2Settings.b2_linearSlop*D;this.m_coreVertices[w].y=this.m_vertices[w].y-2*b2Settings.b2_linearSlop*C}}var y=Number.MAX_VALUE;var x=Number.MAX_VALUE;var m=-Number.MAX_VALUE;var l=-Number.MAX_VALUE;this.m_maxRadius=0;for(w=0;w0){return false}}return true},syncAABB:new b2AABB(),syncMat:new b2Mat22(),Synchronize:function(c,e,a,b){this.m_R.SetM(b); +this.m_position.x=this.m_body.m_position.x+(b.col1.x*this.m_localCentroid.x+b.col2.x*this.m_localCentroid.y);this.m_position.y=this.m_body.m_position.y+(b.col1.y*this.m_localCentroid.x+b.col2.y*this.m_localCentroid.y);if(this.m_proxyId==b2Pair.b2_nullProxy){return}var m;var l;var k=e.col1;var j=e.col2;var i=this.m_localOBB.R.col1;var h=this.m_localOBB.R.col2;this.syncMat.col1.x=k.x*i.x+j.x*i.y;this.syncMat.col1.y=k.y*i.x+j.y*i.y;this.syncMat.col2.x=k.x*h.x+j.x*h.y;this.syncMat.col2.y=k.y*h.x+j.y*h.y;this.syncMat.Abs();m=this.m_localCentroid.x+this.m_localOBB.center.x;l=this.m_localCentroid.y+this.m_localOBB.center.y;var f=c.x+(e.col1.x*m+e.col2.x*l);var d=c.y+(e.col1.y*m+e.col2.y*l);m=this.syncMat.col1.x*this.m_localOBB.extents.x+this.syncMat.col2.x*this.m_localOBB.extents.y;l=this.syncMat.col1.y*this.m_localOBB.extents.x+this.syncMat.col2.y*this.m_localOBB.extents.y;this.syncAABB.minVertex.x=f-m;this.syncAABB.minVertex.y=d-l;this.syncAABB.maxVertex.x=f+m;this.syncAABB.maxVertex.y=d+l;k=b.col1; +j=b.col2;i=this.m_localOBB.R.col1;h=this.m_localOBB.R.col2;this.syncMat.col1.x=k.x*i.x+j.x*i.y;this.syncMat.col1.y=k.y*i.x+j.y*i.y;this.syncMat.col2.x=k.x*h.x+j.x*h.y;this.syncMat.col2.y=k.y*h.x+j.y*h.y;this.syncMat.Abs();m=this.m_localCentroid.x+this.m_localOBB.center.x;l=this.m_localCentroid.y+this.m_localOBB.center.y;f=a.x+(b.col1.x*m+b.col2.x*l);d=a.y+(b.col1.y*m+b.col2.y*l);m=this.syncMat.col1.x*this.m_localOBB.extents.x+this.syncMat.col2.x*this.m_localOBB.extents.y;l=this.syncMat.col1.y*this.m_localOBB.extents.x+this.syncMat.col2.y*this.m_localOBB.extents.y;this.syncAABB.minVertex.x=Math.min(this.syncAABB.minVertex.x,f-m);this.syncAABB.minVertex.y=Math.min(this.syncAABB.minVertex.y,d-l);this.syncAABB.maxVertex.x=Math.max(this.syncAABB.maxVertex.x,f+m);this.syncAABB.maxVertex.y=Math.max(this.syncAABB.maxVertex.y,d+l);var g=this.m_body.m_world.m_broadPhase;if(g.InRange(this.syncAABB)){g.MoveProxy(this.m_proxyId,this.syncAABB)}else{this.m_body.Freeze()}},QuickSync:function(a,b){this.m_R.SetM(b); +this.m_position.x=a.x+(b.col1.x*this.m_localCentroid.x+b.col2.x*this.m_localCentroid.y);this.m_position.y=a.y+(b.col1.y*this.m_localCentroid.x+b.col2.y*this.m_localCentroid.y)},ResetProxy:function(b){if(this.m_proxyId==b2Pair.b2_nullProxy){return}var e=b.GetProxy(this.m_proxyId);b.DestroyProxy(this.m_proxyId);e=null;var g=b2Math.b2MulMM(this.m_R,this.m_localOBB.R);var d=b2Math.b2AbsM(g);var f=b2Math.b2MulMV(d,this.m_localOBB.extents);var a=b2Math.b2MulMV(this.m_R,this.m_localOBB.center);a.Add(this.m_position);var c=new b2AABB();c.minVertex.SetV(a);c.minVertex.Subtract(f);c.maxVertex.SetV(a);c.maxVertex.Add(f);if(b.InRange(c)){this.m_proxyId=b.CreateProxy(c,this)}else{this.m_proxyId=b2Pair.b2_nullProxy}if(this.m_proxyId==b2Pair.b2_nullProxy){this.m_body.Freeze()}},Support:function(c,a,b){var g=(c*this.m_R.col1.x+a*this.m_R.col1.y);var f=(c*this.m_R.col2.x+a*this.m_R.col2.y);var e=0;var j=(this.m_coreVertices[0].x*g+this.m_coreVertices[0].y*f);for(var d=1;dj){e=d;j=h}}b.Set(this.m_position.x+(this.m_R.col1.x*this.m_coreVertices[e].x+this.m_R.col2.x*this.m_coreVertices[e].y),this.m_position.y+(this.m_R.col1.y*this.m_coreVertices[e].x+this.m_R.col2.y*this.m_coreVertices[e].y))},m_localCentroid:new b2Vec2(),m_localOBB:new b2OBB(),m_vertices:null,m_coreVertices:null,m_vertexCount:0,m_normals:null});b2PolyShape.tempVec=new b2Vec2();b2PolyShape.tAbsR=new b2Mat22();var b2Body=function(f,e){this.sMat0=new b2Mat22();this.m_position=new b2Vec2();this.m_R=new b2Mat22(0);this.m_position0=new b2Vec2();var c=0;var g;var a;this.m_flags=0;this.m_position.SetV(f.position);this.m_rotation=f.rotation;this.m_R.Set(this.m_rotation);this.m_position0.SetV(this.m_position);this.m_rotation0=this.m_rotation;this.m_world=e;this.m_linearDamping=b2Math.b2Clamp(1-f.linearDamping,0,1);this.m_angularDamping=b2Math.b2Clamp(1-f.angularDamping,0,1);this.m_force=new b2Vec2(0,0);this.m_torque=0;this.m_mass=0;var h=new Array(b2Settings.b2_maxShapesPerBody);for(c=0;c0){this.m_center.Multiply(1/this.m_mass);this.m_position.Add(b2Math.b2MulMV(this.m_R,this.m_center)) +}else{this.m_flags|=b2Body.e_staticFlag}this.m_I=0;for(c=0;c0){this.m_invMass=1/this.m_mass}else{this.m_invMass=0}if(this.m_I>0&&f.preventRotation==false){this.m_invI=1/this.m_I}else{this.m_I=0;this.m_invI=0}this.m_linearVelocity=b2Math.AddVV(f.linearVelocity,b2Math.b2CrossFV(f.angularVelocity,this.m_center));this.m_angularVelocity=f.angularVelocity;this.m_jointList=null;this.m_contactList=null;this.m_prev=null;this.m_next=null;this.m_shapeList=null;for(c=0;c0}var c=(b.m_maskBits&a.m_categoryBits)!=0&&(b.m_categoryBits&a.m_maskBits)!=0;return c}};b2CollisionFilter.b2_defaultFilter=new b2CollisionFilter;var b2Island=function(e,d,c,a){var b=0;this.m_bodyCapacity=e;this.m_contactCapacity=d;this.m_jointCapacity=c;this.m_bodyCount=0;this.m_contactCount=0;this.m_jointCount=0;this.m_bodies=new Array(e);for(b=0;bc||b2Math.b2Dot(a.m_linearVelocity,a.m_linearVelocity)>d){a.m_sleepTime=0;e=0}else{a.m_sleepTime+=g;e=b2Math.b2Min(e,a.m_sleepTime)}}if(e>=b2Settings.b2_timeToSleep){for(f=0;f0){a.m_shape1.m_body.WakeUp();a.m_shape2.m_body.WakeUp()}var d=a.m_shape1.m_type;var b=a.m_shape2.m_type;var e=b2Contact.s_registers[d][b].destroyFcn;e(a,c)};b2Contact.s_registers=null;b2Contact.s_initialized=false;var b2ContactConstraint=function(){this.normal=new b2Vec2();this.points=new Array(b2Settings.b2_maxManifoldPoints);for(var a=0;a0){b.velocityBias=-60*b.separation}var h=f+(-F*C)-u-(-G*Q);var g=d+(F*D)-s-(G*S);var P=V.normal.x*h+V.normal.y*g;if(P<-b2Settings.b2_velocityThreshold){b.velocityBias+=-V.restitution*P}}++L}}};b2ContactSolver.prototype={PreSolve:function(){var b;var A;var r;for(var w=0;w=-b2Settings.b2_linearSlop},PostSolve:function(){for(var d=0;d0){this.m_manifoldCount=1 +}else{this.m_manifoldCount=0}},GetManifolds:function(){return this.m_manifold},m_manifold:[new b2Manifold()]});b2CircleContact.Create=function(b,a,c){return new b2CircleContact(b,a)};b2CircleContact.Destroy=function(a,b){};var b2Conservative=function(){};b2Conservative.prototype={};b2Conservative.R1=new b2Mat22();b2Conservative.R2=new b2Mat22();b2Conservative.x1=new b2Vec2();b2Conservative.x2=new b2Vec2();b2Conservative.Conservative=function(k,j){var i=k.GetBody();var h=j.GetBody();var s=i.m_position.x-i.m_position0.x;var q=i.m_position.y-i.m_position0.y;var H=i.m_rotation-i.m_rotation0;var b=h.m_position.x-h.m_position0.x;var a=h.m_position.y-h.m_position0.y;var F=h.m_rotation-h.m_rotation0;var m=k.GetMaxRadius();var l=j.GetMaxRadius();var I=i.m_position0.x;var D=i.m_position0.y;var z=i.m_rotation0;var E=h.m_position0.x;var C=h.m_position0.y;var n=h.m_rotation0;var e=I;var c=D;var J=z;var B=E;var A=C;var G=n;b2Conservative.R1.Set(J);b2Conservative.R2.Set(G);k.QuickSync(p1,b2Conservative.R1);j.QuickSync(p2,b2Conservative.R2);var L=0;var o=10;var u;var t;var y=0;var v=true;for(var w=0;wFLT_EPSILON){d*=b2_linearSlop/p}if(i.IsStatic()){i.m_position.x=e;i.m_position.y=c}else{i.m_position.x=e-u;i.m_position.y=c-t}i.m_rotation=J;i.m_R.Set(J);i.QuickSyncShapes();if(h.IsStatic()){h.m_position.x=B;h.m_position.y=A}else{h.m_position.x=B+u;h.m_position.y=A+t}h.m_position.x=B+u;h.m_position.y=A+t;h.m_rotation=G;h.m_R.Set(G);h.QuickSyncShapes();return true +}k.QuickSync(i.m_position,i.m_R);j.QuickSync(h.m_position,h.m_R);return false};var b2NullContact=function(b,a){this.m_node1=new b2ContactNode();this.m_node2=new b2ContactNode();this.m_flags=0;if(!b||!a){this.m_shape1=null;this.m_shape2=null;return}this.m_shape1=b;this.m_shape2=a;this.m_manifoldCount=0;this.m_friction=Math.sqrt(this.m_shape1.m_friction*this.m_shape2.m_friction);this.m_restitution=b2Math.b2Max(this.m_shape1.m_restitution,this.m_shape2.m_restitution);this.m_prev=null;this.m_next=null;this.m_node1.contact=null;this.m_node1.prev=null;this.m_node1.next=null;this.m_node1.other=null;this.m_node2.contact=null;this.m_node2.prev=null;this.m_node2.next=null;this.m_node2.other=null};Object.extend(b2NullContact.prototype,b2Contact.prototype);Object.extend(b2NullContact.prototype,{Evaluate:function(){},GetManifolds:function(){return null}});var b2PolyAndCircleContact=function(b,a){this.m_node1=new b2ContactNode();this.m_node2=new b2ContactNode();this.m_flags=0;if(!b||!a){this.m_shape1=null;this.m_shape2=null;return}this.m_shape1=b;this.m_shape2=a;this.m_manifoldCount=0;this.m_friction=Math.sqrt(this.m_shape1.m_friction*this.m_shape2.m_friction);this.m_restitution=b2Math.b2Max(this.m_shape1.m_restitution,this.m_shape2.m_restitution);this.m_prev=null;this.m_next=null;this.m_node1.contact=null;this.m_node1.prev=null;this.m_node1.next=null;this.m_node1.other=null;this.m_node2.contact=null;this.m_node2.prev=null;this.m_node2.next=null;this.m_node2.other=null;this.m_manifold=[new b2Manifold()];b2Settings.b2Assert(this.m_shape1.m_type==b2Shape.e_polyShape);b2Settings.b2Assert(this.m_shape2.m_type==b2Shape.e_circleShape);this.m_manifold[0].pointCount=0;this.m_manifold[0].points[0].normalImpulse=0;this.m_manifold[0].points[0].tangentImpulse=0};Object.extend(b2PolyAndCircleContact.prototype,b2Contact.prototype);Object.extend(b2PolyAndCircleContact.prototype,{Evaluate:function(){b2Collision.b2CollidePolyAndCircle(this.m_manifold[0],this.m_shape1,this.m_shape2,false); +if(this.m_manifold[0].pointCount>0){this.m_manifoldCount=1}else{this.m_manifoldCount=0}},GetManifolds:function(){return this.m_manifold},m_manifold:[new b2Manifold()]});b2PolyAndCircleContact.Create=function(b,a,c){return new b2PolyAndCircleContact(b,a)};b2PolyAndCircleContact.Destroy=function(a,b){};var b2PolyContact=function(b,a){this.m_node1=new b2ContactNode();this.m_node2=new b2ContactNode();this.m_flags=0;if(!b||!a){this.m_shape1=null;this.m_shape2=null;return}this.m_shape1=b;this.m_shape2=a;this.m_manifoldCount=0;this.m_friction=Math.sqrt(this.m_shape1.m_friction*this.m_shape2.m_friction);this.m_restitution=b2Math.b2Max(this.m_shape1.m_restitution,this.m_shape2.m_restitution);this.m_prev=null;this.m_next=null;this.m_node1.contact=null;this.m_node1.prev=null;this.m_node1.next=null;this.m_node1.other=null;this.m_node2.contact=null;this.m_node2.prev=null;this.m_node2.next=null;this.m_node2.other=null;this.m0=new b2Manifold();this.m_manifold=[new b2Manifold()];this.m_manifold[0].pointCount=0};Object.extend(b2PolyContact.prototype,b2Contact.prototype);Object.extend(b2PolyContact.prototype,{m0:new b2Manifold(),Evaluate:function(){var a=this.m_manifold[0];var b=this.m0.points;for(var d=0;d0){var h=[false,false];for(var f=0;f0){var e=f.m_shape1.m_body;var d=f.m_shape2.m_body;var b=f.m_node1;var a=f.m_node2;e.WakeUp();d.WakeUp();if(b.prev){b.prev.next=b.next}if(b.next){b.next.prev=b.prev}if(b==e.m_contactList){e.m_contactList=b.next}b.prev=null;b.next=null;if(a.prev){a.prev.next=a.next}if(a.next){a.next.prev=a.prev}if(a==d.m_contactList){d.m_contactList=a.next}a.prev=null;a.next=null}b2Contact.Destroy(f,this.m_world.m_blockAllocator);--this.m_world.m_contactCount},CleanContactList:function(){var b=this.m_world.m_contactList;while(b!=null){var a=b;b=b.m_next;if(a.m_flags&b2Contact.e_destroyFlag){this.DestroyContact(a);a=null}}},Collide:function(){var f;var e;var d;var a;for(var h=this.m_world.m_contactList;h!=null;h=h.m_next){if(h.m_shape1.m_body.IsSleeping()&&h.m_shape2.m_body.IsSleeping()){continue +}var b=h.GetManifoldCount();h.Evaluate();var g=h.GetManifoldCount();if(b==0&&g>0){f=h.m_shape1.m_body;e=h.m_shape2.m_body;d=h.m_node1;a=h.m_node2;d.contact=h;d.other=e;d.prev=null;d.next=f.m_contactList;if(d.next!=null){d.next.prev=h.m_node1}f.m_contactList=h.m_node1;a.contact=h;a.other=f;a.prev=null;a.next=e.m_contactList;if(a.next!=null){a.next.prev=a}e.m_contactList=a}else{if(b>0&&g==0){f=h.m_shape1.m_body;e=h.m_shape2.m_body;d=h.m_node1;a=h.m_node2;if(d.prev){d.prev.next=d.next}if(d.next){d.next.prev=d.prev}if(d==f.m_contactList){f.m_contactList=d.next}d.prev=null;d.next=null;if(a.prev){a.prev.next=a.next}if(a.next){a.next.prev=a.prev}if(a==e.m_contactList){e.m_contactList=a.next}a.prev=null;a.next=null}}}},m_world:null,m_nullContact:new b2NullContact(),m_destroyImmediate:null});var b2World=function(a,d,c){this.step=new b2TimeStep();this.m_contactManager=new b2ContactManager();this.m_listener=null;this.m_filter=b2CollisionFilter.b2_defaultFilter;this.m_bodyList=null;this.m_contactList=null;this.m_jointList=null;this.m_bodyCount=0;this.m_contactCount=0;this.m_jointCount=0;this.m_bodyDestroyList=null;this.m_allowSleep=c;this.m_gravity=d;this.m_contactManager.m_world=this;this.m_broadPhase=new b2BroadPhase(a,this.m_contactManager);var b=new b2BodyDef();this.m_groundBody=this.CreateBody(b)};b2World.prototype={SetListener:function(a){this.m_listener=a},SetFilter:function(a){this.m_filter=a},CreateBody:function(c){var a=new b2Body(c,this);a.m_prev=null;a.m_next=this.m_bodyList;if(this.m_bodyList){this.m_bodyList.m_prev=a}this.m_bodyList=a;++this.m_bodyCount;return a},DestroyBody:function(a){if(a.m_flags&b2Body.e_destroyFlag){return}if(a.m_prev){a.m_prev.m_next=a.m_next}if(a.m_next){a.m_next.m_prev=a.m_prev}if(a==this.m_bodyList){this.m_bodyList=a.m_next}a.m_flags|=b2Body.e_destroyFlag; +--this.m_bodyCount;a.m_prev=null;a.m_next=this.m_bodyDestroyList;this.m_bodyDestroyList=a},CleanBodyList:function(){this.m_contactManager.m_destroyImmediate=true;var c=this.m_bodyDestroyList;while(c){var e=c;c=c.m_next;var d=e.m_jointList;while(d){var a=d;d=d.next;if(this.m_listener){this.m_listener.NotifyJointDestroyed(a.joint)}this.DestroyJoint(a.joint)}e.Destroy()}this.m_bodyDestroyList=null;this.m_contactManager.m_destroyImmediate=false},CreateJoint:function(e){var c=b2Joint.Create(e,this.m_blockAllocator);c.m_prev=null;c.m_next=this.m_jointList;if(this.m_jointList){this.m_jointList.m_prev=c}this.m_jointList=c;++this.m_jointCount;c.m_node1.joint=c;c.m_node1.other=c.m_body2;c.m_node1.prev=null;c.m_node1.next=c.m_body1.m_jointList;if(c.m_body1.m_jointList){c.m_body1.m_jointList.prev=c.m_node1}c.m_body1.m_jointList=c.m_node1;c.m_node2.joint=c;c.m_node2.other=c.m_body1;c.m_node2.prev=null;c.m_node2.next=c.m_body2.m_jointList;if(c.m_body2.m_jointList){c.m_body2.m_jointList.prev=c.m_node2 +}c.m_body2.m_jointList=c.m_node2;if(e.collideConnected==false){var a=e.body1.m_shapeCount0){this.step.inv_dt=1/a}else{this.step.inv_dt=0}this.m_positionIterationCount=0;this.m_contactManager.CleanContactList();this.CleanBodyList();this.m_contactManager.Collide();var n=new b2Island(this.m_bodyCount,this.m_contactCount,this.m_jointCount,this.m_stackAllocator);for(r=this.m_bodyList;r!=null;r=r.m_next){r.m_flags&=~b2Body.e_islandFlag}for(var p=this.m_contactList;p!=null;p=p.m_next){p.m_flags&=~b2Contact.e_islandFlag}for(var h=this.m_jointList;h!=null;h=h.m_next){h.m_islandFlag=false}var u=this.m_bodyCount;var q=new Array(this.m_bodyCount);for(var g=0;g0){r=q[--t];n.AddBody(r);r.m_flags&=~b2Body.e_sleepFlag; +if(r.m_flags&b2Body.e_staticFlag){continue}for(var s=r.m_contactList;s!=null;s=s.next){if(s.contact.m_flags&b2Contact.e_islandFlag){continue}n.AddContact(s.contact);s.contact.m_flags|=b2Contact.e_islandFlag;o=s.other;if(o.m_flags&b2Body.e_islandFlag){continue}q[t++]=o;o.m_flags|=b2Body.e_islandFlag}for(var f=r.m_jointList;f!=null;f=f.next){if(f.joint.m_islandFlag==true){continue}n.AddJoint(f.joint);f.joint.m_islandFlag=true;o=f.other;if(o.m_flags&b2Body.e_islandFlag){continue}q[t++]=o;o.m_flags|=b2Body.e_islandFlag}}n.Solve(this.step,this.m_gravity);this.m_positionIterationCount=b2Math.b2Max(this.m_positionIterationCount,b2Island.m_positionIterationCount);if(this.m_allowSleep){n.UpdateSleep(a)}for(var l=0;lb2Settings.b2_linearSlop){this.m_u.Multiply(1/a)}else{this.m_u.SetZero()}var h=(j*this.m_u.y-i*this.m_u.x);var d=(f*this.m_u.y-e*this.m_u.x);this.m_mass=this.m_body1.m_invMass+this.m_body1.m_invI*h*h+this.m_body2.m_invMass+this.m_body2.m_invI*d*d;this.m_mass=1/this.m_mass;if(b2World.s_enableWarmStarting){var c=this.m_impulse*this.m_u.x;var b=this.m_impulse*this.m_u.y;this.m_body1.m_linearVelocity.x-=this.m_body1.m_invMass*c;this.m_body1.m_linearVelocity.y-=this.m_body1.m_invMass*b;this.m_body1.m_angularVelocity-=this.m_body1.m_invI*(j*b-i*c); +this.m_body2.m_linearVelocity.x+=this.m_body2.m_invMass*c;this.m_body2.m_linearVelocity.y+=this.m_body2.m_invMass*b;this.m_body2.m_angularVelocity+=this.m_body2.m_invI*(f*b-e*c)}else{this.m_impulse=0}},SolveVelocityConstraints:function(b){var j;j=this.m_body1.m_R;var n=j.col1.x*this.m_localAnchor1.x+j.col2.x*this.m_localAnchor1.y;var m=j.col1.y*this.m_localAnchor1.x+j.col2.y*this.m_localAnchor1.y;j=this.m_body2.m_R;var h=j.col1.x*this.m_localAnchor2.x+j.col2.x*this.m_localAnchor2.y;var g=j.col1.y*this.m_localAnchor2.x+j.col2.y*this.m_localAnchor2.y;var l=this.m_body1.m_linearVelocity.x+(-this.m_body1.m_angularVelocity*m);var k=this.m_body1.m_linearVelocity.y+(this.m_body1.m_angularVelocity*n);var f=this.m_body2.m_linearVelocity.x+(-this.m_body2.m_angularVelocity*g);var e=this.m_body2.m_linearVelocity.y+(this.m_body2.m_angularVelocity*h);var i=(this.m_u.x*(f-l)+this.m_u.y*(e-k));var a=-this.m_mass*i;this.m_impulse+=a;var d=a*this.m_u.x;var c=a*this.m_u.y;this.m_body1.m_linearVelocity.x-=this.m_body1.m_invMass*d; +this.m_body1.m_linearVelocity.y-=this.m_body1.m_invMass*c;this.m_body1.m_angularVelocity-=this.m_body1.m_invI*(n*c-m*d);this.m_body2.m_linearVelocity.x+=this.m_body2.m_invMass*d;this.m_body2.m_linearVelocity.y+=this.m_body2.m_invMass*c;this.m_body2.m_angularVelocity+=this.m_body2.m_invI*(h*c-g*d)},SolvePositionConstraints:function(){var j;j=this.m_body1.m_R;var l=j.col1.x*this.m_localAnchor1.x+j.col2.x*this.m_localAnchor1.y;var k=j.col1.y*this.m_localAnchor1.x+j.col2.y*this.m_localAnchor1.y;j=this.m_body2.m_R;var i=j.col1.x*this.m_localAnchor2.x+j.col2.x*this.m_localAnchor2.y;var h=j.col1.y*this.m_localAnchor2.x+j.col2.y*this.m_localAnchor2.y;var g=this.m_body2.m_position.x+i-this.m_body1.m_position.x-l;var f=this.m_body2.m_position.y+h-this.m_body1.m_position.y-k;var c=Math.sqrt(g*g+f*f);g/=c;f/=c;var a=c-this.m_length;a=b2Math.b2Clamp(a,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);var b=-this.m_mass*a;this.m_u.Set(g,f);var e=b*this.m_u.x;var d=b*this.m_u.y;this.m_body1.m_position.x-=this.m_body1.m_invMass*e; +this.m_body1.m_position.y-=this.m_body1.m_invMass*d;this.m_body1.m_rotation-=this.m_body1.m_invI*(l*d-k*e);this.m_body2.m_position.x+=this.m_body2.m_invMass*e;this.m_body2.m_position.y+=this.m_body2.m_invMass*d;this.m_body2.m_rotation+=this.m_body2.m_invI*(i*d-h*e);this.m_body1.m_R.Set(this.m_body1.m_rotation);this.m_body2.m_R.Set(this.m_body2.m_rotation);return b2Math.b2Abs(a)d.dt*this.m_maxForce){this.m_impulse.Multiply(d.dt*this.m_maxForce/b)}e=this.m_impulse.x-j;c=this.m_impulse.y-g;i.m_linearVelocity.x+=i.m_invMass*e;i.m_linearVelocity.y+=i.m_invMass*c; +i.m_angularVelocity+=i.m_invI*(h*c-f*e)},SolvePositionConstraints:function(){return true},m_localAnchor:new b2Vec2(),m_target:new b2Vec2(),m_impulse:new b2Vec2(),m_ptpMass:new b2Mat22(),m_C:new b2Vec2(),m_maxForce:null,m_beta:null,m_gamma:null});var b2MouseJointDef=function(){this.type=b2Joint.e_unknownJoint;this.userData=null;this.body1=null;this.body2=null;this.collideConnected=false;this.target=new b2Vec2();this.type=b2Joint.e_mouseJoint;this.maxForce=0;this.frequencyHz=5;this.dampingRatio=0.7;this.timeStep=1/60};Object.extend(b2MouseJointDef.prototype,b2JointDef.prototype);Object.extend(b2MouseJointDef.prototype,{target:new b2Vec2(),maxForce:null,frequencyHz:null,dampingRatio:null,timeStep:null});var b2PrismaticJoint=function(c){this.m_node1=new b2JointNode();this.m_node2=new b2JointNode();this.m_type=c.type;this.m_prev=null;this.m_next=null;this.m_body1=c.body1;this.m_body2=c.body2;this.m_collideConnected=c.collideConnected;this.m_islandFlag=false;this.m_userData=c.userData;this.m_localAnchor1=new b2Vec2();this.m_localAnchor2=new b2Vec2();this.m_localXAxis1=new b2Vec2();this.m_localYAxis1=new b2Vec2();this.m_linearJacobian=new b2Jacobian();this.m_motorJacobian=new b2Jacobian();var b;var a;var d;b=this.m_body1.m_R;a=(c.anchorPoint.x-this.m_body1.m_position.x);d=(c.anchorPoint.y-this.m_body1.m_position.y);this.m_localAnchor1.Set((a*b.col1.x+d*b.col1.y),(a*b.col2.x+d*b.col2.y));b=this.m_body2.m_R;a=(c.anchorPoint.x-this.m_body2.m_position.x);d=(c.anchorPoint.y-this.m_body2.m_position.y);this.m_localAnchor2.Set((a*b.col1.x+d*b.col1.y),(a*b.col2.x+d*b.col2.y));b=this.m_body1.m_R;a=c.axis.x;d=c.axis.y;this.m_localXAxis1.Set((a*b.col1.x+d*b.col1.y),(a*b.col2.x+d*b.col2.y));this.m_localYAxis1.x=-this.m_localXAxis1.y; +this.m_localYAxis1.y=this.m_localXAxis1.x;this.m_initialAngle=this.m_body2.m_rotation-this.m_body1.m_rotation;this.m_linearJacobian.SetZero();this.m_linearMass=0;this.m_linearImpulse=0;this.m_angularMass=0;this.m_angularImpulse=0;this.m_motorJacobian.SetZero();this.m_motorMass=0;this.m_motorImpulse=0;this.m_limitImpulse=0;this.m_limitPositionImpulse=0;this.m_lowerTranslation=c.lowerTranslation;this.m_upperTranslation=c.upperTranslation;this.m_maxMotorForce=c.motorForce;this.m_motorSpeed=c.motorSpeed;this.m_enableLimit=c.enableLimit;this.m_enableMotor=c.enableMotor};Object.extend(b2PrismaticJoint.prototype,b2Joint.prototype);Object.extend(b2PrismaticJoint.prototype,{GetAnchor1:function(){var a=this.m_body1;var b=new b2Vec2();b.SetV(this.m_localAnchor1);b.MulM(a.m_R);b.Add(a.m_position);return b},GetAnchor2:function(){var a=this.m_body2;var b=new b2Vec2();b.SetV(this.m_localAnchor2);b.MulM(a.m_R);b.Add(a.m_position);return b},GetJointTranslation:function(){var l=this.m_body1;var k=this.m_body2; +var j;j=l.m_R;var p=j.col1.x*this.m_localAnchor1.x+j.col2.x*this.m_localAnchor1.y;var n=j.col1.y*this.m_localAnchor1.x+j.col2.y*this.m_localAnchor1.y;j=k.m_R;var i=j.col1.x*this.m_localAnchor2.x+j.col2.x*this.m_localAnchor2.y;var h=j.col1.y*this.m_localAnchor2.x+j.col2.y*this.m_localAnchor2.y;var g=l.m_position.x+p;var f=l.m_position.y+n;var c=k.m_position.x+i;var b=k.m_position.y+h;var e=c-g;var d=b-f;j=l.m_R;var o=j.col1.x*this.m_localXAxis1.x+j.col2.x*this.m_localXAxis1.y;var m=j.col1.y*this.m_localXAxis1.x+j.col2.y*this.m_localXAxis1.y;var a=o*e+m*d;return a},GetJointSpeed:function(){var j=this.m_body1;var i=this.m_body2;var k;k=j.m_R;var t=k.col1.x*this.m_localAnchor1.x+k.col2.x*this.m_localAnchor1.y;var s=k.col1.y*this.m_localAnchor1.x+k.col2.y*this.m_localAnchor1.y;k=i.m_R;var h=k.col1.x*this.m_localAnchor2.x+k.col2.x*this.m_localAnchor2.y;var g=k.col1.y*this.m_localAnchor2.x+k.col2.y*this.m_localAnchor2.y;var r=j.m_position.x+t;var p=j.m_position.y+s;var c=i.m_position.x+h;var a=i.m_position.y+g; +var f=c-r;var e=a-p;k=j.m_R;var o=k.col1.x*this.m_localXAxis1.x+k.col2.x*this.m_localXAxis1.y;var n=k.col1.y*this.m_localXAxis1.x+k.col2.y*this.m_localXAxis1.y;var d=j.m_linearVelocity;var b=i.m_linearVelocity;var m=j.m_angularVelocity;var l=i.m_angularVelocity;var q=(f*(-m*n)+e*(m*o))+(o*(((b.x+(-l*g))-d.x)-(-m*s))+n*(((b.y+(l*h))-d.y)-(m*t)));return q},GetMotorForce:function(a){return a*this.m_motorImpulse},SetMotorSpeed:function(a){this.m_motorSpeed=a},SetMotorForce:function(a){this.m_maxMotorForce=a},GetReactionForce:function(b){var e=b*this.m_limitImpulse;var d;d=this.m_body1.m_R;var g=e*(d.col1.x*this.m_localXAxis1.x+d.col2.x*this.m_localXAxis1.y);var f=e*(d.col1.y*this.m_localXAxis1.x+d.col2.y*this.m_localXAxis1.y);var c=e*(d.col1.x*this.m_localYAxis1.x+d.col2.x*this.m_localYAxis1.y);var a=e*(d.col1.y*this.m_localYAxis1.x+d.col2.y*this.m_localYAxis1.y);return new b2Vec2(g+c,f+a)},GetReactionTorque:function(a){return a*this.m_angularImpulse},PrepareVelocitySolver:function(){var m=this.m_body1; +var l=this.m_body2;var p;p=m.m_R;var z=p.col1.x*this.m_localAnchor1.x+p.col2.x*this.m_localAnchor1.y;var y=p.col1.y*this.m_localAnchor1.x+p.col2.y*this.m_localAnchor1.y;p=l.m_R;var i=p.col1.x*this.m_localAnchor2.x+p.col2.x*this.m_localAnchor2.y;var g=p.col1.y*this.m_localAnchor2.x+p.col2.y*this.m_localAnchor2.y;var s=m.m_invMass;var r=l.m_invMass;var k=m.m_invI;var j=l.m_invI;p=m.m_R;var h=p.col1.x*this.m_localYAxis1.x+p.col2.x*this.m_localYAxis1.y;var f=p.col1.y*this.m_localYAxis1.x+p.col2.y*this.m_localYAxis1.y;var t=l.m_position.x+i-m.m_position.x;var q=l.m_position.y+g-m.m_position.y;this.m_linearJacobian.linear1.x=-h;this.m_linearJacobian.linear1.y=-f;this.m_linearJacobian.linear2.x=h;this.m_linearJacobian.linear2.y=f;this.m_linearJacobian.angular1=-(t*f-q*h);this.m_linearJacobian.angular2=i*f-g*h;this.m_linearMass=s+k*this.m_linearJacobian.angular1*this.m_linearJacobian.angular1+r+j*this.m_linearJacobian.angular2*this.m_linearJacobian.angular2;this.m_linearMass=1/this.m_linearMass; +this.m_angularMass=1/(k+j);if(this.m_enableLimit||this.m_enableMotor){p=m.m_R;var v=p.col1.x*this.m_localXAxis1.x+p.col2.x*this.m_localXAxis1.y;var u=p.col1.y*this.m_localXAxis1.x+p.col2.y*this.m_localXAxis1.y;this.m_motorJacobian.linear1.x=-v;this.m_motorJacobian.linear1.y=-u;this.m_motorJacobian.linear2.x=v;this.m_motorJacobian.linear2.y=u;this.m_motorJacobian.angular1=-(t*u-q*v);this.m_motorJacobian.angular2=i*u-g*v;this.m_motorMass=s+k*this.m_motorJacobian.angular1*this.m_motorJacobian.angular1+r+j*this.m_motorJacobian.angular2*this.m_motorJacobian.angular2;this.m_motorMass=1/this.m_motorMass;if(this.m_enableLimit){var e=t-z;var d=q-y;var c=v*e+u*d;if(b2Math.b2Abs(this.m_upperTranslation-this.m_lowerTranslation)<2*b2Settings.b2_linearSlop){this.m_limitState=b2Joint.e_equalLimits}else{if(c<=this.m_lowerTranslation){if(this.m_limitState!=b2Joint.e_atLowerLimit){this.m_limitImpulse=0}this.m_limitState=b2Joint.e_atLowerLimit}else{if(c>=this.m_upperTranslation){if(this.m_limitState!=b2Joint.e_atUpperLimit){this.m_limitImpulse=0 +}this.m_limitState=b2Joint.e_atUpperLimit}else{this.m_limitState=b2Joint.e_inactiveLimit;this.m_limitImpulse=0}}}}}if(this.m_enableMotor==false){this.m_motorImpulse=0}if(this.m_enableLimit==false){this.m_limitImpulse=0}if(b2World.s_enableWarmStarting){var b=this.m_linearImpulse*this.m_linearJacobian.linear1.x+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear1.x;var a=this.m_linearImpulse*this.m_linearJacobian.linear1.y+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear1.y;var o=this.m_linearImpulse*this.m_linearJacobian.linear2.x+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear2.x;var n=this.m_linearImpulse*this.m_linearJacobian.linear2.y+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear2.y;var x=this.m_linearImpulse*this.m_linearJacobian.angular1-this.m_angularImpulse+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.angular1;var w=this.m_linearImpulse*this.m_linearJacobian.angular2+this.m_angularImpulse+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.angular2; +m.m_linearVelocity.x+=s*b;m.m_linearVelocity.y+=s*a;m.m_angularVelocity+=k*x;l.m_linearVelocity.x+=r*o;l.m_linearVelocity.y+=r*n;l.m_angularVelocity+=j*w}else{this.m_linearImpulse=0;this.m_angularImpulse=0;this.m_limitImpulse=0;this.m_motorImpulse=0}this.m_limitPositionImpulse=0},SolveVelocityConstraints:function(b){var l=this.m_body1;var k=this.m_body2;var q=l.m_invMass;var o=k.m_invMass;var d=l.m_invI;var c=k.m_invI;var p;var e=this.m_linearJacobian.Compute(l.m_linearVelocity,l.m_angularVelocity,k.m_linearVelocity,k.m_angularVelocity);var j=-this.m_linearMass*e;this.m_linearImpulse+=j;l.m_linearVelocity.x+=(q*j)*this.m_linearJacobian.linear1.x;l.m_linearVelocity.y+=(q*j)*this.m_linearJacobian.linear1.y;l.m_angularVelocity+=d*j*this.m_linearJacobian.angular1;k.m_linearVelocity.x+=(o*j)*this.m_linearJacobian.linear2.x;k.m_linearVelocity.y+=(o*j)*this.m_linearJacobian.linear2.y;k.m_angularVelocity+=c*j*this.m_linearJacobian.angular2;var h=k.m_angularVelocity-l.m_angularVelocity;var a=-this.m_angularMass*h; +this.m_angularImpulse+=a;l.m_angularVelocity-=d*a;k.m_angularVelocity+=c*a;if(this.m_enableMotor&&this.m_limitState!=b2Joint.e_equalLimits){var m=this.m_motorJacobian.Compute(l.m_linearVelocity,l.m_angularVelocity,k.m_linearVelocity,k.m_angularVelocity)-this.m_motorSpeed;var f=-this.m_motorMass*m;var n=this.m_motorImpulse;this.m_motorImpulse=b2Math.b2Clamp(this.m_motorImpulse+f,-b.dt*this.m_maxMotorForce,b.dt*this.m_maxMotorForce);f=this.m_motorImpulse-n;l.m_linearVelocity.x+=(q*f)*this.m_motorJacobian.linear1.x;l.m_linearVelocity.y+=(q*f)*this.m_motorJacobian.linear1.y;l.m_angularVelocity+=d*f*this.m_motorJacobian.angular1;k.m_linearVelocity.x+=(o*f)*this.m_motorJacobian.linear2.x;k.m_linearVelocity.y+=(o*f)*this.m_motorJacobian.linear2.y;k.m_angularVelocity+=c*f*this.m_motorJacobian.angular2}if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){var i=this.m_motorJacobian.Compute(l.m_linearVelocity,l.m_angularVelocity,k.m_linearVelocity,k.m_angularVelocity);var g=-this.m_motorMass*i; +if(this.m_limitState==b2Joint.e_equalLimits){this.m_limitImpulse+=g}else{if(this.m_limitState==b2Joint.e_atLowerLimit){p=this.m_limitImpulse;this.m_limitImpulse=b2Math.b2Max(this.m_limitImpulse+g,0);g=this.m_limitImpulse-p}else{if(this.m_limitState==b2Joint.e_atUpperLimit){p=this.m_limitImpulse;this.m_limitImpulse=b2Math.b2Min(this.m_limitImpulse+g,0);g=this.m_limitImpulse-p}}}l.m_linearVelocity.x+=(q*g)*this.m_motorJacobian.linear1.x;l.m_linearVelocity.y+=(q*g)*this.m_motorJacobian.linear1.y;l.m_angularVelocity+=d*g*this.m_motorJacobian.angular1;k.m_linearVelocity.x+=(o*g)*this.m_motorJacobian.linear2.x;k.m_linearVelocity.y+=(o*g)*this.m_motorJacobian.linear2.y;k.m_angularVelocity+=c*g*this.m_motorJacobian.angular2}},SolvePositionConstraints:function(){var o;var y;var m=this.m_body1;var k=this.m_body2;var t=m.m_invMass;var s=k.m_invMass;var j=m.m_invI;var i=k.m_invI;var q;q=m.m_R;var E=q.col1.x*this.m_localAnchor1.x+q.col2.x*this.m_localAnchor1.y;var D=q.col1.y*this.m_localAnchor1.x+q.col2.y*this.m_localAnchor1.y; +q=k.m_R;var h=q.col1.x*this.m_localAnchor2.x+q.col2.x*this.m_localAnchor2.y;var g=q.col1.y*this.m_localAnchor2.x+q.col2.y*this.m_localAnchor2.y;var B=m.m_position.x+E;var z=m.m_position.y+D;var b=k.m_position.x+h;var a=k.m_position.y+g;var e=b-B;var c=a-z;q=m.m_R;var f=q.col1.x*this.m_localYAxis1.x+q.col2.x*this.m_localYAxis1.y;var d=q.col1.y*this.m_localYAxis1.x+q.col2.y*this.m_localYAxis1.y;var l=f*e+d*c;l=b2Math.b2Clamp(l,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);var x=-this.m_linearMass*l;m.m_position.x+=(t*x)*this.m_linearJacobian.linear1.x;m.m_position.y+=(t*x)*this.m_linearJacobian.linear1.y;m.m_rotation+=j*x*this.m_linearJacobian.angular1;k.m_position.x+=(s*x)*this.m_linearJacobian.linear2.x;k.m_position.y+=(s*x)*this.m_linearJacobian.linear2.y;k.m_rotation+=i*x*this.m_linearJacobian.angular2;var p=b2Math.b2Abs(l);var A=k.m_rotation-m.m_rotation-this.m_initialAngle;A=b2Math.b2Clamp(A,-b2Settings.b2_maxAngularCorrection,b2Settings.b2_maxAngularCorrection); +var r=-this.m_angularMass*A;m.m_rotation-=m.m_invI*r;m.m_R.Set(m.m_rotation);k.m_rotation+=k.m_invI*r;k.m_R.Set(k.m_rotation);var C=b2Math.b2Abs(A);if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){q=m.m_R;E=q.col1.x*this.m_localAnchor1.x+q.col2.x*this.m_localAnchor1.y;D=q.col1.y*this.m_localAnchor1.x+q.col2.y*this.m_localAnchor1.y;q=k.m_R;h=q.col1.x*this.m_localAnchor2.x+q.col2.x*this.m_localAnchor2.y;g=q.col1.y*this.m_localAnchor2.x+q.col2.y*this.m_localAnchor2.y;B=m.m_position.x+E;z=m.m_position.y+D;b=k.m_position.x+h;a=k.m_position.y+g;e=b-B;c=a-z;q=m.m_R;var v=q.col1.x*this.m_localXAxis1.x+q.col2.x*this.m_localXAxis1.y;var u=q.col1.y*this.m_localXAxis1.x+q.col2.y*this.m_localXAxis1.y;var n=(v*e+u*c);var w=0;if(this.m_limitState==b2Joint.e_equalLimits){o=b2Math.b2Clamp(n,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);w=-this.m_motorMass*o;p=b2Math.b2Max(p,b2Math.b2Abs(A))}else{if(this.m_limitState==b2Joint.e_atLowerLimit){o=n-this.m_lowerTranslation; +p=b2Math.b2Max(p,-o);o=b2Math.b2Clamp(o+b2Settings.b2_linearSlop,-b2Settings.b2_maxLinearCorrection,0);w=-this.m_motorMass*o;y=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Max(this.m_limitPositionImpulse+w,0);w=this.m_limitPositionImpulse-y}else{if(this.m_limitState==b2Joint.e_atUpperLimit){o=n-this.m_upperTranslation;p=b2Math.b2Max(p,o);o=b2Math.b2Clamp(o-b2Settings.b2_linearSlop,0,b2Settings.b2_maxLinearCorrection);w=-this.m_motorMass*o;y=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Min(this.m_limitPositionImpulse+w,0);w=this.m_limitPositionImpulse-y}}}m.m_position.x+=(t*w)*this.m_motorJacobian.linear1.x;m.m_position.y+=(t*w)*this.m_motorJacobian.linear1.y;m.m_rotation+=j*w*this.m_motorJacobian.angular1;m.m_R.Set(m.m_rotation);k.m_position.x+=(s*w)*this.m_motorJacobian.linear2.x;k.m_position.y+=(s*w)*this.m_motorJacobian.linear2.y;k.m_rotation+=i*w*this.m_motorJacobian.angular2;k.m_R.Set(k.m_rotation)}return p<=b2Settings.b2_linearSlop&&C<=b2Settings.b2_angularSlop +},m_localAnchor1:new b2Vec2(),m_localAnchor2:new b2Vec2(),m_localXAxis1:new b2Vec2(),m_localYAxis1:new b2Vec2(),m_initialAngle:null,m_linearJacobian:new b2Jacobian(),m_linearMass:null,m_linearImpulse:null,m_angularMass:null,m_angularImpulse:null,m_motorJacobian:new b2Jacobian(),m_motorMass:null,m_motorImpulse:null,m_limitImpulse:null,m_limitPositionImpulse:null,m_lowerTranslation:null,m_upperTranslation:null,m_maxMotorForce:null,m_motorSpeed:null,m_enableLimit:null,m_enableMotor:null,m_limitState:0});var b2PrismaticJointDef=function(){this.type=b2Joint.e_unknownJoint;this.userData=null;this.body1=null;this.body2=null;this.collideConnected=false;this.type=b2Joint.e_prismaticJoint;this.anchorPoint=new b2Vec2(0,0);this.axis=new b2Vec2(0,0);this.lowerTranslation=0;this.upperTranslation=0;this.motorForce=0;this.motorSpeed=0;this.enableLimit=false;this.enableMotor=false};Object.extend(b2PrismaticJointDef.prototype,b2JointDef.prototype);Object.extend(b2PrismaticJointDef.prototype,{anchorPoint:null,axis:null,lowerTranslation:null,upperTranslation:null,motorForce:null,motorSpeed:null,enableLimit:null,enableMotor:null,Initialize:function(b,a,d,c){this.body1=b;this.body2=a;this.anchorPoint=d;this.axis=c}});var b2PulleyJoint=function(d){this.m_node1=new b2JointNode();this.m_node2=new b2JointNode();this.m_type=d.type;this.m_prev=null;this.m_next=null;this.m_body1=d.body1;this.m_body2=d.body2;this.m_collideConnected=d.collideConnected;this.m_islandFlag=false;this.m_userData=d.userData;this.m_groundAnchor1=new b2Vec2();this.m_groundAnchor2=new b2Vec2();this.m_localAnchor1=new b2Vec2();this.m_localAnchor2=new b2Vec2();this.m_u1=new b2Vec2();this.m_u2=new b2Vec2();var b;var a;var h;this.m_ground=this.m_body1.m_world.m_groundBody;this.m_groundAnchor1.x=d.groundPoint1.x-this.m_ground.m_position.x;this.m_groundAnchor1.y=d.groundPoint1.y-this.m_ground.m_position.y;this.m_groundAnchor2.x=d.groundPoint2.x-this.m_ground.m_position.x;this.m_groundAnchor2.y=d.groundPoint2.y-this.m_ground.m_position.y;b=this.m_body1.m_R;a=d.anchorPoint1.x-this.m_body1.m_position.x;h=d.anchorPoint1.y-this.m_body1.m_position.y;this.m_localAnchor1.x=a*b.col1.x+h*b.col1.y;this.m_localAnchor1.y=a*b.col2.x+h*b.col2.y;b=this.m_body2.m_R; +a=d.anchorPoint2.x-this.m_body2.m_position.x;h=d.anchorPoint2.y-this.m_body2.m_position.y;this.m_localAnchor2.x=a*b.col1.x+h*b.col1.y;this.m_localAnchor2.y=a*b.col2.x+h*b.col2.y;this.m_ratio=d.ratio;a=d.groundPoint1.x-d.anchorPoint1.x;h=d.groundPoint1.y-d.anchorPoint1.y;var f=Math.sqrt(a*a+h*h);a=d.groundPoint2.x-d.anchorPoint2.x;h=d.groundPoint2.y-d.anchorPoint2.y;var c=Math.sqrt(a*a+h*h);var g=b2Math.b2Max(0.5*b2PulleyJoint.b2_minPulleyLength,f);var e=b2Math.b2Max(0.5*b2PulleyJoint.b2_minPulleyLength,c);this.m_constant=g+this.m_ratio*e;this.m_maxLength1=b2Math.b2Clamp(d.maxLength1,g,this.m_constant-this.m_ratio*b2PulleyJoint.b2_minPulleyLength);this.m_maxLength2=b2Math.b2Clamp(d.maxLength2,e,(this.m_constant-b2PulleyJoint.b2_minPulleyLength)/this.m_ratio);this.m_pulleyImpulse=0;this.m_limitImpulse1=0;this.m_limitImpulse2=0};Object.extend(b2PulleyJoint.prototype,b2Joint.prototype);Object.extend(b2PulleyJoint.prototype,{GetAnchor1:function(){var a=this.m_body1.m_R;return new b2Vec2(this.m_body1.m_position.x+(a.col1.x*this.m_localAnchor1.x+a.col2.x*this.m_localAnchor1.y),this.m_body1.m_position.y+(a.col1.y*this.m_localAnchor1.x+a.col2.y*this.m_localAnchor1.y)) +},GetAnchor2:function(){var a=this.m_body2.m_R;return new b2Vec2(this.m_body2.m_position.x+(a.col1.x*this.m_localAnchor2.x+a.col2.x*this.m_localAnchor2.y),this.m_body2.m_position.y+(a.col1.y*this.m_localAnchor2.x+a.col2.y*this.m_localAnchor2.y))},GetGroundPoint1:function(){return new b2Vec2(this.m_ground.m_position.x+this.m_groundAnchor1.x,this.m_ground.m_position.y+this.m_groundAnchor1.y)},GetGroundPoint2:function(){return new b2Vec2(this.m_ground.m_position.x+this.m_groundAnchor2.x,this.m_ground.m_position.y+this.m_groundAnchor2.y)},GetReactionForce:function(a){return new b2Vec2()},GetReactionTorque:function(a){return 0},GetLength1:function(){var e;e=this.m_body1.m_R;var d=this.m_body1.m_position.x+(e.col1.x*this.m_localAnchor1.x+e.col2.x*this.m_localAnchor1.y);var c=this.m_body1.m_position.y+(e.col1.y*this.m_localAnchor1.x+e.col2.y*this.m_localAnchor1.y);var b=d-(this.m_ground.m_position.x+this.m_groundAnchor1.x);var a=c-(this.m_ground.m_position.y+this.m_groundAnchor1.y);return Math.sqrt(b*b+a*a) +},GetLength2:function(){var e;e=this.m_body2.m_R;var d=this.m_body2.m_position.x+(e.col1.x*this.m_localAnchor2.x+e.col2.x*this.m_localAnchor2.y);var c=this.m_body2.m_position.y+(e.col1.y*this.m_localAnchor2.x+e.col2.y*this.m_localAnchor2.y);var b=d-(this.m_ground.m_position.x+this.m_groundAnchor2.x);var a=c-(this.m_ground.m_position.y+this.m_groundAnchor2.y);return Math.sqrt(b*b+a*a)},GetRatio:function(){return this.m_ratio},PrepareVelocitySolver:function(){var h=this.m_body1;var g=this.m_body2;var l;l=h.m_R;var v=l.col1.x*this.m_localAnchor1.x+l.col2.x*this.m_localAnchor1.y;var u=l.col1.y*this.m_localAnchor1.x+l.col2.y*this.m_localAnchor1.y;l=g.m_R;var f=l.col1.x*this.m_localAnchor2.x+l.col2.x*this.m_localAnchor2.y;var e=l.col1.y*this.m_localAnchor2.x+l.col2.y*this.m_localAnchor2.y;var t=h.m_position.x+v;var r=h.m_position.y+u;var d=g.m_position.x+f;var c=g.m_position.y+e;var m=this.m_ground.m_position.x+this.m_groundAnchor1.x;var k=this.m_ground.m_position.y+this.m_groundAnchor1.y;var s=this.m_ground.m_position.x+this.m_groundAnchor2.x; +var q=this.m_ground.m_position.y+this.m_groundAnchor2.y;this.m_u1.Set(t-m,r-k);this.m_u2.Set(d-s,c-q);var p=this.m_u1.Length();var o=this.m_u2.Length();if(p>b2Settings.b2_linearSlop){this.m_u1.Multiply(1/p)}else{this.m_u1.SetZero()}if(o>b2Settings.b2_linearSlop){this.m_u2.Multiply(1/o)}else{this.m_u2.SetZero()}if(pb2Settings.b2_linearSlop){this.m_u1.Multiply(1/n)}else{this.m_u1.SetZero()}if(m>b2Settings.b2_linearSlop){this.m_u2.Multiply(1/m)}else{this.m_u2.SetZero()}l=this.m_constant-n-this.m_ratio*m;e=b2Math.b2Max(e,Math.abs(l));l=b2Math.b2Clamp(l,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);h=-this.m_pulleyMass*l;r=-h*this.m_u1.x;p=-h*this.m_u1.y;b=-this.m_ratio*h*this.m_u2.x;a=-this.m_ratio*h*this.m_u2.y;g.m_position.x+=g.m_invMass*r;g.m_position.y+=g.m_invMass*p;g.m_rotation+=g.m_invI*(u*p-t*r);f.m_position.x+=f.m_invMass*b;f.m_position.y+=f.m_invMass*a;f.m_rotation+=f.m_invI*(d*a-c*b);g.m_R.Set(g.m_rotation);f.m_R.Set(f.m_rotation);if(this.m_limitState1==b2Joint.e_atUpperLimit){j=g.m_R;u=j.col1.x*this.m_localAnchor1.x+j.col2.x*this.m_localAnchor1.y;t=j.col1.y*this.m_localAnchor1.x+j.col2.y*this.m_localAnchor1.y; +r=g.m_position.x+u;p=g.m_position.y+t;this.m_u1.Set(r-k,p-i);n=this.m_u1.Length();if(n>b2Settings.b2_linearSlop){this.m_u1.x*=1/n;this.m_u1.y*=1/n}else{this.m_u1.SetZero()}l=this.m_maxLength1-n;e=b2Math.b2Max(e,-l);l=b2Math.b2Clamp(l+b2Settings.b2_linearSlop,-b2Settings.b2_maxLinearCorrection,0);h=-this.m_limitMass1*l;s=this.m_limitPositionImpulse1;this.m_limitPositionImpulse1=b2Math.b2Max(0,this.m_limitPositionImpulse1+h);h=this.m_limitPositionImpulse1-s;r=-h*this.m_u1.x;p=-h*this.m_u1.y;g.m_position.x+=g.m_invMass*r;g.m_position.y+=g.m_invMass*p;g.m_rotation+=g.m_invI*(u*p-t*r);g.m_R.Set(g.m_rotation)}if(this.m_limitState2==b2Joint.e_atUpperLimit){j=f.m_R;d=j.col1.x*this.m_localAnchor2.x+j.col2.x*this.m_localAnchor2.y;c=j.col1.y*this.m_localAnchor2.x+j.col2.y*this.m_localAnchor2.y;b=f.m_position.x+d;a=f.m_position.y+c;this.m_u2.Set(b-q,a-o);m=this.m_u2.Length();if(m>b2Settings.b2_linearSlop){this.m_u2.x*=1/m;this.m_u2.y*=1/m}else{this.m_u2.SetZero()}l=this.m_maxLength2-m;e=b2Math.b2Max(e,-l); +l=b2Math.b2Clamp(l+b2Settings.b2_linearSlop,-b2Settings.b2_maxLinearCorrection,0);h=-this.m_limitMass2*l;s=this.m_limitPositionImpulse2;this.m_limitPositionImpulse2=b2Math.b2Max(0,this.m_limitPositionImpulse2+h);h=this.m_limitPositionImpulse2-s;b=-h*this.m_u2.x;a=-h*this.m_u2.y;f.m_position.x+=f.m_invMass*b;f.m_position.y+=f.m_invMass*a;f.m_rotation+=f.m_invI*(d*a-c*b);f.m_R.Set(f.m_rotation)}return e=this.m_upperAngle){if(this.m_limitState!=b2Joint.e_atUpperLimit){this.m_limitImpulse=0}this.m_limitState=b2Joint.e_atUpperLimit}else{this.m_limitState=b2Joint.e_inactiveLimit;this.m_limitImpulse=0}}}}else{this.m_limitImpulse=0}if(b2World.s_enableWarmStarting){h.m_linearVelocity.x-=l*this.m_ptpImpulse.x;h.m_linearVelocity.y-=l*this.m_ptpImpulse.y;h.m_angularVelocity-=c*((k*this.m_ptpImpulse.y-i*this.m_ptpImpulse.x)+this.m_motorImpulse+this.m_limitImpulse); +g.m_linearVelocity.x+=j*this.m_ptpImpulse.x;g.m_linearVelocity.y+=j*this.m_ptpImpulse.y;g.m_angularVelocity+=b*((e*this.m_ptpImpulse.y-d*this.m_ptpImpulse.x)+this.m_motorImpulse+this.m_limitImpulse)}else{this.m_ptpImpulse.SetZero();this.m_motorImpulse=0;this.m_limitImpulse=0}this.m_limitPositionImpulse=0},SolveVelocityConstraints:function(f){var g=this.m_body1;var e=this.m_body2;var i;i=g.m_R;var o=i.col1.x*this.m_localAnchor1.x+i.col2.x*this.m_localAnchor1.y;var n=i.col1.y*this.m_localAnchor1.x+i.col2.y*this.m_localAnchor1.y;i=e.m_R;var b=i.col1.x*this.m_localAnchor2.x+i.col2.x*this.m_localAnchor2.y;var a=i.col1.y*this.m_localAnchor2.x+i.col2.y*this.m_localAnchor2.y;var k;var q=e.m_linearVelocity.x+(-e.m_angularVelocity*a)-g.m_linearVelocity.x-(-g.m_angularVelocity*n);var p=e.m_linearVelocity.y+(e.m_angularVelocity*b)-g.m_linearVelocity.y-(g.m_angularVelocity*o);var m=-(this.m_ptpMass.col1.x*q+this.m_ptpMass.col2.x*p);var l=-(this.m_ptpMass.col1.y*q+this.m_ptpMass.col2.y*p);this.m_ptpImpulse.x+=m; +this.m_ptpImpulse.y+=l;g.m_linearVelocity.x-=g.m_invMass*m;g.m_linearVelocity.y-=g.m_invMass*l;g.m_angularVelocity-=g.m_invI*(o*l-n*m);e.m_linearVelocity.x+=e.m_invMass*m;e.m_linearVelocity.y+=e.m_invMass*l;e.m_angularVelocity+=e.m_invI*(b*l-a*m);if(this.m_enableMotor&&this.m_limitState!=b2Joint.e_equalLimits){var r=e.m_angularVelocity-g.m_angularVelocity-this.m_motorSpeed;var c=-this.m_motorMass*r;var d=this.m_motorImpulse;this.m_motorImpulse=b2Math.b2Clamp(this.m_motorImpulse+c,-f.dt*this.m_maxMotorTorque,f.dt*this.m_maxMotorTorque);c=this.m_motorImpulse-d;g.m_angularVelocity-=g.m_invI*c;e.m_angularVelocity+=e.m_invI*c}if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){var h=e.m_angularVelocity-g.m_angularVelocity;var j=-this.m_motorMass*h;if(this.m_limitState==b2Joint.e_equalLimits){this.m_limitImpulse+=j}else{if(this.m_limitState==b2Joint.e_atLowerLimit){k=this.m_limitImpulse;this.m_limitImpulse=b2Math.b2Max(this.m_limitImpulse+j,0);j=this.m_limitImpulse-k}else{if(this.m_limitState==b2Joint.e_atUpperLimit){k=this.m_limitImpulse; +this.m_limitImpulse=b2Math.b2Min(this.m_limitImpulse+j,0);j=this.m_limitImpulse-k}}}g.m_angularVelocity-=g.m_invI*j;e.m_angularVelocity+=e.m_invI*j}},SolvePositionConstraints:function(){var s;var m;var l=this.m_body1;var k=this.m_body2;var o=0;var n;n=l.m_R;var y=n.col1.x*this.m_localAnchor1.x+n.col2.x*this.m_localAnchor1.y;var x=n.col1.y*this.m_localAnchor1.x+n.col2.y*this.m_localAnchor1.y;n=k.m_R;var f=n.col1.x*this.m_localAnchor2.x+n.col2.x*this.m_localAnchor2.y;var e=n.col1.y*this.m_localAnchor2.x+n.col2.y*this.m_localAnchor2.y;var u=l.m_position.x+y;var t=l.m_position.y+x;var d=k.m_position.x+f;var c=k.m_position.y+e;var j=d-u;var i=c-t;o=Math.sqrt(j*j+i*i);var q=l.m_invMass;var p=k.m_invMass;var h=l.m_invI;var g=k.m_invI;this.K1.col1.x=q+p;this.K1.col2.x=0;this.K1.col1.y=0;this.K1.col2.y=q+p;this.K2.col1.x=h*x*x;this.K2.col2.x=-h*y*x;this.K2.col1.y=-h*y*x;this.K2.col2.y=h*y*y;this.K3.col1.x=g*e*e;this.K3.col2.x=-g*f*e;this.K3.col1.y=-g*f*e;this.K3.col2.y=g*f*f;this.K.SetM(this.K1); +this.K.AddM(this.K2);this.K.AddM(this.K3);this.K.Solve(b2RevoluteJoint.tImpulse,-j,-i);var b=b2RevoluteJoint.tImpulse.x;var a=b2RevoluteJoint.tImpulse.y;l.m_position.x-=l.m_invMass*b;l.m_position.y-=l.m_invMass*a;l.m_rotation-=l.m_invI*(y*a-x*b);l.m_R.Set(l.m_rotation);k.m_position.x+=k.m_invMass*b;k.m_position.y+=k.m_invMass*a;k.m_rotation+=k.m_invI*(f*a-e*b);k.m_R.Set(k.m_rotation);var w=0;if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){var v=k.m_rotation-l.m_rotation-this.m_intialAngle;var r=0;if(this.m_limitState==b2Joint.e_equalLimits){m=b2Math.b2Clamp(v,-b2Settings.b2_maxAngularCorrection,b2Settings.b2_maxAngularCorrection);r=-this.m_motorMass*m;w=b2Math.b2Abs(m)}else{if(this.m_limitState==b2Joint.e_atLowerLimit){m=v-this.m_lowerAngle;w=b2Math.b2Max(0,-m);m=b2Math.b2Clamp(m+b2Settings.b2_angularSlop,-b2Settings.b2_maxAngularCorrection,0);r=-this.m_motorMass*m;s=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Max(this.m_limitPositionImpulse+r,0); +r=this.m_limitPositionImpulse-s}else{if(this.m_limitState==b2Joint.e_atUpperLimit){m=v-this.m_upperAngle;w=b2Math.b2Max(0,m);m=b2Math.b2Clamp(m-b2Settings.b2_angularSlop,0,b2Settings.b2_maxAngularCorrection);r=-this.m_motorMass*m;s=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Min(this.m_limitPositionImpulse+r,0);r=this.m_limitPositionImpulse-s}}}l.m_rotation-=l.m_invI*r;l.m_R.Set(l.m_rotation);k.m_rotation+=k.m_invI*r;k.m_R.Set(k.m_rotation)}return o<=b2Settings.b2_linearSlop&&w<=b2Settings.b2_angularSlop},m_localAnchor1:new b2Vec2(),m_localAnchor2:new b2Vec2(),m_ptpImpulse:new b2Vec2(),m_motorImpulse:null,m_limitImpulse:null,m_limitPositionImpulse:null,m_ptpMass:new b2Mat22(),m_motorMass:null,m_intialAngle:null,m_lowerAngle:null,m_upperAngle:null,m_maxMotorTorque:null,m_motorSpeed:null,m_enableLimit:null,m_enableMotor:null,m_limitState:0});b2RevoluteJoint.tImpulse=new b2Vec2();var b2RevoluteJointDef=function(){this.type=b2Joint.e_unknownJoint;this.userData=null;this.body1=null;this.body2=null;this.collideConnected=false;this.type=b2Joint.e_revoluteJoint;this.anchorPoint=new b2Vec2(0,0);this.lowerAngle=0;this.upperAngle=0;this.motorTorque=0;this.motorSpeed=0;this.enableLimit=false;this.enableMotor=false};Object.extend(b2RevoluteJointDef.prototype,b2JointDef.prototype);Object.extend(b2RevoluteJointDef.prototype,{anchorPoint:null,lowerAngle:null,upperAngle:null,motorTorque:null,motorSpeed:null,enableLimit:null,enableMotor:null,Initialize:function(b,a,c){this.body1=b;this.body2=a;this.anchorPoint=c}}); \ No newline at end of file diff --git a/examples/example 24 - Box2D Integration/bricks.png b/examples/example 24 - Box2D Integration/bricks.png new file mode 100644 index 0000000..4495016 --- /dev/null +++ b/examples/example 24 - Box2D Integration/bricks.png Binary files differ diff --git a/examples/example 24 - Box2D Integration/bunny.png b/examples/example 24 - Box2D Integration/bunny.png new file mode 100644 index 0000000..79c3167 --- /dev/null +++ b/examples/example 24 - Box2D Integration/bunny.png Binary files differ diff --git a/examples/example 24 - Box2D Integration/grass.png b/examples/example 24 - Box2D Integration/grass.png new file mode 100644 index 0000000..a9dd3a9 --- /dev/null +++ b/examples/example 24 - Box2D Integration/grass.png Binary files differ diff --git a/examples/example 24 - Box2D Integration/box2d.min.js b/examples/example 24 - Box2D Integration/box2d.min.js new file mode 100644 index 0000000..1b579fd --- /dev/null +++ b/examples/example 24 - Box2D Integration/box2d.min.js @@ -0,0 +1,112 @@ +var b2Settings=function(){};b2Settings.prototype={};b2Settings.USHRT_MAX=65535;b2Settings.b2_pi=Math.PI;b2Settings.b2_massUnitsPerKilogram=1;b2Settings.b2_timeUnitsPerSecond=1;b2Settings.b2_lengthUnitsPerMeter=30;b2Settings.b2_maxManifoldPoints=2;b2Settings.b2_maxShapesPerBody=64;b2Settings.b2_maxPolyVertices=8;b2Settings.b2_maxProxies=1024;b2Settings.b2_maxPairs=8*b2Settings.b2_maxProxies;b2Settings.b2_linearSlop=0.005*b2Settings.b2_lengthUnitsPerMeter;b2Settings.b2_angularSlop=2/180*b2Settings.b2_pi;b2Settings.b2_velocityThreshold=1*b2Settings.b2_lengthUnitsPerMeter/b2Settings.b2_timeUnitsPerSecond;b2Settings.b2_maxLinearCorrection=0.2*b2Settings.b2_lengthUnitsPerMeter;b2Settings.b2_maxAngularCorrection=8/180*b2Settings.b2_pi;b2Settings.b2_contactBaumgarte=0.2;b2Settings.b2_timeToSleep=0.5*b2Settings.b2_timeUnitsPerSecond;b2Settings.b2_linearSleepTolerance=0.01*b2Settings.b2_lengthUnitsPerMeter/b2Settings.b2_timeUnitsPerSecond;b2Settings.b2_angularSleepTolerance=2/180/b2Settings.b2_timeUnitsPerSecond; +b2Settings.b2Assert=function(b){if(!b){var c;c.x++}};Object.extend=function(a,c){for(var b in c){a[b]=c[b]}return a};var b2Vec2=function(a,b){this.x=a;this.y=b};b2Vec2.prototype={SetZero:function(){this.x=0;this.y=0},Set:function(a,b){this.x=a;this.y=b},SetV:function(a){this.x=a.x;this.y=a.y},Negative:function(){return new b2Vec2(-this.x,-this.y)},Copy:function(){return new b2Vec2(this.x,this.y)},Add:function(a){this.x+=a.x;this.y+=a.y},Subtract:function(a){this.x-=a.x;this.y-=a.y},Multiply:function(b){this.x*=b;this.y*=b},MulM:function(b){var a=this.x;this.x=b.col1.x*a+b.col2.x*this.y;this.y=b.col1.y*a+b.col2.y*this.y},MulTM:function(b){var a=b2Math.b2Dot(this,b.col1);this.y=b2Math.b2Dot(this,b.col2);this.x=a},CrossVF:function(b){var a=this.x;this.x=b*this.y;this.y=-b*a},CrossFV:function(b){var a=this.x;this.x=-b*this.y;this.y=b*a},MinV:function(a){this.x=this.xa.x?this.x:a.x;this.y=this.y>a.y?this.y:a.y},Abs:function(){this.x=Math.abs(this.x);this.y=Math.abs(this.y)},Length:function(){return Math.sqrt(this.x*this.x+this.y*this.y) +},Normalize:function(){var b=this.Length();if(b0?b:-b};b2Math.b2AbsV=function(d){var c=new b2Vec2(b2Math.b2Abs(d.x),b2Math.b2Abs(d.y));return c};b2Math.b2AbsM=function(a){var b=new b2Mat22(0,b2Math.b2AbsV(a.col1),b2Math.b2AbsV(a.col2));return b};b2Math.b2Min=function(d,c){return dc?d:c};b2Math.b2MaxV=function(e,d){var f=new b2Vec2(b2Math.b2Max(e.x,d.x),b2Math.b2Max(e.y,d.y));return f};b2Math.b2Clamp=function(c,b,d){return b2Math.b2Max(b,b2Math.b2Min(c,d))};b2Math.b2ClampV=function(c,b,d){return b2Math.b2MaxV(b,b2Math.b2MinV(c,d))};b2Math.b2Swap=function(d,c){var e=d[0];d[0]=c[0];c[0]=e};b2Math.b2Random=function(){return Math.random()*2-1};b2Math.b2NextPowerOfTwo=function(a){a|=(a>>1)&2147483647;a|=(a>>2)&1073741823;a|=(a>>4)&268435455;a|=(a>>8)&16777215; +a|=(a>>16)&65535;return a+1};b2Math.b2IsPowerOfTwo=function(b){var a=b>0&&(b&(b-1))==0;return a};b2Math.tempVec2=new b2Vec2();b2Math.tempVec3=new b2Vec2();b2Math.tempVec4=new b2Vec2();b2Math.tempVec5=new b2Vec2();b2Math.tempMat=new b2Mat22();var b2AABB=function(){this.minVertex=new b2Vec2();this.maxVertex=new b2Vec2()};b2AABB.prototype={IsValid:function(){var b=this.maxVertex.x;var a=this.maxVertex.y;b=this.maxVertex.x;a=this.maxVertex.y;b-=this.minVertex.x;a-=this.minVertex.y;var c=b>=0&&a>=0;c=c&&this.minVertex.IsValid()&&this.maxVertex.IsValid();return c},minVertex:new b2Vec2(),maxVertex:new b2Vec2()};var b2Bound=function(){};b2Bound.prototype={IsLower:function(){return(this.value&1)==0},IsUpper:function(){return(this.value&1)==1},Swap:function(c){var e=this.value;var d=this.proxyId;var a=this.stabbingCount;this.value=c.value;this.proxyId=c.proxyId;this.stabbingCount=c.stabbingCount;c.value=e;c.proxyId=d;c.stabbingCount=a},value:0,proxyId:0,stabbingCount:0};var b2BoundValues=function(){this.lowerValues=[0,0];this.upperValues=[0,0]};b2BoundValues.prototype={lowerValues:[0,0],upperValues:[0,0]};var b2Pair=function(){};b2Pair.prototype={SetBuffered:function(){this.status|=b2Pair.e_pairBuffered},ClearBuffered:function(){this.status&=~b2Pair.e_pairBuffered},IsBuffered:function(){return(this.status&b2Pair.e_pairBuffered)==b2Pair.e_pairBuffered},SetRemoved:function(){this.status|=b2Pair.e_pairRemoved},ClearRemoved:function(){this.status&=~b2Pair.e_pairRemoved},IsRemoved:function(){return(this.status&b2Pair.e_pairRemoved)==b2Pair.e_pairRemoved},SetFinal:function(){this.status|=b2Pair.e_pairFinal},IsFinal:function(){return(this.status&b2Pair.e_pairFinal)==b2Pair.e_pairFinal},userData:null,proxyId1:0,proxyId2:0,next:0,status:0};b2Pair.b2_nullPair=b2Settings.USHRT_MAX;b2Pair.b2_nullProxy=b2Settings.USHRT_MAX;b2Pair.b2_tableCapacity=b2Settings.b2_maxPairs;b2Pair.b2_tableMask=b2Pair.b2_tableCapacity-1;b2Pair.e_pairBuffered=1;b2Pair.e_pairRemoved=2;b2Pair.e_pairFinal=4;var b2PairCallback=function(){};b2PairCallback.prototype={PairAdded:function(b,a){return null},PairRemoved:function(c,b,a){}};var b2BufferedPair=function(){};b2BufferedPair.prototype={proxyId1:0,proxyId2:0};var b2PairManager=function(){var a=0;this.m_hashTable=new Array(b2Pair.b2_tableCapacity);for(a=0;aa){var c=b;b=a;a=c}var d=b2PairManager.Hash(b,a)&b2Pair.b2_tableMask;var f=f=this.FindHash(b,a,d);if(f!=null){return f}var e=this.m_freePair;f=this.m_pairs[e];this.m_freePair=f.next;f.proxyId1=b;f.proxyId2=a;f.status=0;f.userData=null;f.next=this.m_hashTable[d];this.m_hashTable[d]=e;++this.m_pairCount;return f},RemovePair:function(g,f){if(g>f){var i=g;g=f;f=i}var d=b2PairManager.Hash(g,f)&b2Pair.b2_tableMask;var b=this.m_hashTable[d];var h=null;while(b!=b2Pair.b2_nullPair){if(b2PairManager.Equals(this.m_pairs[b],g,f)){var e=b;if(h){h.next=this.m_pairs[b].next}else{this.m_hashTable[d]=this.m_pairs[b].next}var c=this.m_pairs[e];var a=c.userData;c.next=this.m_freePair;c.proxyId1=b2Pair.b2_nullProxy;c.proxyId2=b2Pair.b2_nullProxy;c.userData=null;c.status=0;this.m_freePair=e;--this.m_pairCount;return a}else{h=this.m_pairs[b];b=h.next}}return null},Find:function(b,a){if(b>a){var c=b;b=a;a=c +}var d=b2PairManager.Hash(b,a)&b2Pair.b2_tableMask;return this.FindHash(b,a,d)},FindHash:function(b,a,d){var c=this.m_hashTable[d];while(c!=b2Pair.b2_nullPair&&b2PairManager.Equals(this.m_pairs[c],b,a)==false){c=this.m_pairs[c].next}if(c==b2Pair.b2_nullPair){return null}return this.m_pairs[c]},ValidateBuffer:function(){},ValidateTable:function(){},m_broadPhase:null,m_callback:null,m_pairs:null,m_freePair:0,m_pairCount:0,m_pairBuffer:null,m_pairBufferCount:0,m_hashTable:null};b2PairManager.Hash=function(b,a){var c=((a<<16)&4294901760)|b;c=~c+((c<<15)&4294934528);c=c^((c>>12)&1048575);c=c+((c<<2)&4294967292);c=c^((c>>4)&268435455);c=c*2057;c=c^((c>>16)&65535);return c};b2PairManager.Equals=function(c,b,a){return(c.proxyId1==b&&c.proxyId2==a)};b2PairManager.EqualsPair=function(b,a){return b.proxyId1==a.proxyId1&&b.proxyId2==a.proxyId2};var b2BroadPhase=function(f,g){this.m_pairManager=new b2PairManager();this.m_proxyPool=new Array(b2Settings.b2_maxPairs);this.m_bounds=new Array(2*b2Settings.b2_maxProxies);this.m_queryResults=new Array(b2Settings.b2_maxProxies);this.m_quantizationFactor=new b2Vec2();var d=0;this.m_pairManager.Initialize(this,g);this.m_worldAABB=f;this.m_proxyCount=0;for(d=0;d0&&t0){g=m;while(g0){g=k;while(g0&&bb[c.upperBounds[a]].value){return false}if(b[d.upperBounds[a]].valued[e.upperBounds[c]].value){return false}if(a.upperValues[c]0){var g=c-1;var n=a[g].stabbingCount;while(n){if(a[g].IsLower()){var k=this.m_proxyPool[a[g].proxyId];if(c<=k.upperBounds[b]){this.IncrementOverlapCount(a[g].proxyId);--n}}--g}}h[0]=c;d[0]=l},IncrementOverlapCount:function(b){var a=this.m_proxyPool[b];if(a.timeStampf){e=b-1}else{if(d[b].value0){f[c].id=b[0].id}else{f[c].id=b[1].id}++c}return c};b2Collision.EdgeSeparation=function(p,q,o){var f=p.m_vertices;var g=o.m_vertexCount;var r=o.m_vertices;var e=p.m_normals[q].x;var d=p.m_normals[q].y;var s=e;var l=p.m_R;e=l.col1.x*s+l.col2.x*d;d=l.col1.y*s+l.col2.y*d;var v=e;var u=d;l=o.m_R;s=v*l.col1.x+u*l.col1.y;u=v*l.col2.x+u*l.col2.y;v=s;var n=0;var m=Number.MAX_VALUE;for(var w=0;wa){a=o;h=p}}var n=b2Collision.EdgeSeparation(m,h,l);if(n>0&&w==false){return n}var g=h-1>=0?h-1:j-1;var t=b2Collision.EdgeSeparation(m,g,l);if(t>0&&w==false){return t}var q=h+10&&w==false){return u}var b=0;var k;var v=0;if(t>n&&t>u){v=-1;b=g;k=t}else{if(u>n){v=1;b=q;k=u}else{r[0]=h;return n}}while(true){if(v==-1){h=b-1>=0?b-1:j-1}else{h=b+10&&w==false){return n}if(n>k){b=h;k=n}else{break}}r[0]=b;return k};b2Collision.FindIncidentEdge=function(D,p,q,n){var h=p.m_vertexCount;var f=p.m_vertices;var g=n.m_vertexCount;var s=n.m_vertices;var a=q; +var F=q+1==h?0:q+1;var e=f[F];var C=e.x;var A=e.y;e=f[a];C-=e.x;A-=e.y;var v=C;C=A;A=-v;var E=1/Math.sqrt(C*C+A*A);C*=E;A*=E;var r=C;var o=A;v=r;var l=p.m_R;r=l.col1.x*v+l.col2.x*o;o=l.col1.y*v+l.col2.y*o;var d=r;var b=o;l=n.m_R;v=d*l.col1.x+b*l.col1.y;b=d*l.col2.x+b*l.col2.y;d=v;var k=0;var j=0;var m=Number.MAX_VALUE;for(var B=0;B0&&b==false){return +}var K=0;var g=[K];var E=b2Collision.FindMaxSeparation(g,j,k,b);K=g[0];if(E>0&&b==false){return}var p;var o;var a=0;var R=0;var d=0.98;var O=0.001;if(E>d*F+O){p=j;o=k;a=K;R=1}else{p=k;o=j;a=M;R=0}var c=[new ClipVertex(),new ClipVertex()];b2Collision.FindIncidentEdge(c,p,a,o);var B=p.m_vertexCount;var q=p.m_vertices;var I=q[a];var H=a+1l*l&&b==false){return}var d;if(mg){return}if(t>o){o=t;B=A}}if(og){return}x.pointCount=1;x.normal.Set(n.col1.x*e+n.col2.x*d,n.col1.y*e+n.col2.y*d);h=x.points[0];h.id.features.incidentEdge=b2Collision.b2_nullFeature;h.id.features.incidentVertex=b;h.id.features.referenceFace=b2Collision.b2_nullFeature;h.id.features.flip=0;h.position.x=k.m_position.x-g*x.normal.x;h.position.y=k.m_position.y-g*x.normal.y;h.separation=w-g;return}var q=(z-m.m_vertices[b].x)*r+(y-m.m_vertices[b].y)*p;h=x.points[0];h.id.features.incidentEdge=b2Collision.b2_nullFeature;h.id.features.incidentVertex=b2Collision.b2_nullFeature;h.id.features.referenceFace=b2Collision.b2_nullFeature;h.id.features.flip=0;var l,j;if(q<=0){l=m.m_vertices[b].x;j=m.m_vertices[b].y;h.id.features.incidentVertex=b}else{if(q>=f){l=m.m_vertices[a].x;j=m.m_vertices[a].y;h.id.features.incidentVertex=a}else{l=r*q+m.m_vertices[b].x;j=p*q+m.m_vertices[b].y;h.id.features.incidentEdge=b}}e=z-l;d=y-j;w=Math.sqrt(e*e+d*d);e/=w;d/=w;if(w>g){return}x.pointCount=1;x.normal.Set(n.col1.x*e+n.col2.x*d,n.col1.y*e+n.col2.y*d); +h.position.x=k.m_position.x-g*x.normal.x;h.position.y=k.m_position.y-g*x.normal.y;h.separation=w-g};b2Collision.b2TestOverlap=function(d,c){var i=c.minVertex;var g=d.maxVertex;var f=i.x-g.x;var e=i.y-g.y;i=d.minVertex;g=c.maxVertex;var j=i.x-g.x;var h=i.y-g.y;if(f>0||e>0){return false}if(j>0||h>0){return false}return true};var Features=function(){};Features.prototype={set_referenceFace:function(a){this._referenceFace=a;this._m_id._key=(this._m_id._key&4294967040)|(this._referenceFace&255)},get_referenceFace:function(){return this._referenceFace},_referenceFace:0,set_incidentEdge:function(a){this._incidentEdge=a;this._m_id._key=(this._m_id._key&4294902015)|((this._incidentEdge<<8)&65280)},get_incidentEdge:function(){return this._incidentEdge},_incidentEdge:0,set_incidentVertex:function(a){this._incidentVertex=a;this._m_id._key=(this._m_id._key&4278255615)|((this._incidentVertex<<16)&16711680)},get_incidentVertex:function(){return this._incidentVertex},_incidentVertex:0,set_flip:function(a){this._flip=a;this._m_id._key=(this._m_id._key&16777215)|((this._flip<<24)&4278190080)},get_flip:function(){return this._flip},_flip:0,_m_id:null};var b2ContactID=function(){this.features=new Features();this.features._m_id=this};b2ContactID.prototype={Set:function(a){this.set_key(a._key)},Copy:function(){var a=new b2ContactID();a.set_key(this._key);return a},get_key:function(){return this._key},set_key:function(a){this._key=a;this.features._referenceFace=this._key&255;this.features._incidentEdge=((this._key&65280)>>8)&255;this.features._incidentVertex=((this._key&16711680)>>16)&255;this.features._flip=((this._key&4278190080)>>24)&255},features:new Features(),_key:0};var b2ContactPoint=function(){this.position=new b2Vec2();this.id=new b2ContactID()};b2ContactPoint.prototype={position:new b2Vec2(),separation:null,normalImpulse:null,tangentImpulse:null,id:new b2ContactID()};var b2Distance=function(){};b2Distance.prototype={};b2Distance.ProcessTwo=function(j,h,b,k,i){var f=-i[1].x;var e=-i[1].y;var d=i[0].x-i[1].x;var c=i[0].y-i[1].y;var a=Math.sqrt(d*d+c*c);d/=a;c/=a;var g=f*d+e*c;if(g<=0||a=0&&F>=0){var B=x/(x+F);q.x=m[1].x+B*(m[2].x-m[1].x);q.y=m[1].y+B*(m[2].y-m[1].y);D.x=C[1].x+B*(C[2].x-C[1].x); +D.y=C[1].y+B*(C[2].y-C[1].y);m[0].SetV(m[2]);C[0].SetV(C[2]);G[0].SetV(G[2]);return 2}var f=E*(J*h-I*k);if(f<=0&&j>=0&&o>=0){var B=j/(j+o);q.x=m[0].x+B*(m[2].x-m[0].x);q.y=m[0].y+B*(m[2].y-m[0].y);D.x=C[0].x+B*(C[2].x-C[0].x);D.y=C[0].y+B*(C[2].y-C[0].y);m[1].SetV(m[2]);C[1].SetV(C[2]);G[1].SetV(G[2]);return 2}var d=g+f+e;d=1/d;var A=g*d;var t=f*d;var p=1-A-t;q.x=A*m[0].x+t*m[1].x+p*m[2].x;q.y=A*m[0].y+t*m[1].y+p*m[2].y;D.x=A*C[0].x+t*C[1].x+p*C[2].x;D.y=A*C[0].y+t*C[1].y+p*C[2].y;return 3};b2Distance.InPoinsts=function(a,c,d){for(var b=0;bNumber.MIN_VALUE){D*=1/d;C*=1/d}this.m_coreVertices[w].x=this.m_vertices[w].x-2*b2Settings.b2_linearSlop*D;this.m_coreVertices[w].y=this.m_vertices[w].y-2*b2Settings.b2_linearSlop*C}}var y=Number.MAX_VALUE;var x=Number.MAX_VALUE;var m=-Number.MAX_VALUE;var l=-Number.MAX_VALUE;this.m_maxRadius=0;for(w=0;w0){return false}}return true},syncAABB:new b2AABB(),syncMat:new b2Mat22(),Synchronize:function(c,e,a,b){this.m_R.SetM(b); +this.m_position.x=this.m_body.m_position.x+(b.col1.x*this.m_localCentroid.x+b.col2.x*this.m_localCentroid.y);this.m_position.y=this.m_body.m_position.y+(b.col1.y*this.m_localCentroid.x+b.col2.y*this.m_localCentroid.y);if(this.m_proxyId==b2Pair.b2_nullProxy){return}var m;var l;var k=e.col1;var j=e.col2;var i=this.m_localOBB.R.col1;var h=this.m_localOBB.R.col2;this.syncMat.col1.x=k.x*i.x+j.x*i.y;this.syncMat.col1.y=k.y*i.x+j.y*i.y;this.syncMat.col2.x=k.x*h.x+j.x*h.y;this.syncMat.col2.y=k.y*h.x+j.y*h.y;this.syncMat.Abs();m=this.m_localCentroid.x+this.m_localOBB.center.x;l=this.m_localCentroid.y+this.m_localOBB.center.y;var f=c.x+(e.col1.x*m+e.col2.x*l);var d=c.y+(e.col1.y*m+e.col2.y*l);m=this.syncMat.col1.x*this.m_localOBB.extents.x+this.syncMat.col2.x*this.m_localOBB.extents.y;l=this.syncMat.col1.y*this.m_localOBB.extents.x+this.syncMat.col2.y*this.m_localOBB.extents.y;this.syncAABB.minVertex.x=f-m;this.syncAABB.minVertex.y=d-l;this.syncAABB.maxVertex.x=f+m;this.syncAABB.maxVertex.y=d+l;k=b.col1; +j=b.col2;i=this.m_localOBB.R.col1;h=this.m_localOBB.R.col2;this.syncMat.col1.x=k.x*i.x+j.x*i.y;this.syncMat.col1.y=k.y*i.x+j.y*i.y;this.syncMat.col2.x=k.x*h.x+j.x*h.y;this.syncMat.col2.y=k.y*h.x+j.y*h.y;this.syncMat.Abs();m=this.m_localCentroid.x+this.m_localOBB.center.x;l=this.m_localCentroid.y+this.m_localOBB.center.y;f=a.x+(b.col1.x*m+b.col2.x*l);d=a.y+(b.col1.y*m+b.col2.y*l);m=this.syncMat.col1.x*this.m_localOBB.extents.x+this.syncMat.col2.x*this.m_localOBB.extents.y;l=this.syncMat.col1.y*this.m_localOBB.extents.x+this.syncMat.col2.y*this.m_localOBB.extents.y;this.syncAABB.minVertex.x=Math.min(this.syncAABB.minVertex.x,f-m);this.syncAABB.minVertex.y=Math.min(this.syncAABB.minVertex.y,d-l);this.syncAABB.maxVertex.x=Math.max(this.syncAABB.maxVertex.x,f+m);this.syncAABB.maxVertex.y=Math.max(this.syncAABB.maxVertex.y,d+l);var g=this.m_body.m_world.m_broadPhase;if(g.InRange(this.syncAABB)){g.MoveProxy(this.m_proxyId,this.syncAABB)}else{this.m_body.Freeze()}},QuickSync:function(a,b){this.m_R.SetM(b); +this.m_position.x=a.x+(b.col1.x*this.m_localCentroid.x+b.col2.x*this.m_localCentroid.y);this.m_position.y=a.y+(b.col1.y*this.m_localCentroid.x+b.col2.y*this.m_localCentroid.y)},ResetProxy:function(b){if(this.m_proxyId==b2Pair.b2_nullProxy){return}var e=b.GetProxy(this.m_proxyId);b.DestroyProxy(this.m_proxyId);e=null;var g=b2Math.b2MulMM(this.m_R,this.m_localOBB.R);var d=b2Math.b2AbsM(g);var f=b2Math.b2MulMV(d,this.m_localOBB.extents);var a=b2Math.b2MulMV(this.m_R,this.m_localOBB.center);a.Add(this.m_position);var c=new b2AABB();c.minVertex.SetV(a);c.minVertex.Subtract(f);c.maxVertex.SetV(a);c.maxVertex.Add(f);if(b.InRange(c)){this.m_proxyId=b.CreateProxy(c,this)}else{this.m_proxyId=b2Pair.b2_nullProxy}if(this.m_proxyId==b2Pair.b2_nullProxy){this.m_body.Freeze()}},Support:function(c,a,b){var g=(c*this.m_R.col1.x+a*this.m_R.col1.y);var f=(c*this.m_R.col2.x+a*this.m_R.col2.y);var e=0;var j=(this.m_coreVertices[0].x*g+this.m_coreVertices[0].y*f);for(var d=1;dj){e=d;j=h}}b.Set(this.m_position.x+(this.m_R.col1.x*this.m_coreVertices[e].x+this.m_R.col2.x*this.m_coreVertices[e].y),this.m_position.y+(this.m_R.col1.y*this.m_coreVertices[e].x+this.m_R.col2.y*this.m_coreVertices[e].y))},m_localCentroid:new b2Vec2(),m_localOBB:new b2OBB(),m_vertices:null,m_coreVertices:null,m_vertexCount:0,m_normals:null});b2PolyShape.tempVec=new b2Vec2();b2PolyShape.tAbsR=new b2Mat22();var b2Body=function(f,e){this.sMat0=new b2Mat22();this.m_position=new b2Vec2();this.m_R=new b2Mat22(0);this.m_position0=new b2Vec2();var c=0;var g;var a;this.m_flags=0;this.m_position.SetV(f.position);this.m_rotation=f.rotation;this.m_R.Set(this.m_rotation);this.m_position0.SetV(this.m_position);this.m_rotation0=this.m_rotation;this.m_world=e;this.m_linearDamping=b2Math.b2Clamp(1-f.linearDamping,0,1);this.m_angularDamping=b2Math.b2Clamp(1-f.angularDamping,0,1);this.m_force=new b2Vec2(0,0);this.m_torque=0;this.m_mass=0;var h=new Array(b2Settings.b2_maxShapesPerBody);for(c=0;c0){this.m_center.Multiply(1/this.m_mass);this.m_position.Add(b2Math.b2MulMV(this.m_R,this.m_center)) +}else{this.m_flags|=b2Body.e_staticFlag}this.m_I=0;for(c=0;c0){this.m_invMass=1/this.m_mass}else{this.m_invMass=0}if(this.m_I>0&&f.preventRotation==false){this.m_invI=1/this.m_I}else{this.m_I=0;this.m_invI=0}this.m_linearVelocity=b2Math.AddVV(f.linearVelocity,b2Math.b2CrossFV(f.angularVelocity,this.m_center));this.m_angularVelocity=f.angularVelocity;this.m_jointList=null;this.m_contactList=null;this.m_prev=null;this.m_next=null;this.m_shapeList=null;for(c=0;c0}var c=(b.m_maskBits&a.m_categoryBits)!=0&&(b.m_categoryBits&a.m_maskBits)!=0;return c}};b2CollisionFilter.b2_defaultFilter=new b2CollisionFilter;var b2Island=function(e,d,c,a){var b=0;this.m_bodyCapacity=e;this.m_contactCapacity=d;this.m_jointCapacity=c;this.m_bodyCount=0;this.m_contactCount=0;this.m_jointCount=0;this.m_bodies=new Array(e);for(b=0;bc||b2Math.b2Dot(a.m_linearVelocity,a.m_linearVelocity)>d){a.m_sleepTime=0;e=0}else{a.m_sleepTime+=g;e=b2Math.b2Min(e,a.m_sleepTime)}}if(e>=b2Settings.b2_timeToSleep){for(f=0;f0){a.m_shape1.m_body.WakeUp();a.m_shape2.m_body.WakeUp()}var d=a.m_shape1.m_type;var b=a.m_shape2.m_type;var e=b2Contact.s_registers[d][b].destroyFcn;e(a,c)};b2Contact.s_registers=null;b2Contact.s_initialized=false;var b2ContactConstraint=function(){this.normal=new b2Vec2();this.points=new Array(b2Settings.b2_maxManifoldPoints);for(var a=0;a0){b.velocityBias=-60*b.separation}var h=f+(-F*C)-u-(-G*Q);var g=d+(F*D)-s-(G*S);var P=V.normal.x*h+V.normal.y*g;if(P<-b2Settings.b2_velocityThreshold){b.velocityBias+=-V.restitution*P}}++L}}};b2ContactSolver.prototype={PreSolve:function(){var b;var A;var r;for(var w=0;w=-b2Settings.b2_linearSlop},PostSolve:function(){for(var d=0;d0){this.m_manifoldCount=1 +}else{this.m_manifoldCount=0}},GetManifolds:function(){return this.m_manifold},m_manifold:[new b2Manifold()]});b2CircleContact.Create=function(b,a,c){return new b2CircleContact(b,a)};b2CircleContact.Destroy=function(a,b){};var b2Conservative=function(){};b2Conservative.prototype={};b2Conservative.R1=new b2Mat22();b2Conservative.R2=new b2Mat22();b2Conservative.x1=new b2Vec2();b2Conservative.x2=new b2Vec2();b2Conservative.Conservative=function(k,j){var i=k.GetBody();var h=j.GetBody();var s=i.m_position.x-i.m_position0.x;var q=i.m_position.y-i.m_position0.y;var H=i.m_rotation-i.m_rotation0;var b=h.m_position.x-h.m_position0.x;var a=h.m_position.y-h.m_position0.y;var F=h.m_rotation-h.m_rotation0;var m=k.GetMaxRadius();var l=j.GetMaxRadius();var I=i.m_position0.x;var D=i.m_position0.y;var z=i.m_rotation0;var E=h.m_position0.x;var C=h.m_position0.y;var n=h.m_rotation0;var e=I;var c=D;var J=z;var B=E;var A=C;var G=n;b2Conservative.R1.Set(J);b2Conservative.R2.Set(G);k.QuickSync(p1,b2Conservative.R1);j.QuickSync(p2,b2Conservative.R2);var L=0;var o=10;var u;var t;var y=0;var v=true;for(var w=0;wFLT_EPSILON){d*=b2_linearSlop/p}if(i.IsStatic()){i.m_position.x=e;i.m_position.y=c}else{i.m_position.x=e-u;i.m_position.y=c-t}i.m_rotation=J;i.m_R.Set(J);i.QuickSyncShapes();if(h.IsStatic()){h.m_position.x=B;h.m_position.y=A}else{h.m_position.x=B+u;h.m_position.y=A+t}h.m_position.x=B+u;h.m_position.y=A+t;h.m_rotation=G;h.m_R.Set(G);h.QuickSyncShapes();return true +}k.QuickSync(i.m_position,i.m_R);j.QuickSync(h.m_position,h.m_R);return false};var b2NullContact=function(b,a){this.m_node1=new b2ContactNode();this.m_node2=new b2ContactNode();this.m_flags=0;if(!b||!a){this.m_shape1=null;this.m_shape2=null;return}this.m_shape1=b;this.m_shape2=a;this.m_manifoldCount=0;this.m_friction=Math.sqrt(this.m_shape1.m_friction*this.m_shape2.m_friction);this.m_restitution=b2Math.b2Max(this.m_shape1.m_restitution,this.m_shape2.m_restitution);this.m_prev=null;this.m_next=null;this.m_node1.contact=null;this.m_node1.prev=null;this.m_node1.next=null;this.m_node1.other=null;this.m_node2.contact=null;this.m_node2.prev=null;this.m_node2.next=null;this.m_node2.other=null};Object.extend(b2NullContact.prototype,b2Contact.prototype);Object.extend(b2NullContact.prototype,{Evaluate:function(){},GetManifolds:function(){return null}});var b2PolyAndCircleContact=function(b,a){this.m_node1=new b2ContactNode();this.m_node2=new b2ContactNode();this.m_flags=0;if(!b||!a){this.m_shape1=null;this.m_shape2=null;return}this.m_shape1=b;this.m_shape2=a;this.m_manifoldCount=0;this.m_friction=Math.sqrt(this.m_shape1.m_friction*this.m_shape2.m_friction);this.m_restitution=b2Math.b2Max(this.m_shape1.m_restitution,this.m_shape2.m_restitution);this.m_prev=null;this.m_next=null;this.m_node1.contact=null;this.m_node1.prev=null;this.m_node1.next=null;this.m_node1.other=null;this.m_node2.contact=null;this.m_node2.prev=null;this.m_node2.next=null;this.m_node2.other=null;this.m_manifold=[new b2Manifold()];b2Settings.b2Assert(this.m_shape1.m_type==b2Shape.e_polyShape);b2Settings.b2Assert(this.m_shape2.m_type==b2Shape.e_circleShape);this.m_manifold[0].pointCount=0;this.m_manifold[0].points[0].normalImpulse=0;this.m_manifold[0].points[0].tangentImpulse=0};Object.extend(b2PolyAndCircleContact.prototype,b2Contact.prototype);Object.extend(b2PolyAndCircleContact.prototype,{Evaluate:function(){b2Collision.b2CollidePolyAndCircle(this.m_manifold[0],this.m_shape1,this.m_shape2,false); +if(this.m_manifold[0].pointCount>0){this.m_manifoldCount=1}else{this.m_manifoldCount=0}},GetManifolds:function(){return this.m_manifold},m_manifold:[new b2Manifold()]});b2PolyAndCircleContact.Create=function(b,a,c){return new b2PolyAndCircleContact(b,a)};b2PolyAndCircleContact.Destroy=function(a,b){};var b2PolyContact=function(b,a){this.m_node1=new b2ContactNode();this.m_node2=new b2ContactNode();this.m_flags=0;if(!b||!a){this.m_shape1=null;this.m_shape2=null;return}this.m_shape1=b;this.m_shape2=a;this.m_manifoldCount=0;this.m_friction=Math.sqrt(this.m_shape1.m_friction*this.m_shape2.m_friction);this.m_restitution=b2Math.b2Max(this.m_shape1.m_restitution,this.m_shape2.m_restitution);this.m_prev=null;this.m_next=null;this.m_node1.contact=null;this.m_node1.prev=null;this.m_node1.next=null;this.m_node1.other=null;this.m_node2.contact=null;this.m_node2.prev=null;this.m_node2.next=null;this.m_node2.other=null;this.m0=new b2Manifold();this.m_manifold=[new b2Manifold()];this.m_manifold[0].pointCount=0};Object.extend(b2PolyContact.prototype,b2Contact.prototype);Object.extend(b2PolyContact.prototype,{m0:new b2Manifold(),Evaluate:function(){var a=this.m_manifold[0];var b=this.m0.points;for(var d=0;d0){var h=[false,false];for(var f=0;f0){var e=f.m_shape1.m_body;var d=f.m_shape2.m_body;var b=f.m_node1;var a=f.m_node2;e.WakeUp();d.WakeUp();if(b.prev){b.prev.next=b.next}if(b.next){b.next.prev=b.prev}if(b==e.m_contactList){e.m_contactList=b.next}b.prev=null;b.next=null;if(a.prev){a.prev.next=a.next}if(a.next){a.next.prev=a.prev}if(a==d.m_contactList){d.m_contactList=a.next}a.prev=null;a.next=null}b2Contact.Destroy(f,this.m_world.m_blockAllocator);--this.m_world.m_contactCount},CleanContactList:function(){var b=this.m_world.m_contactList;while(b!=null){var a=b;b=b.m_next;if(a.m_flags&b2Contact.e_destroyFlag){this.DestroyContact(a);a=null}}},Collide:function(){var f;var e;var d;var a;for(var h=this.m_world.m_contactList;h!=null;h=h.m_next){if(h.m_shape1.m_body.IsSleeping()&&h.m_shape2.m_body.IsSleeping()){continue +}var b=h.GetManifoldCount();h.Evaluate();var g=h.GetManifoldCount();if(b==0&&g>0){f=h.m_shape1.m_body;e=h.m_shape2.m_body;d=h.m_node1;a=h.m_node2;d.contact=h;d.other=e;d.prev=null;d.next=f.m_contactList;if(d.next!=null){d.next.prev=h.m_node1}f.m_contactList=h.m_node1;a.contact=h;a.other=f;a.prev=null;a.next=e.m_contactList;if(a.next!=null){a.next.prev=a}e.m_contactList=a}else{if(b>0&&g==0){f=h.m_shape1.m_body;e=h.m_shape2.m_body;d=h.m_node1;a=h.m_node2;if(d.prev){d.prev.next=d.next}if(d.next){d.next.prev=d.prev}if(d==f.m_contactList){f.m_contactList=d.next}d.prev=null;d.next=null;if(a.prev){a.prev.next=a.next}if(a.next){a.next.prev=a.prev}if(a==e.m_contactList){e.m_contactList=a.next}a.prev=null;a.next=null}}}},m_world:null,m_nullContact:new b2NullContact(),m_destroyImmediate:null});var b2World=function(a,d,c){this.step=new b2TimeStep();this.m_contactManager=new b2ContactManager();this.m_listener=null;this.m_filter=b2CollisionFilter.b2_defaultFilter;this.m_bodyList=null;this.m_contactList=null;this.m_jointList=null;this.m_bodyCount=0;this.m_contactCount=0;this.m_jointCount=0;this.m_bodyDestroyList=null;this.m_allowSleep=c;this.m_gravity=d;this.m_contactManager.m_world=this;this.m_broadPhase=new b2BroadPhase(a,this.m_contactManager);var b=new b2BodyDef();this.m_groundBody=this.CreateBody(b)};b2World.prototype={SetListener:function(a){this.m_listener=a},SetFilter:function(a){this.m_filter=a},CreateBody:function(c){var a=new b2Body(c,this);a.m_prev=null;a.m_next=this.m_bodyList;if(this.m_bodyList){this.m_bodyList.m_prev=a}this.m_bodyList=a;++this.m_bodyCount;return a},DestroyBody:function(a){if(a.m_flags&b2Body.e_destroyFlag){return}if(a.m_prev){a.m_prev.m_next=a.m_next}if(a.m_next){a.m_next.m_prev=a.m_prev}if(a==this.m_bodyList){this.m_bodyList=a.m_next}a.m_flags|=b2Body.e_destroyFlag; +--this.m_bodyCount;a.m_prev=null;a.m_next=this.m_bodyDestroyList;this.m_bodyDestroyList=a},CleanBodyList:function(){this.m_contactManager.m_destroyImmediate=true;var c=this.m_bodyDestroyList;while(c){var e=c;c=c.m_next;var d=e.m_jointList;while(d){var a=d;d=d.next;if(this.m_listener){this.m_listener.NotifyJointDestroyed(a.joint)}this.DestroyJoint(a.joint)}e.Destroy()}this.m_bodyDestroyList=null;this.m_contactManager.m_destroyImmediate=false},CreateJoint:function(e){var c=b2Joint.Create(e,this.m_blockAllocator);c.m_prev=null;c.m_next=this.m_jointList;if(this.m_jointList){this.m_jointList.m_prev=c}this.m_jointList=c;++this.m_jointCount;c.m_node1.joint=c;c.m_node1.other=c.m_body2;c.m_node1.prev=null;c.m_node1.next=c.m_body1.m_jointList;if(c.m_body1.m_jointList){c.m_body1.m_jointList.prev=c.m_node1}c.m_body1.m_jointList=c.m_node1;c.m_node2.joint=c;c.m_node2.other=c.m_body1;c.m_node2.prev=null;c.m_node2.next=c.m_body2.m_jointList;if(c.m_body2.m_jointList){c.m_body2.m_jointList.prev=c.m_node2 +}c.m_body2.m_jointList=c.m_node2;if(e.collideConnected==false){var a=e.body1.m_shapeCount0){this.step.inv_dt=1/a}else{this.step.inv_dt=0}this.m_positionIterationCount=0;this.m_contactManager.CleanContactList();this.CleanBodyList();this.m_contactManager.Collide();var n=new b2Island(this.m_bodyCount,this.m_contactCount,this.m_jointCount,this.m_stackAllocator);for(r=this.m_bodyList;r!=null;r=r.m_next){r.m_flags&=~b2Body.e_islandFlag}for(var p=this.m_contactList;p!=null;p=p.m_next){p.m_flags&=~b2Contact.e_islandFlag}for(var h=this.m_jointList;h!=null;h=h.m_next){h.m_islandFlag=false}var u=this.m_bodyCount;var q=new Array(this.m_bodyCount);for(var g=0;g0){r=q[--t];n.AddBody(r);r.m_flags&=~b2Body.e_sleepFlag; +if(r.m_flags&b2Body.e_staticFlag){continue}for(var s=r.m_contactList;s!=null;s=s.next){if(s.contact.m_flags&b2Contact.e_islandFlag){continue}n.AddContact(s.contact);s.contact.m_flags|=b2Contact.e_islandFlag;o=s.other;if(o.m_flags&b2Body.e_islandFlag){continue}q[t++]=o;o.m_flags|=b2Body.e_islandFlag}for(var f=r.m_jointList;f!=null;f=f.next){if(f.joint.m_islandFlag==true){continue}n.AddJoint(f.joint);f.joint.m_islandFlag=true;o=f.other;if(o.m_flags&b2Body.e_islandFlag){continue}q[t++]=o;o.m_flags|=b2Body.e_islandFlag}}n.Solve(this.step,this.m_gravity);this.m_positionIterationCount=b2Math.b2Max(this.m_positionIterationCount,b2Island.m_positionIterationCount);if(this.m_allowSleep){n.UpdateSleep(a)}for(var l=0;lb2Settings.b2_linearSlop){this.m_u.Multiply(1/a)}else{this.m_u.SetZero()}var h=(j*this.m_u.y-i*this.m_u.x);var d=(f*this.m_u.y-e*this.m_u.x);this.m_mass=this.m_body1.m_invMass+this.m_body1.m_invI*h*h+this.m_body2.m_invMass+this.m_body2.m_invI*d*d;this.m_mass=1/this.m_mass;if(b2World.s_enableWarmStarting){var c=this.m_impulse*this.m_u.x;var b=this.m_impulse*this.m_u.y;this.m_body1.m_linearVelocity.x-=this.m_body1.m_invMass*c;this.m_body1.m_linearVelocity.y-=this.m_body1.m_invMass*b;this.m_body1.m_angularVelocity-=this.m_body1.m_invI*(j*b-i*c); +this.m_body2.m_linearVelocity.x+=this.m_body2.m_invMass*c;this.m_body2.m_linearVelocity.y+=this.m_body2.m_invMass*b;this.m_body2.m_angularVelocity+=this.m_body2.m_invI*(f*b-e*c)}else{this.m_impulse=0}},SolveVelocityConstraints:function(b){var j;j=this.m_body1.m_R;var n=j.col1.x*this.m_localAnchor1.x+j.col2.x*this.m_localAnchor1.y;var m=j.col1.y*this.m_localAnchor1.x+j.col2.y*this.m_localAnchor1.y;j=this.m_body2.m_R;var h=j.col1.x*this.m_localAnchor2.x+j.col2.x*this.m_localAnchor2.y;var g=j.col1.y*this.m_localAnchor2.x+j.col2.y*this.m_localAnchor2.y;var l=this.m_body1.m_linearVelocity.x+(-this.m_body1.m_angularVelocity*m);var k=this.m_body1.m_linearVelocity.y+(this.m_body1.m_angularVelocity*n);var f=this.m_body2.m_linearVelocity.x+(-this.m_body2.m_angularVelocity*g);var e=this.m_body2.m_linearVelocity.y+(this.m_body2.m_angularVelocity*h);var i=(this.m_u.x*(f-l)+this.m_u.y*(e-k));var a=-this.m_mass*i;this.m_impulse+=a;var d=a*this.m_u.x;var c=a*this.m_u.y;this.m_body1.m_linearVelocity.x-=this.m_body1.m_invMass*d; +this.m_body1.m_linearVelocity.y-=this.m_body1.m_invMass*c;this.m_body1.m_angularVelocity-=this.m_body1.m_invI*(n*c-m*d);this.m_body2.m_linearVelocity.x+=this.m_body2.m_invMass*d;this.m_body2.m_linearVelocity.y+=this.m_body2.m_invMass*c;this.m_body2.m_angularVelocity+=this.m_body2.m_invI*(h*c-g*d)},SolvePositionConstraints:function(){var j;j=this.m_body1.m_R;var l=j.col1.x*this.m_localAnchor1.x+j.col2.x*this.m_localAnchor1.y;var k=j.col1.y*this.m_localAnchor1.x+j.col2.y*this.m_localAnchor1.y;j=this.m_body2.m_R;var i=j.col1.x*this.m_localAnchor2.x+j.col2.x*this.m_localAnchor2.y;var h=j.col1.y*this.m_localAnchor2.x+j.col2.y*this.m_localAnchor2.y;var g=this.m_body2.m_position.x+i-this.m_body1.m_position.x-l;var f=this.m_body2.m_position.y+h-this.m_body1.m_position.y-k;var c=Math.sqrt(g*g+f*f);g/=c;f/=c;var a=c-this.m_length;a=b2Math.b2Clamp(a,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);var b=-this.m_mass*a;this.m_u.Set(g,f);var e=b*this.m_u.x;var d=b*this.m_u.y;this.m_body1.m_position.x-=this.m_body1.m_invMass*e; +this.m_body1.m_position.y-=this.m_body1.m_invMass*d;this.m_body1.m_rotation-=this.m_body1.m_invI*(l*d-k*e);this.m_body2.m_position.x+=this.m_body2.m_invMass*e;this.m_body2.m_position.y+=this.m_body2.m_invMass*d;this.m_body2.m_rotation+=this.m_body2.m_invI*(i*d-h*e);this.m_body1.m_R.Set(this.m_body1.m_rotation);this.m_body2.m_R.Set(this.m_body2.m_rotation);return b2Math.b2Abs(a)d.dt*this.m_maxForce){this.m_impulse.Multiply(d.dt*this.m_maxForce/b)}e=this.m_impulse.x-j;c=this.m_impulse.y-g;i.m_linearVelocity.x+=i.m_invMass*e;i.m_linearVelocity.y+=i.m_invMass*c; +i.m_angularVelocity+=i.m_invI*(h*c-f*e)},SolvePositionConstraints:function(){return true},m_localAnchor:new b2Vec2(),m_target:new b2Vec2(),m_impulse:new b2Vec2(),m_ptpMass:new b2Mat22(),m_C:new b2Vec2(),m_maxForce:null,m_beta:null,m_gamma:null});var b2MouseJointDef=function(){this.type=b2Joint.e_unknownJoint;this.userData=null;this.body1=null;this.body2=null;this.collideConnected=false;this.target=new b2Vec2();this.type=b2Joint.e_mouseJoint;this.maxForce=0;this.frequencyHz=5;this.dampingRatio=0.7;this.timeStep=1/60};Object.extend(b2MouseJointDef.prototype,b2JointDef.prototype);Object.extend(b2MouseJointDef.prototype,{target:new b2Vec2(),maxForce:null,frequencyHz:null,dampingRatio:null,timeStep:null});var b2PrismaticJoint=function(c){this.m_node1=new b2JointNode();this.m_node2=new b2JointNode();this.m_type=c.type;this.m_prev=null;this.m_next=null;this.m_body1=c.body1;this.m_body2=c.body2;this.m_collideConnected=c.collideConnected;this.m_islandFlag=false;this.m_userData=c.userData;this.m_localAnchor1=new b2Vec2();this.m_localAnchor2=new b2Vec2();this.m_localXAxis1=new b2Vec2();this.m_localYAxis1=new b2Vec2();this.m_linearJacobian=new b2Jacobian();this.m_motorJacobian=new b2Jacobian();var b;var a;var d;b=this.m_body1.m_R;a=(c.anchorPoint.x-this.m_body1.m_position.x);d=(c.anchorPoint.y-this.m_body1.m_position.y);this.m_localAnchor1.Set((a*b.col1.x+d*b.col1.y),(a*b.col2.x+d*b.col2.y));b=this.m_body2.m_R;a=(c.anchorPoint.x-this.m_body2.m_position.x);d=(c.anchorPoint.y-this.m_body2.m_position.y);this.m_localAnchor2.Set((a*b.col1.x+d*b.col1.y),(a*b.col2.x+d*b.col2.y));b=this.m_body1.m_R;a=c.axis.x;d=c.axis.y;this.m_localXAxis1.Set((a*b.col1.x+d*b.col1.y),(a*b.col2.x+d*b.col2.y));this.m_localYAxis1.x=-this.m_localXAxis1.y; +this.m_localYAxis1.y=this.m_localXAxis1.x;this.m_initialAngle=this.m_body2.m_rotation-this.m_body1.m_rotation;this.m_linearJacobian.SetZero();this.m_linearMass=0;this.m_linearImpulse=0;this.m_angularMass=0;this.m_angularImpulse=0;this.m_motorJacobian.SetZero();this.m_motorMass=0;this.m_motorImpulse=0;this.m_limitImpulse=0;this.m_limitPositionImpulse=0;this.m_lowerTranslation=c.lowerTranslation;this.m_upperTranslation=c.upperTranslation;this.m_maxMotorForce=c.motorForce;this.m_motorSpeed=c.motorSpeed;this.m_enableLimit=c.enableLimit;this.m_enableMotor=c.enableMotor};Object.extend(b2PrismaticJoint.prototype,b2Joint.prototype);Object.extend(b2PrismaticJoint.prototype,{GetAnchor1:function(){var a=this.m_body1;var b=new b2Vec2();b.SetV(this.m_localAnchor1);b.MulM(a.m_R);b.Add(a.m_position);return b},GetAnchor2:function(){var a=this.m_body2;var b=new b2Vec2();b.SetV(this.m_localAnchor2);b.MulM(a.m_R);b.Add(a.m_position);return b},GetJointTranslation:function(){var l=this.m_body1;var k=this.m_body2; +var j;j=l.m_R;var p=j.col1.x*this.m_localAnchor1.x+j.col2.x*this.m_localAnchor1.y;var n=j.col1.y*this.m_localAnchor1.x+j.col2.y*this.m_localAnchor1.y;j=k.m_R;var i=j.col1.x*this.m_localAnchor2.x+j.col2.x*this.m_localAnchor2.y;var h=j.col1.y*this.m_localAnchor2.x+j.col2.y*this.m_localAnchor2.y;var g=l.m_position.x+p;var f=l.m_position.y+n;var c=k.m_position.x+i;var b=k.m_position.y+h;var e=c-g;var d=b-f;j=l.m_R;var o=j.col1.x*this.m_localXAxis1.x+j.col2.x*this.m_localXAxis1.y;var m=j.col1.y*this.m_localXAxis1.x+j.col2.y*this.m_localXAxis1.y;var a=o*e+m*d;return a},GetJointSpeed:function(){var j=this.m_body1;var i=this.m_body2;var k;k=j.m_R;var t=k.col1.x*this.m_localAnchor1.x+k.col2.x*this.m_localAnchor1.y;var s=k.col1.y*this.m_localAnchor1.x+k.col2.y*this.m_localAnchor1.y;k=i.m_R;var h=k.col1.x*this.m_localAnchor2.x+k.col2.x*this.m_localAnchor2.y;var g=k.col1.y*this.m_localAnchor2.x+k.col2.y*this.m_localAnchor2.y;var r=j.m_position.x+t;var p=j.m_position.y+s;var c=i.m_position.x+h;var a=i.m_position.y+g; +var f=c-r;var e=a-p;k=j.m_R;var o=k.col1.x*this.m_localXAxis1.x+k.col2.x*this.m_localXAxis1.y;var n=k.col1.y*this.m_localXAxis1.x+k.col2.y*this.m_localXAxis1.y;var d=j.m_linearVelocity;var b=i.m_linearVelocity;var m=j.m_angularVelocity;var l=i.m_angularVelocity;var q=(f*(-m*n)+e*(m*o))+(o*(((b.x+(-l*g))-d.x)-(-m*s))+n*(((b.y+(l*h))-d.y)-(m*t)));return q},GetMotorForce:function(a){return a*this.m_motorImpulse},SetMotorSpeed:function(a){this.m_motorSpeed=a},SetMotorForce:function(a){this.m_maxMotorForce=a},GetReactionForce:function(b){var e=b*this.m_limitImpulse;var d;d=this.m_body1.m_R;var g=e*(d.col1.x*this.m_localXAxis1.x+d.col2.x*this.m_localXAxis1.y);var f=e*(d.col1.y*this.m_localXAxis1.x+d.col2.y*this.m_localXAxis1.y);var c=e*(d.col1.x*this.m_localYAxis1.x+d.col2.x*this.m_localYAxis1.y);var a=e*(d.col1.y*this.m_localYAxis1.x+d.col2.y*this.m_localYAxis1.y);return new b2Vec2(g+c,f+a)},GetReactionTorque:function(a){return a*this.m_angularImpulse},PrepareVelocitySolver:function(){var m=this.m_body1; +var l=this.m_body2;var p;p=m.m_R;var z=p.col1.x*this.m_localAnchor1.x+p.col2.x*this.m_localAnchor1.y;var y=p.col1.y*this.m_localAnchor1.x+p.col2.y*this.m_localAnchor1.y;p=l.m_R;var i=p.col1.x*this.m_localAnchor2.x+p.col2.x*this.m_localAnchor2.y;var g=p.col1.y*this.m_localAnchor2.x+p.col2.y*this.m_localAnchor2.y;var s=m.m_invMass;var r=l.m_invMass;var k=m.m_invI;var j=l.m_invI;p=m.m_R;var h=p.col1.x*this.m_localYAxis1.x+p.col2.x*this.m_localYAxis1.y;var f=p.col1.y*this.m_localYAxis1.x+p.col2.y*this.m_localYAxis1.y;var t=l.m_position.x+i-m.m_position.x;var q=l.m_position.y+g-m.m_position.y;this.m_linearJacobian.linear1.x=-h;this.m_linearJacobian.linear1.y=-f;this.m_linearJacobian.linear2.x=h;this.m_linearJacobian.linear2.y=f;this.m_linearJacobian.angular1=-(t*f-q*h);this.m_linearJacobian.angular2=i*f-g*h;this.m_linearMass=s+k*this.m_linearJacobian.angular1*this.m_linearJacobian.angular1+r+j*this.m_linearJacobian.angular2*this.m_linearJacobian.angular2;this.m_linearMass=1/this.m_linearMass; +this.m_angularMass=1/(k+j);if(this.m_enableLimit||this.m_enableMotor){p=m.m_R;var v=p.col1.x*this.m_localXAxis1.x+p.col2.x*this.m_localXAxis1.y;var u=p.col1.y*this.m_localXAxis1.x+p.col2.y*this.m_localXAxis1.y;this.m_motorJacobian.linear1.x=-v;this.m_motorJacobian.linear1.y=-u;this.m_motorJacobian.linear2.x=v;this.m_motorJacobian.linear2.y=u;this.m_motorJacobian.angular1=-(t*u-q*v);this.m_motorJacobian.angular2=i*u-g*v;this.m_motorMass=s+k*this.m_motorJacobian.angular1*this.m_motorJacobian.angular1+r+j*this.m_motorJacobian.angular2*this.m_motorJacobian.angular2;this.m_motorMass=1/this.m_motorMass;if(this.m_enableLimit){var e=t-z;var d=q-y;var c=v*e+u*d;if(b2Math.b2Abs(this.m_upperTranslation-this.m_lowerTranslation)<2*b2Settings.b2_linearSlop){this.m_limitState=b2Joint.e_equalLimits}else{if(c<=this.m_lowerTranslation){if(this.m_limitState!=b2Joint.e_atLowerLimit){this.m_limitImpulse=0}this.m_limitState=b2Joint.e_atLowerLimit}else{if(c>=this.m_upperTranslation){if(this.m_limitState!=b2Joint.e_atUpperLimit){this.m_limitImpulse=0 +}this.m_limitState=b2Joint.e_atUpperLimit}else{this.m_limitState=b2Joint.e_inactiveLimit;this.m_limitImpulse=0}}}}}if(this.m_enableMotor==false){this.m_motorImpulse=0}if(this.m_enableLimit==false){this.m_limitImpulse=0}if(b2World.s_enableWarmStarting){var b=this.m_linearImpulse*this.m_linearJacobian.linear1.x+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear1.x;var a=this.m_linearImpulse*this.m_linearJacobian.linear1.y+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear1.y;var o=this.m_linearImpulse*this.m_linearJacobian.linear2.x+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear2.x;var n=this.m_linearImpulse*this.m_linearJacobian.linear2.y+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear2.y;var x=this.m_linearImpulse*this.m_linearJacobian.angular1-this.m_angularImpulse+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.angular1;var w=this.m_linearImpulse*this.m_linearJacobian.angular2+this.m_angularImpulse+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.angular2; +m.m_linearVelocity.x+=s*b;m.m_linearVelocity.y+=s*a;m.m_angularVelocity+=k*x;l.m_linearVelocity.x+=r*o;l.m_linearVelocity.y+=r*n;l.m_angularVelocity+=j*w}else{this.m_linearImpulse=0;this.m_angularImpulse=0;this.m_limitImpulse=0;this.m_motorImpulse=0}this.m_limitPositionImpulse=0},SolveVelocityConstraints:function(b){var l=this.m_body1;var k=this.m_body2;var q=l.m_invMass;var o=k.m_invMass;var d=l.m_invI;var c=k.m_invI;var p;var e=this.m_linearJacobian.Compute(l.m_linearVelocity,l.m_angularVelocity,k.m_linearVelocity,k.m_angularVelocity);var j=-this.m_linearMass*e;this.m_linearImpulse+=j;l.m_linearVelocity.x+=(q*j)*this.m_linearJacobian.linear1.x;l.m_linearVelocity.y+=(q*j)*this.m_linearJacobian.linear1.y;l.m_angularVelocity+=d*j*this.m_linearJacobian.angular1;k.m_linearVelocity.x+=(o*j)*this.m_linearJacobian.linear2.x;k.m_linearVelocity.y+=(o*j)*this.m_linearJacobian.linear2.y;k.m_angularVelocity+=c*j*this.m_linearJacobian.angular2;var h=k.m_angularVelocity-l.m_angularVelocity;var a=-this.m_angularMass*h; +this.m_angularImpulse+=a;l.m_angularVelocity-=d*a;k.m_angularVelocity+=c*a;if(this.m_enableMotor&&this.m_limitState!=b2Joint.e_equalLimits){var m=this.m_motorJacobian.Compute(l.m_linearVelocity,l.m_angularVelocity,k.m_linearVelocity,k.m_angularVelocity)-this.m_motorSpeed;var f=-this.m_motorMass*m;var n=this.m_motorImpulse;this.m_motorImpulse=b2Math.b2Clamp(this.m_motorImpulse+f,-b.dt*this.m_maxMotorForce,b.dt*this.m_maxMotorForce);f=this.m_motorImpulse-n;l.m_linearVelocity.x+=(q*f)*this.m_motorJacobian.linear1.x;l.m_linearVelocity.y+=(q*f)*this.m_motorJacobian.linear1.y;l.m_angularVelocity+=d*f*this.m_motorJacobian.angular1;k.m_linearVelocity.x+=(o*f)*this.m_motorJacobian.linear2.x;k.m_linearVelocity.y+=(o*f)*this.m_motorJacobian.linear2.y;k.m_angularVelocity+=c*f*this.m_motorJacobian.angular2}if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){var i=this.m_motorJacobian.Compute(l.m_linearVelocity,l.m_angularVelocity,k.m_linearVelocity,k.m_angularVelocity);var g=-this.m_motorMass*i; +if(this.m_limitState==b2Joint.e_equalLimits){this.m_limitImpulse+=g}else{if(this.m_limitState==b2Joint.e_atLowerLimit){p=this.m_limitImpulse;this.m_limitImpulse=b2Math.b2Max(this.m_limitImpulse+g,0);g=this.m_limitImpulse-p}else{if(this.m_limitState==b2Joint.e_atUpperLimit){p=this.m_limitImpulse;this.m_limitImpulse=b2Math.b2Min(this.m_limitImpulse+g,0);g=this.m_limitImpulse-p}}}l.m_linearVelocity.x+=(q*g)*this.m_motorJacobian.linear1.x;l.m_linearVelocity.y+=(q*g)*this.m_motorJacobian.linear1.y;l.m_angularVelocity+=d*g*this.m_motorJacobian.angular1;k.m_linearVelocity.x+=(o*g)*this.m_motorJacobian.linear2.x;k.m_linearVelocity.y+=(o*g)*this.m_motorJacobian.linear2.y;k.m_angularVelocity+=c*g*this.m_motorJacobian.angular2}},SolvePositionConstraints:function(){var o;var y;var m=this.m_body1;var k=this.m_body2;var t=m.m_invMass;var s=k.m_invMass;var j=m.m_invI;var i=k.m_invI;var q;q=m.m_R;var E=q.col1.x*this.m_localAnchor1.x+q.col2.x*this.m_localAnchor1.y;var D=q.col1.y*this.m_localAnchor1.x+q.col2.y*this.m_localAnchor1.y; +q=k.m_R;var h=q.col1.x*this.m_localAnchor2.x+q.col2.x*this.m_localAnchor2.y;var g=q.col1.y*this.m_localAnchor2.x+q.col2.y*this.m_localAnchor2.y;var B=m.m_position.x+E;var z=m.m_position.y+D;var b=k.m_position.x+h;var a=k.m_position.y+g;var e=b-B;var c=a-z;q=m.m_R;var f=q.col1.x*this.m_localYAxis1.x+q.col2.x*this.m_localYAxis1.y;var d=q.col1.y*this.m_localYAxis1.x+q.col2.y*this.m_localYAxis1.y;var l=f*e+d*c;l=b2Math.b2Clamp(l,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);var x=-this.m_linearMass*l;m.m_position.x+=(t*x)*this.m_linearJacobian.linear1.x;m.m_position.y+=(t*x)*this.m_linearJacobian.linear1.y;m.m_rotation+=j*x*this.m_linearJacobian.angular1;k.m_position.x+=(s*x)*this.m_linearJacobian.linear2.x;k.m_position.y+=(s*x)*this.m_linearJacobian.linear2.y;k.m_rotation+=i*x*this.m_linearJacobian.angular2;var p=b2Math.b2Abs(l);var A=k.m_rotation-m.m_rotation-this.m_initialAngle;A=b2Math.b2Clamp(A,-b2Settings.b2_maxAngularCorrection,b2Settings.b2_maxAngularCorrection); +var r=-this.m_angularMass*A;m.m_rotation-=m.m_invI*r;m.m_R.Set(m.m_rotation);k.m_rotation+=k.m_invI*r;k.m_R.Set(k.m_rotation);var C=b2Math.b2Abs(A);if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){q=m.m_R;E=q.col1.x*this.m_localAnchor1.x+q.col2.x*this.m_localAnchor1.y;D=q.col1.y*this.m_localAnchor1.x+q.col2.y*this.m_localAnchor1.y;q=k.m_R;h=q.col1.x*this.m_localAnchor2.x+q.col2.x*this.m_localAnchor2.y;g=q.col1.y*this.m_localAnchor2.x+q.col2.y*this.m_localAnchor2.y;B=m.m_position.x+E;z=m.m_position.y+D;b=k.m_position.x+h;a=k.m_position.y+g;e=b-B;c=a-z;q=m.m_R;var v=q.col1.x*this.m_localXAxis1.x+q.col2.x*this.m_localXAxis1.y;var u=q.col1.y*this.m_localXAxis1.x+q.col2.y*this.m_localXAxis1.y;var n=(v*e+u*c);var w=0;if(this.m_limitState==b2Joint.e_equalLimits){o=b2Math.b2Clamp(n,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);w=-this.m_motorMass*o;p=b2Math.b2Max(p,b2Math.b2Abs(A))}else{if(this.m_limitState==b2Joint.e_atLowerLimit){o=n-this.m_lowerTranslation; +p=b2Math.b2Max(p,-o);o=b2Math.b2Clamp(o+b2Settings.b2_linearSlop,-b2Settings.b2_maxLinearCorrection,0);w=-this.m_motorMass*o;y=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Max(this.m_limitPositionImpulse+w,0);w=this.m_limitPositionImpulse-y}else{if(this.m_limitState==b2Joint.e_atUpperLimit){o=n-this.m_upperTranslation;p=b2Math.b2Max(p,o);o=b2Math.b2Clamp(o-b2Settings.b2_linearSlop,0,b2Settings.b2_maxLinearCorrection);w=-this.m_motorMass*o;y=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Min(this.m_limitPositionImpulse+w,0);w=this.m_limitPositionImpulse-y}}}m.m_position.x+=(t*w)*this.m_motorJacobian.linear1.x;m.m_position.y+=(t*w)*this.m_motorJacobian.linear1.y;m.m_rotation+=j*w*this.m_motorJacobian.angular1;m.m_R.Set(m.m_rotation);k.m_position.x+=(s*w)*this.m_motorJacobian.linear2.x;k.m_position.y+=(s*w)*this.m_motorJacobian.linear2.y;k.m_rotation+=i*w*this.m_motorJacobian.angular2;k.m_R.Set(k.m_rotation)}return p<=b2Settings.b2_linearSlop&&C<=b2Settings.b2_angularSlop +},m_localAnchor1:new b2Vec2(),m_localAnchor2:new b2Vec2(),m_localXAxis1:new b2Vec2(),m_localYAxis1:new b2Vec2(),m_initialAngle:null,m_linearJacobian:new b2Jacobian(),m_linearMass:null,m_linearImpulse:null,m_angularMass:null,m_angularImpulse:null,m_motorJacobian:new b2Jacobian(),m_motorMass:null,m_motorImpulse:null,m_limitImpulse:null,m_limitPositionImpulse:null,m_lowerTranslation:null,m_upperTranslation:null,m_maxMotorForce:null,m_motorSpeed:null,m_enableLimit:null,m_enableMotor:null,m_limitState:0});var b2PrismaticJointDef=function(){this.type=b2Joint.e_unknownJoint;this.userData=null;this.body1=null;this.body2=null;this.collideConnected=false;this.type=b2Joint.e_prismaticJoint;this.anchorPoint=new b2Vec2(0,0);this.axis=new b2Vec2(0,0);this.lowerTranslation=0;this.upperTranslation=0;this.motorForce=0;this.motorSpeed=0;this.enableLimit=false;this.enableMotor=false};Object.extend(b2PrismaticJointDef.prototype,b2JointDef.prototype);Object.extend(b2PrismaticJointDef.prototype,{anchorPoint:null,axis:null,lowerTranslation:null,upperTranslation:null,motorForce:null,motorSpeed:null,enableLimit:null,enableMotor:null,Initialize:function(b,a,d,c){this.body1=b;this.body2=a;this.anchorPoint=d;this.axis=c}});var b2PulleyJoint=function(d){this.m_node1=new b2JointNode();this.m_node2=new b2JointNode();this.m_type=d.type;this.m_prev=null;this.m_next=null;this.m_body1=d.body1;this.m_body2=d.body2;this.m_collideConnected=d.collideConnected;this.m_islandFlag=false;this.m_userData=d.userData;this.m_groundAnchor1=new b2Vec2();this.m_groundAnchor2=new b2Vec2();this.m_localAnchor1=new b2Vec2();this.m_localAnchor2=new b2Vec2();this.m_u1=new b2Vec2();this.m_u2=new b2Vec2();var b;var a;var h;this.m_ground=this.m_body1.m_world.m_groundBody;this.m_groundAnchor1.x=d.groundPoint1.x-this.m_ground.m_position.x;this.m_groundAnchor1.y=d.groundPoint1.y-this.m_ground.m_position.y;this.m_groundAnchor2.x=d.groundPoint2.x-this.m_ground.m_position.x;this.m_groundAnchor2.y=d.groundPoint2.y-this.m_ground.m_position.y;b=this.m_body1.m_R;a=d.anchorPoint1.x-this.m_body1.m_position.x;h=d.anchorPoint1.y-this.m_body1.m_position.y;this.m_localAnchor1.x=a*b.col1.x+h*b.col1.y;this.m_localAnchor1.y=a*b.col2.x+h*b.col2.y;b=this.m_body2.m_R; +a=d.anchorPoint2.x-this.m_body2.m_position.x;h=d.anchorPoint2.y-this.m_body2.m_position.y;this.m_localAnchor2.x=a*b.col1.x+h*b.col1.y;this.m_localAnchor2.y=a*b.col2.x+h*b.col2.y;this.m_ratio=d.ratio;a=d.groundPoint1.x-d.anchorPoint1.x;h=d.groundPoint1.y-d.anchorPoint1.y;var f=Math.sqrt(a*a+h*h);a=d.groundPoint2.x-d.anchorPoint2.x;h=d.groundPoint2.y-d.anchorPoint2.y;var c=Math.sqrt(a*a+h*h);var g=b2Math.b2Max(0.5*b2PulleyJoint.b2_minPulleyLength,f);var e=b2Math.b2Max(0.5*b2PulleyJoint.b2_minPulleyLength,c);this.m_constant=g+this.m_ratio*e;this.m_maxLength1=b2Math.b2Clamp(d.maxLength1,g,this.m_constant-this.m_ratio*b2PulleyJoint.b2_minPulleyLength);this.m_maxLength2=b2Math.b2Clamp(d.maxLength2,e,(this.m_constant-b2PulleyJoint.b2_minPulleyLength)/this.m_ratio);this.m_pulleyImpulse=0;this.m_limitImpulse1=0;this.m_limitImpulse2=0};Object.extend(b2PulleyJoint.prototype,b2Joint.prototype);Object.extend(b2PulleyJoint.prototype,{GetAnchor1:function(){var a=this.m_body1.m_R;return new b2Vec2(this.m_body1.m_position.x+(a.col1.x*this.m_localAnchor1.x+a.col2.x*this.m_localAnchor1.y),this.m_body1.m_position.y+(a.col1.y*this.m_localAnchor1.x+a.col2.y*this.m_localAnchor1.y)) +},GetAnchor2:function(){var a=this.m_body2.m_R;return new b2Vec2(this.m_body2.m_position.x+(a.col1.x*this.m_localAnchor2.x+a.col2.x*this.m_localAnchor2.y),this.m_body2.m_position.y+(a.col1.y*this.m_localAnchor2.x+a.col2.y*this.m_localAnchor2.y))},GetGroundPoint1:function(){return new b2Vec2(this.m_ground.m_position.x+this.m_groundAnchor1.x,this.m_ground.m_position.y+this.m_groundAnchor1.y)},GetGroundPoint2:function(){return new b2Vec2(this.m_ground.m_position.x+this.m_groundAnchor2.x,this.m_ground.m_position.y+this.m_groundAnchor2.y)},GetReactionForce:function(a){return new b2Vec2()},GetReactionTorque:function(a){return 0},GetLength1:function(){var e;e=this.m_body1.m_R;var d=this.m_body1.m_position.x+(e.col1.x*this.m_localAnchor1.x+e.col2.x*this.m_localAnchor1.y);var c=this.m_body1.m_position.y+(e.col1.y*this.m_localAnchor1.x+e.col2.y*this.m_localAnchor1.y);var b=d-(this.m_ground.m_position.x+this.m_groundAnchor1.x);var a=c-(this.m_ground.m_position.y+this.m_groundAnchor1.y);return Math.sqrt(b*b+a*a) +},GetLength2:function(){var e;e=this.m_body2.m_R;var d=this.m_body2.m_position.x+(e.col1.x*this.m_localAnchor2.x+e.col2.x*this.m_localAnchor2.y);var c=this.m_body2.m_position.y+(e.col1.y*this.m_localAnchor2.x+e.col2.y*this.m_localAnchor2.y);var b=d-(this.m_ground.m_position.x+this.m_groundAnchor2.x);var a=c-(this.m_ground.m_position.y+this.m_groundAnchor2.y);return Math.sqrt(b*b+a*a)},GetRatio:function(){return this.m_ratio},PrepareVelocitySolver:function(){var h=this.m_body1;var g=this.m_body2;var l;l=h.m_R;var v=l.col1.x*this.m_localAnchor1.x+l.col2.x*this.m_localAnchor1.y;var u=l.col1.y*this.m_localAnchor1.x+l.col2.y*this.m_localAnchor1.y;l=g.m_R;var f=l.col1.x*this.m_localAnchor2.x+l.col2.x*this.m_localAnchor2.y;var e=l.col1.y*this.m_localAnchor2.x+l.col2.y*this.m_localAnchor2.y;var t=h.m_position.x+v;var r=h.m_position.y+u;var d=g.m_position.x+f;var c=g.m_position.y+e;var m=this.m_ground.m_position.x+this.m_groundAnchor1.x;var k=this.m_ground.m_position.y+this.m_groundAnchor1.y;var s=this.m_ground.m_position.x+this.m_groundAnchor2.x; +var q=this.m_ground.m_position.y+this.m_groundAnchor2.y;this.m_u1.Set(t-m,r-k);this.m_u2.Set(d-s,c-q);var p=this.m_u1.Length();var o=this.m_u2.Length();if(p>b2Settings.b2_linearSlop){this.m_u1.Multiply(1/p)}else{this.m_u1.SetZero()}if(o>b2Settings.b2_linearSlop){this.m_u2.Multiply(1/o)}else{this.m_u2.SetZero()}if(pb2Settings.b2_linearSlop){this.m_u1.Multiply(1/n)}else{this.m_u1.SetZero()}if(m>b2Settings.b2_linearSlop){this.m_u2.Multiply(1/m)}else{this.m_u2.SetZero()}l=this.m_constant-n-this.m_ratio*m;e=b2Math.b2Max(e,Math.abs(l));l=b2Math.b2Clamp(l,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);h=-this.m_pulleyMass*l;r=-h*this.m_u1.x;p=-h*this.m_u1.y;b=-this.m_ratio*h*this.m_u2.x;a=-this.m_ratio*h*this.m_u2.y;g.m_position.x+=g.m_invMass*r;g.m_position.y+=g.m_invMass*p;g.m_rotation+=g.m_invI*(u*p-t*r);f.m_position.x+=f.m_invMass*b;f.m_position.y+=f.m_invMass*a;f.m_rotation+=f.m_invI*(d*a-c*b);g.m_R.Set(g.m_rotation);f.m_R.Set(f.m_rotation);if(this.m_limitState1==b2Joint.e_atUpperLimit){j=g.m_R;u=j.col1.x*this.m_localAnchor1.x+j.col2.x*this.m_localAnchor1.y;t=j.col1.y*this.m_localAnchor1.x+j.col2.y*this.m_localAnchor1.y; +r=g.m_position.x+u;p=g.m_position.y+t;this.m_u1.Set(r-k,p-i);n=this.m_u1.Length();if(n>b2Settings.b2_linearSlop){this.m_u1.x*=1/n;this.m_u1.y*=1/n}else{this.m_u1.SetZero()}l=this.m_maxLength1-n;e=b2Math.b2Max(e,-l);l=b2Math.b2Clamp(l+b2Settings.b2_linearSlop,-b2Settings.b2_maxLinearCorrection,0);h=-this.m_limitMass1*l;s=this.m_limitPositionImpulse1;this.m_limitPositionImpulse1=b2Math.b2Max(0,this.m_limitPositionImpulse1+h);h=this.m_limitPositionImpulse1-s;r=-h*this.m_u1.x;p=-h*this.m_u1.y;g.m_position.x+=g.m_invMass*r;g.m_position.y+=g.m_invMass*p;g.m_rotation+=g.m_invI*(u*p-t*r);g.m_R.Set(g.m_rotation)}if(this.m_limitState2==b2Joint.e_atUpperLimit){j=f.m_R;d=j.col1.x*this.m_localAnchor2.x+j.col2.x*this.m_localAnchor2.y;c=j.col1.y*this.m_localAnchor2.x+j.col2.y*this.m_localAnchor2.y;b=f.m_position.x+d;a=f.m_position.y+c;this.m_u2.Set(b-q,a-o);m=this.m_u2.Length();if(m>b2Settings.b2_linearSlop){this.m_u2.x*=1/m;this.m_u2.y*=1/m}else{this.m_u2.SetZero()}l=this.m_maxLength2-m;e=b2Math.b2Max(e,-l); +l=b2Math.b2Clamp(l+b2Settings.b2_linearSlop,-b2Settings.b2_maxLinearCorrection,0);h=-this.m_limitMass2*l;s=this.m_limitPositionImpulse2;this.m_limitPositionImpulse2=b2Math.b2Max(0,this.m_limitPositionImpulse2+h);h=this.m_limitPositionImpulse2-s;b=-h*this.m_u2.x;a=-h*this.m_u2.y;f.m_position.x+=f.m_invMass*b;f.m_position.y+=f.m_invMass*a;f.m_rotation+=f.m_invI*(d*a-c*b);f.m_R.Set(f.m_rotation)}return e=this.m_upperAngle){if(this.m_limitState!=b2Joint.e_atUpperLimit){this.m_limitImpulse=0}this.m_limitState=b2Joint.e_atUpperLimit}else{this.m_limitState=b2Joint.e_inactiveLimit;this.m_limitImpulse=0}}}}else{this.m_limitImpulse=0}if(b2World.s_enableWarmStarting){h.m_linearVelocity.x-=l*this.m_ptpImpulse.x;h.m_linearVelocity.y-=l*this.m_ptpImpulse.y;h.m_angularVelocity-=c*((k*this.m_ptpImpulse.y-i*this.m_ptpImpulse.x)+this.m_motorImpulse+this.m_limitImpulse); +g.m_linearVelocity.x+=j*this.m_ptpImpulse.x;g.m_linearVelocity.y+=j*this.m_ptpImpulse.y;g.m_angularVelocity+=b*((e*this.m_ptpImpulse.y-d*this.m_ptpImpulse.x)+this.m_motorImpulse+this.m_limitImpulse)}else{this.m_ptpImpulse.SetZero();this.m_motorImpulse=0;this.m_limitImpulse=0}this.m_limitPositionImpulse=0},SolveVelocityConstraints:function(f){var g=this.m_body1;var e=this.m_body2;var i;i=g.m_R;var o=i.col1.x*this.m_localAnchor1.x+i.col2.x*this.m_localAnchor1.y;var n=i.col1.y*this.m_localAnchor1.x+i.col2.y*this.m_localAnchor1.y;i=e.m_R;var b=i.col1.x*this.m_localAnchor2.x+i.col2.x*this.m_localAnchor2.y;var a=i.col1.y*this.m_localAnchor2.x+i.col2.y*this.m_localAnchor2.y;var k;var q=e.m_linearVelocity.x+(-e.m_angularVelocity*a)-g.m_linearVelocity.x-(-g.m_angularVelocity*n);var p=e.m_linearVelocity.y+(e.m_angularVelocity*b)-g.m_linearVelocity.y-(g.m_angularVelocity*o);var m=-(this.m_ptpMass.col1.x*q+this.m_ptpMass.col2.x*p);var l=-(this.m_ptpMass.col1.y*q+this.m_ptpMass.col2.y*p);this.m_ptpImpulse.x+=m; +this.m_ptpImpulse.y+=l;g.m_linearVelocity.x-=g.m_invMass*m;g.m_linearVelocity.y-=g.m_invMass*l;g.m_angularVelocity-=g.m_invI*(o*l-n*m);e.m_linearVelocity.x+=e.m_invMass*m;e.m_linearVelocity.y+=e.m_invMass*l;e.m_angularVelocity+=e.m_invI*(b*l-a*m);if(this.m_enableMotor&&this.m_limitState!=b2Joint.e_equalLimits){var r=e.m_angularVelocity-g.m_angularVelocity-this.m_motorSpeed;var c=-this.m_motorMass*r;var d=this.m_motorImpulse;this.m_motorImpulse=b2Math.b2Clamp(this.m_motorImpulse+c,-f.dt*this.m_maxMotorTorque,f.dt*this.m_maxMotorTorque);c=this.m_motorImpulse-d;g.m_angularVelocity-=g.m_invI*c;e.m_angularVelocity+=e.m_invI*c}if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){var h=e.m_angularVelocity-g.m_angularVelocity;var j=-this.m_motorMass*h;if(this.m_limitState==b2Joint.e_equalLimits){this.m_limitImpulse+=j}else{if(this.m_limitState==b2Joint.e_atLowerLimit){k=this.m_limitImpulse;this.m_limitImpulse=b2Math.b2Max(this.m_limitImpulse+j,0);j=this.m_limitImpulse-k}else{if(this.m_limitState==b2Joint.e_atUpperLimit){k=this.m_limitImpulse; +this.m_limitImpulse=b2Math.b2Min(this.m_limitImpulse+j,0);j=this.m_limitImpulse-k}}}g.m_angularVelocity-=g.m_invI*j;e.m_angularVelocity+=e.m_invI*j}},SolvePositionConstraints:function(){var s;var m;var l=this.m_body1;var k=this.m_body2;var o=0;var n;n=l.m_R;var y=n.col1.x*this.m_localAnchor1.x+n.col2.x*this.m_localAnchor1.y;var x=n.col1.y*this.m_localAnchor1.x+n.col2.y*this.m_localAnchor1.y;n=k.m_R;var f=n.col1.x*this.m_localAnchor2.x+n.col2.x*this.m_localAnchor2.y;var e=n.col1.y*this.m_localAnchor2.x+n.col2.y*this.m_localAnchor2.y;var u=l.m_position.x+y;var t=l.m_position.y+x;var d=k.m_position.x+f;var c=k.m_position.y+e;var j=d-u;var i=c-t;o=Math.sqrt(j*j+i*i);var q=l.m_invMass;var p=k.m_invMass;var h=l.m_invI;var g=k.m_invI;this.K1.col1.x=q+p;this.K1.col2.x=0;this.K1.col1.y=0;this.K1.col2.y=q+p;this.K2.col1.x=h*x*x;this.K2.col2.x=-h*y*x;this.K2.col1.y=-h*y*x;this.K2.col2.y=h*y*y;this.K3.col1.x=g*e*e;this.K3.col2.x=-g*f*e;this.K3.col1.y=-g*f*e;this.K3.col2.y=g*f*f;this.K.SetM(this.K1); +this.K.AddM(this.K2);this.K.AddM(this.K3);this.K.Solve(b2RevoluteJoint.tImpulse,-j,-i);var b=b2RevoluteJoint.tImpulse.x;var a=b2RevoluteJoint.tImpulse.y;l.m_position.x-=l.m_invMass*b;l.m_position.y-=l.m_invMass*a;l.m_rotation-=l.m_invI*(y*a-x*b);l.m_R.Set(l.m_rotation);k.m_position.x+=k.m_invMass*b;k.m_position.y+=k.m_invMass*a;k.m_rotation+=k.m_invI*(f*a-e*b);k.m_R.Set(k.m_rotation);var w=0;if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){var v=k.m_rotation-l.m_rotation-this.m_intialAngle;var r=0;if(this.m_limitState==b2Joint.e_equalLimits){m=b2Math.b2Clamp(v,-b2Settings.b2_maxAngularCorrection,b2Settings.b2_maxAngularCorrection);r=-this.m_motorMass*m;w=b2Math.b2Abs(m)}else{if(this.m_limitState==b2Joint.e_atLowerLimit){m=v-this.m_lowerAngle;w=b2Math.b2Max(0,-m);m=b2Math.b2Clamp(m+b2Settings.b2_angularSlop,-b2Settings.b2_maxAngularCorrection,0);r=-this.m_motorMass*m;s=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Max(this.m_limitPositionImpulse+r,0); +r=this.m_limitPositionImpulse-s}else{if(this.m_limitState==b2Joint.e_atUpperLimit){m=v-this.m_upperAngle;w=b2Math.b2Max(0,m);m=b2Math.b2Clamp(m-b2Settings.b2_angularSlop,0,b2Settings.b2_maxAngularCorrection);r=-this.m_motorMass*m;s=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Min(this.m_limitPositionImpulse+r,0);r=this.m_limitPositionImpulse-s}}}l.m_rotation-=l.m_invI*r;l.m_R.Set(l.m_rotation);k.m_rotation+=k.m_invI*r;k.m_R.Set(k.m_rotation)}return o<=b2Settings.b2_linearSlop&&w<=b2Settings.b2_angularSlop},m_localAnchor1:new b2Vec2(),m_localAnchor2:new b2Vec2(),m_ptpImpulse:new b2Vec2(),m_motorImpulse:null,m_limitImpulse:null,m_limitPositionImpulse:null,m_ptpMass:new b2Mat22(),m_motorMass:null,m_intialAngle:null,m_lowerAngle:null,m_upperAngle:null,m_maxMotorTorque:null,m_motorSpeed:null,m_enableLimit:null,m_enableMotor:null,m_limitState:0});b2RevoluteJoint.tImpulse=new b2Vec2();var b2RevoluteJointDef=function(){this.type=b2Joint.e_unknownJoint;this.userData=null;this.body1=null;this.body2=null;this.collideConnected=false;this.type=b2Joint.e_revoluteJoint;this.anchorPoint=new b2Vec2(0,0);this.lowerAngle=0;this.upperAngle=0;this.motorTorque=0;this.motorSpeed=0;this.enableLimit=false;this.enableMotor=false};Object.extend(b2RevoluteJointDef.prototype,b2JointDef.prototype);Object.extend(b2RevoluteJointDef.prototype,{anchorPoint:null,lowerAngle:null,upperAngle:null,motorTorque:null,motorSpeed:null,enableLimit:null,enableMotor:null,Initialize:function(b,a,c){this.body1=b;this.body2=a;this.anchorPoint=c}}); \ No newline at end of file diff --git a/examples/example 24 - Box2D Integration/bricks.png b/examples/example 24 - Box2D Integration/bricks.png new file mode 100644 index 0000000..4495016 --- /dev/null +++ b/examples/example 24 - Box2D Integration/bricks.png Binary files differ diff --git a/examples/example 24 - Box2D Integration/bunny.png b/examples/example 24 - Box2D Integration/bunny.png new file mode 100644 index 0000000..79c3167 --- /dev/null +++ b/examples/example 24 - Box2D Integration/bunny.png Binary files differ diff --git a/examples/example 24 - Box2D Integration/grass.png b/examples/example 24 - Box2D Integration/grass.png new file mode 100644 index 0000000..a9dd3a9 --- /dev/null +++ b/examples/example 24 - Box2D Integration/grass.png Binary files differ diff --git a/examples/example 24 - Box2D Integration/index.html b/examples/example 24 - Box2D Integration/index.html new file mode 100644 index 0000000..0d32ca2 --- /dev/null +++ b/examples/example 24 - Box2D Integration/index.html @@ -0,0 +1,148 @@ + + + + pixi.js example 24 + + + + + + + + + +