UNPKG

nago.js

Version:
1 lines 5.66 kB
var nago=(()=>{var G=(C,t)=>()=>(t||C((t={exports:{}}).exports,t),t.exports),N=G((C,t)=>{function u(k,d){this.x=k;this.y=d}u.prototype={negate:function(){this.x=-this.x;this.y=-this.y}};t.exports=u}),Z=G((C,t)=>{var u=N();t.exports=function(k){var {cGroup:d=32,cMask:a=63,bCoef:e=1,xpos:b=0,ypos:c=0}=k||{};this.cGroup=d;this.cMask=a;this.bCoef=e;this.pos=new u(b,c)}}),aa=G((C,t)=>{function u(d){var {cGroup:a=32,cMask:e=63,bCoef:b=1,bias:c=0,v0:h=null,v1:f=null}=d||{};this.v0Normal=this.v1Normal=this.normal=null;this.arcRadius=0;this.arcCenter=null;this.v0=h;this.v1=f;this.bias=c;this.bCoef=b;this.cMask=e;this.cGroup=a;this.curveF=1/0}var k=N();u.prototype={setCurveDegrees:function(d){if(d*=.017453292519943295,0>d){d=-d;var a=this.v0;this.v0=this.v1;this.v1=a;this.bias=-this.bias}.17435839227423353<d&&5.934119456780721>d&&(this.curveF=1/Math.tan(d/2))},getCurveDegrees:function(){return isFinite(this.curveF)?114.59155902616465*Math.atan(1/this.curveF):0},calculateNormals:function(){var {curveF:d,v1:{pos:a},v0:{pos:e}}=this,b,c,h,f;isFinite(d)?(h=.5*(a.x-e.x),f=.5*(a.y-e.y),b=e.x+h-f*d,c=e.y+f+h*d,h=e.x-b,f=e.y-c,this.arcRadius=Math.sqrt(h*h+f*f),this.v0Normal=new k(c-e.y,e.x-b),this.v1Normal=new k(a.y-c,b-a.x),0>=d&&(this.v0Normal.negate(),this.v1Normal.negate()),this.arcCenter=new k(b,c)):(h=e.x-a.x,f=e.y-a.y,c=Math.sqrt(f*f+h*h),this.normal=new k(-f/c,h/c))}};t.exports=u}),ba=G((C,t)=>{var u=N();t.exports=function(k){var {cGroup:d=32,cMask:a=63,bCoef:e=1,dist:b=0,xnormal:c=0,ynormal:h=0}=k||{};this.cGroup=d;this.cMask=a;this.bCoef=e;this.dist=b;this.normal=new u(c,h)}}),ca=G((C,t)=>{function u(d){var {p0x:a=0,p0y:e=0,p1x:b=0,p1y:c=0}=d||{};this.p1=new k(b,c);this.p0=new k(a,e)}var k=N();u.prototype={check:function({x:d,y:a},{x:e,y:b}){var {p0:{x:c,y:h},p1:{x:f,y:D}}=this,J=e-d,K=b-a;return 0<K*(c-d)-J*(h-a)==0<K*(f-d)-J*(D-a)?!1:(J=f-c,K=D-h,0<K*(d-c)-J*(a-h)!=0<K*(e-c)-J*(b-h))}};t.exports=u}),T=G((C,t)=>{var u=N();t.exports=function(k){var {cGroup:d=63,cMask:a=63,damping:e=.99,invMass:b=1,bCoef:c=.5,radius:h=10,xgravity:f=0,ygravity:D=0,xspeed:J=0,yspeed:K=0,xpos:P=0,ypos:Q=0}=k||{};this.cGroup=d;this.cMask=a;this.damping=e;this.invMass=b;this.bCoef=c;this.radius=h;this.gravity=new u(f,D);this.speed=new u(J,K);this.pos=new u(P,Q)}}),da=G((C,t)=>{t.exports=function(u){var {strength:k=1/0,maxLength:d=100,minLength:a=100,d1:e=0,d0:b=0}=u||{};this.strength=k;this.maxLength=d;this.minLength=a;this.d1=e;this.d0=b}}),ea=G((C,t)=>{function u(d){k.apply(this,[d])}var k=T();u.prototype={applyForce:function(d,a,e){var {speed:b,invMass:c}=this;b.x+=d*a*c;b.y+=d*e*c},addVelocity:function(d,a){var {speed:e}=this;e.x+=d;e.y+=a},isMoving:function(){var {x:d,y:a}=this.speed;return 0<d*d+a*a}};t.exports=u}),ha=G((C,t)=>{function u(){this.discs=[];this.vertices=[];this.planes=[];this.segments=[];this.joints=[]}u.prototype={advance:function(k,d){var a,e,b,c,h,f,{discs:D,planes:J,segments:K,vertices:P,joints:Q}=this;D.forEach(({pos:x,speed:p,gravity:A,damping:y})=>{var {x:E,y:H}=p;x.x+=k*E;x.y+=k*H;p.x=y*(E+A.x);p.y=y*(H+A.y)});D.forEach((x,p)=>{var {bCoef:A,radius:y,cMask:E,cGroup:H,invMass:I,pos:g,speed:l}=x;for(a=p+1;a<D.length;a++)if(b=D[a],b.cMask&H&&b.cGroup&E){var {pos:z,speed:w}=b,B=g.x-z.x,L=g.y-z.y,F=B*B+L*L,m=b.radius+y;if(0<F&&F<=m*m){F=Math.sqrt(F);B/=F;L/=F;var M=I/(I+b.invMass);m-=F;F=m*M;g.x+=B*F;g.y+=L*F;m-=F;z.x-=B*m;z.y-=L*m;m=B*(l.x-w.x)+L*(l.y-w.y);0>m&&(m*=A*b.bCoef+1,M*=m,l.x-=B*M,l.y-=L*M,M=m-M,w.x+=B*M,w.y+=L*M,d?.onCollisionDvD?.(p,x,a,b))}}if(0!=I){J.forEach((r,O)=>{if(r.cMask&H&&r.cGroup&E){var {normal:{x:q,y:n}}=r;c=r.dist-(q*g.x+n*g.y)+y;0<c&&(g.x+=q*c,g.y+=n*c,c=l.x*q+l.y*n,0>c&&(c*=A*r.bCoef+1,l.x-=c*q,l.y-=c*n,d?.onCollisionDvP?.(p,x,O)))}});K.forEach((r,O)=>{if(r.cMask&H&&r.cGroup&E){var q,n,v,{x:R,y:S}=g;if(isFinite(r.curveF)){if(n=r.arcCenter,q=R-n.x,n=S-n.y,v=r.v0Normal,m=r.v1Normal,(0<v.x*q+v.y*n&&0<m.x*q+m.y*n)==0>=r.curveF||(m=Math.sqrt(q*q+n*n),0==m))return;v=m-r.arcRadius;q/=m;n/=m}else{var {x:U,y:V}=r.v0.pos,{x:W,y:X}=r.v1.pos;n=W-U;q=X-V;if(v=R-W,m=S-X,0>=(R-U)*n+(S-V)*q||0<=v*n+m*q)return;n=r.normal;q=n.x;n=n.y;v=q*v+n*m}if(m=r.bias,0==m)0>v&&(v=-v,q=-q,n=-n);else if(0>m&&(m=-m,v=-v,q=-q,n=-n),v<-m)return;v>=y||(v=y-v,g.x+=q*v,g.y+=n*v,v=q*l.x+n*l.y,0>v&&(v*=A*r.bCoef+1,l.x-=q*v,l.y-=n*v,d?.onCollisionDvS?.(p,x,O)))}});var fa=y*y;P.forEach((r,O)=>{if(r.cMask&H&&r.cGroup&E&&(c=g.x-r.pos.x,h=g.y-r.pos.y,f=c*c+h*h,0<f&&f<=fa)){f=Math.sqrt(f);c/=f;h/=f;f=y-f;g.x+=c*f;g.y+=h*f;f=c*l.x+h*l.y;var q=0>f;q&&(f*=A*r.bCoef+1,l.x-=c*f,l.y-=h*f);d?.onCollisionDvV?.(p,x,O,q)}})}});for(var Y=0;2>Y;Y++)Q.forEach(({d0:x,d1:p,strength:A,minLength:y,maxLength:E},H)=>{x=D[x];p=D[p];if(x&&p){var {pos:I,speed:g,invMass:l}=x,{pos:z,speed:w,invMass:B}=p;e=I.x-z.x;p=I.y-z.y;if(b=Math.sqrt(e*e+p*p),!(0>=b)){if(e/=b,p/=b,a=l/(l+B),a!=a&&(a=.5),y>=E)c=y,h=0;else if(b<=y)c=y,h=1;else if(b>=E)c=E,h=-1;else return;(b=c-b,isFinite(A))?(a=A*b*.5,e*=a,p*=a,g.x+=e*l,g.y+=p*l,w.x-=e*B,w.y-=p*B,d?.onModifyJ?.(H,!1,!0)):(c=b*a,I.x+=e*c*.5,I.y+=p*c*.5,b-=c,z.x-=e*b*.5,z.y-=p*b*.5,b=e*(g.x-w.x)+p*(g.y-w.y),(A=0>=h*b)&&(a*=b,g.x-=e*a,g.y-=p*a,a=b-a,w.x+=e*a,w.y+=p*a),d?.onModifyJ?.(H,!0,A))}}})},addDisc:function(k){this.discs.push(k)},removeDisc:function(k){k=this.discs.indexOf(k);0>k||this.discs.splice(k,1)}};t.exports=u});return G((C,t)=>{t.exports={Point:N(),Vertex:Z(),Segment:aa(),Plane:ba(),LinearSensor:ca(),Disc:T(),Joint:da(),MoveableDisc:ea(),World:ha()}})()})();if(typeof exports!=='undefined'){if(typeof module!=='undefined'&&module.exports)exports=module.exports=nago;exports.nago=nago;}else if(typeof root!=='undefined')root['nago']=nago;else window['nago']=nago;