/* * Copyright (c) 2014 cannon.js Authors * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.CANNON=e()}}(function(){return function e(f,n,o){function d(t,l){if(!n[t]){if(!f[t]){var u="function"==typeof require&&require;if(!l&&u)return u(t,!0);if(i)return i(t,!0);throw new Error("Cannot find module '"+t+"'")}var p=n[t]={exports:{}};f[t][0].call(p.exports,function(e){var n=f[t][1][e];return d(n?n:e)},p,p.exports,e,f,n,o)}return n[t].exports}for(var i="function"==typeof require&&require,t=0;t (http://steffe.se)",keywords:["cannon.js","cannon","physics","engine","3d"],main:"./build/cannon.js",engines:{node:"*"},repository:{type:"git",url:"https://github.com/schteppe/cannon.js.git"},bugs:{url:"https://github.com/schteppe/cannon.js/issues"},licenses:[{type:"MIT"}],devDependencies:{jshint:"latest","uglify-js":"latest",nodeunit:"^0.9.0",grunt:"~0.4.0","grunt-contrib-jshint":"~0.1.1","grunt-contrib-nodeunit":"^0.4.1","grunt-contrib-concat":"~0.1.3","grunt-contrib-uglify":"^0.5.1","grunt-browserify":"^2.1.4","grunt-contrib-yuidoc":"^0.5.2",browserify:"*"},dependencies:{}}},{}],2:[function(e,f){f.exports={version:e("../package.json").version,ArrayCollisionMatrix:e("./collision/ArrayCollisionMatrix"),Body:e("./objects/Body"),Box:e("./shapes/Box"),Broadphase:e("./collision/Broadphase"),Constraint:e("./constraints/Constraint"),ContactEquation:e("./equations/ContactEquation"),Narrowphase:e("./world/Narrowphase"),ContactMaterial:e("./material/ContactMaterial"),ConvexPolyhedron:e("./shapes/ConvexPolyhedron"),Cylinder:e("./shapes/Cylinder"),DistanceConstraint:e("./constraints/DistanceConstraint"),Equation:e("./equations/Equation"),EventTarget:e("./utils/EventTarget"),FrictionEquation:e("./equations/FrictionEquation"),GSSolver:e("./solver/GSSolver"),GridBroadphase:e("./collision/GridBroadphase"),Heightfield:e("./shapes/Heightfield"),HingeConstraint:e("./constraints/HingeConstraint"),Mat3:e("./math/Mat3"),Material:e("./material/Material"),NaiveBroadphase:e("./collision/NaiveBroadphase"),ObjectCollisionMatrix:e("./collision/ObjectCollisionMatrix"),Pool:e("./utils/Pool"),Particle:e("./shapes/Particle"),Plane:e("./shapes/Plane"),PointToPointConstraint:e("./constraints/PointToPointConstraint"),Quaternion:e("./math/Quaternion"),Ray:e("./collision/Ray"),RaycastVehicle:e("./objects/RaycastVehicle"),RaycastResult:e("./collision/RaycastResult"),RigidVehicle:e("./objects/RigidVehicle"),RotationalEquation:e("./equations/RotationalEquation"),RotationalMotorEquation:e("./equations/RotationalMotorEquation"),SAPBroadphase:e("./collision/SAPBroadphase"),SPHSystem:e("./objects/SPHSystem"),Shape:e("./shapes/Shape"),Solver:e("./solver/Solver"),Sphere:e("./shapes/Sphere"),SplitSolver:e("./solver/SplitSolver"),Spring:e("./objects/Spring"),Vec3:e("./math/Vec3"),Vec3Pool:e("./utils/Vec3Pool"),World:e("./world/World")}},{"../package.json":1,"./collision/ArrayCollisionMatrix":4,"./collision/Broadphase":5,"./collision/GridBroadphase":6,"./collision/NaiveBroadphase":7,"./collision/ObjectCollisionMatrix":8,"./collision/Ray":9,"./collision/RaycastResult":10,"./collision/SAPBroadphase":11,"./constraints/Constraint":12,"./constraints/DistanceConstraint":13,"./constraints/HingeConstraint":14,"./constraints/PointToPointConstraint":15,"./equations/ContactEquation":16,"./equations/Equation":17,"./equations/FrictionEquation":18,"./equations/RotationalEquation":19,"./equations/RotationalMotorEquation":20,"./material/ContactMaterial":21,"./material/Material":22,"./math/Mat3":24,"./math/Quaternion":25,"./math/Vec3":27,"./objects/Body":28,"./objects/RaycastVehicle":29,"./objects/RigidVehicle":30,"./objects/SPHSystem":31,"./objects/Spring":32,"./shapes/Box":34,"./shapes/ConvexPolyhedron":35,"./shapes/Cylinder":36,"./shapes/Heightfield":37,"./shapes/Particle":38,"./shapes/Plane":39,"./shapes/Shape":40,"./shapes/Sphere":41,"./solver/GSSolver":42,"./solver/Solver":43,"./solver/SplitSolver":44,"./utils/EventTarget":45,"./utils/Pool":46,"./utils/Vec3Pool":49,"./world/Narrowphase":50,"./world/World":51}],3:[function(e,f){function n(e){e=e||{},this.lowerBound=new o,e.lowerBound&&this.lowerBound.copy(e.lowerBound),this.upperBound=new o,e.upperBound&&this.upperBound.copy(e.upperBound)}{var o=e("../math/Vec3");e("../utils/Utils")}f.exports=n;var d=new o;n.prototype.setFromPoints=function(e,f,n,o){var i=this.lowerBound,t=this.upperBound,l=n;i.copy(e[0]),l&&l.vmult(i,i),t.copy(i);for(var u=1;ut.x&&(t.x=p.x),p.xt.y&&(t.y=p.y),p.yt.z&&(t.z=p.z),p.zf&&(this.lowerBound.x=f);var n=e.upperBound.x;this.upperBound.xf&&(this.lowerBound.y=f);var n=e.upperBound.y;this.upperBound.ye){var n=f;f=e,e=n}return this.matrix[(e*(e+1)>>1)+f-1]},n.prototype.set=function(e,f,n){if(e=e.index,f=f.index,f>e){var o=f;f=e,e=o}this.matrix[(e*(e+1)>>1)+f-1]=n?1:0},n.prototype.reset=function(){for(var e=0,f=this.matrix.length;e!==f;e++)this.matrix[e]=0},n.prototype.setNumObjects=function(e){this.matrix.length=e*(e-1)>>1}},{}],5:[function(e,f){function n(){this.world=null,this.useBoundingBoxes=!1,this.dirty=!0}{var o=e("../objects/Body"),d=e("../math/Vec3"),i=e("../math/Quaternion");e("../shapes/Shape"),e("../shapes/Plane")}f.exports=n,n.prototype.collisionPairs=function(){throw new Error("collisionPairs not implemented for this BroadPhase class!")};var t=o.STATIC|o.KINEMATIC;n.prototype.needBroadphaseCollision=function(e,f){return 0===(e.collisionFilterGroup&f.collisionFilterMask)||0===(f.collisionFilterGroup&e.collisionFilterMask)?!1:0===(e.type&t)&&e.sleepState!==o.SLEEPING||0===(f.type&t)&&f.sleepState!==o.SLEEPING?!0:!1},n.prototype.intersectionTest=function(e,f,n,o){this.useBoundingBoxes?this.doBoundingBoxBroadphase(e,f,n,o):this.doBoundingSphereBroadphase(e,f,n,o)};{var l=new d;new d,new i,new d}n.prototype.doBoundingSphereBroadphase=function(e,f,n,o){var d=l;f.position.vsub(e.position,d);var i=Math.pow(e.boundingRadius+f.boundingRadius,2),t=d.norm2();i>t&&(n.push(e),o.push(f))},n.prototype.doBoundingBoxBroadphase=function(e,f,n,o){e.aabbNeedsUpdate&&e.computeAABB(),f.aabbNeedsUpdate&&f.computeAABB(),e.aabb.overlaps(f.aabb)&&(n.push(e),o.push(f))};var u={keys:[]},p=[],s=[];n.prototype.makePairsUnique=function(e,f){for(var n=u,o=p,d=s,i=e.length,t=0;t!==i;t++)o[t]=e[t],d[t]=f[t];e.length=0,f.length=0;for(var t=0;t!==i;t++){var l=o[t].id,y=d[t].id,c=y>l?l+","+y:y+","+l;n[c]=t,n.keys.push(c)}for(var t=0;t!==n.keys.length;t++){var c=n.keys.pop(),a=n[c];e.push(o[a]),f.push(d[a]),delete n[c]}},n.prototype.setWorld=function(){};var y=new d;n.boundingSphereCheck=function(e,f){var n=y;return e.position.vsub(f.position,n),Math.pow(e.shape.boundingSphereRadius+f.shape.boundingSphereRadius,2)>n.norm2()},n.prototype.aabbQuery=function(){return console.warn(".aabbQuery is not implemented in this Broadphase subclass."),[]}},{"../math/Quaternion":25,"../math/Vec3":27,"../objects/Body":28,"../shapes/Plane":39,"../shapes/Shape":40}],6:[function(e,f){function n(e,f,n,i,t){o.apply(this),this.nx=n||10,this.ny=i||10,this.nz=t||10,this.aabbMin=e||new d(100,100,100),this.aabbMax=f||new d(-100,-100,-100);var l=this.nx*this.ny*this.nz;if(0>=l)throw"GridBroadphase: Each dimension's n must be >0";this.bins=[],this.binLengths=[],this.bins.length=l,this.binLengths.length=l;for(var u=0;l>u;u++)this.bins[u]=[],this.binLengths[u]=0}f.exports=n;var o=e("./Broadphase"),d=e("../math/Vec3"),i=e("../shapes/Shape");n.prototype=new o,n.prototype.constructor=n;{var t=new d;new d}n.prototype.collisionPairs=function(e,f,n){function o(e,f,n,o,d,i,t){var l=(e-g)*v|0,u=(f-x)*A|0,p=(n-j)*C|0,b=I((o-g)*v),m=I((d-x)*A),N=I((i-j)*C);0>l?l=0:l>=s&&(l=s-1),0>u?u=0:u>=y&&(u=y-1),0>p?p=0:p>=c&&(p=c-1),0>b?b=0:b>=s&&(b=s-1),0>m?m=0:m>=y&&(m=y-1),0>N?N=0:N>=c&&(N=c-1),l*=a,u*=r,p*=w,b*=a,m*=r,N*=w;for(var O=l;b>=O;O+=a)for(var h=u;m>=h;h+=r)for(var k=p;N>=k;k+=w){var q=O+h+k;E[q][F[q]++]=t}}for(var d=e.numObjects(),l=e.bodies,u=this.aabbMax,p=this.aabbMin,s=this.nx,y=this.ny,c=this.nz,a=y*c,r=c,w=1,b=u.x,m=u.y,N=u.z,g=p.x,x=p.y,j=p.z,v=s/(b-g),A=y/(m-x),C=c/(N-j),O=(b-g)/s,h=(m-x)/y,k=(N-j)/c,q=.5*Math.sqrt(O*O+h*h+k*k),z=i.types,B=z.SPHERE,D=z.PLANE,E=(z.BOX,z.COMPOUND,z.CONVEXPOLYHEDRON,this.bins),F=this.binLengths,G=this.bins.length,H=0;H!==G;H++)F[H]=0;for(var I=Math.ceil,p=Math.min,u=Math.max,H=0;H!==d;H++){var J=l[H],K=J.shape;switch(K.type){case B:var L=J.position.x,M=J.position.y,P=J.position.z,Q=K.radius;o(L-Q,M-Q,P-Q,L+Q,M+Q,P+Q,J);break;case D:K.worldNormalNeedsUpdate&&K.computeWorldNormal(J.quaternion);var R=K.worldNormal,S=g+.5*O-J.position.x,T=x+.5*h-J.position.y,U=j+.5*k-J.position.z,V=t;V.set(S,T,U);for(var W=0,X=0;W!==s;W++,X+=a,V.y=T,V.x+=O)for(var Y=0,Z=0;Y!==y;Y++,Z+=r,V.z=U,V.y+=h)for(var $=0,_=0;$!==c;$++,_+=w,V.z+=k)if(V.dot(R)1)for(var nf=E[H],W=0;W!==ff;W++)for(var J=nf[W],Y=0;Y!==W;Y++){var of=nf[Y];this.needBroadphaseCollision(J,of)&&this.intersectionTest(J,of,f,n)}}this.makePairsUnique(f,n)}},{"../math/Vec3":27,"../shapes/Shape":40,"./Broadphase":5}],7:[function(e,f){function n(){o.apply(this)}f.exports=n;var o=e("./Broadphase"),d=e("./AABB");n.prototype=new o,n.prototype.constructor=n,n.prototype.collisionPairs=function(e,f,n){var o,d,i,t,l=e.bodies,u=l.length;for(o=0;o!==u;o++)for(d=0;d!==o;d++)i=l[o],t=l[d],this.needBroadphaseCollision(i,t)&&this.intersectionTest(i,t,f,n)};new d;n.prototype.aabbQuery=function(e,f,n){n=n||[];for(var o=0;oe){var n=f;f=e,e=n}return e+"-"+f in this.matrix},n.prototype.set=function(e,f,n){if(e=e.id,f=f.id,f>e){var o=f;f=e,e=o}n?this.matrix[e+"-"+f]=!0:delete this.matrix[e+"-"+f]},n.prototype.reset=function(){this.matrix={}},n.prototype.setNumObjects=function(){}},{}],9:[function(e,f){function n(e,f){this.from=e?e.clone():new i,this.to=f?f.clone():new i,this._direction=new i,this.precision=1e-4}function o(e,f,n,o){o.vsub(f,v),n.vsub(f,s),e.vsub(f,y);var d,i,t=v.dot(v),l=v.dot(s),u=v.dot(y),p=s.dot(s),c=s.dot(y);return(d=p*u-l*c)>=0&&(i=t*c-l*u)>=0&&t*p-l*l>d+i}function d(e,f,n){n.vsub(e,v);var o=v.dot(f);f.mult(o,A),A.vadd(e,A);var d=n.distanceTo(A);return d}f.exports=n;{var i=e("../math/Vec3"),t=e("../math/Quaternion"),l=e("../math/Transform"),u=(e("../shapes/ConvexPolyhedron"),e("../shapes/Box"),e("../collision/RaycastResult")),p=e("../shapes/Shape");e("../collision/AABB")}n.prototype.constructor=n;var s=new i,y=new i;n.prototype.intersectBody=function(e,f,n){n||(this._updateDirection(),n=this._direction);for(var o=new i,d=new t,l=0;lo;o++)this.intersectBody(e[o],f,n)},n.prototype._updateDirection=function(){this.to.vsub(this.from,this._direction),this._direction.normalize()},n.prototype.intersectShape=function(e,f,n,o,i,t){var l=this.from,u=d(l,i,n);return u>e.boundingSphereRadius?t:(this[e.type](e,f,n,o,i,t),t)};var c=new i,a=new i,r=new i,w=new i,b=new i,m=new i,N=(new i,new u);n.prototype.intersectBox=function(e,f,n,o,d,i){return this.intersectConvex(e.convexPolyhedronRepresentation,f,n,o,d,i)},n.prototype[p.types.BOX]=n.prototype.intersectBox,n.prototype.intersectPlane=function(e,f,n,o,d,t){var l=this.from,u=this.to,p=new i(0,0,1);f.vmult(p,p);var s=new i;l.vsub(n,s);var y=s.dot(p);u.vsub(n,s);var c=s.dot(p);if(y*c>0)return t;if(l.distanceTo(u)r)&&(r=y[0]),(null===a||y[1]w)&&(w=y[1])),null===c)return u;var m=[];e.getRectMinMax(c,a,r,w,m);for(var N=(m[0],m[1],c);r>=N;N++)for(var x=a;w>=x;x++)e.getConvexTrianglePillar(N,x,!1),l.pointToWorldFrame(o,f,e.pillarOffset,p),this.intersectConvex(e.pillarConvex,f,p,d,t,u,g),e.getConvexTrianglePillar(N,x,!0),l.pointToWorldFrame(o,f,e.pillarOffset,p),this.intersectConvex(e.pillarConvex,f,p,d,t,u,g);return u},n.prototype[p.types.HEIGHTFIELD]=n.prototype.intersectHeightfield,n.prototype.intersectSphere=function(e,f,n,o,d,t){var l=this.from,u=this.to,p=e.radius,s=Math.pow(u.x-l.x,2)+Math.pow(u.y-l.y,2)+Math.pow(u.z-l.z,2),y=2*((u.x-l.x)*(l.x-n.x)+(u.y-l.y)*(l.y-n.y)+(u.z-l.z)*(l.z-n.z)),c=Math.pow(l.x-n.x,2)+Math.pow(l.y-n.y,2)+Math.pow(l.z-n.z,2)-Math.pow(p,2),a=Math.pow(y,2)-4*s*c;if(0>a)return t;if(0===a){var r=new i;l.lerp(u,a,r);var w=new i;if(r.vsub(n,w),w.normalize(),this.reportIntersection(w,r,e,o,t))return t}else{var b=(-y-Math.sqrt(a))/(2*s),m=(-y+Math.sqrt(a))/(2*s),r=new i;l.lerp(u,b,r);var w=new i;if(r.vsub(n,w),w.normalize(),this.reportIntersection(w,r,e,o,t))return t;l.lerp(u,m,r);var w=new i;if(r.vsub(n,w),w.normalize(),this.reportIntersection(w,r,e,o,t))return t}return t},n.prototype[p.types.SPHERE]=n.prototype.intersectSphere;var x=new i,j=new i;n.prototype.intersectConvex=function(e,f,n,d,i,t,l){for(var u=x,p=j,s=l&&l.faceList||null,y=e.faces,N=e.vertices,g=e.faceNormals,v=this.from,A=this.to,C=v.distanceTo(A),O=-1,h=s?s.length:y.length,k=0;h>k;k++){var q=s?s[k]:k,z=y[q],B=g[q],D=f,E=n;c.copy(N[z[0]]),D.vmult(c,c),c.vadd(E,c),c.vsub(v,c),D.vmult(B,a);var F=i.dot(a);if(!(Math.abs(F)G)&&0>F){i.mult(G,r),r.vadd(v,r),w.copy(N[z[0]]),D.vmult(w,w),E.vadd(w,w);for(var H=1;HC||(-1===O||O>I)&&(O=I,u.copy(a),p.copy(r))}}}}return-1!==O&&this.reportIntersection(u,p,e,d,t)?t:t},n.prototype[p.types.CONVEXPOLYHEDRON]=n.prototype.intersectConvex,n.prototype.reportIntersection=function(e,f,n,o,d){var i=this.from,t=this.to,l=i.distanceTo(f);return d instanceof u?((lf;f++){for(var o=e[f],d=f-1;d>=0&&!(e[d].aabb.lowerBound.x<=o.aabb.lowerBound.x);d--)e[d+1]=e[d];e[d+1]=o}return e},n.insertionSortY=function(e){for(var f=1,n=e.length;n>f;f++){for(var o=e[f],d=f-1;d>=0&&!(e[d].aabb.lowerBound.y<=o.aabb.lowerBound.y);d--)e[d+1]=e[d];e[d+1]=o}return e},n.insertionSortZ=function(e){for(var f=1,n=e.length;n>f;f++){for(var o=e[f],d=f-1;d>=0&&!(e[d].aabb.lowerBound.z<=o.aabb.lowerBound.z);d--)e[d+1]=e[d];e[d+1]=o}return e},n.prototype.collisionPairs=function(e,f,o){var d,i,t=this.axisList,l=t.length,u=this.axisIndex;for(this.dirty&&(this.sortList(),this.dirty=!1),d=0;d!==l;d++){var p=t[d];for(i=d+1;l>i;i++){var s=t[i];if(this.needBroadphaseCollision(p,s)){if(!n.checkBounds(p,s,u))break;this.intersectionTest(p,s,f,o)}}}},n.prototype.sortList=function(){for(var e=this.axisList,f=this.axisIndex,o=e.length,d=0;d!==o;d++){var i=e[d];i.aabbNeedsUpdate&&i.computeAABB()}0===f?n.insertionSortX(e):1===f?n.insertionSortY(e):2===f&&n.insertionSortZ(e)},n.checkBounds=function(e,f,n){var o;0===n&&(o="x"),1===n&&(o="y"),2===n&&(o="z");var d=e.position[o],i=e.boundingRadius,t=f.position[o],l=f.boundingRadius,u=d+i,p=t-l;return u>p},n.prototype.autoDetectAxis=function(){for(var e=0,f=0,n=0,o=0,d=0,i=0,t=this.axisList,l=t.length,u=1/l,p=0;p!==l;p++){var s=t[p],y=s.position.x;e+=y,f+=y*y;var c=s.position.y;n+=c,o+=c*c;var a=s.position.z;d+=a,i+=a*a}var r=f-e*e*u,w=o-n*n*u,b=i-d*d*u;this.axisIndex=r>w?r>b?0:2:w>b?1:2},n.prototype.aabbQuery=function(e,f,n){n=n||[],this.dirty&&(this.sortList(),this.dirty=!1);var o=this.axisIndex,d="x";1===o&&(d="y"),2===o&&(d="z");for(var i=this.axisList,t=f.lowerBound[d],l=f.upperBound[d],u=0;ut&&p.aabb.lowerBound[d]d;d++)for(var i=0;3>i;i++){for(var t=0,l=0;3>l;l++)t+=e.elements[d+3*l]*this.elements[l+3*i];o.elements[d+3*i]=t}return o},n.prototype.scale=function(e,f){f=f||new n;for(var o=this.elements,d=f.elements,i=0;3!==i;i++)d[3*i+0]=e.x*o[3*i+0],d[3*i+1]=e.y*o[3*i+1],d[3*i+2]=e.z*o[3*i+2];return f},n.prototype.solve=function(e,f){f=f||new o;for(var n=3,d=4,i=[],t=0;n*d>t;t++)i.push(0);var t,l;for(t=0;3>t;t++)for(l=0;3>l;l++)i[t+d*l]=this.elements[t+3*l];i[3]=e.x,i[7]=e.y,i[11]=e.z;var u,p,s=3,y=s,c=4;do{if(t=y-s,0===i[t+d*t])for(l=t+1;y>l;l++)if(0!==i[t+d*l]){u=c;do p=c-u,i[p+d*t]+=i[p+d*l];while(--u);break}if(0!==i[t+d*t])for(l=t+1;y>l;l++){var a=i[t+d*l]/i[t+d*t];u=c;do p=c-u,i[p+d*l]=t>=p?0:i[p+d*l]-i[p+d*t]*a;while(--u)}}while(--s);if(f.z=i[2*d+3]/i[2*d+2],f.y=(i[1*d+3]-i[1*d+2]*f.z)/i[1*d+1],f.x=(i[0*d+3]-i[0*d+2]*f.z-i[0*d+1]*f.y)/i[0*d+0],isNaN(f.x)||isNaN(f.y)||isNaN(f.z)||1/0===f.x||1/0===f.y||1/0===f.z)throw"Could not solve equation! Got x=["+f.toString()+"], b=["+e.toString()+"], A=["+this.toString()+"]";return f},n.prototype.e=function(e,f,n){return void 0===n?this.elements[f+3*e]:void(this.elements[f+3*e]=n)},n.prototype.copy=function(e){for(var f=0;fn;n++)e+=this.elements[n]+f;return e},n.prototype.reverse=function(e){e=e||new n;for(var f=3,o=6,d=[],i=0;f*o>i;i++)d.push(0);var i,t;for(i=0;3>i;i++)for(t=0;3>t;t++)d[i+o*t]=this.elements[i+3*t];d[3]=1,d[9]=0,d[15]=0,d[4]=0,d[10]=1,d[16]=0,d[5]=0,d[11]=0,d[17]=1;var l,u,p=3,s=p,y=o;do{if(i=s-p,0===d[i+o*i])for(t=i+1;s>t;t++)if(0!==d[i+o*t]){l=y;do u=y-l,d[u+o*i]+=d[u+o*t];while(--l);break}if(0!==d[i+o*i])for(t=i+1;s>t;t++){var c=d[i+o*t]/d[i+o*i];l=y;do u=y-l,d[u+o*t]=i>=u?0:d[u+o*t]-d[u+o*i]*c;while(--l)}}while(--p);i=2;do{t=i-1;do{var c=d[i+o*t]/d[i+o*i];l=o;do u=o-l,d[u+o*t]=d[u+o*t]-d[u+o*i]*c;while(--l)}while(t--)}while(--i);i=2;do{var c=1/d[i+o*i];l=o;do u=o-l,d[u+o*i]=d[u+o*i]*c;while(--l)}while(i--);i=2;do{t=2;do{if(u=d[f+t+o*i],isNaN(u)||1/0===u)throw"Could not reverse! A=["+this.toString()+"]";e.e(i,t,u)}while(t--)}while(i--);return e},n.prototype.setRotationFromQuaternion=function(e){var f=e.x,n=e.y,o=e.z,d=e.w,i=f+f,t=n+n,l=o+o,u=f*i,p=f*t,s=f*l,y=n*t,c=n*l,a=o*l,r=d*i,w=d*t,b=d*l,m=this.elements;return m[0]=1-(y+a),m[1]=p-b,m[2]=s+w,m[3]=p+b,m[4]=1-(u+a),m[5]=c-r,m[6]=s-w,m[7]=c+r,m[8]=1-(u+y),this},n.prototype.transpose=function(e){e=e||new n;for(var f=e.elements,o=this.elements,d=0;3!==d;d++)for(var i=0;3!==i;i++)f[3*d+i]=o[3*i+d];return e}},{"./Vec3":27}],25:[function(e,f){function n(e,f,n,o){this.x=void 0!==e?e:0,this.y=void 0!==f?f:0,this.z=void 0!==n?n:0,this.w=void 0!==o?o:1}f.exports=n;var o=e("./Vec3");n.prototype.set=function(e,f,n,o){this.x=e,this.y=f,this.z=n,this.w=o},n.prototype.toString=function(){return this.x+","+this.y+","+this.z+","+this.w},n.prototype.toArray=function(){return[this.x,this.y,this.z,this.w]},n.prototype.setFromAxisAngle=function(e,f){var n=Math.sin(.5*f);this.x=e.x*n,this.y=e.y*n,this.z=e.z*n,this.w=Math.cos(.5*f)},n.prototype.toAxisAngle=function(e){e=e||new o,this.normalize();var f=2*Math.acos(this.w),n=Math.sqrt(1-this.w*this.w);return.001>n?(e.x=this.x,e.y=this.y,e.z=this.z):(e.x=this.x/n,e.y=this.y/n,e.z=this.z/n),[e,f]};var d=new o,i=new o;n.prototype.setFromVectors=function(e,f){if(e.isAntiparallelTo(f)){var n=d,o=i;e.tangents(n,o),this.setFromAxisAngle(n,Math.PI)}else{var t=e.cross(f);this.x=t.x,this.y=t.y,this.z=t.z,this.w=Math.sqrt(Math.pow(e.norm(),2)*Math.pow(f.norm(),2))+e.dot(f),this.normalize()}};var t=new o,l=new o,u=new o;n.prototype.mult=function(e,f){f=f||new n;var o=this.w,d=t,i=l,p=u;return d.set(this.x,this.y,this.z),i.set(e.x,e.y,e.z),f.w=o*e.w-d.dot(i),d.cross(i,p),f.x=o*i.x+e.w*d.x+p.x,f.y=o*i.y+e.w*d.y+p.y,f.z=o*i.z+e.w*d.z+p.z,f},n.prototype.inverse=function(e){var f=this.x,o=this.y,d=this.z,i=this.w;e=e||new n,this.conjugate(e);var t=1/(f*f+o*o+d*d+i*i);return e.x*=t,e.y*=t,e.z*=t,e.w*=t,e},n.prototype.conjugate=function(e){return e=e||new n,e.x=-this.x,e.y=-this.y,e.z=-this.z,e.w=this.w,e},n.prototype.normalize=function(){var e=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);0===e?(this.x=0,this.y=0,this.z=0,this.w=0):(e=1/e,this.x*=e,this.y*=e,this.z*=e,this.w*=e)},n.prototype.normalizeFast=function(){var e=(3-(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w))/2;0===e?(this.x=0,this.y=0,this.z=0,this.w=0):(this.x*=e,this.y*=e,this.z*=e,this.w*=e)},n.prototype.vmult=function(e,f){f=f||new o;var n=e.x,d=e.y,i=e.z,t=this.x,l=this.y,u=this.z,p=this.w,s=p*n+l*i-u*d,y=p*d+u*n-t*i,c=p*i+t*d-l*n,a=-t*n-l*d-u*i;return f.x=s*p+a*-t+y*-u-c*-l,f.y=y*p+a*-l+c*-t-s*-u,f.z=c*p+a*-u+s*-l-y*-t,f},n.prototype.copy=function(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w,this},n.prototype.toEuler=function(e,f){f=f||"YZX";var n,o,d,i=this.x,t=this.y,l=this.z,u=this.w;switch(f){case"YZX":var p=i*t+l*u;if(p>.499&&(n=2*Math.atan2(i,u),o=Math.PI/2,d=0),-.499>p&&(n=-2*Math.atan2(i,u),o=-Math.PI/2,d=0),isNaN(n)){var s=i*i,y=t*t,c=l*l;n=Math.atan2(2*t*u-2*i*l,1-2*y-2*c),o=Math.asin(2*p),d=Math.atan2(2*i*u-2*t*l,1-2*s-2*c)}break;default:throw new Error("Euler order "+f+" not supported yet.")}e.y=n,e.z=o,e.x=d},n.prototype.setFromEuler=function(e,f,n,o){o=o||"XYZ";var d=Math.cos(e/2),i=Math.cos(f/2),t=Math.cos(n/2),l=Math.sin(e/2),u=Math.sin(f/2),p=Math.sin(n/2);return"XYZ"===o?(this.x=l*i*t+d*u*p,this.y=d*u*t-l*i*p,this.z=d*i*p+l*u*t,this.w=d*i*t-l*u*p):"YXZ"===o?(this.x=l*i*t+d*u*p,this.y=d*u*t-l*i*p,this.z=d*i*p-l*u*t,this.w=d*i*t+l*u*p):"ZXY"===o?(this.x=l*i*t-d*u*p,this.y=d*u*t+l*i*p,this.z=d*i*p+l*u*t,this.w=d*i*t-l*u*p):"ZYX"===o?(this.x=l*i*t-d*u*p,this.y=d*u*t+l*i*p,this.z=d*i*p-l*u*t,this.w=d*i*t+l*u*p):"YZX"===o?(this.x=l*i*t+d*u*p,this.y=d*u*t+l*i*p,this.z=d*i*p-l*u*t,this.w=d*i*t-l*u*p):"XZY"===o&&(this.x=l*i*t-d*u*p,this.y=d*u*t-l*i*p,this.z=d*i*p+l*u*t,this.w=d*i*t+l*u*p),this},n.prototype.clone=function(){return new n(this.x,this.y,this.z,this.w)}},{"./Vec3":27}],26:[function(e,f){function n(){this.position=new o,this.quaternion=new d}var o=e("./Vec3"),d=e("./Quaternion");f.exports=n;var i=new d;n.pointToLocalFrame=function(e,f,n,d){var d=d||new o;return n.vsub(e,d),f.conjugate(i),i.vmult(d,d),d},n.pointToWorldFrame=function(e,f,n,d){var d=d||new o;return f.vmult(n,d),d.vadd(e,d),d},n.prototype.vectorToWorldFrame=function(e,f){var f=f||new o;return this.quaternion.vmult(e,f),f},n.vectorToLocalFrame=function(e,f,n,d){var d=d||new o;return f.w*=-1,f.vmult(n,d),f.w*=-1,d}},{"./Quaternion":25,"./Vec3":27}],27:[function(e,f){function n(e,f,n){this.x=e||0,this.y=f||0,this.z=n||0}f.exports=n;var o=e("./Mat3");n.ZERO=new n(0,0,0),n.prototype.cross=function(e,f){var o=e.x,d=e.y,i=e.z,t=this.x,l=this.y,u=this.z;return f=f||new n,f.x=l*i-u*d,f.y=u*o-t*i,f.z=t*d-l*o,f},n.prototype.set=function(e,f,n){return this.x=e,this.y=f,this.z=n,this},n.prototype.setZero=function(){this.x=this.y=this.z=0},n.prototype.vadd=function(e,f){return f?(f.x=e.x+this.x,f.y=e.y+this.y,f.z=e.z+this.z,void 0):new n(this.x+e.x,this.y+e.y,this.z+e.z)},n.prototype.vsub=function(e,f){return f?(f.x=this.x-e.x,f.y=this.y-e.y,f.z=this.z-e.z,void 0):new n(this.x-e.x,this.y-e.y,this.z-e.z)},n.prototype.crossmat=function(){return new o([0,-this.z,this.y,this.z,0,-this.x,-this.y,this.x,0])},n.prototype.normalize=function(){var e=this.x,f=this.y,n=this.z,o=Math.sqrt(e*e+f*f+n*n);if(o>0){var d=1/o;this.x*=d,this.y*=d,this.z*=d}else this.x=0,this.y=0,this.z=0;return o},n.prototype.unit=function(e){e=e||new n;var f=this.x,o=this.y,d=this.z,i=Math.sqrt(f*f+o*o+d*d);return i>0?(i=1/i,e.x=f*i,e.y=o*i,e.z=d*i):(e.x=1,e.y=0,e.z=0),e},n.prototype.norm=function(){var e=this.x,f=this.y,n=this.z;return Math.sqrt(e*e+f*f+n*n)},n.prototype.norm2=function(){return this.dot(this)},n.prototype.distanceTo=function(e){var f=this.x,n=this.y,o=this.z,d=e.x,i=e.y,t=e.z;return Math.sqrt((d-f)*(d-f)+(i-n)*(i-n)+(t-o)*(t-o))},n.prototype.mult=function(e,f){f=f||new n;var o=this.x,d=this.y,i=this.z;return f.x=e*o,f.y=e*d,f.z=e*i,f},n.prototype.scale=n.prototype.mult,n.prototype.dot=function(e){return this.x*e.x+this.y*e.y+this.z*e.z},n.prototype.isZero=function(){return 0===this.x&&0===this.y&&0===this.z},n.prototype.negate=function(e){return e=e||new n,e.x=-this.x,e.y=-this.y,e.z=-this.z,e};var d=new n,i=new n;n.prototype.tangents=function(e,f){var n=this.norm();if(n>0){var o=d,t=1/n;o.set(this.x*t,this.y*t,this.z*t);var l=i;Math.abs(o.x)<.9?(l.set(1,0,0),o.cross(l,e)):(l.set(0,1,0),o.cross(l,e)),o.cross(e,f)}else e.set(1,0,0).normalize(),f.set(0,1,0).normalize()},n.prototype.toString=function(){return this.x+","+this.y+","+this.z},n.prototype.toArray=function(){return[this.x,this.y,this.z]},n.prototype.copy=function(e){return this.x=e.x,this.y=e.y,this.z=e.z,this},n.prototype.lerp=function(e,f,n){var o=this.x,d=this.y,i=this.z;n.x=o+(e.x-o)*f,n.y=d+(e.y-d)*f,n.z=i+(e.z-i)*f},n.prototype.almostEquals=function(e,f){return void 0===f&&(f=1e-6),Math.abs(this.x-e.x)>f||Math.abs(this.y-e.y)>f||Math.abs(this.z-e.z)>f?!1:!0},n.prototype.almostZero=function(e){return void 0===e&&(e=1e-6),Math.abs(this.x)>e||Math.abs(this.y)>e||Math.abs(this.z)>e?!1:!0};var t=new n;n.prototype.isAntiparallelTo=function(e,f){return this.negate(t),t.almostEquals(e,f)},n.prototype.clone=function(){return new n(this.x,this.y,this.z)}},{"./Mat3":24}],28:[function(e,f){function n(e){e=e||{},o.apply(this),this.id=n.idCounter++,this.world=null,this.preStep=null,this.postStep=null,this.vlambda=new d,this.collisionFilterGroup=1,this.collisionFilterMask=1,this.collisionResponse=!0,this.position=new d,e.position&&this.position.copy(e.position),this.previousPosition=new d,this.initPosition=new d,this.velocity=new d,this.initVelocity=new d,this.force=new d;var f="number"==typeof e.mass?e.mass:0;this.mass=f,this.invMass=f>0?1/f:0,this.material=e.material||null,this.linearDamping="number"==typeof e.linearDamping?e.linearDamping:.01,this.type=0>=f?n.STATIC:n.DYNAMIC,typeof e.type==typeof n.STATIC&&(this.type=e.type),this.allowSleep=!0,this.sleepState=0,this.sleepSpeedLimit=.1,this.sleepTimeLimit=1,this.timeLastSleepy=0,this._wakeUpAfterNarrowphase=!1,this.tau=new d,this.quaternion=new t,this.initQuaternion=new t,this.angularVelocity=new d,this.initAngularVelocity=new d,this.interpolatedPosition=new d,this.interpolatedQuaternion=new t,this.shapes=[],this.shapeOffsets=[],this.shapeOrientations=[],this.inertia=new d,this.invInertia=new d,this.invInertiaWorld=new i,this.invMassSolve=0,this.invInertiaSolve=new d,this.invInertiaWorldSolve=new i,this.fixedRotation=!1,this.angularDamping=.01,this.aabb=new l,this.aabbNeedsUpdate=!0,this.wlambda=new d,this.updateMassProperties()}f.exports=n;var o=e("../utils/EventTarget"),d=(e("../shapes/Shape"),e("../math/Vec3")),i=e("../math/Mat3"),t=e("../math/Quaternion"),l=(e("../material/Material"),e("../collision/AABB")),u=e("../shapes/Box");n.prototype=new o,n.prototype.constructor=n,n.DYNAMIC=1,n.STATIC=2,n.KINEMATIC=4,n.AWAKE=0,n.SLEEPY=1,n.SLEEPING=2,n.idCounter=0,n.prototype.wakeUp=function(){var e=this.sleepState;this.sleepState=0,e===n.SLEEPING&&this.dispatchEvent({type:"wakeup"})},n.prototype.sleep=function(){this.sleepState=n.SLEEPING,this.velocity.set(0,0,0),this.angularVelocity.set(0,0,0)},n.sleepyEvent={type:"sleepy"},n.sleepEvent={type:"sleep"},n.prototype.sleepTick=function(e){if(this.allowSleep){var f=this.sleepState,o=this.velocity.norm2()+this.angularVelocity.norm2(),d=Math.pow(this.sleepSpeedLimit,2);f===n.AWAKE&&d>o?(this.sleepState=n.SLEEPY,this.timeLastSleepy=e,this.dispatchEvent(n.sleepyEvent)):f===n.SLEEPY&&o>d?this.wakeUp():f===n.SLEEPY&&e-this.timeLastSleepy>this.sleepTimeLimit&&(this.sleep(),this.dispatchEvent(n.sleepEvent))}},n.prototype.updateSolveMassProperties=function(){this.sleepState===n.SLEEPING||this.type===n.KINEMATIC?(this.invMassSolve=0,this.invInertiaSolve.setZero(),this.invInertiaWorldSolve.setZero()):(this.invMassSolve=this.invMass,this.invInertiaSolve.copy(this.invInertia),this.invInertiaWorldSolve.copy(this.invInertiaWorld))},n.prototype.pointToLocalFrame=function(e,f){var f=f||new d;return e.vsub(this.position,f),this.quaternion.conjugate().vmult(f,f),f},n.prototype.pointToWorldFrame=function(e,f){var f=f||new d;return this.quaternion.vmult(e,f),f.vadd(this.position,f),f},n.prototype.vectorToWorldFrame=function(e,f){var f=f||new d;return this.quaternion.vmult(e,f),f};var p=new d,s=new t;n.prototype.addShape=function(e,f,n){var o=new d,i=new t;f&&o.copy(f),n&&i.copy(n),this.shapes.push(e),this.shapeOffsets.push(o),this.shapeOrientations.push(i),this.updateMassProperties(),this.updateBoundingRadius(),this.aabbNeedsUpdate=!0},n.prototype.updateBoundingRadius=function(){for(var e=this.shapes,f=this.shapeOffsets,n=e.length,o=0,d=0;d!==n;d++){var i=e[d];i.updateBoundingSphereRadius();var t=f[d].norm(),l=i.boundingSphereRadius;t+l>o&&(o=t+l)}this.boundingRadius=o},n.prototype.computeAABB=function(){for(var e=this.shapes,f=this.shapeOffsets,n=this.shapeOrientations,o=e.length,d=p,i=s,t=this.quaternion,u=this.aabb,y=new l,c=0;c!==o;c++){var a=e[c];n[c].mult(t,i),i.vmult(f[c],d),d.vadd(this.position,d),a.calculateWorldAABB(d,i,y.lowerBound,y.upperBound),0===c?u.copy(y):u.extend(y)}this.aabbNeedsUpdate=!1};{var y=new i,c=new i;new i}n.prototype.updateInertiaWorld=function(e){var f=this.invInertia;if(f.x!==f.y||f.y!==f.z||e){var n=y,o=c;n.setRotationFromQuaternion(this.quaternion),n.transpose(o),n.scale(f,n),n.mmult(o,this.invInertiaWorld)}else;};var a=new d,r=new d;n.prototype.applyForce=function(e,f){if(this.type===n.DYNAMIC){var o=a;f.vsub(this.position,o);var d=r;o.cross(e,d),this.force.vadd(e,this.force),this.tau.vadd(d,this.tau)}};var w=new d,b=new d,m=new d;n.prototype.applyImpulse=function(e,f){if(this.type===n.DYNAMIC){var o=w;f.vsub(this.position,o);var d=b;d.copy(e),d.mult(this.invMass,d),this.velocity.vadd(d,this.velocity);var i=m;o.cross(e,i),this.invInertiaWorld.vmult(i,i),this.angularVelocity.vadd(i,this.angularVelocity)}},n.prototype.updateMassProperties=function(){new d;this.invMass=this.mass>0?1/this.mass:0;var e=this.inertia,f=this.fixedRotation;this.computeAABB(),u.calculateInertia(new d((this.aabb.upperBound.x-this.aabb.lowerBound.x)/2,(this.aabb.upperBound.y-this.aabb.lowerBound.y)/2,(this.aabb.upperBound.z-this.aabb.lowerBound.z)/2),this.mass,e),this.invInertia.set(e.x>0&&!f?1/e.x:0,e.y>0&&!f?1/e.y:0,e.z>0&&!f?1/e.z:0),this.updateInertiaWorld(!0)},n.prototype.getVelocityAtWorldPoint=function(e,f){var n=new d;return e.vsub(this.position,n),this.angularVelocity.cross(n,f),this.velocity.vadd(f,f),f}},{"../collision/AABB":3,"../material/Material":22,"../math/Mat3":24,"../math/Quaternion":25,"../math/Vec3":27,"../shapes/Box":34,"../shapes/Shape":40,"../utils/EventTarget":45}],29:[function(e,f){function n(e){this.chassisBody=e.chassisBody,this.wheelInfos=[],this.sliding=!1,this.world=null,this.indexRightAxis="undefined"!=typeof e.indexRightAxis?e.indexRightAxis:1,this.indexForwardAxis="undefined"!=typeof e.indexForwardAxis?e.indexForwardAxis:0,this.indexUpAxis="undefined"!=typeof e.indexUpAxis?e.indexUpAxis:2}function o(e,f,n,o,i){var t=0,l=n,u=x,p=j,s=v;e.getVelocityAtWorldPoint(l,u),f.getVelocityAtWorldPoint(l,p),u.vsub(p,s);var y=o.dot(s),c=d(e,n,o),a=d(f,n,o),r=1,w=r/(c+a);return t=-y*w,t>i&&(t=i),-i>t&&(t=-i),t}function d(e,f,n){var o=A,d=C,i=O,t=h;return f.vsub(e.position,o),o.cross(n,d),e.invInertiaWorld.vmult(d,t),t.cross(o,i),e.invMass+n.dot(i)}function i(e,f,n,o,d,i){var t=d.norm2();if(t>1.1)return 0;var l=k,u=q,p=z;e.getVelocityAtWorldPoint(f,l),n.getVelocityAtWorldPoint(o,u),l.vsub(u,p);var s=d.dot(p),y=.2,c=1/(e.invMass+n.invMass),i=-y*s*c;return i}var t=(e("./Body"),e("../math/Vec3")),l=e("../math/Quaternion"),u=(e("../collision/RaycastResult"),e("../collision/Ray")),p=e("../objects/WheelInfo");f.exports=n;{var s=(new t,new t,new t,new t),y=new t,c=new t;new u}n.prototype.addWheel=function(e){e=e||{};var f=new p(e),n=this.wheelInfos.length;return this.wheelInfos.push(f),n},n.prototype.setSteeringValue=function(e,f){var n=this.wheelInfos[f];n.steering=e};new t;n.prototype.applyEngineForce=function(e,f){this.wheelInfos[f].engineForce=e},n.prototype.setBrake=function(e,f){this.wheelInfos[f].brake=e},n.prototype.addToWorld=function(e){this.constraints;e.add(this.chassisBody);var f=this;e.addEventListener("preStep",function(){f.updateVehicle(e.dt)}),this.world=e},n.prototype.getVehicleAxisWorld=function(e,f){f.set(0===e?1:0,1===e?1:0,2===e?1:0),this.chassisBody.vectorToWorldFrame(f,f)},n.prototype.updateVehicle=function(e){for(var f=this.wheelInfos,n=f.length,o=this.chassisBody,d=0;n>d;d++)this.updateWheelTransform(d,!1);this.currentVehicleSpeedKmHour=3.6*o.velocity.norm();var i=new t;this.getVehicleAxisWorld(this.indexForwardAxis,i),i.dot(o.velocity)<0&&(this.currentVehicleSpeedKmHour*=-1);for(var d=0;n>d;d++)this.castRay(f[d]);this.updateSuspension(e);for(var l=new t,u=new t,d=0;n>d;d++){var p=f[d],s=p.suspensionForce;s>p.maxSuspensionForce&&(s=p.maxSuspensionForce),p.raycastResult.hitNormalWorld.scale(s*e,l),p.raycastResult.hitPointWorld.vsub(o.position,u),o.applyImpulse(l,p.raycastResult.hitPointWorld)}this.updateFriction(e);var y=new t,c=new t,a=new t;for(d=0;n>d;d++){var p=f[d];o.getVelocityAtWorldPoint(p.chassisConnectionPointWorld,a);var r=1;switch(this.indexUpAxis){case 1:r=-1}if(p.isInContact){this.getVehicleAxisWorld(this.indexForwardAxis,c);var w=c.dot(p.raycastResult.hitNormalWorld);p.raycastResult.hitNormalWorld.scale(w,y),c.vsub(y,c);var b=c.dot(a);p.deltaRotation=r*b*e/p.radius}!p.sliding&&p.isInContact||0===p.engineForce||!p.useCustomSlidingRotationalSpeed||(p.deltaRotation=(p.engineForce>0?1:-1)*p.customSlidingRotationalSpeed*e),Math.abs(p.brake)>Math.abs(p.engineForce)&&(p.deltaRotation=0),p.rotation+=p.deltaRotation,p.deltaRotation*=.99}},n.prototype.updateSuspension=function(){for(var e=this.chassisBody,f=e.mass,n=this.wheelInfos,o=n.length,d=0;o>d;d++){var i=n[d];if(i.isInContact){var t,l=i.suspensionRestLength,u=i.suspensionLength,p=l-u;t=i.suspensionStiffness*p*i.clippedInvContactDotSuspension;var s,y=i.suspensionRelativeVelocity;s=0>y?i.dampingCompression:i.dampingRelaxation,t-=s*y,i.suspensionForce=t*f,i.suspensionForce<0&&(i.suspensionForce=0)}else i.suspensionForce=0}},n.prototype.removeFromWorld=function(e){this.constraints;e.remove(this.chassisBody),e.removeEventListener("preStep",this.updateVehicle),this.world=null};var a=new t,r=new t;n.prototype.castRay=function(e){var f=a,n=r;this.updateWheelTransformWorld(e);var o=this.chassisBody,d=-1,i=e.suspensionRestLength+e.radius;e.directionWorld.scale(i,f);var l=e.chassisConnectionPointWorld;l.vadd(f,n);var u=e.raycastResult;u.reset(),this.world.rayTest(l,n,u);var p=u.body;if(e.raycastResult.groundObject=0,p){d=u.distance,e.raycastResult.hitNormalWorld=u.hitNormalWorld,e.isInContact=!0;var s=u.distance;e.suspensionLength=s-e.radius;var y=e.suspensionRestLength-e.maxSuspensionTravel,c=e.suspensionRestLength+e.maxSuspensionTravel;e.suspensionLengthc&&(e.suspensionLength=c,e.raycastResult.reset());var w=e.raycastResult.hitNormalWorld.dot(e.directionWorld),b=new t;o.getVelocityAtWorldPoint(e.raycastResult.hitPointWorld,b);var m=e.raycastResult.hitNormalWorld.dot(b);if(w>=-.1)e.suspensionRelativeVelocity=0,e.clippedInvContactDotSuspension=10;else{var N=-1/w;e.suspensionRelativeVelocity=m*N,e.clippedInvContactDotSuspension=N}}else e.suspensionLength=e.suspensionRestLength+0*e.maxSuspensionTravel,e.suspensionRelativeVelocity=0,e.directionWorld.scale(-1,e.raycastResult.hitNormalWorld),e.clippedInvContactDotSuspension=1;return d},n.prototype.updateWheelTransformWorld=function(e){e.isInContact=!1;var f=this.chassisBody;f.pointToWorldFrame(e.chassisConnectionPointLocal,e.chassisConnectionPointWorld),f.vectorToWorldFrame(e.directionLocal,e.directionWorld),f.vectorToWorldFrame(e.axleLocal,e.axleWorld)},n.prototype.updateWheelTransform=function(e){var f=s,n=y,o=c,d=this.wheelInfos[e];this.updateWheelTransformWorld(d),d.directionLocal.scale(-1,f),n.copy(d.axleLocal),f.cross(n,o),o.normalize(),n.normalize();var i=d.steering,t=new l;t.setFromAxisAngle(f,i);var u=new l;u.setFromAxisAngle(n,d.rotation);var p=d.worldTransform.quaternion;this.chassisBody.quaternion.mult(t,p),p.mult(u,p),p.normalize();var a=d.worldTransform.position;a.copy(d.directionWorld),a.scale(d.suspensionLength,a),a.vadd(d.chassisConnectionPointWorld,a)};var w=[new t(1,0,0),new t(0,1,0),new t(0,0,1)];n.prototype.getWheelTransformWorld=function(e){return this.wheelInfos[e].worldTransform};var b=new t,m=[],N=[],g=1;n.prototype.updateFriction=function(e){for(var f=b,n=this.wheelInfos,d=n.length,l=this.chassisBody,u=N,p=m,s=0,y=0;d>y;y++){var c=n[y],a=c.raycastResult.body;a&&s++,c.sideImpulse=0,c.forwardImpulse=0,u[y]||(u[y]=new t),p[y]||(p[y]=new t)}for(var y=0;d>y;y++){var c=n[y],a=c.raycastResult.body;if(a){var r=p[y],x=this.getWheelTransformWorld(y);x.vectorToWorldFrame(w[this.indexRightAxis],r);var j=c.raycastResult.hitNormalWorld,v=r.dot(j);j.scale(v,f),r.vsub(f,r),r.normalize(),j.cross(r,u[y]),u[y].normalize(),c.sideImpulse=i(l,c.raycastResult.hitPointWorld,a,c.raycastResult.hitPointWorld,r),c.sideImpulse*=g}}var A=1,C=.5;this.sliding=!1;for(var y=0;d>y;y++){var c=n[y],a=c.raycastResult.body,O=0;if(c.slipInfo=1,a){var h=0,k=c.brake?c.brake:h;O=o(l,a,c.raycastResult.hitPointWorld,u[y],k),O+=c.engineForce*e;var q=k/O;c.slipInfo*=q}if(c.forwardImpulse=0,c.skidInfo=1,a){c.skidInfo=1;var z=c.suspensionForce*e*c.frictionSlip,B=z,D=z*B;c.forwardImpulse=O;var E=c.forwardImpulse*C,F=c.sideImpulse*A,G=E*E+F*F;if(c.sliding=!1,G>D){this.sliding=!0,c.sliding=!0;var q=z/Math.sqrt(G);c.skidInfo*=q}}}if(this.sliding)for(var y=0;d>y;y++){var c=n[y];0!==c.sideImpulse&&c.skidInfo<1&&(c.forwardImpulse*=c.skidInfo,c.sideImpulse*=c.skidInfo)}for(var y=0;d>y;y++){var c=n[y],H=new t;if(H.copy(c.raycastResult.hitPointWorld),0!==c.forwardImpulse){var I=new t;u[y].scale(c.forwardImpulse,I),l.applyImpulse(I,H)}if(0!==c.sideImpulse){var a=c.raycastResult.body,J=new t;J.copy(c.raycastResult.hitPointWorld);var K=new t;p[y].scale(c.sideImpulse,K),l.pointToLocalFrame(H,H),H["xyz"[this.indexUpAxis]]*=c.rollInfluence,l.pointToWorldFrame(H,H),l.applyImpulse(K,H),K.scale(-1,K),a.applyImpulse(K,J)}}};var x=new t,j=new t,v=new t,A=new t,C=new t,O=new t,h=new t,k=new t,q=new t,z=new t},{"../collision/Ray":9,"../collision/RaycastResult":10,"../math/Quaternion":25,"../math/Vec3":27,"../objects/WheelInfo":33,"./Body":28}],30:[function(e,f){function n(e){if(this.wheelBodies=[],this.coordinateSystem="undefined"==typeof e.coordinateSystem?new t(1,2,3):e.coordinateSystem.clone(),this.chassisBody=e.chassisBody,!this.chassisBody){var f=new i(new t(5,2,.5));this.chassisBody=new o(1,f)}this.constraints=[],this.wheelAxes=[],this.wheelForces=[]}var o=e("./Body"),d=e("../shapes/Sphere"),i=e("../shapes/Box"),t=e("../math/Vec3"),l=e("../constraints/HingeConstraint");f.exports=n,n.prototype.addWheel=function(e){e=e||{};var f=e.body;f||(f=new o(1,new d(1.2))),this.wheelBodies.push(f),this.wheelForces.push(0);var n=(new t,"undefined"!=typeof e.position?e.position.clone():new t),i=new t;this.chassisBody.pointToWorldFrame(n,i),f.position.set(i.x,i.y,i.z);var u="undefined"!=typeof e.axis?e.axis.clone():new t(0,1,0);this.wheelAxes.push(u);var p=new l(this.chassisBody,f,{pivotA:n,axisA:u,pivotB:t.ZERO,axisB:u,collideConnected:!1});return this.constraints.push(p),this.wheelBodies.length-1},n.prototype.setSteeringValue=function(e,f){var n=this.wheelAxes[f],o=Math.cos(e),d=Math.sin(e),i=n.x,t=n.y;this.constraints[f].axisA.set(o*i-d*t,d*i+o*t,0)},n.prototype.setMotorSpeed=function(e,f){var n=this.constraints[f];n.enableMotor(),n.motorTargetVelocity=e},n.prototype.disableMotor=function(e){var f=this.constraints[e];f.disableMotor()};var u=new t;n.prototype.setWheelForce=function(e,f){this.wheelForces[f]=e},n.prototype.applyWheelForce=function(e,f){var n=this.wheelAxes[f],o=this.wheelBodies[f],d=o.tau;n.scale(e,u),o.vectorToWorldFrame(u,u),d.vadd(u,d)},n.prototype.addToWorld=function(e){for(var f=this.constraints,n=this.wheelBodies.concat([this.chassisBody]),o=0;othis.particles.length&&this.neighbors.pop())};var d=new o;n.prototype.getNeighbors=function(e,f){for(var n=this.particles.length,o=e.id,i=this.smoothingRadius*this.smoothingRadius,t=d,l=0;l!==n;l++){var u=this.particles[l];u.position.vsub(e.position,t),o!==u.id&&t.norm2()=-.1)this.suspensionRelativeVelocity=0,this.clippedInvContactDotSuspension=10; else{var d=-1/n;this.suspensionRelativeVelocity=o*d,this.clippedInvContactDotSuspension=d}}else f.suspensionLength=this.suspensionRestLength,this.suspensionRelativeVelocity=0,f.directionWorld.scale(-1,f.hitNormalWorld),this.clippedInvContactDotSuspension=1}},{"../collision/RaycastResult":10,"../math/Transform":26,"../math/Vec3":27,"../utils/Utils":48}],34:[function(e,f){function n(e){o.call(this),this.type=o.types.BOX,this.halfExtents=e,this.convexPolyhedronRepresentation=null,this.updateConvexPolyhedronRepresentation(),this.updateBoundingSphereRadius()}f.exports=n;var o=e("./Shape"),d=e("../math/Vec3"),i=e("./ConvexPolyhedron");n.prototype=new o,n.prototype.constructor=n,n.prototype.updateConvexPolyhedronRepresentation=function(){var e=this.halfExtents.x,f=this.halfExtents.y,n=this.halfExtents.z,o=d,t=new i([new o(-e,-f,-n),new o(e,-f,-n),new o(e,f,-n),new o(-e,f,-n),new o(-e,-f,n),new o(e,-f,n),new o(e,f,n),new o(-e,f,n)],[[3,2,1,0],[4,5,6,7],[5,4,0,1],[2,3,7,6],[0,4,7,3],[1,2,6,5]],[new o(0,0,-1),new o(0,0,1),new o(0,-1,0),new o(0,1,0),new o(-1,0,0),new o(1,0,0)]);this.convexPolyhedronRepresentation=t},n.prototype.calculateLocalInertia=function(e,f){return f=f||new d,n.calculateInertia(this.halfExtents,e,f),f},n.calculateInertia=function(e,f,n){var o=e;n.x=1/12*f*(2*o.y*2*o.y+2*o.z*2*o.z),n.y=1/12*f*(2*o.x*2*o.x+2*o.z*2*o.z),n.z=1/12*f*(2*o.y*2*o.y+2*o.x*2*o.x)},n.prototype.getSideNormals=function(e,f){var n=e,o=this.halfExtents;if(n[0].set(o.x,0,0),n[1].set(0,o.y,0),n[2].set(0,0,o.z),n[3].set(-o.x,0,0),n[4].set(0,-o.y,0),n[5].set(0,0,-o.z),void 0!==f)for(var d=0;d!==n.length;d++)f.vmult(n[d],n[d]);return n},n.prototype.volume=function(){return 8*this.halfExtents.x*this.halfExtents.y*this.halfExtents.z},n.prototype.updateBoundingSphereRadius=function(){this.boundingSphereRadius=this.halfExtents.norm()};{var t=new d;new d}n.prototype.forEachWorldCorner=function(e,f,n){for(var o=this.halfExtents,d=[[o.x,o.y,o.z],[-o.x,o.y,o.z],[-o.x,-o.y,o.z],[-o.x,-o.y,-o.z],[o.x,-o.y,-o.z],[o.x,o.y,-o.z],[-o.x,o.y,-o.z],[o.x,-o.y,o.z]],i=0;it;t++){var i=l[t];f.vmult(i,i),e.vadd(i,i);var u=i.x,p=i.y,s=i.z;u>o.x&&(o.x=u),p>o.y&&(o.y=p),s>o.z&&(o.z=s),ui;i++){var t=f[i];if(!(t instanceof d))throw"Argument 1 must be instance of Vec3";this.uniqueEdges.push(t)}for(var l=0;ls;s++){var y=(s+1)%p,c=new d;f[u[s]].vsub(f[u[y]],c),c.normalize();for(var a=!1,t=0;tr&&(r=b,a=w)}for(var m=[],N=n.faces[a],g=N.length,x=0;g>x;x++){var j=n.vertices[N[x]],v=new d;v.copy(j),t.vmult(v,v),o.vadd(v,v),m.push(v)}a>=0&&this.clipFaceAgainstHull(l,e,f,m,u,s,y)};var s=new d,y=new d,c=new d,a=new d,r=new d,w=new d;n.prototype.findSeparatingAxis=function(e,f,n,o,d,i){for(var t=s,l=y,u=c,p=a,b=r,m=w,N=1/0,g=this,x=0,j=g.faces.length,v=0;j>v;v++){t.copy(g.faceNormals[v]),n.vmult(t,t);var A=g.testSepAxis(t,e,f,n,o,d);if(A===!1)return!1;N>A&&(N=A,i.copy(t))}for(var C=e.faces.length,v=0;C>v;v++){l.copy(e.faceNormals[v]),d.vmult(l,l),x++;var A=g.testSepAxis(l,e,f,n,o,d);if(A===!1)return!1;N>A&&(N=A,i.copy(l))}for(var O=0,h=0;hq&&(N=q,i.copy(m))}}return o.vsub(f,u),u.dot(i)>0&&i.negate(i),!0},n.prototype.testSepAxis=function(e,f,o,d,i,t){var l=[],u=[],p=this;n.project(p,e,o,d,l),n.project(f,e,i,t,u);var s=l[0],y=l[1],c=u[0],a=u[1];if(a>s||y>c)return!1;var r=s-a,w=c-y,b=w>r?r:w;return b};var b=new d,m=new d;n.prototype.calculateLocalInertia=function(e,f){this.computeLocalAABB(b,m);var n=m.x-b.x,o=m.y-b.y,d=m.z-b.z;f.x=1/12*e*(2*o*2*o+2*d*2*d),f.y=1/12*e*(2*n*2*n+2*d*2*d),f.z=1/12*e*(2*o*2*o+2*n*2*n)},n.prototype.getPlaneConstantOfFace=function(e){var f=this.faces[e],n=this.faceNormals[e],o=this.vertices[f[0]],d=-n.dot(o);return d};var N=new d,g=new d,x=new d,j=new d,v=new d,A=new d,C=new d,O=new d;n.prototype.clipFaceAgainstHull=function(e,f,n,o,i,t,l){if(!(e instanceof d))throw new Error("sep normal must be vector");if(!(o instanceof Array))throw new Error("world verts must be array");var u=N,p=g,s=x,y=j,c=v,a=A,r=C,w=O;i=Number(i),t=Number(t);for(var b=this,m=[],h=o,k=m,q=-1,z=1/0,B=0;BD&&(z=D,q=B)}if(0>q)return void console.log("--- did not find any closest face... ---");var E=b.faces[q];E.connectedFaces=[];for(var F=0;FI;I++){var J=b.vertices[E[I]],K=b.vertices[E[(I+1)%H]];J.vsub(K,p),s.copy(p),n.vmult(s,s),f.vadd(s,s),y.copy(this.faceNormals[q]),n.vmult(y,y),f.vadd(y,y),s.cross(y,c),c.negate(c),a.copy(J),n.vmult(a,a),f.vadd(a,a);var L,M=(-a.dot(c),E.connectedFaces[I]);r.copy(this.faceNormals[M]);var P=this.getPlaneConstantOfFace(M);w.copy(r),n.vmult(w,w);var L=P-w.dot(f);for(this.clipFaceAgainstPlane(h,k,w,L);h.length;)h.shift();for(;k.length;)h.push(k.shift())}r.copy(this.faceNormals[q]);var P=this.getPlaneConstantOfFace(q);w.copy(r),n.vmult(w,w);for(var L=P-w.dot(f),F=0;F=Q&&(console.log("clamped: depth="+Q+" to minDist="+(i+"")),Q=i),t>=Q){var R=h[F];if(0>=Q){var S={point:R,normal:w,depth:Q};l.push(S)}}}},n.prototype.clipFaceAgainstPlane=function(e,f,n,o){if(!(n instanceof d))throw new Error("planeNormal must be Vec3, "+n+" given");if(!(e instanceof Array))throw new Error("invertices must be Array, "+e+" given");if(!(f instanceof Array))throw new Error("outvertices must be Array, "+f+" given");var i,t,l=e.length;if(2>l)return f;var u=e[e.length-1],p=e[0];i=n.dot(u)+o;for(var s=0;l>s;s++){if(p=e[s],t=n.dot(p)+o,0>i)if(0>t){var y=new d;y.copy(p),f.push(y)}else{var y=new d;u.lerp(p,i/(i-t),y),f.push(y)}else if(0>t){var y=new d;u.lerp(p,i/(i-t),y),f.push(y),f.push(p)}u=p,i=t}return f},n.prototype.computeWorldVertices=function(e,f){for(var n=this.vertices.length;this.worldVertices.lengthd;d++){var i=o[d];i.xf.x&&(f.x=i.x),i.yf.y&&(f.y=i.y),i.zf.z&&(f.z=i.z)}},n.prototype.computeWorldFaceNormals=function(e){for(var f=this.faceNormals.length;this.worldFaceNormals.lengthe&&(e=d)}this.boundingSphereRadius=Math.sqrt(e)};var h=new d;n.prototype.calculateWorldAABB=function(e,f,n,o){for(var d,i,t,l,u,p,s=this.vertices.length,y=this.vertices,c=0;s>c;c++){h.copy(y[c]),f.vmult(h,h),e.vadd(h,h);var a=h;a.xl||void 0===l)&&(l=a.x),a.yu||void 0===u)&&(u=a.y),a.zp||void 0===p)&&(p=a.z)}n.set(d,i,t),o.set(l,u,p)},n.prototype.volume=function(){return 4*Math.PI*this.boundingSphereRadius/3},n.prototype.getAveragePointLocal=function(e){e=e||new d;for(var f=this.vertices.length,n=this.vertices,o=0;f>o;o++)e.vadd(n[o],e);return e.mult(1/f,e),e},n.prototype.transformAllPoints=function(e,f){var n=this.vertices.length,o=this.vertices;if(f){for(var d=0;n>d;d++){var i=o[d];f.vmult(i,i)}for(var d=0;dd;d++){var i=o[d];i.vadd(e,i)}};var k=new d,q=new d,z=new d;n.prototype.pointIsInside=function(e){var f=this.vertices.length,n=this.vertices,o=this.faces,d=this.faceNormals,i=null,t=this.faces.length,l=k;this.getAveragePointLocal(l);for(var u=0;t>u;u++){var f=(this.faces[u].length,d[u]),p=n[o[u][0]],s=q;e.vsub(p,s);var y=f.dot(s),c=z;l.vsub(p,c);var a=f.dot(c);if(0>y&&a>0||y>0&&0>a)return!1}return i?1:-1};var B=(new d,new d),D=new d;n.project=function(e,f,n,o,d){var i=e.vertices.length,l=B,u=0,p=0,s=D,y=e.vertices;s.setZero(),t.vectorToLocalFrame(n,o,f,l),t.pointToLocalFrame(n,o,s,s);var c=s.dot(l);p=u=y[0].dot(l);for(var a=1;i>a;a++){var r=y[a].dot(l);r>u&&(u=r),p>r&&(p=r)}if(p-=c,u-=c,p>u){var w=p;p=u,u=w}d[0]=u,d[1]=p}},{"../math/Quaternion":25,"../math/Transform":26,"../math/Vec3":27,"./Shape":40}],36:[function(e,f){function n(e,f,n,t){var l=t,u=[],p=[],s=[],y=[],c=[],a=Math.cos,r=Math.sin;u.push(new d(f*a(0),f*r(0),.5*-n)),y.push(0),u.push(new d(e*a(0),e*r(0),.5*n)),c.push(1);for(var w=0;l>w;w++){var b=2*Math.PI/l*(w+1),m=2*Math.PI/l*(w+.5);l-1>w?(u.push(new d(f*a(b),f*r(b),.5*-n)),y.push(2*w+2),u.push(new d(e*a(b),e*r(b),.5*n)),c.push(2*w+3),p.push(new d(a(m),r(m),0)),s.push([2*w+2,2*w+3,2*w+1,2*w])):(s.push([0,1,2*w+1,2*w]),p.push(new d(a(m),r(m),0)))}s.push(c),p.push(new d(0,0,1));for(var N=[],w=0;wd&&(f=d)}this.minValue=f},n.prototype.updateMaxValue=function(){for(var e=this.data,f=e[0][0],n=0;n!==e.length;n++)for(var o=0;o!==e[n].length;o++){var d=e[n][o];d>f&&(f=d)}this.maxValue=f},n.prototype.setHeightValueAtIndex=function(e,f,n){var o=this.data;o[e][f]=n,this.clearCachedConvexTrianglePillar(e,f,!1),e>0&&(this.clearCachedConvexTrianglePillar(e-1,f,!0),this.clearCachedConvexTrianglePillar(e-1,f,!1)),f>0&&(this.clearCachedConvexTrianglePillar(e,f-1,!0),this.clearCachedConvexTrianglePillar(e,f-1,!1)),f>0&&e>0&&this.clearCachedConvexTrianglePillar(e-1,f-1,!0)},n.prototype.getRectMinMax=function(e,f,n,o,d){d=d||[];for(var i=this.data,t=this.minValue,l=e;n>l;l++)for(var u=f;o>u;u++){var p=i[l][u];p>t&&(t=p)}d[0]=this.minValue,d[1]=t},n.prototype.getIndexOfPosition=function(e,f,n,o){var d=this.elementSize,i=this.data,t=Math.floor(e/d),l=Math.floor(f/d);return n[0]=t,n[1]=l,o&&(0>t&&(t=0),0>l&&(l=0),t>=i.length-1&&(t=i.length-1),l>=i[0].length-1&&(l=i[0].length-1)),0>t||0>l||t>=i.length-1||l>=i[0].length-1?!1:!0},n.prototype.getHeightAt=function(e,f,n){var o=[];this.getIndexOfPosition(e,f,o,n);var d=[];return this.getRectMinMax(o[0],o[1]+1,o[0],o[1]+1,d),(d[0]+d[1])/2},n.prototype.getCacheConvexTrianglePillarKey=function(e,f,n){return e+"_"+f+"_"+(n?1:0)},n.prototype.getCachedConvexTrianglePillar=function(e,f,n){return this._cachedPillars[this.getCacheConvexTrianglePillarKey(e,f,n)]},n.prototype.setCachedConvexTrianglePillar=function(e,f,n,o,d){this._cachedPillars[this.getCacheConvexTrianglePillarKey(e,f,n)]={convex:o,offset:d}},n.prototype.clearCachedConvexTrianglePillar=function(e,f,n){delete this._cachedPillars[this.getCacheConvexTrianglePillarKey(e,f,n)]},n.prototype.getConvexTrianglePillar=function(e,f,n){var o=this.pillarConvex,t=this.pillarOffset;if(this.cacheEnabled){var l=this.getCachedConvexTrianglePillar(e,f,n);if(l)return this.pillarConvex=l.convex,void(this.pillarOffset=l.offset);o=new d,t=new i,this.pillarConvex=o,this.pillarOffset=t}var l=this.data,u=this.elementSize,p=o.faces;o.vertices.length=6;for(var s=0;6>s;s++)o.vertices[s]||(o.vertices[s]=new i);p.length=5;for(var s=0;5>s;s++)p[s]||(p[s]=[]);var y=o.vertices,c=(Math.min(l[e][f],l[e+1][f],l[e][f+1],l[e+1][f+1])-this.minValue)/2+this.minValue;n?(t.set((e+.75)*u,(f+.75)*u,c),y[0].set(.25*u,.25*u,l[e+1][f+1]-c),y[1].set(-.75*u,.25*u,l[e][f+1]-c),y[2].set(.25*u,-.75*u,l[e+1][f]-c),y[3].set(.25*u,.25*u,-c),y[4].set(-.75*u,.25*u,-c),y[5].set(.25*u,-.75*u,-c),p[0][0]=0,p[0][1]=1,p[0][2]=2,p[1][0]=5,p[1][1]=4,p[1][2]=3,p[2][0]=2,p[2][1]=5,p[2][2]=3,p[2][3]=0,p[3][0]=3,p[3][1]=4,p[3][2]=1,p[3][3]=0,p[4][0]=1,p[4][1]=4,p[4][2]=5,p[4][3]=2):(t.set((e+.25)*u,(f+.25)*u,c),y[0].set(-.25*u,-.25*u,l[e][f]-c),y[1].set(.75*u,-.25*u,l[e+1][f]-c),y[2].set(-.25*u,.75*u,l[e][f+1]-c),y[3].set(-.25*u,-.25*u,-c),y[4].set(.75*u,-.25*u,-c),y[5].set(-.25*u,.75*u,-c),p[0][0]=0,p[0][1]=1,p[0][2]=2,p[1][0]=5,p[1][1]=4,p[1][2]=3,p[2][0]=0,p[2][1]=2,p[2][2]=5,p[2][3]=3,p[3][0]=1,p[3][1]=0,p[3][2]=3,p[3][3]=4,p[4][0]=4,p[4][1]=5,p[4][2]=2,p[4][3]=1),o.computeNormals(),o.computeEdges(),o.updateBoundingSphereRadius(),this.setCachedConvexTrianglePillar(e,f,n,o,t)},n.prototype.calculateLocalInertia=function(e,f){return f=f||new i,f.set(0,0,0),f},n.prototype.volume=function(){return Number.MAX_VALUE},n.prototype.calculateWorldAABB=function(e,f,n,o){n.set(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE),o.set(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE)},n.prototype.updateBoundingSphereRadius=function(){var e=this.data,f=this.elementSize;this.boundingSphereRadius=new i(e.length*f,e[0].length*f,Math.max(Math.abs(this.maxValue),Math.abs(this.minValue))).norm()}},{"../math/Vec3":27,"../utils/Utils":48,"./ConvexPolyhedron":35,"./Shape":40}],38:[function(e,f){function n(){o.call(this),this.type=o.types.PARTICLE}f.exports=n;var o=e("./Shape"),d=e("../math/Vec3");n.prototype=new o,n.prototype.constructor=n,n.prototype.calculateLocalInertia=function(e,f){return f=f||new d,f.set(0,0,0),f},n.prototype.volume=function(){return 0},n.prototype.updateBoundingSphereRadius=function(){this.boundingSphereRadius=0},n.prototype.calculateWorldAABB=function(e,f,n,o){n.copy(e),o.copy(e)}},{"../math/Vec3":27,"./Shape":40}],39:[function(e,f){function n(){o.call(this),this.type=o.types.PLANE,this.worldNormal=new d,this.worldNormalNeedsUpdate=!0,this.boundingSphereRadius=Number.MAX_VALUE}f.exports=n;var o=e("./Shape"),d=e("../math/Vec3");n.prototype=new o,n.prototype.constructor=n,n.prototype.computeWorldNormal=function(e){var f=this.worldNormal;f.set(0,0,1),e.vmult(f,f),this.worldNormalNeedsUpdate=!1},n.prototype.calculateLocalInertia=function(e,f){return f=f||new d},n.prototype.volume=function(){return Number.MAX_VALUE};var i=new d;n.prototype.calculateWorldAABB=function(e,f,n,o){i.set(0,0,1),f.vmult(i,i);var d=Number.MAX_VALUE;n.set(-d,-d,-d),o.set(d,d,d),1===i.x&&(o.x=e.x),1===i.y&&(o.y=e.y),1===i.z&&(o.z=e.z),-1===i.x&&(n.x=e.x),-1===i.y&&(n.y=e.y),-1===i.z&&(n.z=e.z)},n.prototype.updateBoundingSphereRadius=function(){this.boundingSphereRadius=Number.MAX_VALUE}},{"../math/Vec3":27,"./Shape":40}],40:[function(e,f){function n(){this.type=0,this.boundingSphereRadius=0,this.collisionResponse=!0}f.exports=n;{var n=e("./Shape");e("../math/Vec3"),e("../math/Quaternion"),e("../material/Material")}n.prototype.constructor=n,n.prototype.updateBoundingSphereRadius=function(){throw"computeBoundingSphereRadius() not implemented for shape type "+this.type},n.prototype.volume=function(){throw"volume() not implemented for shape type "+this.type},n.prototype.calculateLocalInertia=function(){throw"calculateLocalInertia() not implemented for shape type "+this.type},n.types={SPHERE:1,PLANE:2,BOX:4,COMPOUND:8,CONVEXPOLYHEDRON:16,HEIGHTFIELD:32,PARTICLE:64,CYLINDER:128}},{"../material/Material":22,"../math/Quaternion":25,"../math/Vec3":27,"./Shape":40}],41:[function(e,f){function n(e){o.call(this),this.radius=void 0!==e?Number(e):1,this.type=o.types.SPHERE,this.updateBoundingSphereRadius()}f.exports=n;var o=e("./Shape"),d=e("../math/Vec3");n.prototype=new o,n.prototype.constructor=n,n.prototype.calculateLocalInertia=function(e,f){f=f||new d;var n=2*e*this.radius*this.radius/5;return f.x=n,f.y=n,f.z=n,f},n.prototype.volume=function(){return 4*Math.PI*this.radius/3},n.prototype.updateBoundingSphereRadius=function(){this.boundingSphereRadius=this.radius},n.prototype.calculateWorldAABB=function(e,f,n,o){for(var d=this.radius,i=["x","y","z"],t=0;tA.maxForce&&(l=A.maxForce-s),v[k]+=l,u+=l>0?l:-l,A.addToWlambda(l)}if(a>u*u)break}for(var g=0;g!==m;g++){var C=b[g],q=C.velocity,z=C.angularVelocity;q.vadd(C.vlambda,q),z&&z.vadd(C.wlambda,z)}}return y}},{"../math/Quaternion":25,"../math/Vec3":27,"./Solver":43}],43:[function(e,f){function n(){this.equations=[]}f.exports=n,n.prototype.solve=function(){return 0},n.prototype.addEquation=function(e){e.enabled&&this.equations.push(e)},n.prototype.removeEquation=function(e){var f=this.equations,n=f.indexOf(e);-1!==n&&f.splice(n,1)},n.prototype.removeAllEquations=function(){this.equations.length=0}},{}],44:[function(e,f){function n(e){o.call(this),this.subsolver=e}f.exports=n;var o=(e("../math/Vec3"),e("../math/Quaternion"),e("./Solver")),d=e("../objects/Body");n.prototype=new o;var i=[],t=[],l=[],u={bodies:null};n.prototype.solve=function(e,f){function n(e){for(var f=e.length,n=0;n!==f;n++){var o=e[n];if(!(o.visited||o.body.type&C))return o}return!1}function o(e,f){var o=[];for(o.push(e),e.visited=!0,f(e);o.length;)for(var d,i=o.pop();d=n(i.children);)d.visited=!0,f(d),o.push(d)}function p(e){k.push(e.body);for(var f=e.eqs.length,n=0;n!==f;n++){var o=e.eqs[n];-1===h.indexOf(o)&&h.push(o)}}var s=i,y=f.bodies,c=this.equations,a=c.length,r=y.length,w=this.subsolver;for(s.length>r&&(s.length=r);s.lengtho;o++)n[o].call(this,e)}return this}}},{}],46:[function(e,f){function n(){this.objects=[],this.type=Object}f.exports=n,n.prototype.release=function(){for(var e=arguments.length,f=0;f!==e;f++)this.objects.push(arguments[f])},n.prototype.get=function(){return 0===this.objects.length?this.constructObject():this.objects.pop()},n.prototype.constructObject=function(){throw new Error("constructObject() not implemented in this Pool subclass yet!")}},{}],47:[function(e,f){function n(){this.data={keys:[]}}f.exports=n,n.prototype.get=function(e,f){if(e>f){var n=f;f=e,e=n}return this.data[e+"-"+f]},n.prototype.set=function(e,f,n){if(e>f){var o=f;f=e,e=o}var d=e+"-"+f;this.get(e,f)||this.data.keys.push(d),this.data[d]=n},n.prototype.reset=function(){for(var e=this.data,f=e.keys;f.length>0;){var n=f.pop();delete e[n]}}},{}],48:[function(e,f){function n(){}f.exports=n,n.defaults=function(e,f){e=e||{};for(var n in f)n in e||(e[n]=f[n]);return e}},{}],49:[function(e,f){function n(){d.call(this),this.type=o}f.exports=n;var o=e("../math/Vec3"),d=e("./Pool");n.prototype=new d,n.prototype.constructObject=function(){return new o}},{"../math/Vec3":27,"./Pool":46}],50:[function(e,f){function n(){this.contactReduction=!1,this.contactPointPool=[],this.v3pool=new u}function o(e,f,n){for(var o=null,d=e.length,i=0;i!==d;i++){var t=e[i],l=b;e[(i+1)%d].vsub(t,l);var u=m;l.cross(f,u);var p=N;n.vsub(t,p);var s=u.dot(p);if(!(null===o||s>0&&o===!0||0>=s&&o===!1))return!1;null===o&&(o=s>0)}return!0}f.exports=n;var d=e("../shapes/Shape"),i=e("../math/Vec3"),t=e("../math/Transform"),l=(e("../shapes/ConvexPolyhedron"),e("../math/Quaternion")),u=(e("../solver/Solver"),e("../utils/Vec3Pool")),p=e("../equations/ContactEquation");n.prototype.swapResult=function(e){var f;f=e.ri,e.ri=e.rj,e.rj=f,e.ni.negate(e.ni),f=e.bi,e.bi=e.bj,e.bj=f},n.prototype.reduceContacts=function(){},n.prototype.makeResult=function(e,f,n,o,d,i){var t;return this.contactPointPool.length?(t=this.contactPointPool.pop(),t.bi=e,t.bj=f):t=new p(e,f),t.enabled=!0,t.si=d||n,t.sj=i||o,t};var s=new i,y=new i,c=new l,a=new l;n.prototype.getContacts=function(e,f,n,o,d){this.contactPointPool=d;for(var i=c,t=a,l=s,u=y,p=0,r=e.length;p!==r;p++)for(var w=e[p],b=f[p],m=0;mN.boundingSphereRadius+x.boundingSphereRadius)break;var j=this[N.type|x.type];j&&(N.typeG&&G>0){var H=j,I=v;H.copy(s[(B+1)%3]),I.copy(s[(B+2)%3]);var J=H.norm(),K=I.norm();H.normalize(),I.normalize();var L=g.dot(H),M=g.dot(I);if(J>L&&L>-J&&K>M&&M>-K){var P=Math.abs(G-F-y);(null===z||z>P)&&(z=P,N=L,q=M,b=F,a.copy(E),r.copy(H),w.copy(I),m++)}}}if(m){c=!0;var Q=this.makeResult(l,u,f,n);a.mult(-y,Q.ri),Q.ni.copy(a),Q.ni.negate(Q.ni),a.mult(b,a),r.mult(N,r),a.vadd(r,a),w.mult(q,w),a.vadd(w,Q.rj),Q.ri.vadd(o,Q.ri),Q.ri.vsub(l.position,Q.ri),Q.rj.vadd(d,Q.rj),Q.rj.vsub(u.position,Q.rj),e.push(Q)}for(var R=p.get(),S=C,T=0;2!==T&&!c;T++)for(var U=0;2!==U&&!c;U++)for(var V=0;2!==V&&!c;V++)if(R.set(0,0,0),T?R.vadd(s[0],R):R.vsub(s[0],R),U?R.vadd(s[1],R):R.vsub(s[1],R),V?R.vadd(s[2],R):R.vsub(s[2],R),d.vadd(R,S),S.vsub(o,S),S.norm2()ef){c=!0;var ff=this.makeResult(l,u,f,n);X.vadd(Y,ff.rj),ff.rj.copy(ff.rj),P.negate(ff.ni),ff.ni.normalize(),ff.ri.copy(ff.rj),ff.ri.vadd(d,ff.ri),ff.ri.vsub(o,ff.ri),ff.ri.normalize(),ff.ri.mult(y,ff.ri),ff.ri.vadd(o,ff.ri),ff.ri.vsub(l.position,ff.ri),ff.rj.vadd(d,ff.rj),ff.rj.vsub(u.position,ff.rj),e.push(ff)}}p.release(W,X,Q,Y,P)};var q=new i,z=new i,B=new i,D=new i,E=new i,F=new i,G=new i,H=new i,I=new i,J=new i;n.prototype[d.types.SPHERE|d.types.CONVEXPOLYHEDRON]=n.prototype.sphereConvex=function(e,f,n,d,i,t,l,u,p){var s=this.v3pool;d.vsub(i,q);var y=n.faceNormals,c=n.faces,a=n.vertices,r=f.radius;if(!(q.norm2()>f.boundingSphereRadius+n.boundingSphereRadius)){for(var w=0;w!==a.length;w++){var b=a[w],m=E;l.vmult(b,m),i.vadd(m,m);var N=D;if(m.vsub(d,N),N.norm2()K&&L.dot(C)>0){for(var M=[],P=0,Q=A.length;P!==Q;P++){var R=s.get();l.vmult(a[A[P]],R),i.vadd(R,R),M.push(R)}if(o(M,C,d)){x=!0;var g=this.makeResult(u,p,f,n);C.mult(-r,g.ri),C.negate(g.ni);var S=s.get();C.mult(-K,S);var T=s.get();C.mult(-r,T),d.vsub(i,g.rj),g.rj.vadd(T,g.rj),g.rj.vadd(S,g.rj),g.rj.vadd(i,g.rj),g.rj.vsub(p.position,g.rj),g.ri.vadd(d,g.ri),g.ri.vsub(u.position,g.ri),s.release(S),s.release(T),e.push(g);for(var P=0,U=M.length;P!==U;P++)s.release(M[P]);return}for(var P=0;P!==A.length;P++){var V=s.get(),W=s.get();l.vmult(a[A[(P+1)%A.length]],V),l.vmult(a[A[(P+2)%A.length]],W),i.vadd(V,V),i.vadd(W,W);var X=z;W.vsub(V,X);var Y=B;X.unit(Y);var Z=s.get(),$=s.get();d.vsub(V,$);var _=$.dot(Y);Y.mult(_,Z),Z.vadd(V,Z);var ef=s.get();if(Z.vsub(d,ef),_>0&&_*_=a){var r=this.makeResult(l,u,f,n),w=P;s.mult(s.dot(y),w),p.vsub(w,w),w.vsub(o,r.ri),r.ni.copy(s),p.vsub(d,r.rj),r.ri.vadd(o,r.ri),r.ri.vsub(l.position,r.ri),r.rj.vadd(d,r.rj),r.rj.vsub(u.position,r.rj),e.push(r)}}};var Q=new i,R=new i;n.prototype[d.types.CONVEXPOLYHEDRON]=n.prototype.convexConvex=function(e,f,n,o,d,i,t,l,u,p,s){var y=Q;if(!(o.distanceTo(d)>f.boundingSphereRadius+n.boundingSphereRadius)&&f.findSeparatingAxis(n,o,i,d,t,y)){var c=[],a=R;f.clipAgainstHull(o,i,n,d,t,y,-100,100,c); for(var r=0;r!==c.length;r++){var w=this.makeResult(l,u,f,n,p,s),b=w.ri,m=w.rj;y.negate(w.ni),c[r].normal.negate(a),a.mult(c[r].depth,a),c[r].point.vadd(a,b),m.copy(c[r].point),b.vsub(o,b),m.vsub(d,m),b.vadd(o,b),b.vsub(l.position,b),m.vadd(d,m),m.vsub(u.position,m),e.push(w)}}};var S=new i,T=new i,U=new i;n.prototype[d.types.PLANE|d.types.PARTICLE]=n.prototype.planeParticle=function(e,f,n,o,d,i,t,l,u){var p=S;p.set(0,0,1),l.quaternion.vmult(p,p);var s=T;d.vsub(l.position,s);var y=p.dot(s);if(0>=y){var c=this.makeResult(u,l,n,f);c.ni.copy(p),c.ni.negate(c.ni),c.ri.set(0,0,0);var a=U;p.mult(p.dot(d),a),d.vsub(a,a),c.rj.copy(a),e.push(c)}};var V=new i;n.prototype[d.types.PARTICLE|d.types.SPHERE]=n.prototype.sphereParticle=function(e,f,n,o,d,i,t,l,u){var p=V;p.set(0,0,1),d.vsub(o,p);var s=p.norm2();if(s<=f.radius*f.radius){var y=this.makeResult(u,l,n,f);p.normalize(),y.rj.copy(p),y.rj.mult(f.radius,y.rj),y.ni.copy(p),y.ni.negate(y.ni),y.ri.set(0,0,0),e.push(y)}};var W=new l,X=new i,Y=(new i,new i),Z=new i,$=new i;n.prototype[d.types.PARTICLE|d.types.CONVEXPOLYHEDRON]=n.prototype.convexParticle=function(e,f,n,o,d,i,t,l,u){var p=-1,s=Y,y=$,c=null,a=0,r=X;if(r.copy(d),r.vsub(o,r),i.conjugate(W),W.vmult(r,r),f.pointIsInside(r)){f.worldVerticesNeedsUpdate&&f.computeWorldVertices(o,i),f.worldFaceNormalsNeedsUpdate&&f.computeWorldFaceNormals(i);for(var w=0,b=f.faces.length;w!==b;w++){var m=[f.worldVertices[f.faces[w][0]]],N=f.worldFaceNormals[w];d.vsub(m[0],Z);var g=-N.dot(Z);(null===c||Math.abs(g)b||0>N||w>s.length||N>s[0].length)){0>w&&(w=0),0>b&&(b=0),0>m&&(m=0),0>N&&(N=0),w>=s.length&&(w=s.length-1),b>=s.length&&(b=s.length-1),N>=s[0].length&&(N=s[0].length-1),m>=s[0].length&&(m=s[0].length-1);var g=[];n.getRectMinMax(w,m,b,N,g);var x=g[0],j=g[1];if(!(r.z-c>j||r.z+cv;v++)for(var A=m;N>A;A++)n.getConvexTrianglePillar(v,A,!1),t.pointToWorldFrame(d,l,n.pillarOffset,a),this.convexConvex(e,f,n.pillarConvex,o,a,i,l,u,p),n.getConvexTrianglePillar(v,A,!0),t.pointToWorldFrame(d,l,n.pillarOffset,a),this.convexConvex(e,f,n.pillarConvex,o,a,i,l,u,p)}};var ff=new i,nf=new i;n.prototype[d.types.SPHERE|d.types.HEIGHTFIELD]=n.prototype.sphereHeightfield=function(e,f,n,o,d,i,l,u,p){var s=n.data,y=f.radius,c=n.elementSize,a=nf,r=ff;t.pointToLocalFrame(d,l,o,r);var w=Math.floor((r.x-y)/c)-1,b=Math.ceil((r.x+y)/c)+1,m=Math.floor((r.y-y)/c)-1,N=Math.ceil((r.y+y)/c)+1;if(!(0>b||0>N||w>s.length||N>s[0].length)){0>w&&(w=0),0>b&&(b=0),0>m&&(m=0),0>N&&(N=0),w>=s.length&&(w=s.length-1),b>=s.length&&(b=s.length-1),N>=s[0].length&&(N=s[0].length-1),m>=s[0].length&&(m=s[0].length-1);var g=[];n.getRectMinMax(w,m,b,N,g);var x=g[0],j=g[1];if(!(r.z-y>j||r.z+yv;v++)for(var A=m;N>A;A++){var C=e.length;n.getConvexTrianglePillar(v,A,!1),t.pointToWorldFrame(d,l,n.pillarOffset,a),this.sphereConvex(e,f,n.pillarConvex,o,a,i,l,u,p),n.getConvexTrianglePillar(v,A,!0),t.pointToWorldFrame(d,l,n.pillarOffset,a),this.sphereConvex(e,f,n.pillarConvex,o,a,i,l,u,p);var O=e.length-C;if(O>2)return}}}},{"../equations/ContactEquation":16,"../math/Quaternion":25,"../math/Transform":26,"../math/Vec3":27,"../shapes/ConvexPolyhedron":35,"../shapes/Shape":40,"../solver/Solver":43,"../utils/Vec3Pool":49}],51:[function(e,f){function n(){p.apply(this),this.dt=-1,this.allowSleep=!1,this.contacts=[],this.frictionEquations=[],this.quatNormalizeSkip=0,this.quatNormalizeFast=!1,this.time=0,this.stepnumber=0,this.default_dt=1/60,this.nextId=0,this.gravity=new d,this.broadphase=new m,this.bodies=[],this.solver=new t,this.constraints=[],this.narrowphase=new u,this.collisionMatrix=new s,this.collisionMatrixPrevious=new s,this.materials=[],this.contactmaterials=[],this.contactMaterialTable=new r,this.defaultMaterial=new y("default"),this.defaultContactMaterial=new c(this.defaultMaterial,this.defaultMaterial,{friction:.3,restitution:0}),this.doProfiling=!1,this.profile={solve:0,makeContactConstraints:0,broadphase:0,integrate:0,narrowphase:0},this.subsystems=[],this.addBodyEvent={type:"addBody",body:null},this.removeBodyEvent={type:"removeBody",body:null}}f.exports=n;var o=e("../shapes/Shape"),d=e("../math/Vec3"),i=e("../math/Quaternion"),t=e("../solver/GSSolver"),l=(e("../utils/Vec3Pool"),e("../equations/ContactEquation"),e("../equations/FrictionEquation")),u=e("./Narrowphase"),p=e("../utils/EventTarget"),s=e("../collision/ArrayCollisionMatrix"),y=e("../material/Material"),c=e("../material/ContactMaterial"),a=e("../objects/Body"),r=e("../utils/TupleDictionary"),w=(e("../collision/RaycastResult"),e("../collision/AABB")),b=e("../collision/Ray"),m=e("../collision/NaiveBroadphase");n.prototype=new p;var N=new w,g=[],x=new b;if(n.prototype.getContactMaterial=function(e,f){return this.contactMaterialTable.get(e.id,f.id)},n.prototype.numObjects=function(){return this.bodies.length},n.prototype.collisionMatrixTick=function(){var e=this.collisionMatrixPrevious;this.collisionMatrixPrevious=this.collisionMatrix,this.collisionMatrix=e,this.collisionMatrix.reset()},n.prototype.add=n.prototype.addBody=function(e){-1===this.bodies.indexOf(e)&&(e.index=this.bodies.length,this.bodies.push(e),e.world=this,e.initPosition.copy(e.position),e.initVelocity.copy(e.velocity),e.timeLastSleepy=this.time,e instanceof a&&(e.initAngularVelocity.copy(e.angularVelocity),e.initQuaternion.copy(e.quaternion)),this.collisionMatrix.setNumObjects(this.bodies.length),this.addBodyEvent.body=e,this.dispatchEvent(this.addBodyEvent))},n.prototype.addConstraint=function(e){this.constraints.push(e)},n.prototype.removeConstraint=function(e){var f=this.constraints.indexOf(e);-1!==f&&this.constraints.splice(f,1)},n.prototype.rayTest=function(e,f,n){g[0]=e,g[1]=f,N.setFromPoints(g),g.length=0,this.broadphase.aabbQuery(this,N,g),x.from.copy(e),x.to.copy(f),x.intersectBodies(g,n)},n.prototype.remove=function(e){e.world=null;var f=this.bodies.length-1,n=this.bodies,o=n.indexOf(e);if(-1!==o){n.splice(o,1);for(var d=0;d!==n.length;d++)n[d].index=d;this.collisionMatrix.setNumObjects(f),this.removeBodyEvent.body=e,this.dispatchEvent(this.removeBodyEvent)}},n.prototype.addMaterial=function(e){this.materials.push(e)},n.prototype.addContactMaterial=function(e){this.contactmaterials.push(e),this.contactMaterialTable.set(e.materials[0].id,e.materials[1].id,e)},"undefined"==typeof performance&&(performance={}),!performance.now){var j=Date.now();performance.timing&&performance.timing.navigationStart&&(j=performance.timing.navigationStart),performance.now=function(){return Date.now()-j}}var v=new d;n.prototype.step=function(e,f,n){if(n=n||10,f=f||0,0===f)this.internalStep(e),this.time+=e;else{var o=Math.floor((this.time+f)/e)-Math.floor(this.time/e);o=Math.min(o,n);for(var d=performance.now(),i=0;i!==o&&(this.internalStep(e),!(performance.now()-d>1e3*e));i++);this.time+=f;for(var t=this.time%e,l=t/e,u=v,p=this.bodies,s=0;s!==p.length;s++){var y=p[s];y.type!==a.STATIC&&y.sleepState!==a.SLEEPING?(y.position.vsub(y.previousPosition,u),u.scale(l,u),y.position.vadd(u,y.interpolatedPosition)):(y.interpolatedPosition.copy(y.position),y.interpolatedQuaternion.copy(y.quaternion))}}};var A={type:"postStep"},C={type:"preStep"},O={type:"collide",body:null,contact:null},h=[],k=[],q=[],z=[],B=new d,D=(new d,new d,new d,new d,new d,new d,new d,new d,new i,new i),E=new i,F=new d;n.prototype.internalStep=function(e){this.dt=e;var f,n=this.contacts,d=q,i=z,t=this.numObjects(),u=this.bodies,p=this.solver,s=this.gravity,y=this.doProfiling,c=this.profile,r=a.DYNAMIC,w=this.constraints,b=k,m=s.norm(),N=s.x,g=s.y,x=s.z,j=0;for(y&&(f=performance.now()),j=0;j!==t;j++){var v=u[j];if(v.type&r){var G=v.force,H=v.mass;G.x+=H*N,G.y+=H*g,G.z+=H*x}}for(var j=0,I=this.subsystems.length;j!==I;j++)this.subsystems[j].update();y&&(f=performance.now()),d.length=0,i.length=0,this.broadphase.collisionPairs(this,d,i),y&&(c.broadphase=performance.now()-f);var J=w.length;for(j=0;j!==J;j++){var K=w[j];if(!K.collideConnected)for(var L=d.length-1;L>=0;L-=1)(K.bodyA===d[L]&&K.bodyB===i[L]||K.bodyB===d[L]&&K.bodyA===i[L])&&(d.splice(L,1),i.splice(L,1))}this.collisionMatrixTick(),y&&(f=performance.now());var M=h,P=n.length;for(j=0;j!==P;j++)M.push(n[j]);n.length=0,this.narrowphase.getContacts(d,i,this,n,M),y&&(c.narrowphase=performance.now()-f),y&&(f=performance.now());var Q=n.length,R=this.frictionEquations.length;for(j=0;j!==R;j++)b.push(this.frictionEquations[j]);this.frictionEquations.length=0;for(var S=0;S!==Q;S++){var T,K=n[S],v=K.bi,U=K.bj,V=K.si,W=K.sj,j=u.indexOf(v),L=u.indexOf(U);T=v.material&&U.material?this.getContactMaterial(v.material,U.material)||this.defaultContactMaterial:this.defaultContactMaterial;var X=T.friction,Y=B;Y.set(U.position.x+K.rj.x-v.position.x-K.ri.x,U.position.y+K.rj.y-v.position.y-K.ri.y,U.position.z+K.rj.z-v.position.z-K.ri.z);var Z=Y.dot(K.ni);if(0>Z){if(K.enabled=v.collisionResponse&&U.collisionResponse&&V.collisionResponse&&W.collisionResponse,K.restitution=T.restitution,K.penetration=Z,K.setSpookParams(T.contactEquationStiffness,T.contactEquationRelaxation,e),p.addEquation(K),X>0){var $=X*m,_=v.invMass+U.invMass;_>0&&(_=1/_);var ef=b,ff=ef.length?ef.pop():new l(v,U,$*_),nf=ef.length?ef.pop():new l(v,U,$*_);this.frictionEquations.push(ff),this.frictionEquations.push(nf),ff.bi=nf.bi=v,ff.bj=nf.bj=U,ff.minForce=nf.minForce=-$*_,ff.maxForce=nf.maxForce=$*_,ff.ri.copy(K.ri),ff.rj.copy(K.rj),nf.ri.copy(K.ri),nf.rj.copy(K.rj),K.ni.tangents(ff.t,nf.t),ff.setSpookParams(T.frictionEquationStiffness,T.frictionEquationRelaxation,e),nf.setSpookParams(T.frictionEquationStiffness,T.frictionEquationRelaxation,e),ff.enabled=nf.enabled=K.enabled,p.addEquation(ff),p.addEquation(nf)}if(v.allowSleep&&v.type===a.DYNAMIC&&v.sleepState===a.SLEEPING&&U.sleepState===a.AWAKE&&U.type!==a.STATIC){var of=U.velocity.norm2()+U.angularVelocity.norm2(),df=Math.pow(U.sleepSpeedLimit,2);of>=2*df&&(v._wakeUpAfterNarrowphase=!0)}if(U.allowSleep&&U.type===a.DYNAMIC&&U.sleepState===a.SLEEPING&&v.sleepState===a.AWAKE&&v.type!==a.STATIC){var tf=v.velocity.norm2()+v.angularVelocity.norm2(),lf=Math.pow(v.sleepSpeedLimit,2);tf>=2*lf&&(U._wakeUpAfterNarrowphase=!0)}this.collisionMatrix.set(v,U,!0),this.collisionMatrix.get(v,U)!==this.collisionMatrixPrevious.get(v,U)&&(O.body=U,O.contact=K,v.dispatchEvent(O),O.body=v,U.dispatchEvent(O))}}for(y&&(c.makeContactConstraints=performance.now()-f,f=performance.now()),j=0;j!==t;j++){var v=u[j];v._wakeUpAfterNarrowphase&&(v.wakeUp(),v._wakeUpAfterNarrowphase=!1)}var J=w.length;for(j=0;j!==J;j++){var K=w[j];K.update();for(var L=0,uf=K.equations.length;L!==uf;L++){var pf=K.equations[L];p.addEquation(pf)}}p.solve(e,this),y&&(c.solve=performance.now()-f),p.removeAllEquations();var sf=Math.pow;for(j=0;j!==t;j++){var v=u[j];if(v.type&r){var yf=sf(1-v.linearDamping,e),cf=v.velocity;cf.mult(yf,cf);var af=v.angularVelocity;if(af){var rf=sf(1-v.angularDamping,e);af.mult(rf,af)}}}for(this.dispatchEvent(C),j=0;j!==t;j++){var v=u[j];v.preStep&&v.preStep.call(v)}y&&(f=performance.now());var wf=D,bf=E,mf=this.stepnumber,Nf=a.DYNAMIC|a.KINEMATIC,gf=mf%(this.quatNormalizeSkip+1)===0,xf=this.quatNormalizeFast,jf=.5*e,vf=o.types.PLANE,Af=o.types.CONVEXPOLYHEDRON;for(j=0;j!==t;j++){var Cf=u[j],Of=Cf.shape,hf=Cf.force,kf=Cf.tau;if(Cf.type&Nf&&Cf.sleepState!==a.SLEEPING){var qf=Cf.velocity,zf=Cf.angularVelocity,Bf=Cf.position,Df=Cf.quaternion,Ef=Cf.invMass,Ff=Cf.invInertiaWorld;if(qf.x+=hf.x*Ef*e,qf.y+=hf.y*Ef*e,qf.z+=hf.z*Ef*e,Cf.angularVelocity&&(Ff.vmult(kf,F),F.mult(e,F),F.vadd(zf,zf)),Bf.x+=qf.x*e,Bf.y+=qf.y*e,Bf.z+=qf.z*e,Cf.angularVelocity&&(wf.set(zf.x,zf.y,zf.z,0),wf.mult(Df,bf),Df.x+=jf*bf.x,Df.y+=jf*bf.y,Df.z+=jf*bf.z,Df.w+=jf*bf.w,gf&&(xf?Df.normalizeFast():Df.normalize())),Cf.aabb&&(Cf.aabbNeedsUpdate=!0),Of)switch(Of.type){case vf:Of.worldNormalNeedsUpdate=!0;break;case Af:Of.worldFaceNormalsNeedsUpdate=!0,Of.worldVerticesNeedsUpdate=!0}Cf.updateInertiaWorld&&Cf.updateInertiaWorld()}Cf.force.set(0,0,0),Cf.tau&&Cf.tau.set(0,0,0)}for(this.broadphase.dirty=!0,y&&(c.integrate=performance.now()-f),this.time+=e,this.stepnumber+=1,this.dispatchEvent(A),j=0;j!==t;j++){var v=u[j],Gf=v.postStep;Gf&&Gf.call(v)}if(this.allowSleep)for(j=0;j!==t;j++)u[j].sleepTick(this.time)}},{"../collision/AABB":3,"../collision/ArrayCollisionMatrix":4,"../collision/NaiveBroadphase":7,"../collision/Ray":9,"../collision/RaycastResult":10,"../equations/ContactEquation":16,"../equations/FrictionEquation":18,"../material/ContactMaterial":21,"../material/Material":22,"../math/Quaternion":25,"../math/Vec3":27,"../objects/Body":28,"../shapes/Shape":40,"../solver/GSSolver":42,"../utils/EventTarget":45,"../utils/TupleDictionary":47,"../utils/Vec3Pool":49,"./Narrowphase":50}]},{},[2])(2)});