UNPKG

phaser-ce

Version:

Phaser CE (Community Edition) is a fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers.

3 lines (2 loc) 821 kB
/* Phaser v2.9.2 - http://phaser.io - @photonstorm - (c) 2016 Photon Storm Ltd. */ !function(t){if("object"==typeof exports)module.exports=t();else{var e;"undefined"!=typeof window?e=window:"undefined"!=typeof global?e=global:"undefined"!=typeof self&&(e=self),e.p2=t()}}(function(){return function t(e,i,s){function n(o,a){if(!i[o]){if(!e[o]){var h="function"==typeof require&&require;if(!a&&h)return h(o,!0);if(r)return r(o,!0);throw new Error("Cannot find module '"+o+"'")}var l=i[o]={exports:{}};e[o][0].call(l.exports,function(t){var i=e[o][1][t];return n(i||t)},l,l.exports,t,e,i,s)}return i[o].exports}for(var r="function"==typeof require&&require,o=0;o<s.length;o++)n(s[o]);return n}({1:[function(t,e,i){function s(){}var n=t("./Scalar");e.exports=s,s.lineInt=function(t,e,i){i=i||0;var s,r,o,a,h,l,c,u=[0,0];return s=t[1][1]-t[0][1],r=t[0][0]-t[1][0],o=s*t[0][0]+r*t[0][1],a=e[1][1]-e[0][1],h=e[0][0]-e[1][0],l=a*e[0][0]+h*e[0][1],c=s*h-a*r,n.eq(c,0,i)||(u[0]=(h*o-r*l)/c,u[1]=(s*l-a*o)/c),u},s.segmentsIntersect=function(t,e,i,s){var n=e[0]-t[0],r=e[1]-t[1],o=s[0]-i[0],a=s[1]-i[1];if(o*r-a*n==0)return!1;var h=(n*(i[1]-t[1])+r*(t[0]-i[0]))/(o*r-a*n),l=(o*(t[1]-i[1])+a*(i[0]-t[0]))/(a*n-o*r);return h>=0&&h<=1&&l>=0&&l<=1}},{"./Scalar":4}],2:[function(t,e,i){function s(){}e.exports=s,s.area=function(t,e,i){return(e[0]-t[0])*(i[1]-t[1])-(i[0]-t[0])*(e[1]-t[1])},s.left=function(t,e,i){return s.area(t,e,i)>0},s.leftOn=function(t,e,i){return s.area(t,e,i)>=0},s.right=function(t,e,i){return s.area(t,e,i)<0},s.rightOn=function(t,e,i){return s.area(t,e,i)<=0};var n=[],r=[];s.collinear=function(t,e,i,o){if(o){var a=n,h=r;a[0]=e[0]-t[0],a[1]=e[1]-t[1],h[0]=i[0]-e[0],h[1]=i[1]-e[1];var l=a[0]*h[0]+a[1]*h[1],c=Math.sqrt(a[0]*a[0]+a[1]*a[1]),u=Math.sqrt(h[0]*h[0]+h[1]*h[1]);return Math.acos(l/(c*u))<o}return 0==s.area(t,e,i)},s.sqdist=function(t,e){var i=e[0]-t[0],s=e[1]-t[1];return i*i+s*s}},{}],3:[function(t,e,i){function s(){this.vertices=[]}function n(t,e,i,s,n){n=n||0;var r=e[1]-t[1],o=t[0]-e[0],h=r*t[0]+o*t[1],l=s[1]-i[1],c=i[0]-s[0],u=l*i[0]+c*i[1],d=r*c-l*o;return a.eq(d,0,n)?[0,0]:[(c*h-o*u)/d,(r*u-l*h)/d]}var r=t("./Line"),o=t("./Point"),a=t("./Scalar");e.exports=s,s.prototype.at=function(t){var e=this.vertices,i=e.length;return e[t<0?t%i+i:t%i]},s.prototype.first=function(){return this.vertices[0]},s.prototype.last=function(){return this.vertices[this.vertices.length-1]},s.prototype.clear=function(){this.vertices.length=0},s.prototype.append=function(t,e,i){if(void 0===e)throw new Error("From is not given!");if(void 0===i)throw new Error("To is not given!");if(i-1<e)throw new Error("lol1");if(i>t.vertices.length)throw new Error("lol2");if(e<0)throw new Error("lol3");for(var s=e;s<i;s++)this.vertices.push(t.vertices[s])},s.prototype.makeCCW=function(){for(var t=0,e=this.vertices,i=1;i<this.vertices.length;++i)(e[i][1]<e[t][1]||e[i][1]==e[t][1]&&e[i][0]>e[t][0])&&(t=i);o.left(this.at(t-1),this.at(t),this.at(t+1))||this.reverse()},s.prototype.reverse=function(){for(var t=[],e=0,i=this.vertices.length;e!==i;e++)t.push(this.vertices.pop());this.vertices=t},s.prototype.isReflex=function(t){return o.right(this.at(t-1),this.at(t),this.at(t+1))};var h=[],l=[];s.prototype.canSee=function(t,e){var i,s,n=h,a=l;if(o.leftOn(this.at(t+1),this.at(t),this.at(e))&&o.rightOn(this.at(t-1),this.at(t),this.at(e)))return!1;s=o.sqdist(this.at(t),this.at(e));for(var c=0;c!==this.vertices.length;++c)if((c+1)%this.vertices.length!==t&&c!==t&&o.leftOn(this.at(t),this.at(e),this.at(c+1))&&o.rightOn(this.at(t),this.at(e),this.at(c))&&(n[0]=this.at(t),n[1]=this.at(e),a[0]=this.at(c),a[1]=this.at(c+1),i=r.lineInt(n,a),o.sqdist(this.at(t),i)<s))return!1;return!0},s.prototype.copy=function(t,e,i){var n=i||new s;if(n.clear(),t<e)for(r=t;r<=e;r++)n.vertices.push(this.vertices[r]);else{for(r=0;r<=e;r++)n.vertices.push(this.vertices[r]);for(var r=t;r<this.vertices.length;r++)n.vertices.push(this.vertices[r])}return n},s.prototype.getCutEdges=function(){for(var t=[],e=[],i=[],n=new s,r=Number.MAX_VALUE,o=0;o<this.vertices.length;++o)if(this.isReflex(o))for(var a=0;a<this.vertices.length;++a)if(this.canSee(o,a)){e=this.copy(o,a,n).getCutEdges(),i=this.copy(a,o,n).getCutEdges();for(var h=0;h<i.length;h++)e.push(i[h]);e.length<r&&(t=e,r=e.length,t.push([this.at(o),this.at(a)]))}return t},s.prototype.decomp=function(){var t=this.getCutEdges();return t.length>0?this.slice(t):[this]},s.prototype.slice=function(t){if(0==t.length)return[this];if(t instanceof Array&&t.length&&t[0]instanceof Array&&2==t[0].length&&t[0][0]instanceof Array){for(var e=[this],i=0;i<t.length;i++)for(var s=t[i],n=0;n<e.length;n++){var r=e[n].slice(s);if(r){e.splice(n,1),e.push(r[0],r[1]);break}}return e}var s=t,i=this.vertices.indexOf(s[0]),n=this.vertices.indexOf(s[1]);return-1!=i&&-1!=n&&[this.copy(i,n),this.copy(n,i)]},s.prototype.isSimple=function(){for(var t=this.vertices,e=0;e<t.length-1;e++)for(var i=0;i<e-1;i++)if(r.segmentsIntersect(t[e],t[e+1],t[i],t[i+1]))return!1;for(e=1;e<t.length-2;e++)if(r.segmentsIntersect(t[0],t[t.length-1],t[e],t[e+1]))return!1;return!0},s.prototype.quickDecomp=function(t,e,i,r,a,h){a=a||100,h=h||0,r=r||25,t=void 0!==t?t:[],e=e||[],i=i||[];var l=[0,0],c=[0,0],u=[0,0],d=0,p=0,f=0,g=0,m=0,y=0,v=0,x=new s,b=new s,_=this,w=this.vertices;if(w.length<3)return t;if(++h>a)return console.warn("quickDecomp: max level ("+a+") reached."),t;for(var T=0;T<this.vertices.length;++T)if(_.isReflex(T)){e.push(_.vertices[T]),d=p=Number.MAX_VALUE;for(P=0;P<this.vertices.length;++P)o.left(_.at(T-1),_.at(T),_.at(P))&&o.rightOn(_.at(T-1),_.at(T),_.at(P-1))&&(u=n(_.at(T-1),_.at(T),_.at(P),_.at(P-1)),o.right(_.at(T+1),_.at(T),u)&&(f=o.sqdist(_.vertices[T],u))<p&&(p=f,c=u,y=P)),o.left(_.at(T+1),_.at(T),_.at(P+1))&&o.rightOn(_.at(T+1),_.at(T),_.at(P))&&(u=n(_.at(T+1),_.at(T),_.at(P),_.at(P+1)),o.left(_.at(T-1),_.at(T),u)&&(f=o.sqdist(_.vertices[T],u))<d&&(d=f,l=u,m=P));if(y==(m+1)%this.vertices.length)u[0]=(c[0]+l[0])/2,u[1]=(c[1]+l[1])/2,i.push(u),T<m?(x.append(_,T,m+1),x.vertices.push(u),b.vertices.push(u),0!=y&&b.append(_,y,_.vertices.length),b.append(_,0,T+1)):(0!=T&&x.append(_,T,_.vertices.length),x.append(_,0,m+1),x.vertices.push(u),b.vertices.push(u),b.append(_,y,T+1));else{if(y>m&&(m+=this.vertices.length),g=Number.MAX_VALUE,m<y)return t;for(var P=y;P<=m;++P)o.leftOn(_.at(T-1),_.at(T),_.at(P))&&o.rightOn(_.at(T+1),_.at(T),_.at(P))&&(f=o.sqdist(_.at(T),_.at(P)))<g&&(g=f,v=P%this.vertices.length);T<v?(x.append(_,T,v+1),0!=v&&b.append(_,v,w.length),b.append(_,0,T+1)):(0!=T&&x.append(_,T,w.length),x.append(_,0,v+1),b.append(_,v,T+1))}return x.vertices.length<b.vertices.length?(x.quickDecomp(t,e,i,r,a,h),b.quickDecomp(t,e,i,r,a,h)):(b.quickDecomp(t,e,i,r,a,h),x.quickDecomp(t,e,i,r,a,h)),t}return t.push(this),t},s.prototype.removeCollinearPoints=function(t){for(var e=0,i=this.vertices.length-1;this.vertices.length>3&&i>=0;--i)o.collinear(this.at(i-1),this.at(i),this.at(i+1),t)&&(this.vertices.splice(i%this.vertices.length,1),i--,e++);return e}},{"./Line":1,"./Point":2,"./Scalar":4}],4:[function(t,e,i){function s(){}e.exports=s,s.eq=function(t,e,i){return i=i||0,Math.abs(t-e)<i}},{}],5:[function(t,e,i){e.exports={Polygon:t("./Polygon"),Point:t("./Point")}},{"./Point":2,"./Polygon":3}],6:[function(t,e,i){e.exports={name:"p2",version:"0.7.1",description:"A JavaScript 2D physics engine.",author:"Stefan Hedman <schteppe@gmail.com> (http://steffe.se)",keywords:["p2.js","p2","physics","engine","2d"],main:"./src/p2.js",engines:{node:"*"},repository:{type:"git",url:"https://github.com/schteppe/p2.js.git"},bugs:{url:"https://github.com/schteppe/p2.js/issues"},licenses:[{type:"MIT"}],devDependencies:{grunt:"^0.4.5","grunt-contrib-jshint":"^0.11.2","grunt-contrib-nodeunit":"^0.4.1","grunt-contrib-uglify":"~0.4.0","grunt-contrib-watch":"~0.5.0","grunt-browserify":"~2.0.1","grunt-contrib-concat":"^0.4.0"},dependencies:{"poly-decomp":"0.1.1"}}},{}],7:[function(t,e,i){function s(t){this.lowerBound=n.create(),t&&t.lowerBound&&n.copy(this.lowerBound,t.lowerBound),this.upperBound=n.create(),t&&t.upperBound&&n.copy(this.upperBound,t.upperBound)}var n=t("../math/vec2");t("../utils/Utils");e.exports=s;var r=n.create();s.prototype.setFromPoints=function(t,e,i,s){var o=this.lowerBound,a=this.upperBound;"number"!=typeof i&&(i=0),0!==i?n.rotate(o,t[0],i):n.copy(o,t[0]),n.copy(a,o);for(var h=Math.cos(i),l=Math.sin(i),c=1;c<t.length;c++){var u=t[c];if(0!==i){var d=u[0],p=u[1];r[0]=h*d-l*p,r[1]=l*d+h*p,u=r}for(var f=0;f<2;f++)u[f]>a[f]&&(a[f]=u[f]),u[f]<o[f]&&(o[f]=u[f])}e&&(n.add(this.lowerBound,this.lowerBound,e),n.add(this.upperBound,this.upperBound,e)),s&&(this.lowerBound[0]-=s,this.lowerBound[1]-=s,this.upperBound[0]+=s,this.upperBound[1]+=s)},s.prototype.copy=function(t){n.copy(this.lowerBound,t.lowerBound),n.copy(this.upperBound,t.upperBound)},s.prototype.extend=function(t){for(var e=2;e--;){var i=t.lowerBound[e];this.lowerBound[e]>i&&(this.lowerBound[e]=i);var s=t.upperBound[e];this.upperBound[e]<s&&(this.upperBound[e]=s)}},s.prototype.overlaps=function(t){var e=this.lowerBound,i=this.upperBound,s=t.lowerBound,n=t.upperBound;return(s[0]<=i[0]&&i[0]<=n[0]||e[0]<=n[0]&&n[0]<=i[0])&&(s[1]<=i[1]&&i[1]<=n[1]||e[1]<=n[1]&&n[1]<=i[1])},s.prototype.containsPoint=function(t){var e=this.lowerBound,i=this.upperBound;return e[0]<=t[0]&&t[0]<=i[0]&&e[1]<=t[1]&&t[1]<=i[1]},s.prototype.overlapsRay=function(t){var e=1/t.direction[0],i=1/t.direction[1],s=(this.lowerBound[0]-t.from[0])*e,n=(this.upperBound[0]-t.from[0])*e,r=(this.lowerBound[1]-t.from[1])*i,o=(this.upperBound[1]-t.from[1])*i,a=Math.max(Math.max(Math.min(s,n),Math.min(r,o))),h=Math.min(Math.min(Math.max(s,n),Math.max(r,o)));return h<0?-1:a>h?-1:a}},{"../math/vec2":30,"../utils/Utils":57}],8:[function(t,e,i){function s(t){this.type=t,this.result=[],this.world=null,this.boundingVolumeType=s.AABB}var n=t("../math/vec2"),r=t("../objects/Body");e.exports=s,s.AABB=1,s.BOUNDING_CIRCLE=2,s.prototype.setWorld=function(t){this.world=t},s.prototype.getCollisionPairs=function(t){};var o=n.create();s.boundingRadiusCheck=function(t,e){n.sub(o,t.position,e.position);var i=n.squaredLength(o),s=t.boundingRadius+e.boundingRadius;return i<=s*s},s.aabbCheck=function(t,e){return t.getAABB().overlaps(e.getAABB())},s.prototype.boundingVolumeCheck=function(t,e){var i;switch(this.boundingVolumeType){case s.BOUNDING_CIRCLE:i=s.boundingRadiusCheck(t,e);break;case s.AABB:i=s.aabbCheck(t,e);break;default:throw new Error("Bounding volume type not recognized: "+this.boundingVolumeType)}return i},s.canCollide=function(t,e){var i=r.KINEMATIC,s=r.STATIC;return(t.type!==s||e.type!==s)&&(!(t.type===i&&e.type===s||t.type===s&&e.type===i)&&((t.type!==i||e.type!==i)&&((t.sleepState!==r.SLEEPING||e.sleepState!==r.SLEEPING)&&!(t.sleepState===r.SLEEPING&&e.type===s||e.sleepState===r.SLEEPING&&t.type===s))))},s.NAIVE=1,s.SAP=2},{"../math/vec2":30,"../objects/Body":31}],9:[function(t,e,i){function s(){n.call(this,n.NAIVE)}t("../shapes/Circle"),t("../shapes/Plane"),t("../shapes/Shape"),t("../shapes/Particle");var n=t("../collision/Broadphase");t("../math/vec2");e.exports=s,(s.prototype=new n).constructor=s,s.prototype.getCollisionPairs=function(t){var e=t.bodies,i=this.result;i.length=0;for(var s=0,r=e.length;s!==r;s++)for(var o=e[s],a=0;a<s;a++){var h=e[a];n.canCollide(o,h)&&this.boundingVolumeCheck(o,h)&&i.push(o,h)}return i},s.prototype.aabbQuery=function(t,e,i){i=i||[];for(var s=t.bodies,n=0;n<s.length;n++){var r=s[n];r.aabbNeedsUpdate&&r.updateAABB(),r.aabb.overlaps(e)&&i.push(r)}return i}},{"../collision/Broadphase":8,"../math/vec2":30,"../shapes/Circle":39,"../shapes/Particle":43,"../shapes/Plane":44,"../shapes/Shape":45}],10:[function(t,e,i){function s(){this.contactEquations=[],this.frictionEquations=[],this.enableFriction=!0,this.enabledEquations=!0,this.slipForce=10,this.frictionCoefficient=.3,this.surfaceVelocity=0,this.contactEquationPool=new c({size:32}),this.frictionEquationPool=new u({size:64}),this.restitution=0,this.stiffness=p.DEFAULT_STIFFNESS,this.relaxation=p.DEFAULT_RELAXATION,this.frictionStiffness=p.DEFAULT_STIFFNESS,this.frictionRelaxation=p.DEFAULT_RELAXATION,this.enableFrictionReduction=!0,this.collidingBodiesLastStep=new d,this.contactSkinSize=.01}function n(t,e){o.set(t.vertices[0],.5*-e.length,-e.radius),o.set(t.vertices[1],.5*e.length,-e.radius),o.set(t.vertices[2],.5*e.length,e.radius),o.set(t.vertices[3],.5*-e.length,e.radius)}function r(t,e,i,s){for(var n=q,r=H,l=Y,c=z,u=t,d=e.vertices,p=null,f=0;f!==d.length+1;f++){var g=d[f%d.length],m=d[(f+1)%d.length];o.rotate(n,g,s),o.rotate(r,m,s),h(n,n,i),h(r,r,i),a(l,n,u),a(c,r,u);var y=o.crossLength(l,c);if(null===p&&(p=y),y*p<=0)return!1;p=y}return!0}var o=t("../math/vec2"),a=o.sub,h=o.add,l=o.dot,c=(t("../utils/Utils"),t("../utils/ContactEquationPool")),u=t("../utils/FrictionEquationPool"),d=t("../utils/TupleDictionary"),p=t("../equations/Equation"),f=(t("../equations/ContactEquation"),t("../equations/FrictionEquation"),t("../shapes/Circle")),g=t("../shapes/Convex"),m=t("../shapes/Shape"),y=(t("../objects/Body"),t("../shapes/Box"));e.exports=s;var v=o.fromValues(0,1),x=o.fromValues(0,0),b=o.fromValues(0,0),_=o.fromValues(0,0),w=o.fromValues(0,0),T=o.fromValues(0,0),P=o.fromValues(0,0),C=o.fromValues(0,0),S=o.fromValues(0,0),A=o.fromValues(0,0),E=o.fromValues(0,0),M=o.fromValues(0,0),R=o.fromValues(0,0),L=o.fromValues(0,0),B=o.fromValues(0,0),I=o.fromValues(0,0),O=o.fromValues(0,0),k=o.fromValues(0,0),F=o.fromValues(0,0),D=[],U=o.create(),G=o.create();s.prototype.bodiesOverlap=function(t,e){for(var i=U,s=G,n=0,r=t.shapes.length;n!==r;n++){var o=t.shapes[n];t.toWorldFrame(i,o.position);for(var a=0,h=e.shapes.length;a!==h;a++){var l=e.shapes[a];if(e.toWorldFrame(s,l.position),this[o.type|l.type](t,o,i,o.angle+t.angle,e,l,s,l.angle+e.angle,!0))return!0}}return!1},s.prototype.collidedLastStep=function(t,e){var i=0|t.id,s=0|e.id;return!!this.collidingBodiesLastStep.get(i,s)},s.prototype.reset=function(){this.collidingBodiesLastStep.reset();for(var t=this.contactEquations,e=t.length;e--;){var i=t[e],s=i.bodyA.id,n=i.bodyB.id;this.collidingBodiesLastStep.set(s,n,!0)}for(var r=this.contactEquations,o=this.frictionEquations,a=0;a<r.length;a++)this.contactEquationPool.release(r[a]);for(a=0;a<o.length;a++)this.frictionEquationPool.release(o[a]);this.contactEquations.length=this.frictionEquations.length=0},s.prototype.createContactEquation=function(t,e,i,s){var n=this.contactEquationPool.get();return n.bodyA=t,n.bodyB=e,n.shapeA=i,n.shapeB=s,n.restitution=this.restitution,n.firstImpact=!this.collidedLastStep(t,e),n.stiffness=this.stiffness,n.relaxation=this.relaxation,n.needsUpdate=!0,n.enabled=this.enabledEquations,n.offset=this.contactSkinSize,n},s.prototype.createFrictionEquation=function(t,e,i,s){var n=this.frictionEquationPool.get();return n.bodyA=t,n.bodyB=e,n.shapeA=i,n.shapeB=s,n.setSlipForce(this.slipForce),n.frictionCoefficient=this.frictionCoefficient,n.relativeVelocity=this.surfaceVelocity,n.enabled=this.enabledEquations,n.needsUpdate=!0,n.stiffness=this.frictionStiffness,n.relaxation=this.frictionRelaxation,n.contactEquations.length=0,n},s.prototype.createFrictionFromContact=function(t){var e=this.createFrictionEquation(t.bodyA,t.bodyB,t.shapeA,t.shapeB);return o.copy(e.contactPointA,t.contactPointA),o.copy(e.contactPointB,t.contactPointB),o.rotate90cw(e.t,t.normalA),e.contactEquations.push(t),e},s.prototype.createFrictionFromAverage=function(t){var e=this.contactEquations[this.contactEquations.length-1],i=this.createFrictionEquation(e.bodyA,e.bodyB,e.shapeA,e.shapeB),s=e.bodyA;e.bodyB;o.set(i.contactPointA,0,0),o.set(i.contactPointB,0,0),o.set(i.t,0,0);for(var n=0;n!==t;n++)(e=this.contactEquations[this.contactEquations.length-1-n]).bodyA===s?(o.add(i.t,i.t,e.normalA),o.add(i.contactPointA,i.contactPointA,e.contactPointA),o.add(i.contactPointB,i.contactPointB,e.contactPointB)):(o.sub(i.t,i.t,e.normalA),o.add(i.contactPointA,i.contactPointA,e.contactPointB),o.add(i.contactPointB,i.contactPointB,e.contactPointA)),i.contactEquations.push(e);var r=1/t;return o.scale(i.contactPointA,i.contactPointA,r),o.scale(i.contactPointB,i.contactPointB,r),o.normalize(i.t,i.t),o.rotate90cw(i.t,i.t),i},s.prototype[m.LINE|m.CONVEX]=s.prototype.convexLine=function(t,e,i,s,n,r,o,a,h){return!h&&0},s.prototype[m.LINE|m.BOX]=s.prototype.lineBox=function(t,e,i,s,n,r,o,a,h){return!h&&0};var N=new y({width:1,height:1}),X=o.create();s.prototype[m.CAPSULE|m.CONVEX]=s.prototype[m.CAPSULE|m.BOX]=s.prototype.convexCapsule=function(t,e,i,s,r,a,h,l,c){var u=X;o.set(u,a.length/2,0),o.rotate(u,u,l),o.add(u,u,h);var d=this.circleConvex(r,a,u,l,t,e,i,s,c,a.radius);o.set(u,-a.length/2,0),o.rotate(u,u,l),o.add(u,u,h);var p=this.circleConvex(r,a,u,l,t,e,i,s,c,a.radius);if(c&&(d||p))return!0;var f=N;return n(f,a),this.convexConvex(t,e,i,s,r,f,h,l,c)+d+p},s.prototype[m.CAPSULE|m.LINE]=s.prototype.lineCapsule=function(t,e,i,s,n,r,o,a,h){return!h&&0};var W=o.create(),j=o.create(),V=new y({width:1,height:1});s.prototype[m.CAPSULE|m.CAPSULE]=s.prototype.capsuleCapsule=function(t,e,i,s,r,a,h,l,c){for(var u=W,d=j,p=0,f=0;f<2;f++){o.set(u,(0===f?-1:1)*e.length/2,0),o.rotate(u,u,s),o.add(u,u,i);for(var g=0;g<2;g++){o.set(d,(0===g?-1:1)*a.length/2,0),o.rotate(d,d,l),o.add(d,d,h),this.enableFrictionReduction&&(x=this.enableFriction,this.enableFriction=!1);var m=this.circleCircle(t,e,u,s,r,a,d,l,c,e.radius,a.radius);if(this.enableFrictionReduction&&(this.enableFriction=x),c&&m)return!0;p+=m}}this.enableFrictionReduction&&(x=this.enableFriction,this.enableFriction=!1);var y=V;n(y,e);var v=this.convexCapsule(t,y,i,s,r,a,h,l,c);if(this.enableFrictionReduction&&(this.enableFriction=x),c&&v)return!0;if(p+=v,this.enableFrictionReduction){var x=this.enableFriction;this.enableFriction=!1}n(y,a);var b=this.convexCapsule(r,y,h,l,t,e,i,s,c);return this.enableFrictionReduction&&(this.enableFriction=x),!(!c||!b)||(p+=b,this.enableFrictionReduction&&p&&this.enableFriction&&this.frictionEquations.push(this.createFrictionFromAverage(p)),p)},s.prototype[m.LINE|m.LINE]=s.prototype.lineLine=function(t,e,i,s,n,r,o,a,h){return!h&&0},s.prototype[m.PLANE|m.LINE]=s.prototype.planeLine=function(t,e,i,s,n,r,c,u,d){var p=x,f=b,g=_,m=w,y=T,E=P,M=C,R=S,L=A,B=D,I=0;o.set(p,-r.length/2,0),o.set(f,r.length/2,0),o.rotate(g,p,u),o.rotate(m,f,u),h(g,g,c),h(m,m,c),o.copy(p,g),o.copy(f,m),a(y,f,p),o.normalize(E,y),o.rotate90cw(L,E),o.rotate(R,v,s),B[0]=p,B[1]=f;for(var O=0;O<B.length;O++){var k=B[O];a(M,k,i);var F=l(M,R);if(F<0){if(d)return!0;var U=this.createContactEquation(t,n,e,r);I++,o.copy(U.normalA,R),o.normalize(U.normalA,U.normalA),o.scale(M,R,F),a(U.contactPointA,k,M),a(U.contactPointA,U.contactPointA,t.position),a(U.contactPointB,k,c),h(U.contactPointB,U.contactPointB,c),a(U.contactPointB,U.contactPointB,n.position),this.contactEquations.push(U),this.enableFrictionReduction||this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(U))}}return!d&&(this.enableFrictionReduction||I&&this.enableFriction&&this.frictionEquations.push(this.createFrictionFromAverage(I)),I)},s.prototype[m.PARTICLE|m.CAPSULE]=s.prototype.particleCapsule=function(t,e,i,s,n,r,o,a,h){return this.circleLine(t,e,i,s,n,r,o,a,h,r.radius,0)},s.prototype[m.CIRCLE|m.LINE]=s.prototype.circleLine=function(t,e,i,s,n,r,c,u,d,p,f){var p=p||0,f=void 0!==f?f:e.radius,g=x,m=b,y=_,v=w,I=T,O=P,k=C,F=S,U=A,G=E,N=M,X=R,W=L,j=B,V=D;o.set(F,-r.length/2,0),o.set(U,r.length/2,0),o.rotate(G,F,u),o.rotate(N,U,u),h(G,G,c),h(N,N,c),o.copy(F,G),o.copy(U,N),a(O,U,F),o.normalize(k,O),o.rotate90cw(I,k),a(X,i,F);var q=l(X,I);a(v,F,c),a(W,i,c);var H=f+p;if(Math.abs(q)<H){o.scale(g,I,q),a(y,i,g),o.scale(m,I,l(I,W)),o.normalize(m,m),o.scale(m,m,p),h(y,y,m);var Y=l(k,y),z=l(k,F),K=l(k,U);if(Y>z&&Y<K){if(d)return!0;Z=this.createContactEquation(t,n,e,r);return o.scale(Z.normalA,g,-1),o.normalize(Z.normalA,Z.normalA),o.scale(Z.contactPointA,Z.normalA,f),h(Z.contactPointA,Z.contactPointA,i),a(Z.contactPointA,Z.contactPointA,t.position),a(Z.contactPointB,y,c),h(Z.contactPointB,Z.contactPointB,c),a(Z.contactPointB,Z.contactPointB,n.position),this.contactEquations.push(Z),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(Z)),1}}V[0]=F,V[1]=U;for(var J=0;J<V.length;J++){var Q=V[J];if(a(X,Q,i),o.squaredLength(X)<Math.pow(H,2)){if(d)return!0;var Z=this.createContactEquation(t,n,e,r);return o.copy(Z.normalA,X),o.normalize(Z.normalA,Z.normalA),o.scale(Z.contactPointA,Z.normalA,f),h(Z.contactPointA,Z.contactPointA,i),a(Z.contactPointA,Z.contactPointA,t.position),a(Z.contactPointB,Q,c),o.scale(j,Z.normalA,-p),h(Z.contactPointB,Z.contactPointB,j),h(Z.contactPointB,Z.contactPointB,c),a(Z.contactPointB,Z.contactPointB,n.position),this.contactEquations.push(Z),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(Z)),1}}return 0},s.prototype[m.CIRCLE|m.CAPSULE]=s.prototype.circleCapsule=function(t,e,i,s,n,r,o,a,h){return this.circleLine(t,e,i,s,n,r,o,a,h,r.radius)},s.prototype[m.CIRCLE|m.CONVEX]=s.prototype[m.CIRCLE|m.BOX]=s.prototype.circleConvex=function(t,e,i,s,n,l,c,u,d,p){for(var p="number"==typeof p?p:e.radius,f=x,g=b,m=_,y=w,v=T,P=E,C=M,S=L,A=B,R=I,k=O,F=!1,D=Number.MAX_VALUE,U=l.vertices,G=0;G!==U.length+1;G++){var N=U[G%U.length],X=U[(G+1)%U.length];if(o.rotate(f,N,u),o.rotate(g,X,u),h(f,f,c),h(g,g,c),a(m,g,f),o.normalize(y,m),o.rotate90cw(v,y),o.scale(A,v,-e.radius),h(A,A,i),r(A,l,c,u)){o.sub(R,f,A);var W=Math.abs(o.dot(R,v));W<D&&(o.copy(k,A),D=W,o.scale(S,v,W),o.add(S,S,A),F=!0)}}if(F){if(d)return!0;V=this.createContactEquation(t,n,e,l);return o.sub(V.normalA,k,i),o.normalize(V.normalA,V.normalA),o.scale(V.contactPointA,V.normalA,p),h(V.contactPointA,V.contactPointA,i),a(V.contactPointA,V.contactPointA,t.position),a(V.contactPointB,S,c),h(V.contactPointB,V.contactPointB,c),a(V.contactPointB,V.contactPointB,n.position),this.contactEquations.push(V),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(V)),1}if(p>0)for(G=0;G<U.length;G++){var j=U[G];if(o.rotate(C,j,u),h(C,C,c),a(P,C,i),o.squaredLength(P)<Math.pow(p,2)){if(d)return!0;var V=this.createContactEquation(t,n,e,l);return o.copy(V.normalA,P),o.normalize(V.normalA,V.normalA),o.scale(V.contactPointA,V.normalA,p),h(V.contactPointA,V.contactPointA,i),a(V.contactPointA,V.contactPointA,t.position),a(V.contactPointB,C,c),h(V.contactPointB,V.contactPointB,c),a(V.contactPointB,V.contactPointB,n.position),this.contactEquations.push(V),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(V)),1}}return 0};var q=o.create(),H=o.create(),Y=o.create(),z=o.create();s.prototype[m.PARTICLE|m.CONVEX]=s.prototype[m.PARTICLE|m.BOX]=s.prototype.particleConvex=function(t,e,i,s,n,c,u,d,p){var f=x,g=b,m=_,y=w,v=T,S=P,A=C,M=E,R=L,B=k,I=F,O=Number.MAX_VALUE,D=!1,U=c.vertices;if(!r(i,c,u,d))return 0;if(p)return!0;for(var G=0;G!==U.length+1;G++){var N=U[G%U.length],X=U[(G+1)%U.length];o.rotate(f,N,d),o.rotate(g,X,d),h(f,f,u),h(g,g,u),a(m,g,f),o.normalize(y,m),o.rotate90cw(v,y),a(M,i,f);l(M,v);a(S,f,u),a(A,i,u),o.sub(B,f,i);var W=Math.abs(o.dot(B,v));W<O&&(O=W,o.scale(R,v,W),o.add(R,R,i),o.copy(I,v),D=!0)}if(D){var j=this.createContactEquation(t,n,e,c);return o.scale(j.normalA,I,-1),o.normalize(j.normalA,j.normalA),o.set(j.contactPointA,0,0),h(j.contactPointA,j.contactPointA,i),a(j.contactPointA,j.contactPointA,t.position),a(j.contactPointB,R,u),h(j.contactPointB,j.contactPointB,u),a(j.contactPointB,j.contactPointB,n.position),this.contactEquations.push(j),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(j)),1}return 0},s.prototype[m.CIRCLE]=s.prototype.circleCircle=function(t,e,i,s,n,r,l,c,u,d,p){var f=x,d=d||e.radius,p=p||r.radius;a(f,i,l);var g=d+p;if(o.squaredLength(f)>Math.pow(g,2))return 0;if(u)return!0;var m=this.createContactEquation(t,n,e,r);return a(m.normalA,l,i),o.normalize(m.normalA,m.normalA),o.scale(m.contactPointA,m.normalA,d),o.scale(m.contactPointB,m.normalA,-p),h(m.contactPointA,m.contactPointA,i),a(m.contactPointA,m.contactPointA,t.position),h(m.contactPointB,m.contactPointB,l),a(m.contactPointB,m.contactPointB,n.position),this.contactEquations.push(m),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(m)),1},s.prototype[m.PLANE|m.CONVEX]=s.prototype[m.PLANE|m.BOX]=s.prototype.planeConvex=function(t,e,i,s,n,r,c,u,d){var p=x,f=b,g=_,m=0;o.rotate(f,v,s);for(var y=0;y!==r.vertices.length;y++){var w=r.vertices[y];if(o.rotate(p,w,u),h(p,p,c),a(g,p,i),l(g,f)<=0){if(d)return!0;m++;var T=this.createContactEquation(t,n,e,r);a(g,p,i),o.copy(T.normalA,f);var P=l(g,T.normalA);o.scale(g,T.normalA,P),a(T.contactPointB,p,n.position),a(T.contactPointA,p,g),a(T.contactPointA,T.contactPointA,t.position),this.contactEquations.push(T),this.enableFrictionReduction||this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(T))}}return this.enableFrictionReduction&&this.enableFriction&&m&&this.frictionEquations.push(this.createFrictionFromAverage(m)),m},s.prototype[m.PARTICLE|m.PLANE]=s.prototype.particlePlane=function(t,e,i,s,n,r,h,c,u){var d=x,p=b;c=c||0,a(d,i,h),o.rotate(p,v,c);var f=l(d,p);if(f>0)return 0;if(u)return!0;var g=this.createContactEquation(n,t,r,e);return o.copy(g.normalA,p),o.scale(d,g.normalA,f),a(g.contactPointA,i,d),a(g.contactPointA,g.contactPointA,n.position),a(g.contactPointB,i,t.position),this.contactEquations.push(g),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(g)),1},s.prototype[m.CIRCLE|m.PARTICLE]=s.prototype.circleParticle=function(t,e,i,s,n,r,l,c,u){var d=x;if(a(d,l,i),o.squaredLength(d)>Math.pow(e.radius,2))return 0;if(u)return!0;var p=this.createContactEquation(t,n,e,r);return o.copy(p.normalA,d),o.normalize(p.normalA,p.normalA),o.scale(p.contactPointA,p.normalA,e.radius),h(p.contactPointA,p.contactPointA,i),a(p.contactPointA,p.contactPointA,t.position),a(p.contactPointB,l,n.position),this.contactEquations.push(p),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(p)),1};var K=new f({radius:1}),J=o.create(),Q=o.create();o.create();s.prototype[m.PLANE|m.CAPSULE]=s.prototype.planeCapsule=function(t,e,i,s,n,r,a,l,c){var u=J,d=Q,p=K;o.set(u,-r.length/2,0),o.rotate(u,u,l),h(u,u,a),o.set(d,r.length/2,0),o.rotate(d,d,l),h(d,d,a),p.radius=r.radius;var f;this.enableFrictionReduction&&(f=this.enableFriction,this.enableFriction=!1);var g=this.circlePlane(n,p,u,0,t,e,i,s,c),m=this.circlePlane(n,p,d,0,t,e,i,s,c);if(this.enableFrictionReduction&&(this.enableFriction=f),c)return g||m;var y=g+m;return this.enableFrictionReduction&&y&&this.frictionEquations.push(this.createFrictionFromAverage(y)),y},s.prototype[m.CIRCLE|m.PLANE]=s.prototype.circlePlane=function(t,e,i,s,n,r,c,u,d){var p=t,f=e,g=i,m=n,y=c,w=u;w=w||0;var T=x,P=b,C=_;a(T,g,y),o.rotate(P,v,w);var S=l(P,T);if(S>f.radius)return 0;if(d)return!0;var A=this.createContactEquation(m,p,r,e);return o.copy(A.normalA,P),o.scale(A.contactPointB,A.normalA,-f.radius),h(A.contactPointB,A.contactPointB,g),a(A.contactPointB,A.contactPointB,p.position),o.scale(C,A.normalA,S),a(A.contactPointA,T,C),h(A.contactPointA,A.contactPointA,y),a(A.contactPointA,A.contactPointA,m.position),this.contactEquations.push(A),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(A)),1},s.prototype[m.CONVEX]=s.prototype[m.CONVEX|m.BOX]=s.prototype[m.BOX]=s.prototype.convexConvex=function(t,e,i,n,r,c,u,d,p,f){var g=x,m=b,y=_,v=w,P=T,E=C,M=S,R=A,L=0,f="number"==typeof f?f:0;if(!s.findSeparatingAxis(e,i,n,c,u,d,g))return 0;a(M,u,i),l(g,M)>0&&o.scale(g,g,-1);var B=s.getClosestEdge(e,n,g,!0),I=s.getClosestEdge(c,d,g);if(-1===B||-1===I)return 0;for(var O=0;O<2;O++){var k=B,F=I,D=e,U=c,G=i,N=u,X=n,W=d,j=t,V=r;if(0===O){var q;q=k,k=F,F=q,q=D,D=U,U=q,q=G,G=N,N=q,q=X,X=W,W=q,q=j,j=V,V=q}for(var H=F;H<F+2;H++){var Y=U.vertices[(H+U.vertices.length)%U.vertices.length];o.rotate(m,Y,W),h(m,m,N);for(var z=0,K=k-1;K<k+2;K++){var J=D.vertices[(K+D.vertices.length)%D.vertices.length],Q=D.vertices[(K+1+D.vertices.length)%D.vertices.length];o.rotate(y,J,X),o.rotate(v,Q,X),h(y,y,G),h(v,v,G),a(P,v,y),o.rotate90cw(R,P),o.normalize(R,R),a(M,m,y);$=l(R,M);(K===k&&$<=f||K!==k&&$<=0)&&z++}if(z>=3){if(p)return!0;var Z=this.createContactEquation(j,V,D,U);L++;var J=D.vertices[k%D.vertices.length],Q=D.vertices[(k+1)%D.vertices.length];o.rotate(y,J,X),o.rotate(v,Q,X),h(y,y,G),h(v,v,G),a(P,v,y),o.rotate90cw(Z.normalA,P),o.normalize(Z.normalA,Z.normalA),a(M,m,y);var $=l(Z.normalA,M);o.scale(E,Z.normalA,$),a(Z.contactPointA,m,G),a(Z.contactPointA,Z.contactPointA,E),h(Z.contactPointA,Z.contactPointA,G),a(Z.contactPointA,Z.contactPointA,j.position),a(Z.contactPointB,m,N),h(Z.contactPointB,Z.contactPointB,N),a(Z.contactPointB,Z.contactPointB,V.position),this.contactEquations.push(Z),this.enableFrictionReduction||this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(Z))}}}return this.enableFrictionReduction&&this.enableFriction&&L&&this.frictionEquations.push(this.createFrictionFromAverage(L)),L};var Z=o.fromValues(0,0);s.projectConvexOntoAxis=function(t,e,i,s,n){var r,a,h=null,c=null,u=Z;o.rotate(u,s,-i);for(var d=0;d<t.vertices.length;d++)r=t.vertices[d],a=l(r,u),(null===h||a>h)&&(h=a),(null===c||a<c)&&(c=a);if(c>h){var p=c;c=h,h=p}var f=l(e,s);o.set(n,c+f,h+f)};var $=o.fromValues(0,0),tt=o.fromValues(0,0),et=o.fromValues(0,0),it=o.fromValues(0,0),st=o.fromValues(0,0),nt=o.fromValues(0,0);s.findSeparatingAxis=function(t,e,i,n,r,h,l){var c=null,u=!1,d=!1,p=$,f=tt,g=et,m=it,v=st,x=nt;if(t instanceof y&&n instanceof y)for(P=0;2!==P;P++){var b=t,_=i;1===P&&(b=n,_=h);for(C=0;2!==C;C++){0===C?o.set(m,0,1):1===C&&o.set(m,1,0),0!==_&&o.rotate(m,m,_),s.projectConvexOntoAxis(t,e,i,m,v),s.projectConvexOntoAxis(n,r,h,m,x);var w=v,T=x;v[0]>x[0]&&(T=v,w=x,!0),u=(S=T[0]-w[1])<=0,(null===c||S>c)&&(o.copy(l,m),c=S,d=u)}}else for(var P=0;2!==P;P++){var b=t,_=i;1===P&&(b=n,_=h);for(var C=0;C!==b.vertices.length;C++){o.rotate(f,b.vertices[C],_),o.rotate(g,b.vertices[(C+1)%b.vertices.length],_),a(p,g,f),o.rotate90cw(m,p),o.normalize(m,m),s.projectConvexOntoAxis(t,e,i,m,v),s.projectConvexOntoAxis(n,r,h,m,x);var w=v,T=x;v[0]>x[0]&&(T=v,w=x,!0);var S=T[0]-w[1];u=S<=0,(null===c||S>c)&&(o.copy(l,m),c=S,d=u)}}return d};var rt=o.fromValues(0,0),ot=o.fromValues(0,0),at=o.fromValues(0,0);s.getClosestEdge=function(t,e,i,s){var n=rt,r=ot,h=at;o.rotate(n,i,-e),s&&o.scale(n,n,-1);for(var c=-1,u=t.vertices.length,d=-1,p=0;p!==u;p++){a(r,t.vertices[(p+1)%u],t.vertices[p%u]),o.rotate90cw(h,r),o.normalize(h,h);var f=l(h,n);(-1===c||f>d)&&(c=p%u,d=f)}return c};var ht=o.create(),lt=o.create(),ct=o.create(),ut=o.create(),dt=o.create(),pt=o.create(),ft=o.create();s.prototype[m.CIRCLE|m.HEIGHTFIELD]=s.prototype.circleHeightfield=function(t,e,i,s,n,r,l,c,u,d){var p=r.heights,d=d||e.radius,f=r.elementWidth,g=lt,m=ht,y=dt,v=ft,x=pt,b=ct,_=ut,w=Math.floor((i[0]-d-l[0])/f),T=Math.ceil((i[0]+d-l[0])/f);w<0&&(w=0),T>=p.length&&(T=p.length-1);for(var P=p[w],C=p[T],S=w;S<T;S++)p[S]<C&&(C=p[S]),p[S]>P&&(P=p[S]);if(i[1]-d>P)return!u&&0;for(var A=!1,S=w;S<T;S++){o.set(b,S*f,p[S]),o.set(_,(S+1)*f,p[S+1]),o.add(b,b,l),o.add(_,_,l),o.sub(x,_,b),o.rotate(x,x,Math.PI/2),o.normalize(x,x),o.scale(m,x,-d),o.add(m,m,i),o.sub(g,m,b);var E=o.dot(g,x);if(m[0]>=b[0]&&m[0]<_[0]&&E<=0){if(u)return!0;A=!0,o.scale(g,x,-E),o.add(y,m,g),o.copy(v,x);M=this.createContactEquation(n,t,r,e);o.copy(M.normalA,v),o.scale(M.contactPointB,M.normalA,-d),h(M.contactPointB,M.contactPointB,i),a(M.contactPointB,M.contactPointB,t.position),o.copy(M.contactPointA,y),o.sub(M.contactPointA,M.contactPointA,n.position),this.contactEquations.push(M),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(M))}}if(A=!1,d>0)for(S=w;S<=T;S++)if(o.set(b,S*f,p[S]),o.add(b,b,l),o.sub(g,i,b),o.squaredLength(g)<Math.pow(d,2)){if(u)return!0;A=!0;var M=this.createContactEquation(n,t,r,e);o.copy(M.normalA,g),o.normalize(M.normalA,M.normalA),o.scale(M.contactPointB,M.normalA,-d),h(M.contactPointB,M.contactPointB,i),a(M.contactPointB,M.contactPointB,t.position),a(M.contactPointA,b,l),h(M.contactPointA,M.contactPointA,l),a(M.contactPointA,M.contactPointA,n.position),this.contactEquations.push(M),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(M))}return A?1:0};var gt=o.create(),mt=o.create(),yt=o.create(),vt=new g({vertices:[o.create(),o.create(),o.create(),o.create()]});s.prototype[m.BOX|m.HEIGHTFIELD]=s.prototype[m.CONVEX|m.HEIGHTFIELD]=s.prototype.convexHeightfield=function(t,e,i,s,n,r,a,h,l){var c=r.heights,u=r.elementWidth,d=gt,p=mt,f=yt,g=vt,m=Math.floor((t.aabb.lowerBound[0]-a[0])/u),y=Math.ceil((t.aabb.upperBound[0]-a[0])/u);m<0&&(m=0),y>=c.length&&(y=c.length-1);for(var v=c[m],x=c[y],b=m;b<y;b++)c[b]<x&&(x=c[b]),c[b]>v&&(v=c[b]);if(t.aabb.lowerBound[1]>v)return!l&&0;for(var _=0,b=m;b<y;b++){o.set(d,b*u,c[b]),o.set(p,(b+1)*u,c[b+1]),o.add(d,d,a),o.add(p,p,a);o.set(f,.5*(p[0]+d[0]),.5*(p[1]+d[1]-100)),o.sub(g.vertices[0],p,f),o.sub(g.vertices[1],d,f),o.copy(g.vertices[2],g.vertices[1]),o.copy(g.vertices[3],g.vertices[0]),g.vertices[2][1]-=100,g.vertices[3][1]-=100,_+=this.convexConvex(t,e,i,s,n,g,f,0,l)}return _}},{"../equations/ContactEquation":21,"../equations/Equation":22,"../equations/FrictionEquation":23,"../math/vec2":30,"../objects/Body":31,"../shapes/Box":37,"../shapes/Circle":39,"../shapes/Convex":40,"../shapes/Shape":45,"../utils/ContactEquationPool":48,"../utils/FrictionEquationPool":49,"../utils/TupleDictionary":56,"../utils/Utils":57}],11:[function(t,e,i){function s(t){t=t||{},this.from=t.from?r.fromValues(t.from[0],t.from[1]):r.create(),this.to=t.to?r.fromValues(t.to[0],t.to[1]):r.create(),this.checkCollisionResponse=void 0===t.checkCollisionResponse||t.checkCollisionResponse,this.skipBackfaces=!!t.skipBackfaces,this.collisionMask=void 0!==t.collisionMask?t.collisionMask:-1,this.collisionGroup=void 0!==t.collisionGroup?t.collisionGroup:-1,this.mode=void 0!==t.mode?t.mode:s.ANY,this.callback=t.callback||function(t){},this.direction=r.create(),this.length=1,this.update()}function n(t,e,i){r.sub(a,i,t);var s=r.dot(a,e);return r.scale(h,e,s),r.add(h,h,t),r.squaredDistance(i,h)}e.exports=s;var r=t("../math/vec2");t("../collision/RaycastResult"),t("../shapes/Shape"),t("../collision/AABB");s.prototype.constructor=s,s.CLOSEST=1,s.ANY=2,s.ALL=4,s.prototype.update=function(){var t=this.direction;r.sub(t,this.to,this.from),this.length=r.length(t),r.normalize(t,t)},s.prototype.intersectBodies=function(t,e){for(var i=0,s=e.length;!t.shouldStop(this)&&i<s;i++){var n=e[i],r=n.getAABB();(r.overlapsRay(this)>=0||r.containsPoint(this.from))&&this.intersectBody(t,n)}};var o=r.create();s.prototype.intersectBody=function(t,e){var i=this.checkCollisionResponse;if(!i||e.collisionResponse)for(var s=o,n=0,a=e.shapes.length;n<a;n++){var h=e.shapes[n];if((!i||h.collisionResponse)&&(0!=(this.collisionGroup&h.collisionMask)&&0!=(h.collisionGroup&this.collisionMask))){r.rotate(s,h.position,e.angle),r.add(s,s,e.position);var l=h.angle+e.angle;if(this.intersectShape(t,h,l,s,e),t.shouldStop(this))break}}},s.prototype.intersectShape=function(t,e,i,s,r){n(this.from,this.direction,s)>e.boundingRadius*e.boundingRadius||(this._currentBody=r,this._currentShape=e,e.raycast(t,this,s,i),this._currentBody=this._currentShape=null)},s.prototype.getAABB=function(t){var e=this.to,i=this.from;r.set(t.lowerBound,Math.min(e[0],i[0]),Math.min(e[1],i[1])),r.set(t.upperBound,Math.max(e[0],i[0]),Math.max(e[1],i[1]))};r.create();s.prototype.reportIntersection=function(t,e,i,n){this.from,this.to;var o=this._currentShape,a=this._currentBody;if(!(this.skipBackfaces&&r.dot(i,this.direction)>0))switch(this.mode){case s.ALL:t.set(i,o,a,e,n),this.callback(t);break;case s.CLOSEST:(e<t.fraction||!t.hasHit())&&t.set(i,o,a,e,n);break;case s.ANY:t.set(i,o,a,e,n)}};var a=r.create(),h=r.create()},{"../collision/AABB":7,"../collision/RaycastResult":12,"../math/vec2":30,"../shapes/Shape":45}],12:[function(t,e,i){function s(){this.normal=n.create(),this.shape=null,this.body=null,this.faceIndex=-1,this.fraction=-1,this.isStopped=!1}var n=t("../math/vec2"),r=t("../collision/Ray");e.exports=s,s.prototype.reset=function(){n.set(this.normal,0,0),this.shape=null,this.body=null,this.faceIndex=-1,this.fraction=-1,this.isStopped=!1},s.prototype.getHitDistance=function(t){return n.distance(t.from,t.to)*this.fraction},s.prototype.hasHit=function(){return-1!==this.fraction},s.prototype.getHitPoint=function(t,e){n.lerp(t,e.from,e.to,this.fraction)},s.prototype.stop=function(){this.isStopped=!0},s.prototype.shouldStop=function(t){return this.isStopped||-1!==this.fraction&&t.mode===r.ANY},s.prototype.set=function(t,e,i,s,r){n.copy(this.normal,t),this.shape=e,this.body=i,this.fraction=s,this.faceIndex=r}},{"../collision/Ray":11,"../math/vec2":30}],13:[function(t,e,i){function s(){r.call(this,r.SAP),this.axisList=[],this.axisIndex=0;var t=this;this._addBodyHandler=function(e){t.axisList.push(e.body)},this._removeBodyHandler=function(e){var i=t.axisList.indexOf(e.body);-1!==i&&t.axisList.splice(i,1)}}var n=t("../utils/Utils"),r=t("../collision/Broadphase");e.exports=s,(s.prototype=new r).constructor=s,s.prototype.setWorld=function(t){this.axisList.length=0,n.appendArray(this.axisList,t.bodies),t.off("addBody",this._addBodyHandler).off("removeBody",this._removeBodyHandler),t.on("addBody",this._addBodyHandler).on("removeBody",this._removeBodyHandler),this.world=t},s.sortAxisList=function(t,e){e|=0;for(var i=1,s=t.length;i<s;i++){for(var n=t[i],r=i-1;r>=0&&!(t[r].aabb.lowerBound[e]<=n.aabb.lowerBound[e]);r--)t[r+1]=t[r];t[r+1]=n}return t},s.prototype.sortList=function(){var t=this.axisList,e=this.axisIndex;s.sortAxisList(t,e)},s.prototype.getCollisionPairs=function(t){var e=this.axisList,i=this.result,s=this.axisIndex;i.length=0;for(var n=e.length;n--;){var o=e[n];o.aabbNeedsUpdate&&o.updateAABB()}this.sortList();for(var a=0,h=0|e.length;a!==h;a++)for(var l=e[a],c=a+1;c<h;c++){var u=e[c];if(!(u.aabb.lowerBound[s]<=l.aabb.upperBound[s]))break;r.canCollide(l,u)&&this.boundingVolumeCheck(l,u)&&i.push(l,u)}return i},s.prototype.aabbQuery=function(t,e,i){i=i||[],this.sortList();var s=this.axisIndex,n="x";1===s&&(n="y"),2===s&&(n="z");for(var r=this.axisList,o=(e.lowerBound[n],e.upperBound[n],0);o<r.length;o++){var a=r[o];a.aabbNeedsUpdate&&a.updateAABB(),a.aabb.overlaps(e)&&i.push(a)}return i}},{"../collision/Broadphase":8,"../utils/Utils":57}],14:[function(t,e,i){function s(t,e,i,s){this.type=i,s=n.defaults(s,{collideConnected:!0,wakeUpBodies:!0}),this.equations=[],this.bodyA=t,this.bodyB=e,this.collideConnected=s.collideConnected,s.wakeUpBodies&&(t&&t.wakeUp(),e&&e.wakeUp())}e.exports=s;var n=t("../utils/Utils");s.prototype.update=function(){throw new Error("method update() not implmemented in this Constraint subclass!")},s.DISTANCE=1,s.GEAR=2,s.LOCK=3,s.PRISMATIC=4,s.REVOLUTE=5,s.prototype.setStiffness=function(t){for(var e=this.equations,i=0;i!==e.length;i++){var s=e[i];s.stiffness=t,s.needsUpdate=!0}},s.prototype.setRelaxation=function(t){for(var e=this.equations,i=0;i!==e.length;i++){var s=e[i];s.relaxation=t,s.needsUpdate=!0}}},{"../utils/Utils":57}],15:[function(t,e,i){function s(t,e,i){i=a.defaults(i,{localAnchorA:[0,0],localAnchorB:[0,0]}),n.call(this,t,e,n.DISTANCE,i),this.localAnchorA=o.fromValues(i.localAnchorA[0],i.localAnchorA[1]),this.localAnchorB=o.fromValues(i.localAnchorB[0],i.localAnchorB[1]);var s=this.localAnchorA,h=this.localAnchorB;if(this.distance=0,"number"==typeof i.distance)this.distance=i.distance;else{var l=o.create(),c=o.create(),u=o.create();o.rotate(l,s,t.angle),o.rotate(c,h,e.angle),o.add(u,e.position,c),o.sub(u,u,l),o.sub(u,u,t.position),this.distance=o.length(u)}var d;d=void 0===i.maxForce?Number.MAX_VALUE:i.maxForce;var p=new r(t,e,-d,d);this.equations=[p],this.maxForce=d;var u=o.create(),f=o.create(),g=o.create(),m=this;p.computeGq=function(){var t=this.bodyA,e=this.bodyB,i=t.position,n=e.position;return o.rotate(f,s,t.angle),o.rotate(g,h,e.angle),o.add(u,n,g),o.sub(u,u,f),o.sub(u,u,i),o.length(u)-m.distance},this.setMaxForce(d),this.upperLimitEnabled=!1,this.upperLimit=1,this.lowerLimitEnabled=!1,this.lowerLimit=0,this.position=0}var n=t("./Constraint"),r=t("../equations/Equation"),o=t("../math/vec2"),a=t("../utils/Utils");e.exports=s,(s.prototype=new n).constructor=s;var h=o.create(),l=o.create(),c=o.create();s.prototype.update=function(){var t=this.equations[0],e=this.bodyA,i=this.bodyB,s=(this.distance,e.position),n=i.position,r=this.equations[0],a=t.G;o.rotate(l,this.localAnchorA,e.angle),o.rotate(c,this.localAnchorB,i.angle),o.add(h,n,c),o.sub(h,h,l),o.sub(h,h,s),this.position=o.length(h);var u=!1;if(this.upperLimitEnabled&&this.position>this.upperLimit&&(r.maxForce=0,r.minForce=-this.maxForce,this.distance=this.upperLimit,u=!0),this.lowerLimitEnabled&&this.position<this.lowerLimit&&(r.maxForce=this.maxForce,r.minForce=0,this.distance=this.lowerLimit,u=!0),!this.lowerLimitEnabled&&!this.upperLimitEnabled||u){r.enabled=!0,o.normalize(h,h);var d=o.crossLength(l,h),p=o.crossLength(c,h);a[0]=-h[0],a[1]=-h[1],a[2]=-d,a[3]=h[0],a[4]=h[1],a[5]=p}else r.enabled=!1},s.prototype.setMaxForce=function(t){var e=this.equations[0];e.minForce=-t,e.maxForce=t},s.prototype.getMaxForce=function(){return this.equations[0].maxForce}},{"../equations/Equation":22,"../math/vec2":30,"../utils/Utils":57,"./Constraint":14}],16:[function(t,e,i){function s(t,e,i){i=i||{},n.call(this,t,e,n.GEAR,i),this.ratio=void 0!==i.ratio?i.ratio:1,this.angle=void 0!==i.angle?i.angle:e.angle-this.ratio*t.angle,i.angle=this.angle,i.ratio=this.ratio,this.equations=[new r(t,e,i)],void 0!==i.maxTorque&&this.setMaxTorque(i.maxTorque)}var n=t("./Constraint"),r=(t("../equations/Equation"),t("../equations/AngleLockEquation"));t("../math/vec2");e.exports=s,(s.prototype=new n).constructor=s,s.prototype.update=function(){var t=this.equations[0];t.ratio!==this.ratio&&t.setRatio(this.ratio),t.angle=this.angle},s.prototype.setMaxTorque=function(t){this.equations[0].setMaxTorque(t)},s.prototype.getMaxTorque=function(t){return this.equations[0].maxForce}},{"../equations/AngleLockEquation":20,"../equations/Equation":22,"../math/vec2":30,"./Constraint":14}],17:[function(t,e,i){function s(t,e,i){i=i||{},n.call(this,t,e,n.LOCK,i);var s=void 0===i.maxForce?Number.MAX_VALUE:i.maxForce,a=(i.localAngleB,new o(t,e,-s,s)),h=new o(t,e,-s,s),l=new o(t,e,-s,s),c=r.create(),u=r.create(),d=this;a.computeGq=function(){return r.rotate(c,d.localOffsetB,t.angle),r.sub(u,e.position,t.position),r.sub(u,u,c),u[0]},h.computeGq=function(){return r.rotate(c,d.localOffsetB,t.angle),r.sub(u,e.position,t.position),r.sub(u,u,c),u[1]};var p=r.create(),f=r.create();l.computeGq=function(){return r.rotate(p,d.localOffsetB,e.angle-d.localAngleB),r.scale(p,p,-1),r.sub(u,t.position,e.position),r.add(u,u,p),r.rotate(f,p,-Math.PI/2),r.normalize(f,f),r.dot(u,f)},this.localOffsetB=r.create(),i.localOffsetB?r.copy(this.localOffsetB,i.localOffsetB):(r.sub(this.localOffsetB,e.position,t.position),r.rotate(this.localOffsetB,this.localOffsetB,-t.angle)),this.localAngleB=0,"number"==typeof i.localAngleB?this.localAngleB=i.localAngleB:this.localAngleB=e.angle-t.angle,this.equations.push(a,h,l),this.setMaxForce(s)}var n=t("./Constraint"),r=t("../math/vec2"),o=t("../equations/Equation");e.exports=s,(s.prototype=new n).constructor=s,s.prototype.setMaxForce=function(t){for(var e=this.equations,i=0;i<this.equations.length;i++)e[i].maxForce=t,e[i].minForce=-t},s.prototype.getMaxForce=function(){return this.equations[0].maxForce};var a=r.create(),h=r.create(),l=r.create(),c=r.fromValues(1,0),u=r.fromValues(0,1);s.prototype.update=function(){var t=this.equations[0],e=this.equations[1],i=this.equations[2],s=this.bodyA,n=this.bodyB;r.rotate(a,this.localOffsetB,s.angle),r.rotate(h,this.localOffsetB,n.angle-this.localAngleB),r.scale(h,h,-1),r.rotate(l,h,Math.PI/2),r.normalize(l,l),t.G[0]=-1,t.G[1]=0,t.G[2]=-r.crossLength(a,c),t.G[3]=1,e.G[0]=0,e.G[1]=-1,e.G[2]=-r.crossLength(a,u),e.G[4]=1,i.G[0]=-l[0],i.G[1]=-l[1],i.G[3]=l[0],i.G[4]=l[1],i.G[5]=r.crossLength(h,l)}},{"../equations/Equation":22,"../math/vec2":30,"./Constraint":14}],18:[function(t,e,i){function s(t,e,i){i=i||{},n.call(this,t,e,n.PRISMATIC,i);var s=a.fromValues(0,0),l=a.fromValues(1,0),c=a.fromValues(0,0);i.localAnchorA&&a.copy(s,i.localAnchorA),i.localAxisA&&a.copy(l,i.localAxisA),i.localAnchorB&&a.copy(c,i.localAnchorB),this.localAnchorA=s,this.localAnchorB=c,this.localAxisA=l;var u=this.maxForce=void 0!==i.maxForce?i.maxForce:Number.MAX_VALUE,d=new o(t,e,-u,u),p=new a.create,f=new a.create,g=new a.create,m=new a.create;if(d.computeGq=function(){return a.dot(g,m)},d.updateJacobian=function(){var i=this.G,n=t.position,r=e.position;a.rotate(p,s,t.angle),a.rotate(f,c,e.angle),a.add(g,r,f),a.sub(g,g,n),a.sub(g,g,p),a.rotate(m,l,t.angle+Math.PI/2),i[0]=-m[0],i[1]=-m[1],i[2]=-a.crossLength(p,m)+a.crossLength(m,g),i[3]=m[0],i[4]=m[1],i[5]=a.crossLength(f,m)},this.equations.push(d),!i.disableRotationalLock){var y=new h(t,e,-u,u);this.equations.push(y)}this.position=0,this.velocity=0,this.lowerLimitEnabled=void 0!==i.lowerLimit,this.upperLimitEnabled=void 0!==i.upperLimit,this.lowerLimit=void 0!==i.lowerLimit?i.lowerLimit:0,this.upperLimit=void 0!==i.upperLimit?i.upperLimit:1,this.upperLimitEquation=new r(t,e),this.lowerLimitEquation=new r(t,e),this.upperLimitEquation.minForce=this.lowerLimitEquation.minForce=0,this.upperLimitEquation.maxForce=this.lowerLimitEquation.maxForce=u,this.motorEquation=new o(t,e),this.motorEnabled=!1,this.motorSpeed=0;var v=this,x=this.motorEquation;x.computeGW;x.computeGq=function(){return 0},x.computeGW=function(){var t=this.G,e=this.bodyA,i=this.bodyB,s=e.velocity,n=i.velocity,r=e.angularVelocity,o=i.angularVelocity;return this.gmult(t,s,r,n,o)+v.motorSpeed}}var n=t("./Constraint"),r=t("../equations/ContactEquation"),o=t("../equations/Equation"),a=t("../math/vec2"),h=t("../equations/RotationalLockEquation");e.exports=s,(s.prototype=new n).constructor=s;var l=a.create(),c=a.create(),u=a.create(),d=a.create(),p=a.create(),f=a.create();s.prototype.update=function(){var t=this.equations,e=t[0],i=this.upperLimit,s=this.lowerLimit,n=this.upperLimitEquation,r=this.lowerLimitEquation,o=this.bodyA,h=this.bodyB,g=this.localAxisA,m=this.localAnchorA,y=this.localAnchorB;e.updateJacobian(),a.rotate(l,g,o.angle),a.rotate(d,m,o.angle),a.add(c,d,o.position),a.rotate(p,y,h.angle),a.add(u,p,h.position);var v=this.position=a.dot(u,l)-a.dot(c,l);if(this.motorEnabled){var x=this.motorEquation.G;x[0]=l[0],x[1]=l[1],x[2]=a.crossLength(l,p),x[3]=-l[0],x[4]=-l[1],x[5]=-a.crossLength(l,d)}if(this.upperLimitEnabled&&v>i?(a.scale(n.normalA,l,-1),a.sub(n.contactPointA,c,o.position),a.sub(n.contactPointB,u,h.position),a.scale(f,l,i),a.add(n.contactPointA,n.contactPointA,f),-1===t.indexOf(n)&&t.push(n)):-1!==(b=t.indexOf(n))&&t.splice(b,1),this.lowerLimitEnabled&&v<s)a.scale(r.normalA,l,1),a.sub(r.contactPointA,c,o.position),a.sub(r.contactPointB,u,h.position),a.scale(f,l,s),a.sub(r.contactPointB,r.contactPointB,f),-1===t.indexOf(r)&&t.push(r);else{var b=t.indexOf(r);-1!==b&&t.splice(b,1)}},s.prototype.enableMotor=function(){this.motorEnabled||(this.equations.push(this.motorEquation),this.motorEnabled=!0)},s.prototype.disableMotor=function(){if(this.motorEnabled){var t=this.equations.indexOf(this.motorEquation);this.equations.splice(t,1),this.motorEnabled=!1}},s.prototype.setLimits=function(t,e){"number"==typeof t?(this.lowerLimit=t,this.lowerLimitEnabled=!0):(this.lowerLimit=t,this.lowerLimitEnabled=!1),"number"==typeof e?(this.upperLimit=e,this.upperLimitEnabled=!0):(this.upperLimit=e,this.upperLimitEnabled=!1)}},{"../equations/ContactEquation":21,"../equations/Equation":22,"../equations/RotationalLockEquation":24,"../math/vec2":30,"./Constraint":14}],19:[function(t,e,i){function s(t,e,i){i=i||{},n.call(this,t,e,n.REVOLUTE,i);var s=this.maxForce=void 0!==i.maxForce?i.maxForce:Number.MAX_VALUE;this.pivotA=h.create(),this.pivotB=h.create(),i.worldPivot?(h.sub(this.pivotA,i.worldPivot,t.position),h.sub(this.pivotB,i.worldPivot,e.position),h.rotate(this.pivotA,this.pivotA,-t.angle),h.rotate(this.pivotB,this.pivotB,-e.angle)):(h.copy(this.pivotA,i.localPivotA),h.copy(this.pivotB,i.localPivotB));var f=this.equations=[new r(t,e,-s,s),new r(t,e,-s,s)],g=f[0],m=f[1],y=this;g.computeGq=function(){return h.rotate(l,y.pivotA,t.angle),h.rotate(c,y.pivotB,e.angle),h.add(p,e.position,c),h.sub(p,p,t.position),h.sub(p,p,l),h.dot(p,u)},m.computeGq=function(){return h.rotate(l,y.pivotA,t.angle),h.rotate(c,y.pivotB,e.angle),h.add(p,e.position,c),h.sub(p,p,t.position),h.sub(p,p,l),h.dot(p,d)},m.minForce=g.minForce=-s,m.maxForce=g.maxForce=s,this.motorEquation=new o(t,e),this.motorEnabled=!1,this.angle=0,this.lowerLimitEnabled=!1,this.upperLimitEnabled=!1,this.lowerLimit=0,this.upperLimit=0,this.upperLimitEquation=new a(t,e),this.lowerLimitEquation=new a(t,e),this.upperLimitEquation.minForce=0,this.lowerLimitEquation.maxForce=0}var n=t("./Constraint"),r=t("../equations/Equation"),o=t("../equations/RotationalVelocityEquation"),a=t("../equations/RotationalLockEquation"),h=t("../math/vec2");e.exports=s;var l=h.create(),c=h.create(),u=h.fromValues(1,0),d=h.fromValues(0,1),p=h.create();(s.prototype=new n).constructor=s,s.prototype.setLimits=function(t,e){"number"==typeof t?(this.lowerLimit=t,this.lowerLimitEnabled=!0):(this.lowerLimit=t,this.lowerLimitEnabled=!1),"number"==typeof e?(this.upperLimit=e,this.upperLimitEnabled=!0):(this.upperLimit=e,this.upperLimitEnabled=!1)},s.prototype.update=function(){var t=this.bodyA,e=this.bodyB,i=this.pivotA,s=this.pivotB,n=this.equations,r=(n[0],n[1],n[0]),o=n[1],a=this.upperLimit,p=this.lowerLimit,f=this.upperLimitEquation,g=this.lowerLimitEquation,m=this.angle=e.angle-t.angle;if(this.upperLimitEnabled&&m>a?(f.angle=a,-1===n.indexOf(f)&&n.push(f)):-1!==(y=n.indexOf(f))&&n.splice(y,1),this.lowerLimitEnabled&&m<p)g.angle=p,-1===n.indexOf(g)&&n.push(g);else{var y=n.in