UNPKG

phy-engine

Version:

JavaScript 3D Physics for three.js

3 lines 9.85 MB
const A=new Map,I=new Map,g=new Map,C={Ar:null,ArPos:{},needTrigger:!1,needContact:!1,byName:null,world:null,scene:null,gravity:null,ccd:!1,cooking:null,cookingParams:null,tolerances:null,defaultMaterial:null,bodyRef:null,garbage:[],delta:0,ms:0,substep:1,tmpStep:0,restitution:0,pv:3,setFilter:null,setFilterData:null,getAggregate:null,key:[],reflow:{ray:[],point:{},contact:{},velocity:{},stat:{fps:0,delta:0,ms:0}},aggregates:{}},Q={solverAxis:null,D6Axis:null,clear:()=>{A.clear(),I.clear(),g.clear()},byName:I=>A.has(I)?A.get(I):null,byPtr:A=>I.has(A)?I.get(A):null,byContact:A=>g.has(A),clearContact:()=>{g.clear()},addContact:(A,I={})=>{Q.byContact(A)||g.set(A,I)},removeContact:A=>{Q.byContact(A)&&g.delete(A)},add:(g,Q)=>{switch(g.type){case"body":case"solid":null!==g.aggregate?g.aggregate.addActor(g,Q):g.isBone||C.scene.addActor(g,Q),I.set(g.ptr,g.name)}A.set(g.name,g)},remove:g=>{if("ray"!==g.type&&"contact"!==g.type)switch(g.type){case"joint":case"solver":case"vehicle":case"terrain":g.release();break;default:g.isBone||(null!==g.aggregate?g.aggregate.removeActor(g):C.scene.removeActor(g),I.delete(g.ptr),g.release())}A.delete(g.name)},stats:()=>{},mallocBase:(A,I)=>{const g=A.length*A.BYTES_PER_ELEMENT;return void 0===I&&(I=PhysX._webidl_malloc(g)),new Uint8Array(PhysX.HEAPU8.buffer,I,g).set(new Uint8Array(A.buffer)),I},malloc:(A,I)=>{const g=A.length,C=g*A.BYTES_PER_ELEMENT;void 0===I&&(I=PhysX._webidl_malloc(C));const Q=new Float32Array(PhysX.HEAPU8.buffer,I,g);for(let I=0;I<g;I++)Q[I]=A[I];return Q.byteOffset},mallocIndex:(A,I=!1)=>{const g=A.length,C=g/3,Q=g*A.BYTES_PER_ELEMENT,B=PhysX._webidl_malloc(Q),E=new Int32Array(PhysX.HEAPU8.buffer,B,g);let i,o=C,D=0;for(;o--;)i=3*D,I?(E[i+0]=A[i+2],E[i+1]=A[i+1],E[i+2]=A[i+0]):(E[i+0]=A[i+0],E[i+1]=A[i+1],E[i+2]=A[i+2]),D++;return E.byteOffset},free:A=>{A&&PhysX._webidl_free(A)},extends:()=>{Q.cookingPreProcess={eWELD_VERTICES:PhysX._emscripten_enum_PxMeshPreprocessingFlagEnum_eWELD_VERTICES(),eDISABLE_CLEAN_MESH:PhysX._emscripten_enum_PxMeshPreprocessingFlagEnum_eDISABLE_CLEAN_MESH(),eDISABLE_ACTIVE_EDGES_PRECOMPUTE:PhysX._emscripten_enum_PxMeshPreprocessingFlagEnum_eDISABLE_ACTIVE_EDGES_PRECOMPUTE(),eFORCE_32BIT_INDICES:PhysX._emscripten_enum_PxMeshPreprocessingFlagEnum_eFORCE_32BIT_INDICES()},Q.HitFlag={ePOSITION:PhysX._emscripten_enum_PxHitFlagEnum_ePOSITION(),eNORMAL:PhysX._emscripten_enum_PxHitFlagEnum_eNORMAL(),eUV:PhysX._emscripten_enum_PxHitFlagEnum_eUV(),eASSUME_NO_INITIAL_OVERLAP:PhysX._emscripten_enum_PxHitFlagEnum_eASSUME_NO_INITIAL_OVERLAP(),eMESH_MULTIPLE:PhysX._emscripten_enum_PxHitFlagEnum_eMESH_MULTIPLE(),eMESH_BOTH_SIDES:PhysX._emscripten_enum_PxHitFlagEnum_eMESH_BOTH_SIDES(),ePRECISE_SWEEP:PhysX._emscripten_enum_PxHitFlagEnum_ePRECISE_SWEEP(),eMTD:PhysX._emscripten_enum_PxHitFlagEnum_eMTD(),eFACE_INDEX:PhysX._emscripten_enum_PxHitFlagEnum_eFACE_INDEX(),eDEFAULT:PhysX._emscripten_enum_PxHitFlagEnum_eDEFAULT(),eMODIFIABLE_FLAGS:PhysX._emscripten_enum_PxHitFlagEnum_eMODIFIABLE_FLAGS()},Q.QueryFlag={eSTATIC:PhysX._emscripten_enum_PxQueryFlagEnum_eSTATIC(),eDYNAMIC:PhysX._emscripten_enum_PxQueryFlagEnum_eDYNAMIC(),ePREFILTER:PhysX._emscripten_enum_PxQueryFlagEnum_ePREFILTER(),ePOSTFILTER:PhysX._emscripten_enum_PxQueryFlagEnum_ePOSTFILTER(),eANY_HIT:PhysX._emscripten_enum_PxQueryFlagEnum_eANY_HIT(),eNO_BLOCK:PhysX._emscripten_enum_PxQueryFlagEnum_eNO_BLOCK()},Q.ForceMode={force:PhysX._emscripten_enum_PxForceModeEnum_eFORCE(),impulse:PhysX._emscripten_enum_PxForceModeEnum_eIMPULSE(),velocity:PhysX._emscripten_enum_PxForceModeEnum_eVELOCITY_CHANGE(),acceleration:PhysX._emscripten_enum_PxForceModeEnum_eACCELERATION()},Q.solverAxis={x:PhysX._emscripten_enum_PxArticulationAxisEnum_eX(),y:PhysX._emscripten_enum_PxArticulationAxisEnum_eY(),z:PhysX._emscripten_enum_PxArticulationAxisEnum_eZ(),rx:PhysX._emscripten_enum_PxArticulationAxisEnum_eTWIST(),ry:PhysX._emscripten_enum_PxArticulationAxisEnum_eSWING1(),rz:PhysX._emscripten_enum_PxArticulationAxisEnum_eSWING2(),twist:PhysX._emscripten_enum_PxArticulationAxisEnum_eTWIST(),swing1:PhysX._emscripten_enum_PxArticulationAxisEnum_eSWING1(),swing2:PhysX._emscripten_enum_PxArticulationAxisEnum_eSWING2()},Q.D6Axis={x:PhysX._emscripten_enum_PxD6AxisEnum_eX(),y:PhysX._emscripten_enum_PxD6AxisEnum_eY(),z:PhysX._emscripten_enum_PxD6AxisEnum_eZ(),rx:PhysX._emscripten_enum_PxD6AxisEnum_eTWIST(),ry:PhysX._emscripten_enum_PxD6AxisEnum_eSWING1(),rz:PhysX._emscripten_enum_PxD6AxisEnum_eSWING2(),twist:PhysX._emscripten_enum_PxD6AxisEnum_eTWIST(),swing1:PhysX._emscripten_enum_PxD6AxisEnum_eSWING1(),swing2:PhysX._emscripten_enum_PxD6AxisEnum_eSWING2()},Q.CacheFlag={velocity:PhysX._emscripten_enum_PxArticulationCacheFlagEnum_eVELOCITY(),acceleration:PhysX._emscripten_enum_PxArticulationCacheFlagEnum_eACCELERATION(),position:PhysX._emscripten_enum_PxArticulationCacheFlagEnum_ePOSITION(),force:PhysX._emscripten_enum_PxArticulationCacheFlagEnum_eFORCE(),velocity:PhysX._emscripten_enum_PxArticulationCacheFlagEnum_eLINK_VELOCITY(),link_acceleration:PhysX._emscripten_enum_PxArticulationCacheFlagEnum_eLINK_ACCELERATION(),root_transform:PhysX._emscripten_enum_PxArticulationCacheFlagEnum_eROOT_TRANSFORM(),root_velocity:PhysX._emscripten_enum_PxArticulationCacheFlagEnum_eROOT_VELOCITIES(),joint_force:PhysX._emscripten_enum_PxArticulationCacheFlagEnum_eLINK_INCOMING_JOINT_FORCE(),joint_target_position:PhysX._emscripten_enum_PxArticulationCacheFlagEnum_eJOINT_TARGET_POSITIONS(),joint_target_velocity:PhysX._emscripten_enum_PxArticulationCacheFlagEnum_eJOINT_TARGET_VELOCITIES(),all:PhysX._emscripten_enum_PxArticulationCacheFlagEnum_eALL()},Q.PairFlag={SOLVE_CONTACT:PhysX._emscripten_enum_PxPairFlagEnum_eSOLVE_CONTACT(),MODIFY_CONTACTS:PhysX._emscripten_enum_PxPairFlagEnum_eMODIFY_CONTACTS(),NOTIFY_TOUCH_FOUND:PhysX._emscripten_enum_PxPairFlagEnum_eNOTIFY_TOUCH_FOUND(),NOTIFY_TOUCH_PERSISTS:PhysX._emscripten_enum_PxPairFlagEnum_eNOTIFY_TOUCH_PERSISTS(),NOTIFY_TOUCH_LOST:PhysX._emscripten_enum_PxPairFlagEnum_eNOTIFY_TOUCH_LOST(),NOTIFY_TOUCH_CCD:PhysX._emscripten_enum_PxPairFlagEnum_eNOTIFY_TOUCH_CCD(),NOTIFY_THRESHOLD_FORCE_FOUND:PhysX._emscripten_enum_PxPairFlagEnum_eNOTIFY_THRESHOLD_FORCE_FOUND(),NOTIFY_THRESHOLD_FORCE_PERSISTS:PhysX._emscripten_enum_PxPairFlagEnum_eNOTIFY_THRESHOLD_FORCE_PERSISTS(),NOTIFY_THRESHOLD_FORCE_LOST:PhysX._emscripten_enum_PxPairFlagEnum_eNOTIFY_THRESHOLD_FORCE_LOST(),NOTIFY_CONTACT_POINTS:PhysX._emscripten_enum_PxPairFlagEnum_eNOTIFY_CONTACT_POINTS(),DETECT_DISCRETE_CONTACT:PhysX._emscripten_enum_PxPairFlagEnum_eDETECT_DISCRETE_CONTACT(),DETECT_CCD_CONTACT:PhysX._emscripten_enum_PxPairFlagEnum_eDETECT_CCD_CONTACT(),PRE_SOLVER_VELOCITY:PhysX._emscripten_enum_PxPairFlagEnum_ePRE_SOLVER_VELOCITY(),POST_SOLVER_VELOCITY:PhysX._emscripten_enum_PxPairFlagEnum_ePOST_SOLVER_VELOCITY(),CONTACT_EVENT_POSE:PhysX._emscripten_enum_PxPairFlagEnum_eCONTACT_EVENT_POSE(),NEXT_FREE:PhysX._emscripten_enum_PxPairFlagEnum_eNEXT_FREE(),CONTACT_DEFAULT:PhysX._emscripten_enum_PxPairFlagEnum_eCONTACT_DEFAULT(),TRIGGER_DEFAULT:PhysX._emscripten_enum_PxPairFlagEnum_eTRIGGER_DEFAULT()},PhysX.PxVec3.prototype.set=function(A,I,g){return this.x=A,this.y=I,this.z=g,this},PhysX.PxVec3.prototype.toArray=function(A,I){let g=void 0!==A;if(g||(A=[]),A[I=I||0]=this.x,A[I+1]=this.y,A[I+2]=this.z,!g)return A},PhysX.PxVec3.prototype.multiplyScalar=function(A){return this.x*=A,this.y*=A,this.z*=A,this},PhysX.PxVec3.prototype.divideScalar=function(A){return this.multiplyScalar(1/A)},PhysX.PxVec3.prototype.length=function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},PhysX.PxVec3.prototype.normalize=function(){return this.divideScalar(this.length()||1)},PhysX.PxVec3.prototype.directionVector=function(A){const I=b.x-this.x,g=b.y-this.y,C=b.z-this.z;return Math.sqrt(I*I+g*g+C*C)},PhysX.PxVec3.prototype.distanceTo=function(A){const I=this.x-A.x,g=this.y-A.y,C=this.z-A.z;return Math.sqrt(I*I+g*g+C*C)},PhysX.PxVec3.prototype.op_sub=function(A){return this.set(this.x-A.x,this.y-A.y,this.z-A.z),this},PhysX.PxVec3.prototype.fromArray=function(A,I){return I=I||0,this.set(A[I],A[I+1],A[I+2]),this},PhysX.PxVec3.prototype.copy=function(A){return this.set(A.x,A.y,A.z),this},PhysX.PxVec3.prototype.dot=function(A){return this.x*A.x+this.y*A.y+this.z*A.z},PhysX.PxVec3.prototype.applyQuaternion=function(A){const I=this.x,g=this.y,C=this.z,Q=A.x,B=A.y,E=A.z,i=A.w,o=i*I+B*C-E*g,D=i*g+E*I-Q*C,e=i*C+Q*g-B*I,t=-Q*I-B*g-E*C;return this.x=o*i+t*-Q+D*-E-e*-B,this.y=D*i+t*-B+e*-Q-o*-E,this.z=e*i+t*-E+o*-B-D*-Q,this},PhysX.PxVec3.prototype.applyMatrix3=function(A){const I=this.x,g=this.y,C=this.z,Q=A.getBasis();return this.x=Q[0]*I+Q[3]*g+Q[6]*C,this.y=Q[1]*I+Q[4]*g+Q[7]*C,this.z=Q[2]*I+Q[5]*g+Q[8]*C,this},PhysX.PxVec3.prototype.lerp=function(A,I){return this.x+=(A.x-this.x)*I,this.y+=(A.y-this.y)*I,this.z+=(A.z-this.z)*I,this},PhysX.PxVec3.prototype.free=function(){PhysX.destroy(this)},PhysX.PxQuat.prototype.identity=function(){return this.set(0,0,0,1)},PhysX.PxQuat.prototype.set=function(A,I,g,C){return this.x=A,this.y=I,this.z=g,this.w=C,this},PhysX.PxQuat.prototype.toArray=function(A,I){let g=void 0!==A;if(g||(A=[]),A[I=I||0]=this.x,A[I+1]=this.y,A[I+2]=this.z,A[I+3]=this.w,!g)return A},PhysX.PxQuat.prototype.multiplyQuaternions=function(A,I){const g=A.x,C=A.y,Q=A.z,B=A.w,E=I.x,i=I.y,o=I.z,D=I.w;return this.x=g*D+B*E+C*o-Q*i,this.y=C*D+B*i+Q*E-g*o,this.z=Q*D+B*o+g*i-C*E,this.w=B*D-g*E-C*i-Q*o,this},PhysX.PxQuat.prototype.premultiply=function(A){return this.multiplyQuaternions(A,this)},PhysX.PxQuat.prototype.multiply=function(A){return this.multiplyQuaternions(this,A)},PhysX.PxQuat.prototype.fromArray=function(A,I){return I=I||0,this.set(A[I],A[I+1],A[I+2],A[I+3]),this},PhysX.PxQuat.prototype.fromAxisAngle=function(A,I){const g=.5*I,C=Math.sin(g);return this.x=A[0]*C,this.y=A[1]*C,this.z=A[2]*C,this.w=Math.cos(g),this},PhysX.PxQuat.prototype.fromAxis=function(A){let I=A.toArray();if(I[2]>.99999)this.set(0,0,0,1);else if(I[2]<-.99999)this.set(1,0,0,0);else{let A=[I[1],I[0],0],g=Math.acos(I[2]);this.fromAxisAngle(A,g)}return this},PhysX.PxQuat.prototype.setFromRotationMatrix=function(A){const I=A[0],g=A[4],C=A[8],Q=A[1],B=A[5],E=A[9],i=A[2],o=A[6],D=A[10],e=I+B+D;if(e>0){const A=.5/Math.sqrt(e+1);this.w=.25/A,this.x=(o-E)*A,this.y=(C-i)*A,this.z=(Q-g)*A}else if(I>B&&I>D){const A=2*Math.sqrt(1+I-B-D);this.w=(o-E)/A,this.x=.25*A,this.y=(g+Q)/A,this.z=(C+i)/A}else if(B>D){const A=2*Math.sqrt(1+B-I-D);this.w=(C-i)/A,this.x=(g+Q)/A,this.y=.25*A,this.z=(E+o)/A}else{const A=2*Math.sqrt(1+D-I-B);this.w=(Q-g)/A,this.x=(C+i)/A,this.y=(E+o)/A,this.z=.25*A}return this},PhysX.PxQuat.prototype.free=function(){PhysX.destroy(this)},PhysX.PxTransform.prototype.set=function(A,I){return this.p=A,this.q=I,this},PhysX.PxTransform.prototype.identity=function(){return this.p.fromArray([0,0,0]),this.q.fromArray([0,0,0,1]),this},PhysX.PxTransform.prototype.fromArray=function(A,I,g,C){return this.p.fromArray(A||[0,0,0],g||0),this.q.fromArray(I||[0,0,0,1],C||0),this},PhysX.PxTransform.prototype.multiply=function(A){const I=this.getElements(),g=A.getElements(),C=[],Q=I[0],B=I[4],E=I[8],i=I[12],o=I[1],D=I[5],e=I[9],t=I[13],h=I[2],S=I[6],a=I[10],G=I[14],y=I[3],s=I[7],U=I[11],c=I[15],k=g[0],F=g[4],K=g[8],w=g[12],J=g[1],p=g[5],M=g[9],R=g[13],N=g[2],l=g[6],n=g[10],r=g[14],_=g[3],q=g[7],H=g[11],Y=g[15];return C[0]=Q*k+B*J+E*N+i*_,C[4]=Q*F+B*p+E*l+i*q,C[8]=Q*K+B*M+E*n+i*H,C[12]=Q*w+B*R+E*r+i*Y,C[1]=o*k+D*J+e*N+t*_,C[5]=o*F+D*p+e*l+t*q,C[9]=o*K+D*M+e*n+t*H,C[13]=o*w+D*R+e*r+t*Y,C[2]=h*k+S*J+a*N+G*_,C[6]=h*F+S*p+a*l+G*q,C[10]=h*K+S*M+a*n+G*H,C[14]=h*w+S*R+a*r+G*Y,C[3]=y*k+s*J+U*N+c*_,C[7]=y*F+s*p+U*l+c*q,C[11]=y*K+s*M+U*n+c*H,C[15]=y*w+s*R+U*r+c*Y,this.decompose(C)},PhysX.PxTransform.prototype.decompose=function(A){return this.p.set(A[12],A[13],A[14]),this.q.setFromRotationMatrix(A),this},PhysX.PxTransform.prototype.getElements=function(A,I,g){const C=[];A=A||this.p,g=g||{x:1,y:1,z:1};const Q=(I=I||this.q).x,B=I.y,E=I.z,i=I.w,o=Q+Q,D=B+B,e=E+E,t=Q*o,h=Q*D,S=Q*e,a=B*D,G=B*e,y=E*e,s=i*o,U=i*D,c=i*e,k=g.x,F=g.y,K=g.z;return C[0]=(1-(a+y))*k,C[1]=(h+c)*k,C[2]=(S-U)*k,C[3]=0,C[4]=(h-c)*F,C[5]=(1-(t+y))*F,C[6]=(G+s)*F,C[7]=0,C[8]=(S+U)*K,C[9]=(G-s)*K,C[10]=(1-(t+a))*K,C[11]=0,C[12]=A.x,C[13]=A.y,C[14]=A.z,C[15]=1,C},PhysX.PxTransform.prototype.getBasis=function(){let A=this.getElements();return[A[0],A[4],A[8],A[1],A[5],A[9],A[2],A[6],A[10]]},PhysX.PxTransform.prototype.toArray=function(A,I){I=I||0,this.p.toArray(A,I),this.q.toArray(A,I+3)},PhysX.PxTransform.prototype.copy=function(A){return this.p=A.p,this.q=A.q,this},PhysX.PxTransform.prototype.rotationFromAxis=function(A){return this.q.fromAxis(A),this},PhysX.PxTransform.prototype.free=function(){PhysX.destroy(this),this.p.free(),this.q.free()},PhysX.PxTransform.prototype.clone=function(){return(new PhysX.PxTransform).copy(this)}}},B=4e3,E=1e3,i=4e3,o=100,D=100,e=50,t=20,h={bodyFull:14,body:8,joint:16,contact:1,ray:11,character:16,vehicle:72,solver:128};class S{constructor(){this.id=0,this.list=[],this.type="item",this.Utils=null}reset(){let A=this.list.length;for(;A--;)this.dispose(this.list[A]);this.list=[],this.id=0}byName(A){return this.Utils.byName(A)}setName(A={}){let I=void 0!==A.name?A.name:this.type+this.id++;return A.id=this.remove(I,!0),A.name=I,I}addToWorld(A,I=-1){this.Utils.add(A),-1!==I?this.list[I]=A:this.list.push(A)}remove(A,I){let g=this.byName(A);return g?this.clear(g,I):-1}clear(A,I){let g=this.list.indexOf(A);return-1===g||I?this.list[g]=null:this.list.splice(g,1),this.dispose(A),g}dispose(A){null!==A&&this.Utils.remove(A)}add(A={}){}set(A={}){}step(A,I){}}const a=Math.PI,G=a/180,y=180/a,s=Number.MAX_SAFE_INTEGER,U=Number.EPSILON,c=.5*a,k={luminousPowers:{"110000 lm (1000W)":11e4,"3500 lm (300W)":3500,"1700 lm (100W)":1700,"800 lm (60W)":800,"400 lm (40W)":400,"180 lm (25W)":180,"20 lm (4W)":20,Off:0},luminousIrradiances:{"0.0001 lx (Moonless Night)":1e-4,"0.002 lx (Night Airglow)":.002,"0.5 lx (Full Moon)":.5,"3.4 lx (City Twilight)":3.4,"50 lx (Living Room)":50,"100 lx (Very Overcast)":100,"350 lx (Office Room)":350,"400 lx (Sunrise/Sunset)":400,"1000 lx (Overcast)":1e3,"18000 lx (Daylight)":18e3,"50000 lx (Direct Sun)":5e4},exposure:A=>Math.pow(A,5),candelaToLumens:A=>4*A*Math.PI,lumensToCandela:A=>A/(4*Math.PI),todeg:y,torad:G,toFixed:(A,I=3)=>1*A.toFixed(I),toRound:(A,I=3)=>Math.trunc(A),clamp:(A,I=0,g=1)=>A=(A=A<I?I:A)>g?g:A,clampA:(A,I,g)=>Math.max(I,Math.min(g,A)),smoothstep:(A,I,g)=>A*(g=-2*(g=k.clamp(g))*g*g+3*g*g)+I*(1-g),remap:(A,I,g,C,Q)=>C+(A-I)*(Q-C)/(g-I),lerp:(A,I,g)=>(1-g)*A+g*I,damp:(A,I,g,C)=>k.lerp(A,I,1-Math.exp(-g*C)),nearAngle:(A,I,g=!1)=>I+Math.atan2(Math.sin(A-I),Math.cos(A-I))*(g?y:1),unwrapDeg:A=>A-360*Math.floor((A+180)/360),unwrapRad:A=>Math.atan2(Math.sin(A),Math.cos(A)),nearEquals:(A,I,g=1e-4)=>Math.abs(A-I)<=g,autoSize:(A=[1,1,1],I="box")=>{1===A.length&&(A[1]=A[0]);let g=A[0],C=A[1];return"sphere"===I&&(A=[g,g,g]),"cylinder"!==I&&"wheel"!==I&&"capsule"!==I||(A=[g,C,g]),"cone"!==I&&"pyramid"!==I||(A=[g,C,g]),2===A.length&&(A[2]=A[0]),A},shuffle:A=>A.map((A=>({value:A,sort:Math.random()}))).sort(((A,I)=>A.sort-I.sort)).map((({value:A})=>A)),randomSign:()=>Math.random()<.5?-1:1,randSpread:A=>A*(.5-Math.random()),rand:(A=0,I=1)=>A+Math.random()*(I-A),randInt:(A,I)=>A+Math.floor(Math.random()*(I-A+1)),randIntUnic:(A,I,g)=>{for(var C=[];C.length<g;){var Q=k.randInt(A,I);-1===C.indexOf(Q)&&C.push(Q)}return C},fromTransform:(A,I,g,C=[0,0,0,1],Q=!1)=>{let B=k.composeMatrixArray(A,I),E=k.composeMatrixArray(g,C);return Q&&(B=k.invertMatrixArray(B)),B=k.multiplyMatrixArray(B,E),[B[12],B[13],B[14]]},fromTransformToQ:(A,I,g=!1)=>{let C=k.composeMatrixArray(A,I),Q=k.decomposeFullMatrixArray(C).q;return g&&(Q=k.quatInvert(Q)),Q},lerpTransform:(A,I,g)=>{let C=A[0],Q=A[1],B=I[0],E=I[1];return B=k.lerpArray(C,B,g),E=k.slerpQuatArray(Q,E,g),[B,E]},composeMatrixArray:(A,I,g=[1,1,1])=>{const C=I[0],Q=I[1],B=I[2],E=I[3],i=C+C,o=Q+Q,D=B+B,e=C*i,t=C*o,h=C*D,S=Q*o,a=Q*D,G=B*D,y=E*i,s=E*o,U=E*D,c=g[0],k=g[1],F=g[2];return[(1-(S+G))*c,(t+U)*c,(h-s)*c,0,(t-U)*k,(1-(e+G))*k,(a+y)*k,0,(h+s)*F,(a-y)*F,(1-(e+S))*F,0,A[0],A[1],A[2],1]},multiplyMatrixArray:(A,I)=>{const g=A,C=I,Q=[],B=g[0],E=g[4],i=g[8],o=g[12],D=g[1],e=g[5],t=g[9],h=g[13],S=g[2],a=g[6],G=g[10],y=g[14],s=g[3],U=g[7],c=g[11],k=g[15],F=C[0],K=C[4],w=C[8],J=C[12],p=C[1],M=C[5],R=C[9],N=C[13],l=C[2],n=C[6],r=C[10],_=C[14],q=C[3],H=C[7],Y=C[11],d=C[15];return Q[0]=B*F+E*p+i*l+o*q,Q[4]=B*K+E*M+i*n+o*H,Q[8]=B*w+E*R+i*r+o*Y,Q[12]=B*J+E*N+i*_+o*d,Q[1]=D*F+e*p+t*l+h*q,Q[5]=D*K+e*M+t*n+h*H,Q[9]=D*w+e*R+t*r+h*Y,Q[13]=D*J+e*N+t*_+h*d,Q[2]=S*F+a*p+G*l+y*q,Q[6]=S*K+a*M+G*n+y*H,Q[10]=S*w+a*R+G*r+y*Y,Q[14]=S*J+a*N+G*_+y*d,Q[3]=s*F+U*p+c*l+k*q,Q[7]=s*K+U*M+c*n+k*H,Q[11]=s*w+U*R+c*r+k*Y,Q[15]=s*J+U*N+c*_+k*d,Q},invertMatrixArray:A=>{const I=A,g=I[0],C=I[1],Q=I[2],B=I[3],E=I[4],i=I[5],o=I[6],D=I[7],e=I[8],t=I[9],h=I[10],S=I[11],a=I[12],G=I[13],y=I[14],s=I[15],U=t*y*D-G*h*D+G*o*S-i*y*S-t*o*s+i*h*s,c=a*h*D-e*y*D-a*o*S+E*y*S+e*o*s-E*h*s,k=e*G*D-a*t*D+a*i*S-E*G*S-e*i*s+E*t*s,F=a*t*o-e*G*o-a*i*h+E*G*h+e*i*y-E*t*y,K=g*U+C*c+Q*k+B*F;if(0===K)return[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];const w=1/K;return I[0]=U*w,I[1]=(G*h*B-t*y*B-G*Q*S+C*y*S+t*Q*s-C*h*s)*w,I[2]=(i*y*B-G*o*B+G*Q*D-C*y*D-i*Q*s+C*o*s)*w,I[3]=(t*o*B-i*h*B-t*Q*D+C*h*D+i*Q*S-C*o*S)*w,I[4]=c*w,I[5]=(e*y*B-a*h*B+a*Q*S-g*y*S-e*Q*s+g*h*s)*w,I[6]=(a*o*B-E*y*B-a*Q*D+g*y*D+E*Q*s-g*o*s)*w,I[7]=(E*h*B-e*o*B+e*Q*D-g*h*D-E*Q*S+g*o*S)*w,I[8]=k*w,I[9]=(a*t*B-e*G*B-a*C*S+g*G*S+e*C*s-g*t*s)*w,I[10]=(E*G*B-a*i*B+a*C*D-g*G*D-E*C*s+g*i*s)*w,I[11]=(e*i*B-E*t*B-e*C*D+g*t*D+E*C*S-g*i*S)*w,I[12]=F*w,I[13]=(e*G*Q-a*t*Q+a*C*h-g*G*h-e*C*y+g*t*y)*w,I[14]=(a*i*Q-E*G*Q-a*C*o+g*G*o+E*C*y-g*i*y)*w,I[15]=(E*t*Q-e*i*Q+e*C*o-g*t*o-E*C*h+g*i*h)*w,I},matrixArrayDeterminant:A=>{const I=A,g=I[0],C=I[4],Q=I[8],B=I[12],E=I[1],i=I[5],o=I[9],D=I[13],e=I[2],t=I[6],h=I[10],S=I[14];return I[3]*(+B*o*t-Q*D*t-B*i*h+C*D*h+Q*i*S-C*o*S)+I[7]*(+g*o*S-g*D*h+B*E*h-Q*E*S+Q*D*e-B*o*e)+I[11]*(+g*D*t-g*i*S-B*E*t+C*E*S+B*i*e-C*D*e)+I[15]*(-Q*i*e-g*o*t+g*i*h+Q*E*t-C*E*h+C*o*e)},decomposeMatrixArray:A=>[A[12],A[13],A[14]],decomposeFullMatrixArray:A=>{const I=A;let g=k.lengthArray([I[0],I[1],I[2]]);const C=k.lengthArray([I[4],I[5],I[6]]),Q=k.lengthArray([I[8],I[9],I[10]]);k.matrixArrayDeterminant(A)<0&&(g=-g);let B=[...A];const E=1/g,i=1/C,o=1/Q;B[0]*=E,B[1]*=E,B[2]*=E,B[4]*=i,B[5]*=i,B[6]*=i,B[8]*=o,B[9]*=o,B[10]*=o;let D=k.quatFromRotationMatrix(B);return{p:[A[12],A[13],A[14]],q:D,s:[g,C,Q]}},applyTransformArray:(A,I,g,C=[1,1,1])=>{const Q=k.composeMatrixArray(I,g,C),B=A[0],E=A[1],i=A[2],o=1/(Q[3]*B+Q[7]*E+Q[11]*i+Q[15]);return[(Q[0]*B+Q[4]*E+Q[8]*i+Q[12])*o,(Q[1]*B+Q[5]*E+Q[9]*i+Q[13])*o,(Q[2]*B+Q[6]*E+Q[10]*i+Q[14])*o]},slerpQuatArray:(A,I,g)=>{if(0===g)return A;if(1===g)return I;let C=[...A];const Q=A[0],B=A[1],E=A[2],i=A[3],o=I[0],D=I[1],e=I[2],t=I[3];let h=i*t+Q*o+B*D+E*e;if(h<0?(C=[-o,-D,-e,-t],h=-h):C=[...I],h>=1)return A;const S=1-h*h;if(S<=U){const A=1-g;return C[3]=A*i+g*C[3],C[0]=A*Q+g*C[0],C[1]=A*B+g*C[1],C[2]=A*E+g*C[2],k.quatNomalize(C)}const a=Math.sqrt(S),G=Math.atan2(a,h),y=Math.sin((1-g)*G)/a,s=Math.sin(g*G)/a;return C[3]=i*y+C[3]*s,C[0]=Q*y+C[0]*s,C[1]=B*y+C[1]*s,C[2]=E*y+C[2]*s,C},toLocalQuatArray:(A=[0,0,0],I)=>{let g=k.quatFromEuler(A),C=k.quatInvert(I.quaternion.toArray());return k.quatMultiply(C,g)},quatFromRotationMatrix:A=>{let I=[0,0,0,1];const g=A,C=g[0],Q=g[4],B=g[8],E=g[1],i=g[5],o=g[9],D=g[2],e=g[6],t=g[10],h=C+i+t;if(h>0){const A=.5/Math.sqrt(h+1);I[3]=.25/A,I[0]=(e-o)*A,I[1]=(B-D)*A,I[2]=(E-Q)*A}else if(C>i&&C>t){const A=2*Math.sqrt(1+C-i-t);I[3]=(e-o)/A,I[0]=.25*A,I[1]=(Q+E)/A,I[2]=(B+D)/A}else if(i>t){const A=2*Math.sqrt(1+i-C-t);I[3]=(B-D)/A,I[0]=(Q+E)/A,I[1]=.25*A,I[2]=(o+e)/A}else{const A=2*Math.sqrt(1+t-C-i);I[3]=(E-Q)/A,I[0]=(B+D)/A,I[1]=(o+e)/A,I[2]=.25*A}return I},quatFromEuler:(A=[0,0,0],I=!0)=>{const g=Math.cos,C=Math.sin,Q=I?G:1,B=A[0]*Q*.5,E=A[1]*Q*.5,i=A[2]*Q*.5,o=g(B),D=g(E),e=g(i),t=C(B),h=C(E),S=C(i);return[t*D*e+o*h*S,o*h*e-t*D*S,o*D*S+t*h*e,o*D*e-t*h*S]},quatFromAxis:(A=[0,0,0],I,g=!0)=>{const C=.5*I*(g?G:1),Q=Math.sin(C);return[A[0]*Q,A[1]*Q,A[2]*Q,Math.cos(C)]},quatNomalize:A=>{let I=k.lengthArray(A);return 0===I?[0,0,0,1]:(I=1/I,k.scaleArray(A,I,4))},quatInvert:A=>[-A[0],-A[1],-A[2],A[3]],quatMultiply:(A,I)=>{const g=A[0],C=A[1],Q=A[2],B=A[3],E=I[0],i=I[1],o=I[2],D=I[3];return[g*D+B*E+C*o-Q*i,C*D+B*i+Q*E-g*o,Q*D+B*o+g*i-C*E,B*D-g*E-C*i-Q*o]},quatToAxis:A=>{let I=2*Math.acos(A[3]);const g=Math.sqrt(1-A[3]*A[3]);return g<1e-4?[1,0,0]:[A[0]/g,A[1]/g,A[2]/g,I]},eulerFromMatrix:A=>{const I=A[0],g=A[4],C=A[8];A[1];const Q=A[5],B=A[9];A[2];const E=A[6],i=A[10];let o=[0,0,0];return o[1]=Math.asin(k.clamp(C,-1,1)),Math.abs(C)<.9999999?(o[0]=Math.atan2(-B,i),o[2]=Math.atan2(-g,I)):(o[0]=Math.atan2(E,Q),o[2]=0),o},angleTo:(A,I)=>2*Math.acos(Math.abs(k.clamp(k.dotArray(A,I),-1,1))),fixedArray:(A,I)=>{let g=A.length,C=[];for(;g--;)C[g]=k.toFixed(A[g],I);return C},getSize:A=>.001*A.byteLength+"kb",perpendicularArray:A=>{const I=Math.sqrt(A[0]*A[0]+A[1]*A[1]+A[2]*A[2]);let g=Math.acos(A[1]/I);const C=Math.atan2(A[2],A[0]);g>c?g-=c:g+=c;return[I*Math.sin(g)*Math.cos(C),I*Math.cos(g),I*Math.sin(g)*Math.sin(C)]},crossArray:(A,I)=>{const g=A[0],C=A[1],Q=A[2],B=I[0],E=I[1],i=I[2];return[C*i-Q*E,Q*B-g*i,g*E-C*B]},applyQuaternion:(A,I)=>{const g=A[0],C=A[1],Q=A[2],B=I[0],E=I[1],i=I[2],o=I[3],D=2*(E*Q-i*C),e=2*(i*g-B*Q),t=2*(B*C-E*g);return[g+o*D+E*t-i*e,C+o*e+i*D-B*t,Q+o*t+B*e-E*D]},nullArray:(A,I,g)=>{let C=0;for(;g--;)C+=A[I+g];return C},equalArray:(A,I)=>{let g=A.length;for(;g--;)if(A[g]!==I[g])return!1;return!0},lerpArray:(A,I,g)=>{if(0===g)return A;if(1===g)return I;let C=A.length,Q=[];for(;C--;)Q[C]=A[C],Q[C]+=(I[C]-Q[C])*g;return Q},zeroArray:(A,I=0,g)=>{for(g=g??A.length;g--;)A[I+g]=0;return A},lengthArray:A=>{let I=A.length,g=0;for(;I--;)g+=A[I]*A[I];return Math.sqrt(g)},dotArray:(A,I)=>{let g=A.length,C=0;for(;g--;)C+=A[g]*I[g];return C},addArray:(A,I,g)=>{g=g??A.length;let C=[];for(;g--;)C[g]=A[g]+I[g];return C},subArray:(A,I,g)=>{g=g??A.length;let C=[];for(;g--;)C[g]=A[g]-I[g];return C},mulArray:(A,I,g)=>{if(I instanceof Array){let C=[];for(g=g??A.length;g--;)C[g]=A[g]*I[g];return C}return A.map((A=>A*I))},worldscale:(A,I)=>A.map((A=>A*I)),divArray:(A,I,g)=>k.mulArray(A,1/I,g),scaleArray:(A,I,g)=>k.mulArray(A,I,g),fillArray:(A,I,g=0,C)=>{for(C=C??A.length;C--;)I[g+C]=A[C]},copyArray:(A,I)=>{},cloneArray:A=>[...A],distanceArray:(A,I=[0,0,0])=>k.lengthArray(k.subArray(A,I)),normalizeArray:A=>k.divArray(A,k.lengthArray(A)||1),normalArray:(A,I=[0,0,0])=>k.normalizeArray(k.subArray(I,A)),getCenter:(A,I)=>(A.computeBoundingBox(),A.boundingBox.getCenter(I)),getVolume:(A,I,g=null)=>{let C=1,Q=I;switch(A){case"sphere":C=4*Math.PI*Q[0]*Q[0]*Q[0]/3;break;case"cone":C=Math.PI*Q[0]*(.5*Q[1])*2;break;case"box":C=.5*Q[0]*8*(.5*Q[1])*(.5*Q[2]);break;case"cylinder":C=Math.PI*Q[0]*Q[0]*(.5*Q[1])*2;break;case"capsule":C=4*Math.PI*Q[0]*Q[0]*Q[0]/3+Math.PI*Q[0]*Q[0]*(.5*Q[1])*2;break;case"convex":case"mesh":C=k.getConvexVolume(g)}return C},getConvexVolume:A=>{let I,g=A.length/3,C=[0,0,0],Q=[0,0,0];for(;g--;)I=3*g,A[I]<C[0]?C[0]=A[I]:A[I]>Q[0]&&(Q[0]=A[I]),A[I+1]<C[1]?C[1]=A[I+1]:A[I+1]>Q[1]&&(Q[1]=A[I+1]),A[I+2]<C[2]?C[2]=A[I+2]:A[I+2]>Q[2]&&(Q[2]=A[I+2]);let B=[Q[0]-C[0],Q[1]-C[1],Q[2]-C[2]];return.5*B[0]*8*(.5*B[1])*(.5*B[2])},massFromDensity:(A,I)=>A*I,densityFromMass:(A,I)=>A/I,toNonIndexed:A=>A.index?A.clone().toNonIndexed():A,getIndex:(A,I)=>!A.index||I?null:A.index.array||null,getSameVertex:A=>{const I=A.getAttribute("position"),g=I.array,C=[],Q=[],B={};new THREE.Vector3;let E,i=0;k.getHash(A);let o,D,e=!1,t=0;for(let A=0;A<I.count;A++){i=3*A,o={x:g[i],y:g[i+1],z:g[i+2],id:A},e=!1,E=C.length;for(let I=0;I<E;I++)D=C[I],o.x===D.x&&o.y===D.y&&o.z===D.z&&(e=!0,B[A]=D.id);e||(o.id=t++,C.push(o),Q.push([o.x,o.y,o.z]))}return[Q,B]},getVertex:(A,I)=>{let g=A.attributes.position.array;return I&&A.index&&(g=(A=A.clone().toNonIndexed()).attributes.position.array),g},getNormal:A=>A.attributes.normal.array,getFaces:A=>{let I=[];if(A.index){let g=A.getIndex();for(let A=0;A<g.count;A+=3)I.push([g.getX(A),g.getX(A+1),g.getX(A+2)])}else{let g=A.getAttribute("position").count;for(let A=0;A<g;A+=3)I.push([A,A+1,A+2])}return I},getConnectedFaces:A=>{const I=[];let g,C,Q,B,E,i,o,D=A.length,e=D;for(;e--;)for(C=A[e],g=D;g--;)g!==e&&(Q=A[g],B=C.filter((A=>Q.includes(A))),B.length>1&&(o=[],E=[...C],i=E.indexOf(B[0]),E.splice(i,1),i=E.indexOf(B[1]),E.splice(i,1),o.push(E[0]),E=[...Q],i=E.indexOf(B[0]),E.splice(i,1),i=E.indexOf(B[1]),E.splice(i,1),o.push(E[0]),I.push(o)));return I},reduce:A=>{},barycentric:(A,I)=>{},solve:(A,I)=>{},getHash:(A,I=1e-4)=>{I=Math.max(I,Number.EPSILON);const g={},C={},Q=A.getAttribute("position"),B=Q.count,E=Q.array,i=.5*I,o=Math.log10(1/I),D=Math.pow(10,o),e=i*D;let t;for(let A=0;A<B;A++){t=3*A;let I=`${~~(E[t]*D+e)},${~~(E[t+1]*D+e)},${~~(E[t+2]*D+e)}`;g[I]?g[I].push(A):g[I]=[A]}let h=0;for(let A in g)C[h++]=g[A];return C}},F=k;class K extends S{constructor(){super(),this.Utils=Q,this.type="ray",this.init()}init(){this.rayBuffer=new PhysX.PxRaycastBuffer10,this.rayBuffer.hasBlock=!0,this.rayFlags=new PhysX.PxHitFlags(Q.HitFlag.eDEFAULT|Q.HitFlag.eANY_HIT),this.rayFilter=new PhysX.PxQueryFilterData,this.v1=new PhysX.PxVec3(0,0,0),this.v2=new PhysX.PxVec3(0,0,0)}byPtr(A){return Q.byPtr(A)}step(){const A=C.Ar,I=C.ArPos[this.type];C.reflow.ray=[];let g,Q,B,E,i,o,D=this.list.length;for(;D--;){if(Q=I+D*h.ray,g=this.list[D],i=g.getPoint(),this.v1.fromArray(i[0]),this.v2.fromArray(i[1]),E=F.distanceArray(i[0],i[1]),A[Q]=0,A[Q+1]=E,this.v2.fromArray(F.normalArray(i[0],i[1])),this.v1.toArray(A,Q+2),C.setFilterData(this.rayFilter.get_data(),[2,1,[3,5]]),o=null,C.scene.raycast(this.v1,this.v2,E,this.rayBuffer,this.rayFlags,this.rayFilter)){let I=this.rayBuffer.getNbTouches();for(;I--;)o=this.rayBuffer.getTouch(I),B=this.byPtr(o.actor.ptr),!g.selfHit&&g.parent&&B===g.parent||0!==A[Q]&&o.distance>A[Q+1]||(A[Q]=1,A[Q+1]=o.distance,o.position.toArray(A,Q+5),o.normal.toArray(A,Q+8),C.reflow.ray[D]=B)}}}applyResult(){}add(A={}){this.setName(A);let I=new w(A);this.addToWorld(I,A.id)}set(A={},I=null){null===I&&(I=this.byName(A.name)),null!==I&&(A.begin&&(I.begin=A.begin),A.end&&(I.end=A.end))}}class w{constructor(A={}){this.type="ray",this.name=A.name,this.parent=A.parent||"",this.noRotation=A.noRotation||!1,this.selfHit=A.selfHit||!1,this.begin=A.begin||[0,0,0],this.end=A.end||[0,0,1],this.precision=A.precision||1,this.group=void 0!==A.group||16,this.mask=void 0!==A.mask||2}getPoint(){if(this.parent){const A=Q.byName(this.parent);if(A){const I=A.getGlobalPose(),g=I.p.toArray(),C=this.noRotation?[0,0,0,1]:I.q.toArray();return[F.applyTransformArray(this.begin,g,C),F.applyTransformArray(this.end,g,C)]}}return[this.begin,this.end]}}class J{constructor(I,g=128,Q=128,B=!1){this.name=I,this.type="group",this.numActors=0,this.maxActors=g,this.maxShapes=Q,this.selfCollisions=B,this.aggregate=C.world.createAggregate(this.maxActors,this.maxShapes,this.selfCollisions),C.scene.addAggregate(this.aggregate),A.set(this.name,this)}set(A){}addActor(A,I){this.aggregate.addActor(A,I),this.numActors++}removeActor(A){this.aggregate.removeActor(A),this.numActors--,0===this.numActors&&this.release()}release(){this.aggregate&&(C.scene.removeAggregate(this.aggregate,!1),this.aggregate.release(),this.aggregate=null,A.delete(this.name))}}class p extends S{constructor(){super(),this.Utils=Q,this.type="body",this.itype="body",this.num=h[this.type],this.full=!1,this.tv=null,this.v=new PhysX.PxVec3,this.v2=new PhysX.PxVec3,this.q=new PhysX.PxQuat,this.qr=new PhysX.PxQuat,this.t=new PhysX.PxTransform}setFull(A){this.num=h[A?"bodyFull":"body"],this.full=A}step(){const A=C.Ar,I=C.ArPos[this.itype];let g,Q,B,E,i,o=this.list.length;for(;o--;)g=this.list[o],Q=I+o*this.num,g.isKinematic&&(g.first?g.first=!1:g.setKinematicTarget(g.tmpTransform)),i=g.isBone?g.getArticulation().isSleeping():g.isSleeping(),A[Q]=i?0:1,g.isKinematic?g.tmpTransform.toArray(A,Q+1):g.getGlobalPose().toArray(A,Q+1),this.full?(B=g.getLinearVelocity(),E=g.getAngularVelocity(),B.toArray(A,Q+8),E.toArray(A,Q+11),1===A[Q]&&(A[Q]=9.8*B.length())):g.getVelocity&&(B=g.getLinearVelocity().toArray(),E=g.getAngularVelocity().toArray(),C.reflow.velocity[g.name]=[...B,...E]),g.selfGravity&&this.upGravity(g)}preRotate(A=[0,0,0,1],I="Z"){let g;switch(I){case"Y":g=[0,.7071067811865475,0,.7071067811865476];break;case"Z":g=[0,0,.7071067811865475,.7071067811865476]}return this.q.fromArray(A).premultiply(this.qr.fromArray(g)).toArray()}shape(A={}){let I,g,B,E,i,o,D=A.type||"box",e=A.size||[1,1,1],t=null,h=null,S=null,a=null;switch(D){case"plane":I=new PhysX.PxPlaneGeometry;break;case"box":I=new PhysX.PxBoxGeometry(.5*e[0],.5*e[1],.5*e[2]);break;case"particle":I=new PhysX.PxSphereGeometry(A.pSize||.05);break;case"sphere":I=new PhysX.PxSphereGeometry(e[0]);break;case"capsule":I=new PhysX.PxCapsuleGeometry(e[0],.5*e[1]);break;case"convex":g=new PhysX.PxConvexMeshDesc,B=A.v,t=Q.malloc(B),g.points.stride=3*B.BYTES_PER_ELEMENT,g.points.count=B.length/3,g.points.data=t;let D=0;D|=PhysX._emscripten_enum_PxConvexFlagEnum_eCOMPUTE_CONVEX(),D|=PhysX._emscripten_enum_PxConvexFlagEnum_eQUANTIZE_INPUT(),D|=PhysX._emscripten_enum_PxConvexFlagEnum_eDISABLE_MESH_VALIDATION(),S=new PhysX.PxConvexFlags(D),g.flags=S,E=PhysX.PxTopLevelFunctions.prototype.CreateConvexMesh(C.cookingParams,g),i=new PhysX.PxMeshScale,o=new PhysX.PxConvexMeshGeometryFlags,I=new PhysX.PxConvexMeshGeometry(E,i,o),C.garbage.push(E),PhysX.destroy(S),PhysX.destroy(i),PhysX.destroy(o),PhysX.destroy(g),Q.free(t);break;case"mesh":g=new PhysX.PxTriangleMeshDesc,B=A.v,a=A.index||null,a&&a.constructor===Uint16Array&&(a=new Uint32Array(a)),t=Q.malloc(B),g.points.stride=3*B.BYTES_PER_ELEMENT,g.points.count=B.length/3,g.points.data=t,null!==a&&(h=Q.mallocIndex(a),g.triangles.stride=3*a.BYTES_PER_ELEMENT,g.triangles.count=a.length/3,g.triangles.data=h),E=PhysX.PxTopLevelFunctions.prototype.CreateTriangleMesh(C.cookingParams,g),i=new PhysX.PxMeshScale(new PhysX.PxVec3(1,1,1),new PhysX.PxQuat(0,0,0,1)),I=new PhysX.PxTriangleMeshGeometry(E,i),I.isValid()||console.error("trimesh",A.name,"is not valid for physx"),C.garbage.push(E),S&&PhysX.destroy(S),PhysX.destroy(i),PhysX.destroy(g),Q.free(t),Q.free(h)}return I.volume=F.getVolume(D,e,A.v),I}setShapeFlag(A="default"){let I;switch(A){case"default":case 1:I=PhysX._emscripten_enum_PxShapeFlagEnum_eSCENE_QUERY_SHAPE()|PhysX._emscripten_enum_PxShapeFlagEnum_eSIMULATION_SHAPE();break;case"noCollision":case 0:I=PhysX._emscripten_enum_PxShapeFlagEnum_eSCENE_QUERY_SHAPE();break;case"noQuery":case 2:I=PhysX._emscripten_enum_PxShapeFlagEnum_eSIMULATION_SHAPE();break;case"ghost":case 3:I=PhysX._emscripten_enum_PxShapeFlagEnum_eTRIGGER_SHAPE();break;case"ghostAndQuery":case 4:I=PhysX._emscripten_enum_PxShapeFlagEnum_eTRIGGER_SHAPE()|PhysX._emscripten_enum_PxShapeFlagEnum_eSCENE_QUERY_SHAPE();break;case"none":case 5:I=0}return new PhysX.PxShapeFlags(I)}add(A={}){let I=this.setName(A),g="mesh"===A.type,B=["body"===this.type?1:2,-1,0,0];void 0!==A.filter&&(B=A.filter,delete A.filter),void 0!==A.group&&(B[0]=A.group),void 0!==A.mask&&(B[1]=A.mask),A.isTrigger&&(B[1]=-1,B[2]=[2,4,10],A.flags="ghostAndQuery"),(A.enableCCD||A.bullet)&&(B[2]=[1,2,3,4,5,10,11,12]),void 0===A.friction&&(A.friction=.5),void 0===!A.staticFriction&&(A.staticFriction=A.friction),void 0===!A.restitution&&(A.restitution=C.restitution);let E,i,o,D=.5===A.friction&&.5===A.staticFriction&&A.restitution===C.restitution,e=D?C.defaultMaterial:C.world.createMaterial(A.staticFriction,A.friction,A.restitution),t=[];switch(A.type){case"null":B[1]=0,E=this.shape({type:"sphere",size:[.01]}),o=this.setShapeFlag(0),t.push(C.world.createShape(E,e,void 0===A.isExclusive||A.isExclusive,o)),PhysX.destroy(o),PhysX.destroy(E);break;case"compound":let I,g;t=[],o=this.setShapeFlag(A.flags);for(let Q=0;Q<A.shapes.length;Q++)I=A.shapes[Q],E=this.shape(I),g=C.world.createShape(E,e,A.isExclusive||!1,o),"plane"!==I.type&&"capsule"!==I.type||(I.quat=this.preRotate(I.quat)),g.setLocalPose(this.t.fromArray(I.pos,I.quat)),PhysX.destroy(E),t.push(g);PhysX.destroy(o);break;default:A.shapeType&&(A.type=A.shapeType),E=this.shape(A),o="particle"===A.type?this.setShapeFlag(1):this.setShapeFlag(A.flags),t.push(C.world.createShape(E,e,void 0===A.isExclusive||A.isExclusive,o));let Q=A.localPos||[0,0,0],i=A.localQuat||[0,0,0,1];"plane"!==A.type&&"capsule"!==A.type||(i=this.preRotate(i)),t[0].setLocalPose(this.t.fromArray(Q,i)),E?PhysX.destroy(E):console.log(A),PhysX.destroy(o)}if(D||e.release(),this.t.fromArray(A.pos,A.quat),A.solver){let g=Q.byName(A.solver);null!==g&&(i=g.addBone(I,this.t,A.linked),i.isBone=!0)}else i="body"===this.type?C.world.createRigidDynamic(this.t):C.world.createRigidStatic(this.t);let h=t.length;for(;h--;)C.setFilter(t[h],B),i.attachShape(t[h]),t[h].release();if(A.mass&&A.density&&!g&&delete A.density,"body"===this.type){let I=this.v.fromArray(A.massCenter||[0,0,0]);const g=!1;A.density?(PhysX.PxRigidBodyExt.prototype.updateMassAndInertia(i,A.density,I,g),delete A.density):A.mass&&PhysX.PxRigidBodyExt.prototype.setMassAndUpdateInertia(i,A.mass,I,g),A.mass&&delete A.mass}if(i){if(i.name=I,i.type=this.type,i.isKinematic=A.kinematic||!1,i.breakable=A.breakable||!1,i.trigger=A.isTrigger||!1,i.filter=B,i.aggregate=null,A.aggregate){let I=Q.byName(A.aggregate);null===I&&(I=new J(A.aggregate,A.aggregateMax,A.aggregateMax,A.aggregateCollisions)),i.aggregate=I}A.kinematic&&(i.setRigidBodyFlag(PhysX._emscripten_enum_PxRigidBodyFlagEnum_eKINEMATIC(),A.kinematic),i.tmpTransform=i.getGlobalPose().clone(),i.first=!0,delete A.kinematic),delete A.pos,delete A.quat,this.addToWorld(i,A.id),this.set(A,i)}}upGravity(A){A.selfGravity&&A.addForce(this.v.fromArray(A.selfGravity),Q.ForceMode.force,!1)}setGravityScale(A,I){A.selfGravity||A.setActorFlag(PhysX._emscripten_enum_PxActorFlagEnum_eDISABLE_GRAVITY(),!0);let g=C.gravity.toArray();I*=2,A.selfGravity=[I*g[0],I*g[1],I*g[2]]}set(A={},I=null){if(null===I&&(I=this.byName(A.name)),null===I)return;void 0!==A.getVelocity&&(I.getVelocity=A.getVelocity),void 0!==A.kinematic&&"body"===I.type&&(I.setRigidBodyFlag(PhysX._emscripten_enum_PxRigidBodyFlagEnum_eKINEMATIC(),A.kinematic),I.isKinematic=A.kinematic,I.isKinematic&&(I.tmpTransform=I.getGlobalPose().clone())),void 0!==A.gravityScale&&this.setGravityScale(I,A.gravityScale),void 0!==A.gravity&&I.setActorFlag(PhysX._emscripten_enum_PxActorFlagEnum_eDISABLE_GRAVITY(),!A.gravity),A.noGravity&&I.setActorFlag(PhysX._emscripten_enum_PxActorFlagEnum_eDISABLE_GRAVITY(),!0),void 0!==A.disable&&I.setActorFlag(PhysX._emscripten_enum_PxActorFlagEnum_eDISABLE_SIMULATION(),A.disable);let g=void 0===A.activate||A.activate;if(I.isBone||"body"!==I.type||(A.sleep&&(I.putToSleep(),g=!1),A.wake&&I.wakeUp(),void 0!==A.neverSleep&&(A.sleepThreshold=A.neverSleep?0:.005,A.neverSleep&&!A.wake&&I.wakeUp()),void 0!==A.stabilization&&I.setStabilizationThreshold(A.stabilization),void 0!==A.sleepThreshold&&I.setSleepThreshold(A.sleepThreshold)),(A.pos||A.quat)&&(A.pos||(A.pos=I.getGlobalPose().p.toArray()),A.quat||(A.quat=I.getGlobalPose().q.toArray()),this.t.fromArray(A.pos,A.quat),I.isKinematic?I.tmpTransform.copy(this.t):I.setGlobalPose(this.t,g)),"body"===I.type&&(this.changeMass(I,A),A.impulse&&(A.impulseCenter?PhysX.PxRigidBodyExt.prototype.addForceAtPos(I,this.v.fromArray(A.impulse),this.v2.fromArray(A.impulseCenter),Q.ForceMode.impulse,g):I.addForce(this.v.fromArray(A.impulse),Q.ForceMode.impulse,g)),A.force&&(A.forcePosition?PhysX.PxRigidBodyExt.prototype.addForceAtPos(I,this.v.fromArray(A.force),this.v2.fromArray(A.forcePosition),Q.ForceMode[A.forceMode||"force"],g):I.addForce(this.v.fromArray(A.force),Q.ForceMode[A.forceMode||"force"],g)),A.torque&&I.addTorque(this.v.fromArray(A.torque),Q.ForceMode[A.torqueMode||"force"],g),A.linearVelocity&&(A.linear=A.linearVelocity),A.angularVelocity&&(A.angular=A.angularVelocity),A.velocityOperation?this.velocityOperation(A,I,g):(A.linear&&I.setLinearVelocity(this.v.fromArray(A.linear),g),A.angular&&I.setAngularVelocity(this.v.fromArray(A.angular),g)),void 0!==A.linearFactor&&(I.setRigidDynamicLockFlag(PhysX.eLOCK_LINEAR_X,!A.linearFactor[0]),I.setRigidDynamicLockFlag(PhysX.eLOCK_LINEAR_Y,!A.linearFactor[1]),I.setRigidDynamicLockFlag(PhysX.eLOCK_LINEAR_Z,!A.linearFactor[2])),void 0!==A.angularFactor&&(I.setRigidDynamicLockFlag(PhysX.eLOCK_ANGULAR_X,!A.angularFactor[0]),I.setRigidDynamicLockFlag(PhysX.eLOCK_ANGULAR_Y,!A.angularFactor[1]),I.setRigidDynamicLockFlag(PhysX.eLOCK_ANGULAR_Z,!A.angularFactor[2])),void 0!==A.damping&&(I.setLinearDamping(A.damping[0]),I.setAngularDamping(A.damping[1])),void 0!==A.maxVelocity&&(I.setMaxLinearVelocity(A.maxVelocity[0]),I.setMaxAngularVelocity(A.maxVelocity[1])),A.reset&&I.setLinearVelocity&&(I.setLinearVelocity(this.v.set(0,0,0),g),I.setAngularVelocity(this.v.set(0,0,0),g))),A.iterations&&I.setSolverIterationCounts&&I.setSolverIterationCounts(A.iterations[0],A.iterations[1]),void 0!==A.minCCD&&I.setMinCCDAdvanceCoefficient(A.minCCD),"body"===I.type&&(void 0!==A.kinematicTarget&&I.setRigidBodyFlag(PhysX._emscripten_enum_PxRigidBodyFlagEnum_eUSE_KINEMATIC_TARGET_FOR_SCENE_QUERIES(),A.kinematicTarget),void 0!==A.bullet&&(A.enableCCD=!0),void 0!==A.enableCCD&&I.setRigidBodyFlag(PhysX._emscripten_enum_PxRigidBodyFlagEnum_eENABLE_CCD(),A.enableCCD),void 0!==A.enableCCD_FRICTION&&I.setRigidBodyFlag(PhysX._emscripten_enum_PxRigidBodyFlagEnum_eENABLE_CCD_FRICTION(),A.enableCCD_FRICTION),void 0!==A.speculativeCCD&&I.setRigidBodyFlag(PhysX._emscripten_enum_PxRigidBodyFlagEnum_eENABLE_SPECULATIVE_CCD(),A.speculativeCCD),void 0!==A.enablePose&&I.setRigidBodyFlag(PhysX._emscripten_enum_PxRigidBodyFlagEnum_eENABLE_POSE_INTEGRATION_PREVIEW(),A.enablePose),void 0!==A.ccdMaxContact&&I.setRigidBodyFlag(PhysX._emscripten_enum_PxRigidBodyFlagEnum_eENABLE_CCD_MAX_CONTACT_IMPULSE(),A.ccdMaxContact),void 0!==A.retainAcc&&I.setRigidBodyFlag(PhysX._emscripten_enum_PxRigidBodyFlagEnum_eRETAIN_ACCELERATIONS(),A.retainAcc),I.setMaxDepenetrationVelocity(C.pv),void 0!==A.pv&&(A.depenetrationVelocity=A.pv),void 0!==A.penetrationVelocity&&(A.depenetrationVelocity=A.pv),void 0!==A.depenetrationVelocity&&I.setMaxDepenetrationVelocity(A.depenetrationVelocity),void 0!==A.mci&&(A.maxContactImpulse=A.mci),void 0!==A.maxContactImpulse&&I.setMaxContactImpulse(A.maxContactImpulse),A.inertiaTensor&&(A.massSpaceInertiaTensor=A.inertiaTensor),A.massSpaceInertiaTensor&&I.setMassSpaceInertiaTensor(this.v.fromArray(A.massSpaceInertiaTensor)),A.inertia&&I.setMassSpaceInertiaTensor(this.v.fromArray(A.inertia)),void 0!==A.inertiaScale)){let g=I.getMassSpaceInertiaTensor().toArray();I.setMassSpaceInertiaTensor(this.v.fromArray([g[0]*A.inertiaScale,g[1]*A.inertiaScale,g[2]*A.inertiaScale]))}A.dmv&&(void 0!==A.dmv[0]&&I.setLinearDamping(A.dmv[0]),void 0!==A.dmv[1]&&I.setAngularDamping(A.dmv[1]),void 0!==A.dmv[2]&&I.setMaxLinearVelocity(A.dmv[2]),void 0!==A.dmv[3]&&I.setMaxAngularVelocity(A.dmv[3])),A.massInfo&&this.getMassInfo(I)}velocityOperation(A,I,g){let Q=I.getLinearVelocity().toArray(),B=I.getAngularVelocity().toArray();switch(A.velocityOperation){case"xz":A.linear&&(Q=[A.linear[0],Q[1],A.linear[2]]);break;case"add":A.linear&&(Q=F.addArray(Q,A.linear,3)),A.angular&&(B=F.addArray(B,A.angular,3));break;case"sub":A.linear&&(Q=F.subArray(Q,A.linear,3)),A.angular&&(B=F.subArray(B,A.angular,3));break;case"multy":A.linear&&(Q=F.mulArray(Q,A.linear,3)),A.angular&&(B=F.mulArray(B,A.angular,3));break;case"lerp":A.linear&&(Q=F.lerpArray(Q,A.linear,A.time)),A.angular&&(B=F.lerpArray(B,A.angular,A.time));break;case"step":A.linear&&(Q=F.mulArray(Q,C.substep)),A.angular&&(B=F.mulArray(B,C.substep));break;case"local":let g=I.getGlobalPose().q.toArray();A.linear&&(Q=F.applyQuaternion(Q,g)),A.angular&&(B=F.applyQuaternion(B,g))}I.setLinearVelocity(this.v.fromArray(Q),g),I.setAngularVelocity(this.v.fromArray(B),g)}setShapes(A={},I=null){let g,Q=I.getNbShapes();for(;Q--;)g=PhysX.SupportFunctions.prototype.PxActor_getShape(I,Q),A.filter&&C.setFilter(g,A.filter)}changeMass(A,I={}){if(I.density||I.mass){let g=this.v.fromArray(I.massCenter||[0,0,0]);const C=!1;I.density&&!I.mass&&PhysX.PxRigidBodyExt.prototype.updateMassAndInertia(A,I.density,g,C),I.mass&&PhysX.PxRigidBodyExt.prototype.setMassAndUpdateInertia(A,I.mass,g,C)}I.massCenter&&A.setCMassLocalPose(this.t.fromArray(I.massCenter)),I.inertia&&A.setMassSpaceInertiaTensor(this.v.fromArray(I.inertia))}getMassInfo(A=null){if("string"==typeof A&&(A=this.byName(A)),null===A)return;if("body"!==this.type)return;const I={mass:A.getMass(),invMass:A.getInvMass(),massCenter:A.getCMassLocalPose().p.toArray(),inertia:A.getMassSpaceInertiaTensor().toArray(),invInertia:A.getMassSpaceInvInertiaTensor().toArray(),damping:[A.getLinearDamping(),A.getAngularDamping()]};console.log(I)}addCollisionCallback(A,I){A.trigger?C.setCollisionFilter(A,I?[2,4,10]:[-1]):C.ccd?C.setCollisionFilter(A,I?[1,2,3,4,5,6,10,11,12]:[-1]):C.setCollisionFilter(A,I?[1,2,3,4,5,10,11]:[-1])}}class M extends S{constructor(){super(),this.Utils=Q,this.type="joint",this.t1=new PhysX.PxTransform,this.t2=new PhysX.PxTransform,this.v1=new PhysX.PxVec3,this.v2=new PhysX.PxVec3,this.p1=new PhysX.PxVec3,this.p2=new PhysX.PxVec3,this.q1=new PhysX.PxQuat,this.q2=new PhysX.PxQuat,this.q3=new PhysX.PxQuat}step(){const A=C.Ar,I=C.ArPos[this.type];let g,Q,B=this.list.length;for(;B--;)g=this.list[B],Q=I+B*h.joint,g.visible&&(g.b1?this.t1.copy(g.b1.getGlobalPose()).multiply(g.formA).toArray(A,Q):this.t1.copy(g.formA).toArray(A,Q),g.b2?this.t1.copy(g.b2.getGlobalPose()).multiply(g.formB).toArray(A,Q+7):this.t1.copy(g.formB).toArray(A,Q+7))}add(A={}){this.v;let I=this.setName(A),g=this.byName(A.b1),Q=this.byName(A.b2);null!==g&&"vehicle"===g.type&&(g=g.vehicleActor),null!==Q&&"vehicle"===Q.type&&(Q=Q.vehicleActor);let B=this.v1.fromArray(A.pos1||[0,0,0]),E=this.v2.fromArray(A.pos2||[0,0,0]),i=this.q1.fromArray(A.quat1||[0,0,0,1]),o=this.q2.fromArray(A.quat2||[0,0,0,1]),D=this.p1.fromArray(A.axis1||[0,0,1]),e=this.p2.fromArray(A.axis2||[0,0,1]);A.quat1||i.fromAxis(D).normalize(),A.quat2||o.fromAxis(e).normalize();const t=new PhysX.PxTransform(B,i),h=new PhysX.PxTransform(E,o);let S,a=A.mode||"hinge";switch(a){case"fixe":S=new PhysX.PxTopLevelFunctions.prototype.FixedJointCreate(C.world,g,t,Q,h);break;case"hinge":S=new PhysX.PxTopLevelFunctions.prototype.RevoluteJointCreate(C.world,g,t,Q,h);break;case"spherical":S=new PhysX.PxTopLevelFunctions.prototype.SphericalJointCreate(C.world,g,t,Q,h);break;case"prismatic":S=new PhysX.PxTopLevelFunctions.prototype.PrismaticJointCreate(C.world,g,t,Q,h);break;case"distance":S=new PhysX.PxTopLevelFunctions.prototype.DistanceJointCreate(C.world,g,t,Q,h);break;case"ragdoll":case"cylindrical":case"generic":if("cylindrical"===a){let I=A.lm?A.lm:[0,0],g=A.lmr?A.lmr:[0,0];A.lm&&delete A.lm,A.lmr&&delete A.lmr,A.lm=[["x",...I],["rx",...g]]}S=new PhysX.PxTopLevelFunctions.prototype.D6JointCreate(C.world,g,t,Q,h)}S.name=I,S.mode=a,S.type=this.type,S.b1=g,S.b2=Q,S.formA=t,S.formB=h,S.visible=!1,this.set(A,S);let G=void 0!==A.collision&&A.collision;S.setConstraintFlag(PhysX._emscripten_enum_PxConstraintFlagEnum_eCOLLISION_ENABLED(),G),this.addToWorld(S,A.id)}set(A={},I=null){if(null===I&&(I=this.byName(A.name)),null===I)return;let g,C,B,E,i,o,D;void 0!==A.visible&&(I.visible=A.visible);let e=void 0===A.wake||A.wake;switch(void 0!==A.project1&&I.setConstraintFlag(PhysX._emscripten_enum_PxConstraintFlagEnum_ePROJECT_TO_ACTOR0(),A.project1),void 0!==A.project2&&I.setConstraintFlag(PhysX._emscripten_enum_PxConstraintFlagEnum_ePROJECT_TO_ACTOR1(),A.project2),void 0!==A.tolerance&&this.tolerance(I,A.tolerance),void 0!==A.alway&&I.setConstraintFlag(PhysX._emscripten_enum_PxConstraintFlagEnum_eALWAYS_UPDATE(),A.alway),void 0!==A.improveSlerp&&I.setConstraintFlag(PhysX._emscripten_enum_PxConstraintFlagEnum_eIMPROVED_SLERP(),A.improveSlerp),void 0!==A.noPreProcess&&I.setConstraintFlag(PhysX._emscripten_enum_PxConstraintFlagEnum_eDISABLE_PREPROCESSING(),A.noPreProcess),void 0!==A.extendedLimit&&I.setConstraintFlag(PhysX._emscripten_enum_PxConstraintFlagEnum_eENABLE_EXTENDED_LIMITS(),A.extendedLimit),void 0!==A.limitAreForce&&I.setConstraintFlag(PhysX._emscripten_enum_PxConstraintFlagEnum_eDRIVE_LIMITS_ARE_FORCES(),A.limitAreForce), //!!!need PxSimulationEventCallbackImpl::onConstraintBreak. void 0!==A.break&&I.setBreakForce(A.break[0],A.break[1]),I.mode){case"spherical":A.limit&&(g=this.coneLimit(A.limit,A.spring),I.setLimitCone(g),I.setSphericalJointFlag(PhysX._emscripten_enum_PxSphericalJointFlagEnum_eLIMIT_ENABLED(),!0));break;case"prismatic":A.limit&&(g=this.linearLimit(A.limit,A.spring),I.setLimit(g),I.setPrismaticJointFlag(PhysX._emscripten_enum_PxPrismaticJointFlagEnum_eLIMIT_ENABLED(),!0));break;case"hinge":void 0!==A.limit&&(g=this.angularLimit(A.limit,A.spring),I.setLimit(g),I.setRevoluteJointFlag(PhysX._emscripten_enum_PxRevoluteJointFlagEnum_eLIMIT_ENABLED(),!0)),void 0!==A.driveFree&&I.setRevoluteJointFlag(PhysX._emscripten_enum_PxRevoluteJointFlagEnum_eDRIVE_FREESPIN(),A.driveFree),void 0!==A.driveForceLimit&&I.setDriveForceLimit(A.driveForceLimit),void 0!==A.gearRatio&&I.setDriveGearRatio(A.gearRatio),A.motor&&(A.motor instanceof Array?(I.setDriveVelocity(A.motor[0]*G,e),A.motor[1]&&I.setDriveForceLimit(A.motor[1])):I.setDriveVelocity(A.motor*G,e),I.setRevoluteJointFlag(PhysX._emscripten_enum_PxRevoluteJointFlagEnum_eDRIVE_ENABLED(),!0));break;case"distance":A.limit&&(I.setMinDistance(A.limit[0]),I.setMaxDistance(A.limit[1]),I.setDistanceJointFlag(PhysX._emscripten_enum_PxDistanceJointFlagEnum_eMAX_DISTANCE_ENABLED(),!0),I.setDistanceJointFlag(PhysX._emscripten_enum_PxDistanceJointFlagEnum_eMIN_DISTANCE_ENABLED(),!0)),A.spring&&(void 0!==A.spring[0]&&I.setStiffness(A.spring[0]||0),void 0!==A.spring[1]&&I.setDamping(A.spring[1]||0),void 0!==A.spring[2]&&I.setTolerance(A.spring[2]),I.setDistanceJointFlag(PhysX._emscripten_enum_PxDistanceJointFlagEnum_eSPRING_ENABLED(),!0));break;case"ragdoll":case"generic":case"cylindrical":A.acc&&I.setConstraintFlag(PhysX._emscripten_enum_PxD6JointDriveFlagEnum_eACCELERATION(),!0);const t=A.autoDrive||!1;if(A.lm)for(t&&!A.drives&&(A.drives=[]),C=A.lm.length;C--;){switch(i=A.lm[C],o=i.slice(1),D=Q.D6Axis[i[0]],I.setMotion(D,PhysX._emscripten_enum_PxD6MotionEnum_eLIMITED()),i[0]){case"rx":case"twist":g=this.angularLimit(o),I.setTwistLimit(g);break;case"ry":case"swing1":case"rz":case"swing2":g=this.coneLimit(o),I.setSwingLimit(g);break;default:g=this.linearLimit(o),I.setLinearLimit(D,g)}t&&A.drives.push([i[0],i[2]||0,i[3]||0])}if(A.motion&&(A.motions=A.motion),A.motions)for(C=A.motions.length;C--;)B=A.motions[C],"rx"===B[0]&&(B[0]="twist"),"ry"===B[0]&&(B[0]="swing1"),"rz"===B[0]&&(B[0]="swing2"),I.setMotion(Q.D6Axis[B[0]],PhysX["_emscripten_enum_PxD6MotionEnum_e"+B[1].toUpperCase()]());if(A.drive&&(A.drives=A.drive),A.drives)for(C=A.drives.length;C--;)B=A.drives[C],"rx"!==B[0]&&"twist"!==B[0]||(B[0]="twist"),"ry"!==B[0]&&"swing1"!==B[0]||(B[0]="swing"),"rz"!==B[0]&&"swing2"!==B[0]||(B[0]="slerp"),E=new PhysX.PxD6JointDrive(B[1]||0,B[2]||0,B[3]||s,void 0!==B[4]?B[4]?1:0:1),I.setDrive(PhysX["_emscripten_enum_PxD6DriveEnum_e"+B[0].toUpperCase()](),E);A.drivePosition&&I.setDrivePosition(this.t1.fromArray(A.drivePosition.pos||[0,0,0],A.drivePosition.quat||[0,0,0,1]),e),A.driveVelocity&&I.setDriveVelocity(this.v1.fromArray(A.driveVelocity[0]),this.v2.fromArray(A.driveVelocity[1]),e),void 0!==A.distanceLimit&&(g=this.distanceLimit(A.distanceLimit),I.setDistanceLimit(g))}}tolerance(A,I){I&&(A.setProjectionLinearTolerance(I[0]),A.setProjectionAngularTolerance(I[1]*G)),A.setConstraintFlag(PhysX._emscripten_enum_PxConstraintFlagEnum_ePROJECTION(),!0)}distanceLimit(A,I){let g=new PhysX.PxJointLinearLimit(A[0]);return A.length>2&&this.spring(g,A),g}linearLimit(A,I){let g=new PhysX.PxJointLinearLimitPair(A[0],A[1]);return A.length>2&&this.spring(g,A),I&&(void 0!==I[0]&&g.set_stiffness(I[0]),void 0!==I[1]&&g.set_damping(I[1])),g}angularLimit(A,I){let g=new PhysX.PxJointAngularLimitPair(A[0]*G,A[1]*G);return A.length>2&&this.spring(g,A),g}coneLimit(A,I){let g=new PhysX.PxJointLimitCone(Math.abs(A[0])*G,Math.abs(A[1])*G);return A.length>2&&this.spring(g,A),g}pyramidLimit(A,I){let g=new PhysX.PxJointLimitPyramid(-A[0]*G,A[0]*G,-A[1]*G,A[1]*G);return A.length>2&&this.sring(g,A),g}spring(A,I){void 0!==I[2]&&A.set_stiffness(I[2]),void 0!==I[3]&&A.set_damping(I[3]),void 0!==I[4]&&A.set_restitution(I[4]),void 0!==I[5]&&A.set_bounceThreshold(I[5])}}class R extends S{constructor(){super(),this.type="solver",this.Utils=Q}step(){const A=C.Ar,I=C.ArPos[this.type];let g,Q=this.list.length;for(;Q--;)g=I+Q*h[this.type],this.list[Q].step(A,g)}add(A={}){this.setName(A);let I=new N(A);this.addToWorld(I,A.id)}set(A={},I=null){console.log("set ??")}}class N{constructor(A){this.enable=!1,this.angulars=["twist","swing1","swing2","TWIST","SWING1","SWING2","rx","ry","rz"],this.name=A.name,this.type="solver",this.neverSleep=A.neverSleep||!1,this.needData=A.needData||!1,this.cache=null,this.jid=0,this.useReducer=!0,this.chain=this.useReducer?C.world.createArticulationReducedCoordinate():C.world.createArticulation(),this.positionIters=void 0!==A.iteration?A.iteration:4,this.velocityIters=void 0!==A.velocityIteration?A.velocityIteration:1,this.chain.setSolverIterationCounts(this.positionIters,this.velocityIters),void 0!==A.fix&&this.chain.setArticulationFlag(PhysX.eFIX_BASE,A.fix),void 0!==A.driveLimite&&this.chain.setArticulationFlag(PhysX.eDRIVE_LIMITS_ARE_FORCES,A.driveLimite),void 0!==A.noCollision&&this.chain.setArticulationFlag(PhysX.eDISABLE_SELF_COLLISION,A.noCollision),void 0!==A.jointForce&&this.chain.setArticulationFlag(PhysX.eCOMPUTE_JOINT_FORCES,A.jointForce),void 0!==A.maxAngular&&this.chain.setMaxCOMAngularVelocity(A.maxAngular),void 0!==A.maxLinear&&this.chain.setMaxCOMLinearVelocity(A.maxLinear),void 0!==A.stabilization&&this.chain.setStabilizationThreshold(A.stabiliz