| 123456789101112131415161718192021222324252627 |
- /*
- * 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<o.length;t++)d(o[t]);return d}({1:[function(e,f){f.exports={name:"cannon",version:"0.6.0",description:"A lightweight 3D physics engine written in JavaScript.",homepage:"https://github.com/schteppe/cannon.js",author:"Stefan Hedman <schteppe@gmail.com> (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;u<e.length;u++){var p=e[u];l&&(l.vmult(p,d),p=d),p.x>t.x&&(t.x=p.x),p.x<i.x&&(i.x=p.x),p.y>t.y&&(t.y=p.y),p.y<i.y&&(i.y=p.y),p.z>t.z&&(t.z=p.z),p.z<i.z&&(i.z=p.z)}f&&(f.vadd(i,i),f.vadd(t,t)),o&&(i.x-=o,i.y-=o,i.z-=o,t.x+=o,t.y+=o,t.z+=o)},n.prototype.copy=function(e){this.lowerBound.copy(e.lowerBound),this.upperBound.copy(e.upperBound)},n.prototype.extend=function(e){var f=e.lowerBound.x;this.lowerBound.x>f&&(this.lowerBound.x=f);var n=e.upperBound.x;this.upperBound.x<n&&(this.upperBound.x=n);var f=e.lowerBound.y;this.lowerBound.y>f&&(this.lowerBound.y=f);var n=e.upperBound.y;this.upperBound.y<n&&(this.upperBound.y=n)},n.prototype.overlaps=function(e){var f=this.lowerBound,n=this.upperBound,o=e.lowerBound,d=e.upperBound;return(o.x<=n.x&&n.x<=d.x||f.x<=d.x&&d.x<=n.x)&&(o.y<=n.y&&n.y<=d.y||f.y<=d.y&&d.y<=n.y)}},{"../math/Vec3":27,"../utils/Utils":48}],4:[function(e,f){function n(){this.matrix=[]}f.exports=n,n.prototype.get=function(e,f){if(e=e.index,f=f.index,f>e){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)<q){var ef=X+Z+_;E[ef][F[ef]++]=J}break;default:J.aabbNeedsUpdate&&J.computeAABB(),o(J.aabb.lowerBound.x,J.aabb.lowerBound.y,J.aabb.lowerBound.z,J.aabb.upperBound.x,J.aabb.upperBound.y,J.aabb.upperBound.z,J)}}for(var H=0;H!==G;H++){var ff=F[H];if(ff>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;o<e.bodies.length;o++){var d=e.bodies[o];d.aabb.overlaps(f)&&n.push(d)}return n}},{"./AABB":3,"./Broadphase":5}],8:[function(e,f){function n(){this.matrix={}}f.exports=n,n.prototype.get=function(e,f){if(e=e.id,f=f.id,f>e){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;l<e.shapes.length;l++)return e.quaternion.mult(e.shapeOrientations[l],d),e.quaternion.vmult(e.shapeOffsets[l],o),o.vadd(e.position,o),this.intersectShape(e.shapes[l],d,o,e,n,f)},n.prototype.intersectBodies=function(e,f){this._updateDirection();var n=this._direction;f instanceof u&&f.reset();for(var o=0,d=e.length;d>o;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)<y)return t;var a=p.dot(d);if(Math.abs(a)<this.precision)return t;var r=new i,w=new i,b=new i;l.vsub(n,r);var m=-p.dot(r)/a;return d.scale(m,w),l.vadd(w,b),this.reportIntersection(p,b,e,o,t)?t:t},n.prototype[p.types.PLANE]=n.prototype.intersectPlane,n.prototype.getAABB=function(e){var f=this.to,n=this.from;e.lowerBound.x=Math.min(f.x,n.x),e.lowerBound.y=Math.min(f.y,n.y),e.upperBound.x=Math.max(f.x,n.x),e.upperBound.y=Math.max(f.y,n.y)};var g={faceList:[0]};n.prototype.intersectHeightfield=function(e,f,o,d,t,u){var p=(e.data,e.elementSize,new i),s=new n(this.from,this.to);l.pointToLocalFrame(o,f,s.from,s.from),l.pointToLocalFrame(o,f,s.to,s.to);var y=[],c=null,a=null,r=null,w=null,b=e.getIndexOfPosition(s.from.x,s.from.y,y,!1);if(b&&(c=y[0],a=y[1],r=y[0],w=y[1]),b=e.getIndexOfPosition(s.to.x,s.to.y,y,!1),b&&((null===c||y[0]<c)&&(c=y[0]),(null===r||y[0]>r)&&(r=y[0]),(null===a||y[1]<a)&&(a=y[1]),(null===w||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)<this.precision)){var G=a.dot(c)/F;if(!(0>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;H<z.length-1;H++){b.copy(N[z[H]]),m.copy(N[z[H+1]]),D.vmult(b,b),D.vmult(m,m),E.vadd(b,b),E.vadd(m,m);var I=r.distanceTo(v);!o(r,w,b,m)||I>C||(-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?((l<d.distance||!d.hasHit)&&(d.hasHit=!0,d.set(i,t,e,f,n,o,l)),!1):(N.set(i,t,e,f,n,o,l),N.hasHit=!0,d(N),!0)};var v=new i,A=new i},{"../collision/AABB":3,"../collision/RaycastResult":10,"../math/Quaternion":25,"../math/Transform":26,"../math/Vec3":27,"../shapes/Box":34,"../shapes/ConvexPolyhedron":35,"../shapes/Shape":40}],10:[function(e,f){function n(){this.rayFromWorld=new o,this.rayToWorld=new o,this.hitNormalWorld=new o,this.hitPointWorld=new o,this.hasHit=!1,this.shape=null,this.body=null,this.distance=-1}var o=e("../math/Vec3");f.exports=n,n.prototype.reset=function(){this.rayFromWorld.setZero(),this.rayToWorld.setZero(),this.hitNormalWorld.setZero(),this.hitPointWorld.setZero(),this.hasHit=!1,this.shape=null,this.body=null,this.distance=-1},n.prototype.set=function(e,f,n,o,d,i,t){this.rayFromWorld.copy(e),this.rayToWorld.copy(f),this.hitNormalWorld.copy(n),this.hitPointWorld.copy(o),this.shape=d,this.body=i,this.distance=t}},{"../math/Vec3":27}],11:[function(e,f){function n(e){o.apply(this),this.axisList=[],this.world=null,this.axisIndex=0;var f=this.axisList;this._addBodyHandler=function(e){f.push(e.body)},this._removeBodyHandler=function(e){var n=f.indexOf(e.body);-1!==n&&f.splice(n,1)},e&&this.setWorld(e)}var o=(e("../shapes/Shape"),e("../collision/Broadphase"));f.exports=n,n.prototype=new o,n.prototype.setWorld=function(e){this.axisList.length=0;for(var f=0;f<e.bodies.length;f++)this.axisList.push(e.bodies[f]);e.removeEventListener("addBody",this._addBodyHandler),e.removeEventListener("removeBody",this._removeBodyHandler),e.addEventListener("addBody",this._addBodyHandler),e.addEventListener("removeBody",this._removeBodyHandler),this.world=e,this.dirty=!0},n.insertionSortX=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.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;u<i.length;u++){var p=i[u];p.aabb.upperBound[d]>t&&p.aabb.lowerBound[d]<l&&p.aabb.overlaps(f)&&n.push(p)}return n}},{"../collision/Broadphase":5,"../shapes/Shape":40}],12:[function(e,f){function n(e,f,d){d=o.defaults(d,{collideConnected:!0,wakeUpBodies:!0}),this.equations=[],this.bodyA=e,this.bodyB=f,this.id=n.idCounter++,this.collideConnected=d.collideConnected,d.wakeUpBodies&&(e&&e.wakeUp(),f&&f.wakeUp())}f.exports=n;var o=e("../utils/Utils");n.prototype.update=function(){throw new Error("method update() not implmemented in this Constraint subclass!")},n.idCounter=0},{"../utils/Utils":48}],13:[function(e,f){function n(e,f,n,i){o.call(this,e,f),"undefined"==typeof i&&(i=1e6);var t=this.equations=[new d(e,f)],l=t[0];l.minForce=-i,l.maxForce=i,this.update=function(){f.position.vsub(e.position,l.ni),l.ni.normalize(),l.ni.mult(.5*n,l.ri),l.ni.mult(.5*-n,l.rj)}}f.exports=n;var o=e("./Constraint"),d=e("../equations/ContactEquation");n.prototype=new o},{"../equations/ContactEquation":16,"./Constraint":12}],14:[function(e,f){function n(e,f,n){o.call(this,e,f,n);var u="undefined"!=typeof n.maxForce?n.maxForce:1e6,p=this.pivotA="undefined"!=typeof n.pivotA?n.pivotA.clone():new l,s=this.pivotB="undefined"!=typeof n.pivotB?n.pivotB.clone():new l,y=this.axisA="undefined"!=typeof n.axisA?n.axisA.clone():new l(1,0,0),c=this.axisB="undefined"!=typeof n.axisB?n.axisB.clone():new l(1,0,0),a=(this.equations=[new d(e,f),new d(e,f),new t(e,f),new t(e,f),new t(e,f)],this.getRotationalEquation1(),this.getRotationalEquation2(),this.getPointToPointEquation1()),r=this.getPointToPointEquation2(),w=this.getPointToPointEquation3();r.minForce=w.minForce=a.minForce=-u,r.maxForce=w.maxForce=a.maxForce=u;var b=p.unit(),m=s.unit(),N=this.axisA_x_pivotA=new l,g=this.axisA_x_axisA_x_pivotA=new l,x=this.axisB_x_pivotB=new l;y.cross(b,N),N.norm2()<.001&&b.tangents(N,N),y.cross(N,g),c.cross(m,x),x.norm2()<.001&&c.tangents(x,x),N.normalize(),x.normalize(),this.motorEnabled=!1,this.motorTargetVelocity=0,this.motorMinForce=-u,this.motorMaxForce=u,this.motorEquation=new i(e,f,u)}f.exports=n;var o=e("./Constraint"),d=e("../equations/RotationalEquation"),i=e("../equations/RotationalMotorEquation"),t=e("../equations/ContactEquation"),l=e("../math/Vec3");n.prototype=new o,n.prototype.enableMotor=function(){this.motorEnabled||(this.equations.push(this.motorEquation),this.motorEnabled=!0)},n.prototype.disableMotor=function(){this.motorEnabled&&(this.motorEnabled=!1,this.equations.pop())},n.prototype.update=function(){var e=this.bodyA,f=this.bodyB,n=this.equations,o=this.motorEquation,d=n[0],i=n[1],t=n[2],l=n[3],u=n[4],p=this.axisA_x_pivotA,s=this.axisA,y=this.axisB,c=this.pivotA,a=this.pivotB,r=this.axisA_x_axisA_x_pivotA,w=this.axisB_x_pivotB;t.ni.set(1,0,0),l.ni.set(0,1,0),u.ni.set(0,0,1),e.quaternion.vmult(this.pivotA,t.ri),f.quaternion.vmult(this.pivotB,t.rj),l.ri.copy(t.ri),l.rj.copy(t.rj),u.ri.copy(t.ri),u.rj.copy(t.rj),s.cross(c,p),p.norm2()<.001&&c.tangents(p,p),s.cross(p,r),y.cross(a,w),w.norm2()<.001&&y.tangents(w,w),p.normalize(),w.normalize(),e.quaternion.vmult(p,d.ni),f.quaternion.vmult(y,d.nj),e.quaternion.vmult(r,i.ni),f.quaternion.vmult(y,i.nj),this.motorEnabled&&(e.quaternion.vmult(this.axisA,o.axisA),f.quaternion.vmult(this.axisB,o.axisB),o.targetVelocity=this.motorTargetVelocity,o.maxForce=this.motorMaxForce,o.minForce=this.motorMinForce)},n.prototype.getRotationalEquation1=function(){return this.equations[0]},n.prototype.getRotationalEquation2=function(){return this.equations[1]},n.prototype.getPointToPointEquation1=function(){return this.equations[2]},n.prototype.getPointToPointEquation2=function(){return this.equations[3]},n.prototype.getPointToPointEquation3=function(){return this.equations[4]}},{"../equations/ContactEquation":16,"../equations/RotationalEquation":19,"../equations/RotationalMotorEquation":20,"../math/Vec3":27,"./Constraint":12}],15:[function(e,f){function n(e,f,n,i,t){o.call(this,e,n);var l=this.equations=[new d(e,n),new d(e,n),new d(e,n)],u=l[0],p=l[1],s=l[2];p.minForce=s.minForce=u.minForce=-t,p.maxForce=s.maxForce=u.maxForce=t,this.update=function(){n.position.vsub(e.position,u.ni),u.ni.normalize(),e.quaternion.vmult(f,u.ri),n.quaternion.vmult(i,u.rj),u.ni.tangents(p.ni,s.ni),p.ri.copy(u.ri),p.rj.copy(u.rj),s.ri.copy(u.ri),s.rj.copy(u.rj)}}f.exports=n;var o=e("./Constraint"),d=e("../equations/ContactEquation");n.prototype=new o},{"../equations/ContactEquation":16,"./Constraint":12}],16:[function(e,f){function n(e,f){o.call(this,e,f,0,1e6),this.restitution=0,this.ri=new d,this.rj=new d,this.penetrationVec=new d,this.ni=new d,this.rixn=new d,this.rjxn=new d,this.invIi=new i,this.invIj=new i,this.biInvInertiaTimesRixn=new d,this.bjInvInertiaTimesRjxn=new d}f.exports=n;var o=e("./Equation"),d=e("../math/Vec3"),i=e("../math/Mat3");n.prototype=new o,n.prototype.constructor=n;var t=new d,l=new d,u=new d;n.prototype.computeB=function(e){var f=this.a,n=this.b,o=this.bi,d=this.bj,i=this.ri,p=this.rj,s=this.rixn,y=this.rjxn,c=u,a=o.velocity,r=o.angularVelocity?o.angularVelocity:c,w=(o.force,o.tau?o.tau:c),b=d.velocity,m=d.angularVelocity?d.angularVelocity:c,N=(d.force,d.tau?d.tau:c),g=this.penetrationVec,x=(o.invMass,d.invMass,this.invIi,this.invIj,this.jacobianElementA),j=this.jacobianElementB,v=this.ni;i.cross(v,s),p.cross(v,y),v.negate(x.spatial),s.negate(x.rotational),j.spatial.copy(v),j.rotational.copy(y);var g=this.penetrationVec;g.set(0,0,0),g.vadd(d.position,g),g.vadd(p,g),g.vsub(o.position,g),g.vsub(i,g);var A=v.dot(g),C=t,O=l;o.invInertiaWorld?o.invInertiaWorld.vmult(w,C):C.set(0,0,0),d.invInertiaWorld?d.invInertiaWorld.vmult(N,O):O.set(0,0,0);var h=this.restitution+1,k=h*b.dot(v)-h*a.dot(v)+m.dot(y)-r.dot(s),q=this.computeGiMf(),z=-A*f-k*n-e*q;return z}},{"../math/Mat3":24,"../math/Vec3":27,"./Equation":17}],17:[function(e,f){function n(e,f,n,d){this.id=-1,this.minForce="undefined"==typeof n?-1e6:n,this.maxForce="undefined"==typeof d?1e6:d,this.bi=e,this.bj=f,this.a=0,this.b=0,this.eps=0,this.jacobianElementA=new o,this.jacobianElementB=new o,this.setSpookParams(1e7,4,1/60),this.enabled=!0}f.exports=n;var o=e("../math/JacobianElement"),d=e("../math/Vec3");n.prototype.constructor=n,n.prototype.setSpookParams=function(e,f,n){var o=f,d=e,i=n;this.a=4/(i*(1+4*o)),this.b=4*o/(1+4*o),this.eps=4/(i*i*d*(1+4*o))},n.prototype.computeB=function(e,f,n){var o=this.computeGW(),d=this.computeGq(),i=this.computeGiMf();return-d*e-o*f-i*n},n.prototype.computeGq=function(){var e=this.jacobianElementA,f=this.jacobianElementB,n=this.bi,o=this.bj,d=n.position,i=o.position;return e.spatial.dot(d)+f.spatial.dot(i)};var i=new d;n.prototype.computeGW=function(){var e=this.jacobianElementA,f=this.jacobianElementB,n=this.bi,o=this.bj,d=n.velocity,t=o.velocity,l=n.angularVelocity||i,u=o.angularVelocity||i;return e.multiplyVectors(d,l)+f.multiplyVectors(t,u)},n.prototype.computeGWlambda=function(){var e=this.jacobianElementA,f=this.jacobianElementB,n=this.bi,o=this.bj,d=n.vlambda,t=o.vlambda,l=n.wlambda||i,u=o.wlambda||i;return e.multiplyVectors(d,l)+f.multiplyVectors(t,u)};var t=new d,l=new d,u=new d,p=new d;n.prototype.computeGiMf=function(){var e=this.jacobianElementA,f=this.jacobianElementB,n=this.bi,o=this.bj,d=n.force,i=n.tau,s=o.force,y=o.tau,c=n.invMassSolve,a=o.invMassSolve;return n.invInertiaWorldSolve?n.invInertiaWorldSolve.vmult(i,u):u.set(0,0,0),o.invInertiaWorldSolve?o.invInertiaWorldSolve.vmult(y,p):p.set(0,0,0),d.mult(c,t),s.mult(a,l),e.multiplyVectors(t,u)+f.multiplyVectors(l,p)};var s=new d;n.prototype.computeGiMGt=function(){var e=this.jacobianElementA,f=this.jacobianElementB,n=this.bi,o=this.bj,d=n.invMassSolve,i=o.invMassSolve,t=n.invInertiaWorldSolve,l=o.invInertiaWorldSolve,u=d+i;return t&&(t.vmult(e.rotational,s),u+=s.dot(e.rotational)),l&&(l.vmult(f.rotational,s),u+=s.dot(f.rotational)),u};{var y=new d;new d,new d,new d,new d,new d}n.prototype.addToWlambda=function(e){var f=this.jacobianElementA,n=this.jacobianElementB,o=this.bi,d=this.bj,i=y;f.spatial.mult(o.invMassSolve*e,i),o.vlambda.vadd(i,o.vlambda),n.spatial.mult(d.invMassSolve*e,i),d.vlambda.vadd(i,d.vlambda),o.invInertiaWorldSolve&&(o.invInertiaWorldSolve.vmult(f.rotational,i),i.mult(e,i),o.wlambda.vadd(i,o.wlambda)),d.invInertiaWorldSolve&&(d.invInertiaWorldSolve.vmult(n.rotational,i),i.mult(e,i),d.wlambda.vadd(i,d.wlambda))},n.prototype.computeC=function(){return this.computeGiMGt()+this.eps}},{"../math/JacobianElement":23,"../math/Vec3":27}],18:[function(e,f){function n(e,f,n){o.call(this,e,f,-n,n),this.ri=new d,this.rj=new d,this.t=new d,this.rixt=new d,this.rjxt=new d,this.wixri=new d,this.wjxrj=new d,this.invIi=new i,this.invIj=new i,this.relVel=new d,this.relForce=new d,this.biInvInertiaTimesRixt=new d,this.bjInvInertiaTimesRjxt=new d}f.exports=n;var o=e("./Equation"),d=e("../math/Vec3"),i=e("../math/Mat3");n.prototype=new o,n.prototype.constructor=n;var t=new d,l=new d,u=new d;n.prototype.computeB=function(e){var f=(this.a,this.b),n=this.bi,o=this.bj,d=this.ri,i=this.rj,p=this.rixt,s=this.rjxt,y=this.wixri,c=this.wjxrj,a=u,r=(n.velocity,n.angularVelocity?n.angularVelocity:a),w=(n.force,n.tau?n.tau:a),b=(o.velocity,o.angularVelocity?o.angularVelocity:a),m=(o.force,o.tau?o.tau:a),N=(this.relVel,this.relForce,n.invMass,o.invMass,this.invIi,this.invIj,this.t),g=t,x=l;d.cross(N,p),i.cross(N,s),r.cross(d,y),b.cross(i,c);var j=this.jacobianElementA,v=this.jacobianElementB;N.negate(j.spatial),p.negate(j.rotational),v.spatial.copy(N),v.rotational.copy(s),n.invInertiaWorld?n.invInertiaWorld.vmult(w,g):g.set(0,0,0),o.invInertiaWorld?o.invInertiaWorld.vmult(m,x):x.set(0,0,0);var A=this.computeGW(),C=this.computeGiMf(),O=-A*f-e*C;return O}},{"../math/Mat3":24,"../math/Vec3":27,"./Equation":17}],19:[function(e,f){function n(e,f){i.call(this,e,f,-1e6,1e6),this.ni=new o,this.nj=new o,this.nixnj=new o,this.njxni=new o,this.invIi=new d,this.invIj=new d,this.relVel=new o,this.relForce=new o}f.exports=n;var o=e("../math/Vec3"),d=e("../math/Mat3"),i=e("./Equation");n.prototype=new i,n.prototype.constructor=n;var t=new o;n.prototype.computeB=function(e){{var f=this.a,n=this.b,o=this.bi,d=this.bj,i=this.ni,l=this.nj,u=this.nixnj,p=this.njxni,s=(o.velocity,o.angularVelocity?o.angularVelocity:t,o.force,o.tau?o.tau:t,d.velocity,d.angularVelocity?d.angularVelocity:t,d.force,d.tau?d.tau:t,o.invMass,d.invMass,this.jacobianElementA),y=this.jacobianElementB;this.invIi,this.invIj}i.cross(l,u),l.cross(i,p),s.rotational.copy(p),y.rotational.copy(u);var c=-i.dot(l),a=this.computeGW(),r=this.computeGiMf(),w=-c*f-a*n-e*r;return w}},{"../math/Mat3":24,"../math/Vec3":27,"./Equation":17}],20:[function(e,f){function n(e,f,n){n=n||1e6,i.call(this,e,f,-n,n),this.axisA=new o,this.axisB=new o,this.invIi=new d,this.invIj=new d,this.targetVelocity=0}f.exports=n;var o=e("../math/Vec3"),d=e("../math/Mat3"),i=e("./Equation");n.prototype=new i,n.prototype.constructor=n;var t=new o;n.prototype.computeB=function(e){{var f=(this.a,this.b),n=this.bi,o=this.bj,d=this.axisA,i=this.axisB,l=(n.velocity,n.angularVelocity?n.angularVelocity:t,n.force,n.tau?n.tau:t,o.velocity,o.angularVelocity?o.angularVelocity:t,o.force,o.tau?o.tau:t,this.jacobianElementA),u=this.jacobianElementB;n.invMass,o.invMass}l.rotational.copy(d),i.negate(u.rotational);var p=this.computeGW()-this.targetVelocity,s=this.computeGiMf(),y=-p*f-e*s;return y}},{"../math/Mat3":24,"../math/Vec3":27,"./Equation":17}],21:[function(e,f){function n(e,f,d){d=o.defaults(d,{friction:.3,restitution:.3,contactEquationStiffness:1e7,contactEquationRelaxation:3,frictionEquationStiffness:1e7,frictionEquationRelaxation:3}),this.id=n.idCounter++,this.materials=[e,f],this.friction=d.friction,this.restitution=d.restitution,this.contactEquationStiffness=d.contactEquationStiffness,this.contactEquationRelaxation=d.contactEquationRelaxation,this.frictionEquationStiffness=d.frictionEquationStiffness,this.frictionEquationRelaxation=d.frictionEquationRelaxation}var o=e("../utils/Utils");f.exports=n,n.idCounter=0},{"../utils/Utils":48}],22:[function(e,f){function n(e){this.name=e,this.id=n.idCounter++}f.exports=n,n.idCounter=0},{}],23:[function(e,f){function n(){this.spatial=new o,this.rotational=new o}f.exports=n;var o=e("./Vec3");n.prototype.multiplyElement=function(e){return e.spatial.dot(this.spatial)+e.rotational.dot(this.rotational)},n.prototype.multiplyVectors=function(e,f){return e.dot(this.spatial)+f.dot(this.rotational)}},{"./Vec3":27}],24:[function(e,f){function n(e){this.elements=e?e:[0,0,0,0,0,0,0,0,0]
- }f.exports=n;var o=e("./Vec3");n.prototype.identity=function(){this.elements[0]=1,this.elements[1]=0,this.elements[2]=0,this.elements[3]=0,this.elements[4]=1,this.elements[5]=0,this.elements[6]=0,this.elements[7]=0,this.elements[8]=1},n.prototype.setZero=function(){var e=this.elements;e[0]=0,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=0,e[6]=0,e[7]=0,e[8]=0},n.prototype.setTrace=function(e){var f=this.elements;f[0]=e.x,f[4]=e.y,f[8]=e.z},n.prototype.getTrace=function(e){var e=e||new o,f=this.elements;e.x=f[0],e.y=f[4],e.z=f[8]},n.prototype.vmult=function(e,f){f=f||new o;var n=this.elements,d=e.x,i=e.y,t=e.z;return f.x=n[0]*d+n[1]*i+n[2]*t,f.y=n[3]*d+n[4]*i+n[5]*t,f.z=n[6]*d+n[7]*i+n[8]*t,f},n.prototype.smult=function(e){for(var f=0;f<this.elements.length;f++)this.elements[f]*=e},n.prototype.mmult=function(e,f){for(var o=f||new n,d=0;3>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;f<e.elements.length;f++)this.elements[f]=e.elements[f];return this},n.prototype.toString=function(){for(var e="",f=",",n=0;9>n;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.suspensionLength<y&&(e.suspensionLength=y),e.suspensionLength>c&&(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;o<n.length;o++)e.add(n[o]);for(var o=0;o<f.length;o++)e.addConstraint(f[o]);e.addEventListener("preStep",this._update.bind(this))},n.prototype._update=function(){for(var e=this.wheelForces,f=0;f<e.length;f++)this.applyWheelForce(e[f],f)},n.prototype.removeFromWorld=function(e){for(var f=this.constraints,n=this.wheelBodies.concat([this.chassisBody]),o=0;o<n.length;o++)e.remove(n[o]);for(var o=0;o<f.length;o++)e.removeConstraint(f[o])};var p=new t;n.prototype.getWheelSpeed=function(e){var f=this.wheelAxes[e],n=this.wheelBodies[e],o=n.angularVelocity;return this.chassisBody.vectorToWorldFrame(f,p),o.dot(p)}},{"../constraints/HingeConstraint":14,"../math/Vec3":27,"../shapes/Box":34,"../shapes/Sphere":41,"./Body":28}],31:[function(e,f){function n(){this.particles=[],this.density=1,this.smoothingRadius=1,this.speedOfSound=1,this.viscosity=.01,this.eps=1e-6,this.pressures=[],this.densities=[],this.neighbors=[]}f.exports=n;{var o=(e("../shapes/Shape"),e("../math/Vec3"));e("../math/Quaternion"),e("../shapes/Particle"),e("../objects/Body"),e("../material/Material")}n.prototype.add=function(e){this.particles.push(e),this.neighbors.length<this.particles.length&&this.neighbors.push([])},n.prototype.remove=function(e){var f=this.particles.indexOf(e);-1!==f&&(this.particles.splice(f,1),this.neighbors.length>this.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()<i&&f.push(u)}};var i=new o,t=new o,l=new o,u=new o,p=new o,s=new o;n.prototype.update=function(){for(var e=this.particles.length,f=i,n=this.speedOfSound,o=this.eps,d=0;d!==e;d++){var y=this.particles[d],c=this.neighbors[d];c.length=0,this.getNeighbors(y,c),c.push(this.particles[d]);for(var a=c.length,r=0,w=0;w!==a;w++){y.position.vsub(c[w].position,f);var b=f.norm(),m=this.w(b);r+=c[w].mass*m}this.densities[d]=r,this.pressures[d]=n*n*(this.densities[d]-this.density)}for(var N=t,g=l,x=u,j=p,v=s,d=0;d!==e;d++){var A=this.particles[d];N.set(0,0,0),g.set(0,0,0);for(var C,O,c=this.neighbors[d],a=c.length,w=0;w!==a;w++){var h=c[w];A.position.vsub(h.position,j);var k=j.norm();C=-h.mass*(this.pressures[d]/(this.densities[d]*this.densities[d]+o)+this.pressures[w]/(this.densities[w]*this.densities[w]+o)),this.gradw(j,x),x.mult(C,x),N.vadd(x,N),h.velocity.vsub(A.velocity,v),v.mult(1/(1e-4+this.densities[d]*this.densities[w])*this.viscosity*h.mass,v),O=this.nablaw(k),v.mult(O,v),g.vadd(v,g)}g.mult(A.mass,g),N.mult(A.mass,N),A.force.vadd(g,A.force),A.force.vadd(N,A.force)}},n.prototype.w=function(e){var f=this.smoothingRadius;return 315/(64*Math.PI*Math.pow(f,9))*Math.pow(f*f-e*e,3)},n.prototype.gradw=function(e,f){var n=e.norm(),o=this.smoothingRadius;e.mult(945/(32*Math.PI*Math.pow(o,9))*Math.pow(o*o-n*n,2),f)},n.prototype.nablaw=function(e){var f=this.smoothingRadius,n=945/(32*Math.PI*Math.pow(f,9))*(f*f-e*e)*(7*e*e-3*f*f);return n}},{"../material/Material":22,"../math/Quaternion":25,"../math/Vec3":27,"../objects/Body":28,"../shapes/Particle":38,"../shapes/Shape":40}],32:[function(e,f){function n(e,f,n){n=n||{},this.restLength="number"==typeof n.restLength?n.restLength:1,this.stiffness=n.stiffness||100,this.damping=n.damping||1,this.bodyA=e,this.bodyB=f,this.localAnchorA=new o,this.localAnchorB=new o,n.localAnchorA&&this.localAnchorA.copy(n.localAnchorA),n.localAnchorB&&this.localAnchorB.copy(n.localAnchorB),n.worldAnchorA&&this.setWorldAnchorA(n.worldAnchorA),n.worldAnchorB&&this.setWorldAnchorB(n.worldAnchorB)}var o=e("../math/Vec3");f.exports=n,n.prototype.setWorldAnchorA=function(e){this.bodyA.pointToLocalFrame(e,this.localAnchorA)},n.prototype.setWorldAnchorB=function(e){this.bodyB.pointToLocalFrame(e,this.localAnchorB)},n.prototype.getWorldAnchorA=function(e){this.bodyA.pointToWorldFrame(this.localAnchorA,e)},n.prototype.getWorldAnchorB=function(e){this.bodyB.pointToWorldFrame(this.localAnchorB,e)};var d=new o,i=new o,t=new o,l=new o,u=new o,p=new o,s=new o,y=new o,c=new o,a=new o,r=new o;n.prototype.applyForce=function(){var e=this.stiffness,f=this.damping,n=this.restLength,o=this.bodyA,w=this.bodyB,b=d,m=i,N=t,g=l,x=r,j=u,v=p,A=s,C=y,O=c,h=a;this.getWorldAnchorA(j),this.getWorldAnchorB(v),j.vsub(o.position,A),v.vsub(w.position,C),v.vsub(j,b);var k=b.norm();m.copy(b),m.normalize(),w.velocity.vsub(o.velocity,N),w.angularVelocity.cross(C,x),N.vadd(x,N),o.angularVelocity.cross(A,x),N.vsub(x,N),m.mult(-e*(k-n)-f*N.dot(m),g),o.force.vsub(g,o.force),w.force.vadd(g,w.force),A.cross(g,O),C.cross(g,h),o.tau.vsub(O,o.tau),w.tau.vadd(h,w.tau)}},{"../math/Vec3":27}],33:[function(e,f){function n(e){e=t.defaults(e,{chassisConnectionPointLocal:new o,chassisConnectionPointWorld:new o,directionLocal:new o,directionWorld:new o,axleLocal:new o,axleWorld:new o,suspensionRestLength:1,suspensionMaxLength:2,radius:1,suspensionStiffness:100,dampingCompression:10,dampingRelaxation:10,frictionSlip:1e4,steering:0,rotation:0,deltaRotation:0,rollInfluence:.01,maxSuspensionForce:Number.MAX_VALUE,isFrontWheel:!0,clippedInvContactDotSuspension:1,suspensionRelativeVelocity:0,suspensionForce:0,skidInfo:0,suspensionLength:0,maxSuspensionTravel:1,useCustomSlidingRotationalSpeed:!1,customSlidingRotationalSpeed:-.1}),this.maxSuspensionTravel=e.maxSuspensionTravel,this.customSlidingRotationalSpeed=e.customSlidingRotationalSpeed,this.useCustomSlidingRotationalSpeed=e.useCustomSlidingRotationalSpeed,this.sliding=!1,this.chassisConnectionPointLocal=e.chassisConnectionPointLocal.clone(),this.chassisConnectionPointWorld=e.chassisConnectionPointWorld.clone(),this.directionLocal=e.directionLocal.clone(),this.directionWorld=e.directionWorld.clone(),this.axleLocal=e.axleLocal.clone(),this.axleWorld=e.axleWorld.clone(),this.suspensionRestLength=e.suspensionRestLength,this.suspensionMaxLength=e.suspensionMaxLength,this.radius=e.radius,this.suspensionStiffness=e.suspensionStiffness,this.dampingCompression=e.dampingCompression,this.dampingRelaxation=e.dampingRelaxation,this.frictionSlip=e.frictionSlip,this.steering=0,this.rotation=0,this.deltaRotation=0,this.rollInfluence=e.rollInfluence,this.maxSuspensionForce=e.maxSuspensionForce,this.engineForce=0,this.brake=0,this.isFrontWheel=e.isFrontWheel,this.clippedInvContactDotSuspension=1,this.suspensionRelativeVelocity=0,this.suspensionForce=0,this.skidInfo=0,this.suspensionLength=0,this.sideImpulse=0,this.forwardImpulse=0,this.raycastResult=new i,this.worldTransform=new d,this.isInContact=!1}var o=e("../math/Vec3"),d=e("../math/Transform"),i=e("../collision/RaycastResult"),t=e("../utils/Utils");f.exports=n;var l=new o,u=new o,l=new o;n.prototype.updateWheel=function(e){var f=this.raycastResult;if(this.isInContact){var n=f.hitNormalWorld.dot(f.directionWorld);f.hitPointWorld.vsub(e.position,u),e.getVelocityAtWorldPoint(u,l);var o=f.hitNormalWorld.dot(l);if(n>=-.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;i<d.length;i++)t.set(d[i][0],d[i][1],d[i][2]),f.vmult(t,t),e.vadd(t,t),n(t.x,t.y,t.z)};var l=[new d,new d,new d,new d,new d,new d,new d,new d];n.prototype.calculateWorldAABB=function(e,f,n,o){var d=this.halfExtents;l[0].set(d.x,d.y,d.z),l[1].set(-d.x,d.y,d.z),l[2].set(-d.x,-d.y,d.z),l[3].set(-d.x,-d.y,-d.z),l[4].set(d.x,-d.y,-d.z),l[5].set(d.x,d.y,-d.z),l[6].set(-d.x,d.y,-d.z),l[7].set(d.x,-d.y,d.z);var i=l[0];f.vmult(i,i),e.vadd(i,i),o.copy(i),n.copy(i);for(var t=1;8>t;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),u<n.x&&(n.x=u),p<n.y&&(n.y=p),s<n.z&&(n.z=s)}}},{"../math/Vec3":27,"./ConvexPolyhedron":35,"./Shape":40}],35:[function(e,f){function n(e,f){o.call(this),this.type=o.types.CONVEXPOLYHEDRON,this.vertices=e||[],this.worldVertices=[],this.worldVerticesNeedsUpdate=!0,this.faces=f||[],this.faceNormals=[],this.computeNormals(),this.worldFaceNormalsNeedsUpdate=!0,this.worldFaceNormals=[],this.uniqueEdges=[],this.computeEdges(),this.updateBoundingSphereRadius()}f.exports=n;var o=e("./Shape"),d=e("../math/Vec3"),i=e("../math/Quaternion"),t=e("../math/Transform");n.prototype=new o,n.prototype.constructor=n,n.prototype.computeEdges=function(){var e=this.faces,f=this.vertices,n=f.length,o=this.uniqueEdges;o.length=0;for(var i=0;n>i;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;l<e.length;l++)for(var u=e[l],p=u.length,s=0;p>s;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;t<o.length;t++)if(o[t].almostEquals(c)||o[t].almostEquals(c)){a=!0;break}a||o.push(c),c&&(c.face1=l)}},n.prototype.computeNormals=function(){this.faceNormals.length=this.faces.length;for(var e=0;e<this.faces.length;e++){for(var f=0;f<this.faces[e].length;f++)if(!this.vertices[this.faces[e][f]])throw new Error("Vertex "+this.faces[e][f]+" not found!");var n=this.faceNormals[e]||new d;this.getFaceNormal(e,n),n.negate(n),this.faceNormals[e]=n;var o=this.vertices[this.faces[e][0]];if(n.dot(o)<0){console.error(".faceNormals["+e+"] = Vec3("+n.toString()+") looks like it points into the shape? The vertices follow. Make sure they are ordered CCW around the normal, using the right hand rule.");for(var f=0;f<this.faces[e].length;f++)console.warn(".vertices["+this.faces[e][f]+"] = Vec3("+this.vertices[this.faces[e][f]].toString()+")")}}};var l=new d,u=new d;n.computeNormal=function(e,f,n,o){f.vsub(e,u),n.vsub(f,l),l.cross(u,o),o.isZero()||o.normalize()},n.prototype.getFaceNormal=function(e,f){var o=this.faces[e],d=this.vertices[o[0]],i=this.vertices[o[1]],t=this.vertices[o[2]];return n.computeNormal(d,i,t,f)};var p=new d;n.prototype.clipAgainstHull=function(e,f,n,o,t,l,u,s,y){var c=p;if(!(e instanceof d))throw new Error("posA must be Vec3");if(!(f instanceof i))throw new Error("quatA must be Quaternion");for(var a=-1,r=-1/0,w=0;w<n.faces.length;w++){c.copy(n.faceNormals[w]),t.vmult(c,c);var b=c.dot(l);b>r&&(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;h<g.uniqueEdges.length;h++){p.copy(g.uniqueEdges[h]),n.vmult(p,p);for(var k=0;k<e.uniqueEdges.length;k++)if(b.copy(e.uniqueEdges[k]),d.vmult(b,b),p.cross(b,m),O++,!m.almostZero()){m.normalize();var q=g.testSepAxis(m,e,f,n,o,d);if(q===!1)return!1;N>q&&(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;B<b.faces.length;B++){u.copy(b.faceNormals[B]),n.vmult(u,u);var D=u.dot(e);z>D&&(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;F<b.faces.length;F++)for(var G=0;G<b.faces[F].length;G++)-1!==E.indexOf(b.faces[F][G])&&F!==q&&-1===E.connectedFaces.indexOf(F)&&E.connectedFaces.push(F);for(var H=(h.length,E.length),I=0;H>I;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<h.length;F++){var Q=w.dot(h[F])+L;if(i>=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.length<n;)this.worldVertices.push(new d);for(var o=this.vertices,i=this.worldVertices,t=0;t!==n;t++)f.vmult(o[t],i[t]),e.vadd(i[t],i[t]);this.worldVerticesNeedsUpdate=!1};new d;n.prototype.computeLocalAABB=function(e,f){var n=this.vertices.length,o=this.vertices;e.set(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),f.set(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE);for(var d=0;n>d;d++){var i=o[d];i.x<e.x?e.x=i.x:i.x>f.x&&(f.x=i.x),i.y<e.y?e.y=i.y:i.y>f.y&&(f.y=i.y),i.z<e.z?e.z=i.z:i.z>f.z&&(f.z=i.z)}},n.prototype.computeWorldFaceNormals=function(e){for(var f=this.faceNormals.length;this.worldFaceNormals.length<f;)this.worldFaceNormals.push(new d);for(var n=this.faceNormals,o=this.worldFaceNormals,i=0;i!==f;i++)e.vmult(n[i],o[i]);this.worldFaceNormalsNeedsUpdate=!1},n.prototype.updateBoundingSphereRadius=function(){for(var e=0,f=this.vertices,n=0,o=f.length;n!==o;n++){var d=f[n].norm2();d>e&&(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.x<d||void 0===d?d=a.x:(a.x>l||void 0===l)&&(l=a.x),a.y<i||void 0===i?i=a.y:(a.y>u||void 0===u)&&(u=a.y),a.z<t||void 0===t?t=a.z:(a.z>p||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;d<this.faceNormals.length;d++){var i=this.faceNormals[d];f.vmult(i,i)}}if(e)for(var d=0;n>d;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;w<y.length;w++)N.push(y[y.length-w-1]);s.push(N),p.push(new d(0,0,-1)),this.type=o.types.CONVEXPOLYHEDRON,i.call(this,u,s,p)}f.exports=n;var o=e("./Shape"),d=e("../math/Vec3"),i=(e("../math/Quaternion"),e("./ConvexPolyhedron"));n.prototype=new i},{"../math/Quaternion":25,"../math/Vec3":27,"./ConvexPolyhedron":35,"./Shape":40}],37:[function(e,f){function n(e,f){f=t.defaults(f,{maxValue:null,minValue:null,elementSize:1}),this.data=e,this.maxValue=f.maxValue,this.minValue=f.minValue,this.elementSize=f.elementSize,null===f.minValue&&this.updateMinValue(),null===f.maxValue&&this.updateMaxValue(),this.cacheEnabled=!0,o.call(this),this.pillarConvex=new d,this.pillarOffset=new i,this.type=o.types.HEIGHTFIELD,this.updateBoundingSphereRadius(),this._cachedPillars={}}var o=e("./Shape"),d=e("./ConvexPolyhedron"),i=e("../math/Vec3"),t=e("../utils/Utils");f.exports=n,n.prototype=new o,n.prototype.update=function(){this._cachedPillars={}},n.prototype.updateMinValue=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];f>d&&(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;t<i.length;t++){var l=i[t];n[l]=e[l]-d,o[l]=e[l]+d}}},{"../math/Vec3":27,"./Shape":40}],42:[function(e,f){function n(){o.call(this),this.iterations=10,this.tolerance=0}f.exports=n;var o=(e("../math/Vec3"),e("../math/Quaternion"),e("./Solver"));n.prototype=new o;var d=[],i=[],t=[];n.prototype.solve=function(e,f){var n,o,l,u,p,s,y=0,c=this.iterations,a=this.tolerance*this.tolerance,r=this.equations,w=r.length,b=f.bodies,m=b.length,N=e;if(0!==w)for(var g=0;g!==m;g++)b[g].updateSolveMassProperties();var x=i,j=t,v=d;x.length=w,j.length=w,v.length=w;for(var g=0;g!==w;g++){var A=r[g];v[g]=0,j[g]=A.computeB(N),x[g]=1/A.computeC()}if(0!==w){for(var g=0;g!==m;g++){var C=b[g],O=C.vlambda,h=C.wlambda;O.set(0,0,0),h&&h.set(0,0,0)}for(y=0;y!==c;y++){u=0;for(var k=0;k!==w;k++){var A=r[k];n=j[k],o=x[k],s=v[k],p=A.computeGWlambda(),l=o*(n-p-A.eps*s),s+l<A.minForce?l=A.minForce-s:s+l>A.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.length<r;)s.push({body:null,children:[],eqs:[],visited:!1});for(var b=0;b!==r;b++){var m=s[b];m.body=y[b],m.children.length=0,m.eqs.length=0,m.visited=!1}for(var N=0;N!==a;N++){var g=c[N],b=y.indexOf(g.bi),x=y.indexOf(g.bj),j=s[b],v=s[x];j.children.push(v),j.eqs.push(g),v.children.push(j),v.eqs.push(g)}for(var A,C=d.STATIC,O=0,h=t,k=l,q=u;A=n(s);){h.length=0,k.length=0,o(A,p);for(var z=h.length,b=0;b!==z;b++)w.addEquation(h[b]);q.bodies=k;{w.solve(e,q)}w.removeAllEquations(),O++}return O}},{"../math/Quaternion":25,"../math/Vec3":27,"../objects/Body":28,"./Solver":43}],45:[function(e,f){var n=function(){};f.exports=n,n.prototype={constructor:n,addEventListener:function(e,f){void 0===this._listeners&&(this._listeners={});var n=this._listeners;return void 0===n[e]&&(n[e]=[]),-1===n[e].indexOf(f)&&n[e].push(f),this},hasEventListener:function(e,f){if(void 0===this._listeners)return!1;var n=this._listeners;return void 0!==n[e]&&-1!==n[e].indexOf(f)?!0:!1},removeEventListener:function(e,f){if(void 0===this._listeners)return this;var n=this._listeners;if(void 0===n[e])return this;var o=n[e].indexOf(f);return-1!==o&&n[e].splice(o,1),this},dispatchEvent:function(e){if(void 0===this._listeners)return this;var f=this._listeners,n=f[e.type];if(void 0!==n){e.target=this;for(var o=0,d=n.length;d>o;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;m<w.shapes.length;m++){w.quaternion.mult(w.shapeOrientations[m],i),w.quaternion.vmult(w.shapeOffsets[m],l),l.vadd(w.position,l);for(var N=w.shapes[m],g=0;g<b.shapes.length;g++){b.quaternion.mult(b.shapeOrientations[g],t),b.quaternion.vmult(b.shapeOffsets[g],u),u.vadd(b.position,u);var x=b.shapes[g];if(l.distanceTo(u)>N.boundingSphereRadius+x.boundingSphereRadius)break;var j=this[N.type|x.type];j&&(N.type<x.type?j.call(this,o,N,x,l,u,i,t,w,b,N,x):j.call(this,o,x,N,u,l,t,i,b,w,N,x))}}};n.prototype[d.types.BOX|d.types.BOX]=n.prototype.boxBox=function(e,f,n,o,d,i,t,l,u){this.convexConvex(e,f.convexPolyhedronRepresentation,n.convexPolyhedronRepresentation,o,d,i,t,l,u,f,n)},n.prototype[d.types.BOX|d.types.CONVEXPOLYHEDRON]=n.prototype.boxConvex=function(e,f,n,o,d,i,t,l,u){this.convexConvex(e,f.convexPolyhedronRepresentation,n,o,d,i,t,l,u,f,n)},n.prototype[d.types.BOX|d.types.PARTICLE]=n.prototype.boxParticle=function(e,f,n,o,d,i,t,l,u){this.convexParticle(e,f.convexPolyhedronRepresentation,n,o,d,i,t,l,u,f,n)},n.prototype[d.types.SPHERE]=n.prototype.sphereSphere=function(e,f,n,o,d,i,t,l,u){var p=this.makeResult(l,u,f,n);u.position.vsub(o,p.ni),p.ni.normalize(),p.ri.copy(p.ni),p.rj.copy(p.ni),p.ri.mult(f.radius,p.ri),p.rj.mult(-n.radius,p.rj),e.push(p)};var r=new i,w=new i;n.prototype[d.types.SPHERE|d.types.PLANE]=n.prototype.spherePlane=function(e,f,n,o,d,i,t,l,u){var p=this.makeResult(l,u,f,n);if(p.ni.set(0,0,1),t.vmult(p.ni,p.ni),p.ni.negate(p.ni),p.ni.normalize(),p.ni.mult(f.radius,p.ri),o.vsub(d,r),p.ni.mult(p.ni.dot(r),w),r.vsub(w,p.rj),w.norm2()<=f.radius*f.radius){e.push(p);var s=p.ri,y=p.rj;s.vadd(o,s),s.vsub(l.position,s),y.vadd(d,y),y.vsub(u.position,y)}};var b=new i,m=new i,N=new i,g=new i,x=new i,j=new i,v=new i,A=[new i,new i,new i,new i,new i,new i],C=new i,O=new i,h=new i,k=new i;n.prototype[d.types.SPHERE|d.types.BOX]=n.prototype.sphereBox=function(e,f,n,o,d,i,t,l,u){var p=this.v3pool,s=A;o.vsub(d,g),n.getSideNormals(s,t);for(var y=f.radius,c=!1,a=O,r=h,w=k,b=null,m=0,N=0,q=0,z=null,B=0,D=s.length;B!==D&&c===!1;B++){var E=x;E.copy(s[B]);var F=E.norm();E.normalize();var G=g.dot(E);if(F+y>G&&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()<y*y){c=!0;var Q=this.makeResult(l,u,f,n);Q.ri.copy(S),Q.ri.normalize(),Q.ni.copy(Q.ri),Q.ri.mult(y,Q.ri),Q.rj.copy(R),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)}p.release(R),R=null;for(var W=p.get(),X=p.get(),Q=p.get(),Y=p.get(),P=p.get(),Z=s.length,T=0;T!==Z&&!c;T++)for(var U=0;U!==Z&&!c;U++)if(T%3!==U%3){s[U].cross(s[T],W),W.normalize(),s[T].vadd(s[U],X),Q.copy(o),Q.vsub(X,Q),Q.vsub(d,Q);var $=Q.dot(W);W.mult($,Y);for(var V=0;V===T%3||V===U%3;)V++;P.copy(o),P.vsub(Y,P),P.vsub(X,P),P.vsub(d,P);var _=Math.abs($),ef=P.norm();if(_<s[V].norm()&&y>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()<r*r){x=!0;var g=this.makeResult(u,p,f,n);return g.ri.copy(N),g.ri.normalize(),g.ni.copy(g.ri),g.ri.mult(r,g.ri),m.vsub(i,g.rj),g.ri.vadd(d,g.ri),g.ri.vsub(u.position,g.ri),g.rj.vadd(i,g.rj),g.rj.vsub(p.position,g.rj),void e.push(g)}}for(var x=!1,w=0,j=c.length;w!==j&&x===!1;w++){var v=y[w],A=c[w],C=F;l.vmult(v,C);var O=G;l.vmult(a[A[0]],O),O.vadd(i,O);var h=H;C.mult(-r,h),d.vadd(h,h);var k=I;h.vsub(O,k);var K=k.dot(C),L=J;if(d.vsub(O,L),0>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&&_*_<X.norm2()&&ef.norm2()<r*r){var g=this.makeResult(u,p,f,n);Z.vsub(i,g.rj),Z.vsub(d,g.ni),g.ni.normalize(),g.ni.mult(r,g.ri),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),e.push(g);for(var P=0,U=M.length;P!==U;P++)s.release(M[P]);return s.release(V),s.release(W),s.release(Z),s.release(ef),void s.release($)}s.release(V),s.release(W),s.release(Z),s.release(ef),s.release($)}for(var P=0,U=M.length;P!==U;P++)s.release(M[P])}}}};new i,new i;n.prototype[d.types.PLANE|d.types.BOX]=n.prototype.planeBox=function(e,f,n,o,d,i,t,l,u){this.planeConvex(e,f,n.convexPolyhedronRepresentation,o,d,i,t,l,u)};var K=new i,L=new i,M=new i,P=new i;n.prototype[d.types.PLANE|d.types.CONVEXPOLYHEDRON]=n.prototype.planeConvex=function(e,f,n,o,d,i,t,l,u){var p=K,s=L;s.set(0,0,1),i.vmult(s,s);for(var y=M,c=0;c!==n.vertices.length;c++){p.copy(n.vertices[c]),t.vmult(p,p),d.vadd(p,p),p.vsub(o,y);var a=s.dot(y);if(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)<Math.abs(c))&&(c=g,p=w,s.copy(N),a++)}if(-1!==p){var x=this.makeResult(u,l,n,f);s.mult(c,y),y.vadd(d,y),y.vsub(o,y),x.rj.copy(y),s.negate(x.ni),x.ri.set(0,0,0);var j=x.ri,v=x.rj;j.vadd(d,j),j.vsub(u.position,j),v.vadd(o,v),v.vsub(l.position,v),e.push(x)}else console.warn("Point found inside convex, but did not find penetrating face!")}},n.prototype[d.types.BOX|d.types.HEIGHTFIELD]=n.prototype.boxHeightfield=function(e,f,n,o,d,i,t,l,u){this.convexHeightfield(e,f.convexPolyhedronRepresentation,n,o,d,i,t,l,u)};var _=new i,ef=new i;n.prototype[d.types.CONVEXPOLYHEDRON|d.types.HEIGHTFIELD]=n.prototype.convexHeightfield=function(e,f,n,o,d,i,l,u,p){var s=n.data,y=n.elementSize,c=f.boundingSphereRadius,a=ef,r=_;t.pointToLocalFrame(d,l,o,r);var w=Math.floor((r.x-c)/y)-1,b=Math.ceil((r.x+c)/y)+1,m=Math.floor((r.y-c)/y)-1,N=Math.ceil((r.y+c)/y)+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-c>j||r.z+c<x))for(var v=w;b>v;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+y<x))for(var v=w;b>v;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)});
|