UNPKG

ecspresso

Version:

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

5 lines (3 loc) 2.63 kB
var _=((j)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(j,{get:(k,q)=>(typeof require<"u"?require:k)[q]}):j)(function(j){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+j+'" is not supported')});import{definePlugin as Q}from"ecspresso";var G={x:0,y:0,rotation:0,scaleX:1,scaleY:1},P={x:0,y:0,rotation:0,scaleX:1,scaleY:1};function b(j,k){return{localTransform:{x:j,y:k,rotation:0,scaleX:1,scaleY:1}}}function g(j,k){return{worldTransform:{x:j,y:k,rotation:0,scaleX:1,scaleY:1}}}function W(j,k,q){let C=q?.scale??q?.scaleX??1,v=q?.scale??q?.scaleY??1,D=q?.rotation??0,z={x:j,y:k,rotation:D,scaleX:C,scaleY:v};return{localTransform:{...z},worldTransform:{...z}}}function R(j){let{systemGroup:k="transform",priority:q=500,phase:C="postUpdate"}=j??{};return Q("transform").withComponentTypes().withLabels().withGroups().install((v)=>{v.registerRequired("localTransform","worldTransform",(E)=>({x:E.x,y:E.y,rotation:E.rotation,scaleX:E.scaleX,scaleY:E.scaleY}));let D=[],z=new Set;v.addSystem("transform-propagation").setPriority(q).inPhase(C).inGroup(k).setProcess(({ecs:E})=>{U(E,D,z)})})}function U(j,k,q){let C=j.entityManager;if(!C.hasHierarchy){C.getEntitiesWithQueryInto(k,["localTransform","worldTransform"]);for(let v of k){let{localTransform:D,worldTransform:z}=v.components;if(J(D,z))j.markChanged(v.id,"worldTransform")}return}q.clear(),j.forEachInHierarchy((v,D)=>{q.add(v);let z=C.getComponent(v,"localTransform"),E=C.getComponent(v,"worldTransform");if(!z||!E)return;let F=D!==null?C.getComponent(D,"worldTransform"):null;if(F?Z(F,z,E):J(z,E))j.markChanged(v,"worldTransform")}),C.getEntitiesWithQueryInto(k,["localTransform","worldTransform"]);for(let v of k){if(q.has(v.id))continue;let{localTransform:D,worldTransform:z}=v.components;if(J(D,z))j.markChanged(v.id,"worldTransform")}}function J(j,k){if(k.x===j.x&&k.y===j.y&&k.rotation===j.rotation&&k.scaleX===j.scaleX&&k.scaleY===j.scaleY)return!1;return k.x=j.x,k.y=j.y,k.rotation=j.rotation,k.scaleX=j.scaleX,k.scaleY=j.scaleY,!0}function Z(j,k,q){let C=k.x*j.scaleX,v=k.y*j.scaleY,D=Math.cos(j.rotation),z=Math.sin(j.rotation),E=C*D-v*z,F=C*z+v*D,H=j.x+E,K=j.y+F,M=j.rotation+k.rotation,N=j.scaleX*k.scaleX,O=j.scaleY*k.scaleY;if(q.x===H&&q.y===K&&q.rotation===M&&q.scaleX===N&&q.scaleY===O)return!1;return q.x=H,q.y=K,q.rotation=M,q.scaleX=N,q.scaleY=O,!0}export{g as createWorldTransform,R as createTransformPlugin,W as createTransform,b as createLocalTransform,P as DEFAULT_WORLD_TRANSFORM,G as DEFAULT_LOCAL_TRANSFORM}; //# debugId=DD4C20CA5FEDDFB464756E2164756E21 //# sourceMappingURL=transform.js.map