UNPKG

ecspresso

Version:

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

5 lines (3 loc) 3.94 kB
var B=((z)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(z,{get:(H,D)=>(typeof require<"u"?require:H)[D]}):z)(function(z){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+z+'" is not supported')});import{definePlugin as F}from"ecspresso";function $(z){return z}var V=1.70158,v=V*1.525,S=V+1;var f=2*Math.PI/3,g=2*Math.PI/4.5;function Q(z,H,D,J,M){let{from:N,easing:U=$,loop:W="once",loops:Y=1,onComplete:X}=M??{};return{tween:{steps:[{targets:[{component:z,path:H.split("."),from:N??null,to:D}],duration:J,easing:U}],currentStep:0,elapsed:0,loop:W,totalLoops:Y,completedLoops:0,direction:1,state:"pending",onComplete:X,justFinished:!1}}}function b(z,H){let{loop:D="once",loops:J=1,onComplete:M}=H??{};return{tween:{steps:z.map((N)=>({targets:N.targets.map((U)=>({component:U.component,path:U.field.split("."),from:U.from??null,to:U.to})),duration:N.duration,easing:N.easing??$})),currentStep:0,elapsed:0,loop:D,totalLoops:J,completedLoops:0,direction:1,state:"pending",onComplete:M,justFinished:!1}}}function d(z){return{createTween:Q,createTweenSequence:b}}var G={parent:{},key:""};function L(z,H){let D=H.length-1,J=z;for(let N=0;N<D;N++){let U=H[N];if(U===void 0)return null;let W=J[U];if(W===null||W===void 0||typeof W!=="object")return null;J=W}let M=H[D];if(M===void 0)return null;if(!(M in J))return null;return G.parent=J,G.key=M,G}function R(z,H){let D=L(z,H);if(!D)return null;let J=D.parent[D.key];return typeof J==="number"?J:null}function j(z,H,D){let J=L(z,H);if(!J)return!1;return J.parent[J.key]=D,!0}function h(z,H,D){return z<H?H:z>D?D:z}function E(z,H){for(let D of z.steps)for(let J of D.targets){if(J.from!==null)continue;let M=H[J.component];if(!M||typeof M!=="object")continue;let N=R(M,J.path);if(N!==null)J.from=N;else J.from=0}}function K(z,H,D,J,M){let N=z.easing(H);for(let U of z.targets){let W=D[U.component];if(!W||typeof W!=="object")continue;let Y=U.from??0,X=Y+(U.to-Y)*N;if(j(W,U.path,X))M.markChanged(J,U.component)}}function q(z,H,D,J){for(let M of z.targets){let N=H[M.component];if(!N||typeof N!=="object")continue;if(j(N,M.path,M.to))J.markChanged(D,M.component)}}function T(z){for(let H of z.steps)for(let D of H.targets){let J=D.from??0;D.from=D.to,D.to=J}}function P(z,H,D){z.state="complete",z.justFinished=!0,z.onComplete?.({entityId:H,stepCount:z.steps.length}),D.commands.removeComponent(H,"tween")}function A(z,H,D){if(z.completedLoops++,z.loop==="once")return P(z,H,D),!1;if(z.totalLoops>0&&z.completedLoops>=z.totalLoops)return P(z,H,D),!1;if(z.loop==="yoyo")z.direction=z.direction===1?-1:1,T(z);return z.currentStep=0,z.elapsed>0}function k(z,H,D,J){let M=z.currentStep+1;if(M<z.steps.length){z.currentStep=M;let N=z.steps[M];if(N)for(let U of N.targets){if(U.from!==null)continue;let W=H[U.component];if(!W||typeof W!=="object")continue;let Y=R(W,U.path);U.from=Y??0}return!0}return A(z,D,J)}function x(z,H,D,J){while(!0){let M=z.steps[z.currentStep];if(!M)return;if(M.duration<=0){if(q(M,H,D,J),z.elapsed=0,!k(z,H,D,J))return;continue}if(z.elapsed>=M.duration){q(M,H,D,J);let U=z.elapsed-M.duration;if(z.elapsed=U,!k(z,H,D,J))return;continue}let N=h(z.elapsed/M.duration,0,1);K(M,N,H,D,J);return}}function m(z){let{systemGroup:H="tweens",priority:D=0,phase:J="update"}=z??{};return F("tweens").withComponentTypes().withLabels().withGroups().install((M)=>{M.addSystem("tween-update").setPriority(D).inPhase(J).inGroup(H).addQuery("tweens",{with:["tween"]}).setProcess(({queries:N,dt:U,ecs:W})=>{for(let Y of N.tweens){let X=Y.components.tween,Z=Y.components;if(X.justFinished){X.justFinished=!1;continue}if(X.state==="complete")continue;if(X.state==="pending")E(X,Z),X.state="active";if(!X.steps[X.currentStep])continue;X.elapsed+=U,x(X,Z,Y.id,W)}})})}export{b as createTweenSequence,m as createTweenPlugin,d as createTweenHelpers,Q as createTween}; //# debugId=52B5806729E5074564756E2164756E21 //# sourceMappingURL=tween.js.map