UNPKG

ecspresso

Version:

A minimal Entity-Component-System library for typescript and javascript.

5 lines (3 loc) 3.84 kB
var b=((j)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(j,{get:(k,F)=>(typeof require<"u"?require:k)[F]}):j)(function(j){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+j+'" is not supported')});import{definePlugin as O}from"ecspresso";var z={x:0,y:0,z:0,rx:0,ry:0,rz:0,sx:1,sy:1,sz:1},u={x:0,y:0,z:0,rx:0,ry:0,rz:0,sx:1,sy:1,sz:1};function w(j,k,F){return{localTransform3D:{x:j,y:k,z:F,rx:0,ry:0,rz:0,sx:1,sy:1,sz:1}}}function i(j,k,F){return{worldTransform3D:{x:j,y:k,z:F,rx:0,ry:0,rz:0,sx:1,sy:1,sz:1}}}function q(j,k,F,H){let J=H?.scale??H?.scaleX??1,N=H?.scale??H?.scaleY??1,U=H?.scale??H?.scaleZ??1,K=H?.rotation?.x??0,_=H?.rotation?.y??0,$=H?.rotation?.z??0,A={x:j,y:k,z:F,rx:K,ry:_,rz:$,sx:J,sy:N,sz:U};return{localTransform3D:{...A},worldTransform3D:{...A}}}var G={x:0,y:0,z:0,w:1},g={x:0,y:0,z:0,w:1},L={x:0,y:0,z:0,w:1};function Q(j,k,F,H){let J=Math.cos(j*0.5),N=Math.sin(j*0.5),U=Math.cos(k*0.5),K=Math.sin(k*0.5),_=Math.cos(F*0.5),$=Math.sin(F*0.5);H.x=N*U*_+J*K*$,H.y=J*K*_-N*U*$,H.z=J*U*$+N*K*_,H.w=J*U*_-N*K*$}function D(j,k,F){F.x=j.w*k.x+j.x*k.w+j.y*k.z-j.z*k.y,F.y=j.w*k.y-j.x*k.z+j.y*k.w+j.z*k.x,F.z=j.w*k.z+j.x*k.y-j.y*k.x+j.z*k.w,F.w=j.w*k.w-j.x*k.x-j.y*k.y-j.z*k.z}var E={x:0,y:0,z:0},C={rx:0,ry:0,rz:0};function T(j,k,F,H){let J=2*(j.y*H-j.z*F),N=2*(j.z*k-j.x*H),U=2*(j.x*F-j.y*k);return E.x=k+j.w*J+(j.y*U-j.z*N),E.y=F+j.w*N+(j.z*J-j.x*U),E.z=H+j.w*U+(j.x*N-j.y*J),E}function v(j){let k=j.x+j.x,F=j.y+j.y,H=j.z+j.z,J=j.x*k,N=j.x*F,U=j.x*H,K=j.y*F,_=j.y*H,$=j.z*H,A=j.w*k,X=j.w*F,R=j.w*H,Z=1-(K+$),Y=N-R,P=U+X,W=1-(J+$),S=_-A,V=1-(J+K);C.ry=Math.asin(Math.max(-1,Math.min(1,P)));let B=Math.cos(C.ry);if(Math.abs(B)>0.000001)C.rx=Math.atan2(-S,V),C.rz=Math.atan2(-Y,Z);else{let I=N+R;C.rx=Math.atan2(I,W),C.rz=0}return C}function y(j){let{systemGroup:k="transform3d",priority:F=500,phase:H="postUpdate"}=j??{};return O("transform3d").withComponentTypes().withLabels().withGroups().install((J)=>{J.registerRequired("localTransform3D","worldTransform3D",(K)=>({x:K.x,y:K.y,z:K.z,rx:K.rx,ry:K.ry,rz:K.rz,sx:K.sx,sy:K.sy,sz:K.sz}));let N=[],U=new Set;J.addSystem("transform3d-propagation").setPriority(F).inPhase(H).inGroup(k).setProcess(({ecs:K})=>{h(K,N,U)})})}function h(j,k,F){let H=j.entityManager;if(!H.hasHierarchy){H.getEntitiesWithQueryInto(k,["localTransform3D","worldTransform3D"]);for(let J of k){let{localTransform3D:N,worldTransform3D:U}=J.components;if(M(N,U))j.markChanged(J.id,"worldTransform3D")}return}F.clear(),j.forEachInHierarchy((J,N)=>{F.add(J);let U=H.getComponent(J,"localTransform3D"),K=H.getComponent(J,"worldTransform3D");if(!U||!K)return;let _=N!==null?H.getComponent(N,"worldTransform3D"):null;if(_?m(_,U,K):M(U,K))j.markChanged(J,"worldTransform3D")}),H.getEntitiesWithQueryInto(k,["localTransform3D","worldTransform3D"]);for(let J of k){if(F.has(J.id))continue;let{localTransform3D:N,worldTransform3D:U}=J.components;if(M(N,U))j.markChanged(J.id,"worldTransform3D")}}function M(j,k){if(k.x===j.x&&k.y===j.y&&k.z===j.z&&k.rx===j.rx&&k.ry===j.ry&&k.rz===j.rz&&k.sx===j.sx&&k.sy===j.sy&&k.sz===j.sz)return!1;return k.x=j.x,k.y=j.y,k.z=j.z,k.rx=j.rx,k.ry=j.ry,k.rz=j.rz,k.sx=j.sx,k.sy=j.sy,k.sz=j.sz,!0}function m(j,k,F){Q(j.rx,j.ry,j.rz,G),Q(k.rx,k.ry,k.rz,g),D(G,g,L);let H=v(L),J=T(G,k.x*j.sx,k.y*j.sy,k.z*j.sz),N=j.x+J.x,U=j.y+J.y,K=j.z+J.z,_=j.sx*k.sx,$=j.sy*k.sy,A=j.sz*k.sz;if(F.x===N&&F.y===U&&F.z===K&&F.rx===H.rx&&F.ry===H.ry&&F.rz===H.rz&&F.sx===_&&F.sy===$&&F.sz===A)return!1;return F.x=N,F.y=U,F.z=K,F.rx=H.rx,F.ry=H.ry,F.rz=H.rz,F.sx=_,F.sy=$,F.sz=A,!0}export{i as createWorldTransform3D,y as createTransform3DPlugin,q as createTransform3D,w as createLocalTransform3D,u as DEFAULT_WORLD_TRANSFORM_3D,z as DEFAULT_LOCAL_TRANSFORM_3D}; //# debugId=BF0602ADE0E3736C64756E2164756E21 //# sourceMappingURL=transform3D.js.map