@litecanvas/utils 0.17.1 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/all.js +43 -10
- package/dist/all.min.js +2 -2
- package/dist/tween.js +43 -10
- package/dist/tween.min.js +1 -1
- package/package.json +1 -1
- package/src/tween/README.md +43 -1
- package/src/tween/index.js +57 -10
package/dist/all.js
CHANGED
|
@@ -971,24 +971,30 @@
|
|
|
971
971
|
_o;
|
|
972
972
|
/** @type {string} */
|
|
973
973
|
_p;
|
|
974
|
-
/** @type {number} */
|
|
974
|
+
/** @type {number|number} */
|
|
975
975
|
_x;
|
|
976
976
|
/** @type {number} */
|
|
977
977
|
_d;
|
|
978
978
|
/** @type {(x: number) => number} */
|
|
979
979
|
_e;
|
|
980
|
+
/** @type {boolean} */
|
|
981
|
+
_rel;
|
|
980
982
|
/** @type {Function[]} */
|
|
981
983
|
_cb = [];
|
|
982
984
|
/** @type {number} */
|
|
983
985
|
_t = 0;
|
|
984
986
|
/** @type {Function} */
|
|
985
987
|
_u = 0;
|
|
988
|
+
/** @type {TweenController} */
|
|
989
|
+
_ch = this;
|
|
990
|
+
/** @type {TweenController} */
|
|
991
|
+
_cu = this;
|
|
986
992
|
/** @type {LitecanvasInstance} */
|
|
987
993
|
_lc;
|
|
988
994
|
/**
|
|
989
995
|
* @param {*} object
|
|
990
996
|
* @param {string} prop
|
|
991
|
-
* @param {number} toValue
|
|
997
|
+
* @param {number|number} toValue
|
|
992
998
|
* @param {number} duration
|
|
993
999
|
* @param {(x: number) => number} easing
|
|
994
1000
|
*/
|
|
@@ -1000,24 +1006,27 @@
|
|
|
1000
1006
|
this._e = easing;
|
|
1001
1007
|
}
|
|
1002
1008
|
/**
|
|
1003
|
-
*
|
|
1004
|
-
* @
|
|
1009
|
+
* @param {LitecanvasInstance} [engine]
|
|
1010
|
+
* @returns {TweenController} this instance
|
|
1005
1011
|
*/
|
|
1006
|
-
start(engine
|
|
1012
|
+
start(engine) {
|
|
1007
1013
|
if (!this.running) {
|
|
1008
1014
|
this.stop();
|
|
1009
1015
|
}
|
|
1016
|
+
this._cu.stop(false);
|
|
1017
|
+
this._ch = this._cu = this;
|
|
1010
1018
|
const fromValue = this._o[this._p] || 0;
|
|
1011
|
-
this.
|
|
1012
|
-
this.
|
|
1013
|
-
|
|
1019
|
+
const toValue = this._rel ? fromValue + this._x : this._x;
|
|
1020
|
+
this._lc = this._lc || engine || globalThis;
|
|
1021
|
+
this._u = this._lc.listen("update", (dt) => {
|
|
1022
|
+
this._o[this._p] = this._lc.lerp(
|
|
1014
1023
|
fromValue,
|
|
1015
|
-
|
|
1024
|
+
toValue,
|
|
1016
1025
|
this._e(this._t / this._d)
|
|
1017
1026
|
);
|
|
1018
1027
|
this._t += dt;
|
|
1019
1028
|
if (this._t >= this._d) {
|
|
1020
|
-
this._o[this._p] =
|
|
1029
|
+
this._o[this._p] = toValue;
|
|
1021
1030
|
this.stop();
|
|
1022
1031
|
}
|
|
1023
1032
|
});
|
|
@@ -1038,16 +1047,40 @@
|
|
|
1038
1047
|
if (!this.running || !this._u) return;
|
|
1039
1048
|
this.running = false;
|
|
1040
1049
|
this._u();
|
|
1050
|
+
this._t = 0;
|
|
1041
1051
|
if (completed) {
|
|
1042
1052
|
for (const callback of this._cb) {
|
|
1043
1053
|
callback(this._o);
|
|
1044
1054
|
}
|
|
1045
1055
|
}
|
|
1046
1056
|
}
|
|
1057
|
+
/**
|
|
1058
|
+
* @param {TweenController} another
|
|
1059
|
+
* @returns {TweenController} this instance
|
|
1060
|
+
*/
|
|
1061
|
+
chain(another) {
|
|
1062
|
+
this._ch.onEnd(() => {
|
|
1063
|
+
this._cu = another.start(this._lc);
|
|
1064
|
+
});
|
|
1065
|
+
this._ch = another;
|
|
1066
|
+
return this;
|
|
1067
|
+
}
|
|
1047
1068
|
reset() {
|
|
1048
1069
|
this._cb.length = 0;
|
|
1049
1070
|
this.stop();
|
|
1050
1071
|
}
|
|
1072
|
+
relative(flag = true) {
|
|
1073
|
+
this._rel = flag;
|
|
1074
|
+
return this;
|
|
1075
|
+
}
|
|
1076
|
+
/**
|
|
1077
|
+
* Returns the current tween of the chain.
|
|
1078
|
+
*
|
|
1079
|
+
* @returns {TweenController}
|
|
1080
|
+
*/
|
|
1081
|
+
get current() {
|
|
1082
|
+
return this._cu;
|
|
1083
|
+
}
|
|
1051
1084
|
get progress() {
|
|
1052
1085
|
return this.running ? this._t / this._d : 0;
|
|
1053
1086
|
}
|
package/dist/all.min.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
(()=>{var J=Object.defineProperty;var Q=(e,t)=>{for(var s in t)J(e,s,{get:t[s],enumerable:!0})};globalThis.utils=globalThis.utils||{};globalThis.utils.global=()=>{for(let e in globalThis.utils)e!=="global"&&(globalThis[e]=globalThis.utils[e])};var D={};Q(D,{ANCHOR_BOT_LEFT:()=>bt,ANCHOR_BOT_RIGHT:()=>At,ANCHOR_CENTER:()=>Mt,ANCHOR_TOP_LEFT:()=>
|
|
2
|
-
`)}},M=class e extends g{constructor(t,s,i=Uint8Array){super(t,s,null),this._c=new i(this._w*this._h)}has(t,s){return this.get(t,s)!==0}clone(){let t=new e(this._w,this._h,this._c.constructor);return this.forEach((s,i,r)=>{t.set(s,i,r)}),t}};function X(e,t,s){return e<t?t:e>s?s:e}var I=Math.sqrt,R=Math.cos,Y=Math.sin,v=2*Math.PI,p=class{x;y;constructor(t=0,s=t){this.x=t,this.y=s}toString(){return`Vector (${this.x}, ${this.y})`}},l=e=>e instanceof p,n=(e=0,t=e)=>(l(e)&&(t=e.y,e=e.x),new p(e,t)),b=(e,t,s=t)=>l(t)?b(e,t.x,t.y):e.x===t&&e.y===s,B=(e,t,s=t)=>(l(t)?B(e,t.x,t.y):(e.x=t,e.y=s),e),A=(e,t,s=t)=>l(t)?A(e,t.x,t.y):(e.x+=t,e.y+=s,e),H=(e,t,s=t)=>l(t)?H(e,t.x,t.y):(e.x-=t,e.y-=s,e),_=(e,t,s=t)=>l(t)?_(e,t.x,t.y):(e.x*=t,e.y*=s,e),y=(e,t,s=t)=>l(t)?y(e,t.x,t.y):(e.x/=t||1,e.y/=s||1,e),tt=(e,t)=>{let s=R(t),i=Y(t);return e.x=s*e.x-i*e.y,e.y=i*e.x+s*e.y,e},et=(e,t)=>{let s=O(n(t));return H(e,_(s,2*N(e,s)))},st=(e,t)=>(O(e),_(e,t),e),U=e=>I(e.x*e.x+e.y*e.y),W=e=>e.x*e.x+e.y*e.y,O=e=>{let t=U(e);return t>0&&y(e,t),e},it=(e,t=1)=>{let s=W(e);return s>t*t&&(y(e,I(s)),_(e,t)),e},rt=(e,t)=>{let s=e.x-t.x,i=e.y-t.y;return I(s*s+i*i)},ot=(e,t)=>{let s=e.x-t.x,i=e.y-t.y;return s*s+i*i},nt=e=>Math.atan2(e.y,e.x),ht=(e,t)=>Math.atan2(t.y-e.y,t.x-e.x),N=(e,t)=>e.x*t.x+e.y*t.y,at=(e,t)=>e.x*t.y-e.y*t.x,ct=(e,t,s)=>(e.x+=(t.x-e.x)*s||0,e.y+=(t.y-e.y)*s||0,e),lt=(e=1,t=e,s=globalThis.rand||Math.random)=>{let i=s()*v,r=s()*(t-e)+e;return n(R(i)*r,Y(i)*r)},
|
|
1
|
+
(()=>{var J=Object.defineProperty;var Q=(e,t)=>{for(var s in t)J(e,s,{get:t[s],enumerable:!0})};globalThis.utils=globalThis.utils||{};globalThis.utils.global=()=>{for(let e in globalThis.utils)e!=="global"&&(globalThis[e]=globalThis.utils[e])};var D={};Q(D,{ANCHOR_BOT_LEFT:()=>bt,ANCHOR_BOT_RIGHT:()=>At,ANCHOR_CENTER:()=>Mt,ANCHOR_TOP_LEFT:()=>V,ANCHOR_TOP_RIGHT:()=>It,Actor:()=>C,BACK_IN:()=>kt,BACK_IN_OUT:()=>Pt,BACK_OUT:()=>Dt,BOUNCE_IN:()=>Z,BOUNCE_IN_OUT:()=>Yt,BOUNCE_OUT:()=>k,Camera:()=>f,DOWN:()=>wt,EASE_IN:()=>Ot,EASE_IN_OUT:()=>St,EASE_OUT:()=>Ct,ELASTIC_IN:()=>Lt,ELASTIC_IN_OUT:()=>Rt,ELASTIC_OUT:()=>Xt,Grid:()=>g,LEFT:()=>Et,LINEAR:()=>K,ONE:()=>yt,RIGHT:()=>Tt,TypedGrid:()=>M,UP:()=>mt,Vector:()=>p,ZERO:()=>F,advance:()=>q,diff:()=>G,fract:()=>z,intersection:()=>d,range:()=>$,resolve:()=>L,tween:()=>Ht,vec:()=>n,vecAbs:()=>ut,vecAdd:()=>A,vecAngle:()=>nt,vecAngleBetween:()=>ht,vecCeil:()=>ft,vecClamp:()=>xt,vecCross:()=>at,vecDist:()=>rt,vecDist2:()=>ot,vecDiv:()=>y,vecDot:()=>N,vecEq:()=>b,vecFloor:()=>pt,vecIsZero:()=>gt,vecLerp:()=>ct,vecLimit:()=>it,vecMag:()=>U,vecMag2:()=>W,vecMove:()=>dt,vecMult:()=>_,vecNorm:()=>O,vecRand:()=>lt,vecReflect:()=>et,vecRotate:()=>tt,vecRound:()=>_t,vecSet:()=>B,vecSetMag:()=>st,vecSub:()=>H,wave:()=>j});var d=(e,t,s,i,r,o,h,a)=>{let c=Math.max(e,r),P=Math.min(e+s,r+h)-c,x=Math.max(t,o),T=Math.min(t+i,o+a)-x;return[c,x,P,T]};var L=(e,t,s,i,r,o,h,a)=>{let[c,P,x,T]=d(e,t,s,i,r,o,h,a),u="",w=e,E=t;return x<T?e<r?(u="right",w=r-s):(u="left",w=r+h):t<o?(u="bottom",E=o-i):(u="top",E=o+a),{direction:u,x:w,y:E}};var f=class{_engine=null;x=0;y=0;ox=0;oy=0;width=0;height=0;rotation=0;scale=1;_shake={x:0,y:0,removeListener:null};constructor(t=null,s=0,i=0,r=null,o=null){this._engine=t||globalThis,this.ox=s,this.oy=i,this.resize(r||this._engine.WIDTH-s,o||this._engine.HEIGHT-i),this.x=this.width/2,this.y=this.height/2}resize(t,s){this.width=t,this.height=s,this._engine.emit("camera-resized",this)}start(t=!1){this._engine.push(),t&&this._engine.cliprect(this.ox,this.oy,this.width,this.height);let s=this.ox+this.width/2,i=this.oy+this.height/2;this._engine.translate(s,i),this._engine.scale(this.scale),this._engine.rotate(this.rotation),this._engine.translate(-this.x+this._shake.x,-this.y+this._shake.y)}end(){this._engine.pop()}lookAt(t,s){this.x=t,this.y=s}move(t,s){this.x+=t,this.y+=s}zoom(t){this.scale*=t}zoomTo(t){this.scale=t}rotate(t){this.rotation+=t}rotateTo(t){this.rotation=t}getWorldPoint(t,s,i={}){let r=Math.cos(-this.rotation),o=Math.sin(-this.rotation);return t=(t-this.width/2-this.ox)/this.scale,s=(s-this.height/2-this.oy)/this.scale,i.x=r*t-o*s+this.x,i.y=o*t+r*s+this.y,i}getCameraPoint(t,s,i={}){let r=Math.cos(-this.rotation),o=Math.sin(-this.rotation);return t=t-this.x,s=s-this.y,t=r*t-o*s,s=o*t+r*s,i.x=t*this.scale+this.width/2+this.ox,i.y=s*this.scale+this.height/2+this.oy,i}getBounds(){return[this.ox,this.oy,this.width,this.height]}viewing(t,s,i,r){let o=this.width/2-this.x,h=this.height/2-this.y,a=this.width/this.scale,c=this.height/this.scale;return this._engine.colrect(t,s,i,r,o,h,a,c)}shake(t=1,s=.3){this.shaking||(this._shake.removeListener=this._engine.listen("update",i=>{this._shake.x=this._engine.randi(-t,t),this._shake.y=this._engine.randi(-t,t),s-=i,s<=0&&this.unshake()}))}unshake(){this.shaking&&(this._shake.removeListener(),this._shake.removeListener=null,this._shake.x=this._shake.y=0)}get shaking(){return this._shake.removeListener!==null}};var g=class e{_w;_h;_c;constructor(t,s,i=[]){this._w=Math.max(1,~~t),this._h=Math.max(1,~~s),this._c=i}[Symbol.iterator](){let t=0;return{next:()=>({value:[this.indexToPointX(t),this.indexToPointY(t),this._c[t++]],done:t>this._c.length})}}clone(){return new e(this._w,this._h,this._c)}clear(){this.forEach((t,s)=>this.set(t,s,void 0))}get width(){return this._w}get height(){return this._h}set(t,s,i){this._c[this.pointToIndex(t,s)]=i}get(t,s){return this._c[this.pointToIndex(t,s)]}has(t,s){return this.get(t,s)!=null}check(t,s){return t>=0&&t<this._w&&s>=0&&s<this._h}get length(){return this._w*this._h}pointToIndex(t,s){return this.clampX(~~t)+this.clampY(~~s)*this._w}indexToPointX(t){return t%this._w}indexToPointY(t){return Math.floor(t/this._w)}forEach(t,s=!1){let i=s?this.length-1:0,r=s?-1:this.length,o=s?-1:1;for(;i!==r;){let h=this.indexToPointX(i),a=this.indexToPointY(i),c=this._c[i];if(t(h,a,c,this)===!1)break;i+=o}}fill(t){this.forEach((s,i)=>{this.set(s,i,t)})}clampX(t){return X(t,0,this._w-1)}clampY(t){return X(t,0,this._h-1)}toArray(){return this._c.slice()}toString(t=" ",s=!0){if(!s)return this._c.join(t);let i=[];return this.forEach((r,o,h)=>{i[o]=i[o]||"",i[o]+=h+t}),i.join(`
|
|
2
|
+
`)}},M=class e extends g{constructor(t,s,i=Uint8Array){super(t,s,null),this._c=new i(this._w*this._h)}has(t,s){return this.get(t,s)!==0}clone(){let t=new e(this._w,this._h,this._c.constructor);return this.forEach((s,i,r)=>{t.set(s,i,r)}),t}};function X(e,t,s){return e<t?t:e>s?s:e}var I=Math.sqrt,R=Math.cos,Y=Math.sin,v=2*Math.PI,p=class{x;y;constructor(t=0,s=t){this.x=t,this.y=s}toString(){return`Vector (${this.x}, ${this.y})`}},l=e=>e instanceof p,n=(e=0,t=e)=>(l(e)&&(t=e.y,e=e.x),new p(e,t)),b=(e,t,s=t)=>l(t)?b(e,t.x,t.y):e.x===t&&e.y===s,B=(e,t,s=t)=>(l(t)?B(e,t.x,t.y):(e.x=t,e.y=s),e),A=(e,t,s=t)=>l(t)?A(e,t.x,t.y):(e.x+=t,e.y+=s,e),H=(e,t,s=t)=>l(t)?H(e,t.x,t.y):(e.x-=t,e.y-=s,e),_=(e,t,s=t)=>l(t)?_(e,t.x,t.y):(e.x*=t,e.y*=s,e),y=(e,t,s=t)=>l(t)?y(e,t.x,t.y):(e.x/=t||1,e.y/=s||1,e),tt=(e,t)=>{let s=R(t),i=Y(t);return e.x=s*e.x-i*e.y,e.y=i*e.x+s*e.y,e},et=(e,t)=>{let s=O(n(t));return H(e,_(s,2*N(e,s)))},st=(e,t)=>(O(e),_(e,t),e),U=e=>I(e.x*e.x+e.y*e.y),W=e=>e.x*e.x+e.y*e.y,O=e=>{let t=U(e);return t>0&&y(e,t),e},it=(e,t=1)=>{let s=W(e);return s>t*t&&(y(e,I(s)),_(e,t)),e},rt=(e,t)=>{let s=e.x-t.x,i=e.y-t.y;return I(s*s+i*i)},ot=(e,t)=>{let s=e.x-t.x,i=e.y-t.y;return s*s+i*i},nt=e=>Math.atan2(e.y,e.x),ht=(e,t)=>Math.atan2(t.y-e.y,t.x-e.x),N=(e,t)=>e.x*t.x+e.y*t.y,at=(e,t)=>e.x*t.y-e.y*t.x,ct=(e,t,s)=>(e.x+=(t.x-e.x)*s||0,e.y+=(t.y-e.y)*s||0,e),lt=(e=1,t=e,s=globalThis.rand||Math.random)=>{let i=s()*v,r=s()*(t-e)+e;return n(R(i)*r,Y(i)*r)},ut=e=>(e.x=Math.abs(e.x),e.y=Math.abs(e.y),e),ft=e=>(e.x=Math.ceil(e.x),e.y=Math.ceil(e.y),e),pt=e=>(e.x=Math.floor(e.x),e.y=Math.floor(e.y),e),_t=e=>(e.x=Math.round(e.x),e.y=Math.round(e.y),e),xt=(e,t,s)=>(e.x<t.x&&(e.x=t.x),e.x>s.x&&(e.x=s.x),e.y<t.y&&(e.y=t.y),e.y>s.y&&(e.y=s.y),e),dt=(e,t,s=1)=>A(e,t.x*s,t.y*s),gt=e=>b(e,F),F=n(0,0),yt=n(1,1),mt=n(0,-1),Tt=n(1,0),wt=n(0,1),Et=n(-1,0);globalThis.zzfxV=1;var Mt=n(.5,.5),V=n(0,0),It=n(1,0),bt=n(0,1),At=n(1,1),C=class{sprite;pos;_o;_s;flipX=!1;flipY=!1;angle=0;opacity=1;hidden=!1;constructor(t,s,i=V){this.sprite=t,this.pos=s||n(0),this._o=n(i),this._s=n(1,1)}set x(t){this.pos.x=t}get x(){return this.pos.x}set y(t){this.pos.y=t}get y(){return this.pos.y}set anchor(t){this._o.x=t.x,this._o.y=t.y}get anchor(){return this._o}get width(){return this.sprite.width*this._s.x}get height(){return this.sprite.height*this._s.y}get scale(){return this._s}scaleTo(t,s=t){this._s.x=t,this._s.y=s}scaleBy(t,s=t){this._s.x*=t,this._s.y*=s}getBounds(t=!0){let s=this.sprite.width*(t?this._s.x:1),i=this.sprite.height*(t?this._s.y:1),r=this.pos.x-s*this.anchor.x,o=this.pos.y-i*this.anchor.y;return[r,o,s,i]}draw(t=globalThis,s=!0){this.hidden||this.opacity<=0||(s&&t.push(),this.transform(t),this.drawImage(t),s&&t.pop())}transform(t){t.translate(this.pos.x,this.pos.y),t.rotate(this.angle),t.scale((this.flipX?-1:1)*this._s.x,(this.flipY?-1:1)*this._s.y)}drawImage(t,s=!0){let i=this.anchor,r=-this.sprite.width*(this.flipX?1-i.x:i.x),o=-this.sprite.height*(this.flipY?1-i.y:i.y);s&&t.alpha(this.opacity),t.image(r,o,this.sprite)}};var G=(e,t)=>Math.abs(t-e)||0;var j=(e,t,s,i=Math.sin)=>e+(i(s)+1)/2*(t-e);var z=e=>e%1||0;var $=e=>Array.from(Array(e).keys());var q=advance=(e,t,s,i=1)=>{s&&(t.x+=s.x*i,t.y+=s.y*i),e.x+=t.x*i,e.y+=t.y*i};var m=Math.PI/2,Ht=(e,t,s,i=1,r=K)=>new S(e,t,s,i,r),K=e=>e,Ot=e=>e*e,Ct=e=>-e*(e-2),St=e=>e<.5?2*e*e:-2*e*e+4*e-1,kt=e=>e*e*e-e*Math.sin(e*Math.PI),Dt=e=>{let t=1-e;return 1-(t*t*t-t*Math.sin(t*Math.PI))},Pt=e=>{if(e<.5){let s=2*e;return .5*(s*s*s-s*Math.sin(s*Math.PI))}let t=1-(2*e-1);return .5*(1-(t*t*t-t*Math.sin(e*Math.PI)))+.5},Lt=e=>Math.sin(13*m*e)*Math.pow(2,10*(e-1)),Xt=e=>Math.sin(-13*m*(e+1))*Math.pow(2,-10*e)+1,Rt=e=>{if(e<.5){let i=Math.sin(13*m*(2*e)),r=Math.pow(2,10*(2*e-1));return .5*i*r}let t=Math.sin(-13*m*(2*e-1+1)),s=Math.pow(2,-10*(2*e-1));return .5*(t*s+2)},Z=e=>1-k(1-e),k=e=>e<4/11?121*e*e/16:e<8/11?363/40*e*e-99/10*e+17/5:e<9/10?4356/361*e*e-35442/1805*e+16061/1805:54/5*e*e-513/25*e+268/25,Yt=e=>e<.5?.5*Z(e*2):.5*k(e*2-1)+.5,S=class{running=!1;_o;_p;_x;_d;_e;_rel;_cb=[];_t=0;_u=0;_ch=this;_cu=this;_lc;constructor(t,s,i,r,o){this._o=t,this._p=s,this._x=i,this._d=r,this._e=o}start(t){this.running||this.stop(),this._cu.stop(!1),this._ch=this._cu=this;let s=this._o[this._p]||0,i=this._rel?s+this._x:this._x;return this._lc=this._lc||t||globalThis,this._u=this._lc.listen("update",r=>{this._o[this._p]=this._lc.lerp(s,i,this._e(this._t/this._d)),this._t+=r,this._t>=this._d&&(this._o[this._p]=i,this.stop())}),this.running=!0,this}onEnd(t){this._cb.push(t)}stop(t=!0){if(!(!this.running||!this._u)&&(this.running=!1,this._u(),this._t=0,t))for(let s of this._cb)s(this._o)}chain(t){return this._ch.onEnd(()=>{this._cu=t.start(this._lc)}),this._ch=t,this}reset(){this._cb.length=0,this.stop()}relative(t=!0){return this._rel=t,this}get current(){return this._cu}get progress(){return this.running?this._t/this._d:0}};globalThis.utils=Object.assign(globalThis.utils||{},D);})();
|
|
3
3
|
/*! @litecanvas/utils by Luiz Bills | MIT Licensed */
|
package/dist/tween.js
CHANGED
|
@@ -103,24 +103,30 @@
|
|
|
103
103
|
_o;
|
|
104
104
|
/** @type {string} */
|
|
105
105
|
_p;
|
|
106
|
-
/** @type {number} */
|
|
106
|
+
/** @type {number|number} */
|
|
107
107
|
_x;
|
|
108
108
|
/** @type {number} */
|
|
109
109
|
_d;
|
|
110
110
|
/** @type {(x: number) => number} */
|
|
111
111
|
_e;
|
|
112
|
+
/** @type {boolean} */
|
|
113
|
+
_rel;
|
|
112
114
|
/** @type {Function[]} */
|
|
113
115
|
_cb = [];
|
|
114
116
|
/** @type {number} */
|
|
115
117
|
_t = 0;
|
|
116
118
|
/** @type {Function} */
|
|
117
119
|
_u = 0;
|
|
120
|
+
/** @type {TweenController} */
|
|
121
|
+
_ch = this;
|
|
122
|
+
/** @type {TweenController} */
|
|
123
|
+
_cu = this;
|
|
118
124
|
/** @type {LitecanvasInstance} */
|
|
119
125
|
_lc;
|
|
120
126
|
/**
|
|
121
127
|
* @param {*} object
|
|
122
128
|
* @param {string} prop
|
|
123
|
-
* @param {number} toValue
|
|
129
|
+
* @param {number|number} toValue
|
|
124
130
|
* @param {number} duration
|
|
125
131
|
* @param {(x: number) => number} easing
|
|
126
132
|
*/
|
|
@@ -132,24 +138,27 @@
|
|
|
132
138
|
this._e = easing;
|
|
133
139
|
}
|
|
134
140
|
/**
|
|
135
|
-
*
|
|
136
|
-
* @
|
|
141
|
+
* @param {LitecanvasInstance} [engine]
|
|
142
|
+
* @returns {TweenController} this instance
|
|
137
143
|
*/
|
|
138
|
-
start(engine
|
|
144
|
+
start(engine) {
|
|
139
145
|
if (!this.running) {
|
|
140
146
|
this.stop();
|
|
141
147
|
}
|
|
148
|
+
this._cu.stop(false);
|
|
149
|
+
this._ch = this._cu = this;
|
|
142
150
|
const fromValue = this._o[this._p] || 0;
|
|
143
|
-
this.
|
|
144
|
-
this.
|
|
145
|
-
|
|
151
|
+
const toValue = this._rel ? fromValue + this._x : this._x;
|
|
152
|
+
this._lc = this._lc || engine || globalThis;
|
|
153
|
+
this._u = this._lc.listen("update", (dt) => {
|
|
154
|
+
this._o[this._p] = this._lc.lerp(
|
|
146
155
|
fromValue,
|
|
147
|
-
|
|
156
|
+
toValue,
|
|
148
157
|
this._e(this._t / this._d)
|
|
149
158
|
);
|
|
150
159
|
this._t += dt;
|
|
151
160
|
if (this._t >= this._d) {
|
|
152
|
-
this._o[this._p] =
|
|
161
|
+
this._o[this._p] = toValue;
|
|
153
162
|
this.stop();
|
|
154
163
|
}
|
|
155
164
|
});
|
|
@@ -170,16 +179,40 @@
|
|
|
170
179
|
if (!this.running || !this._u) return;
|
|
171
180
|
this.running = false;
|
|
172
181
|
this._u();
|
|
182
|
+
this._t = 0;
|
|
173
183
|
if (completed) {
|
|
174
184
|
for (const callback of this._cb) {
|
|
175
185
|
callback(this._o);
|
|
176
186
|
}
|
|
177
187
|
}
|
|
178
188
|
}
|
|
189
|
+
/**
|
|
190
|
+
* @param {TweenController} another
|
|
191
|
+
* @returns {TweenController} this instance
|
|
192
|
+
*/
|
|
193
|
+
chain(another) {
|
|
194
|
+
this._ch.onEnd(() => {
|
|
195
|
+
this._cu = another.start(this._lc);
|
|
196
|
+
});
|
|
197
|
+
this._ch = another;
|
|
198
|
+
return this;
|
|
199
|
+
}
|
|
179
200
|
reset() {
|
|
180
201
|
this._cb.length = 0;
|
|
181
202
|
this.stop();
|
|
182
203
|
}
|
|
204
|
+
relative(flag = true) {
|
|
205
|
+
this._rel = flag;
|
|
206
|
+
return this;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Returns the current tween of the chain.
|
|
210
|
+
*
|
|
211
|
+
* @returns {TweenController}
|
|
212
|
+
*/
|
|
213
|
+
get current() {
|
|
214
|
+
return this._cu;
|
|
215
|
+
}
|
|
183
216
|
get progress() {
|
|
184
217
|
return this.running ? this._t / this._d : 0;
|
|
185
218
|
}
|
package/dist/tween.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{var
|
|
1
|
+
(()=>{var h=Object.defineProperty;var p=(t,e)=>{for(var s in e)h(t,s,{get:e[s],enumerable:!0})};globalThis.utils=globalThis.utils||{};globalThis.utils.global=()=>{for(let t in globalThis.utils)t!=="global"&&(globalThis[t]=globalThis.utils[t])};var l={};p(l,{BACK_IN:()=>E,BACK_IN_OUT:()=>m,BACK_OUT:()=>x,BOUNCE_IN:()=>f,BOUNCE_IN_OUT:()=>w,BOUNCE_OUT:()=>n,EASE_IN:()=>d,EASE_IN_OUT:()=>T,EASE_OUT:()=>g,ELASTIC_IN:()=>I,ELASTIC_IN_OUT:()=>y,ELASTIC_OUT:()=>b,LINEAR:()=>c,tween:()=>_});globalThis.zzfxV=1;var r=Math.PI/2,_=(t,e,s,i=1,o=c)=>new a(t,e,s,i,o),c=t=>t,d=t=>t*t,g=t=>-t*(t-2),T=t=>t<.5?2*t*t:-2*t*t+4*t-1,E=t=>t*t*t-t*Math.sin(t*Math.PI),x=t=>{let e=1-t;return 1-(e*e*e-e*Math.sin(e*Math.PI))},m=t=>{if(t<.5){let s=2*t;return .5*(s*s*s-s*Math.sin(s*Math.PI))}let e=1-(2*t-1);return .5*(1-(e*e*e-e*Math.sin(t*Math.PI)))+.5},I=t=>Math.sin(13*r*t)*Math.pow(2,10*(t-1)),b=t=>Math.sin(-13*r*(t+1))*Math.pow(2,-10*t)+1,y=t=>{if(t<.5){let i=Math.sin(13*r*(2*t)),o=Math.pow(2,10*(2*t-1));return .5*i*o}let e=Math.sin(-13*r*(2*t-1+1)),s=Math.pow(2,-10*(2*t-1));return .5*(e*s+2)},f=t=>1-n(1-t),n=t=>t<4/11?121*t*t/16:t<8/11?363/40*t*t-99/10*t+17/5:t<9/10?4356/361*t*t-35442/1805*t+16061/1805:54/5*t*t-513/25*t+268/25,w=t=>t<.5?.5*f(t*2):.5*n(t*2-1)+.5,a=class{running=!1;_o;_p;_x;_d;_e;_rel;_cb=[];_t=0;_u=0;_ch=this;_cu=this;_lc;constructor(e,s,i,o,u){this._o=e,this._p=s,this._x=i,this._d=o,this._e=u}start(e){this.running||this.stop(),this._cu.stop(!1),this._ch=this._cu=this;let s=this._o[this._p]||0,i=this._rel?s+this._x:this._x;return this._lc=this._lc||e||globalThis,this._u=this._lc.listen("update",o=>{this._o[this._p]=this._lc.lerp(s,i,this._e(this._t/this._d)),this._t+=o,this._t>=this._d&&(this._o[this._p]=i,this.stop())}),this.running=!0,this}onEnd(e){this._cb.push(e)}stop(e=!0){if(!(!this.running||!this._u)&&(this.running=!1,this._u(),this._t=0,e))for(let s of this._cb)s(this._o)}chain(e){return this._ch.onEnd(()=>{this._cu=e.start(this._lc)}),this._ch=e,this}reset(){this._cb.length=0,this.stop()}relative(e=!0){return this._rel=e,this}get current(){return this._cu}get progress(){return this.running?this._t/this._d:0}};globalThis.utils=Object.assign(globalThis.utils||{},l);})();
|
package/package.json
CHANGED
package/src/tween/README.md
CHANGED
|
@@ -57,7 +57,7 @@ function draw() {
|
|
|
57
57
|
|
|
58
58
|
### TweenController#start()
|
|
59
59
|
|
|
60
|
-
Starts the animation
|
|
60
|
+
Starts the animation.
|
|
61
61
|
|
|
62
62
|
Syntax: `.start(engine?: LitecanvasInstance): TweenController`
|
|
63
63
|
|
|
@@ -85,6 +85,48 @@ function init () {
|
|
|
85
85
|
}
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
+
### TweenController#relative()
|
|
89
|
+
|
|
90
|
+
If enabled (`flag = true`) the tween we animate from a value to another relative value.
|
|
91
|
+
|
|
92
|
+
Syntax: `.relative(flag?: boolean = true): void`
|
|
93
|
+
|
|
94
|
+
```js
|
|
95
|
+
const obj = { x: 0 }
|
|
96
|
+
|
|
97
|
+
// DEFAULT
|
|
98
|
+
// this tween animates the obj.x to 100
|
|
99
|
+
tween(obj, "x", 100)
|
|
100
|
+
|
|
101
|
+
// this tween animates the obj.x value to -100
|
|
102
|
+
tween(obj, "x", -100)
|
|
103
|
+
|
|
104
|
+
// RELATIVE
|
|
105
|
+
// this tween animates the obj.x increasing +100
|
|
106
|
+
tween(obj, "x", 100).relative()
|
|
107
|
+
|
|
108
|
+
// this tween animates the obj.x decreasing -100
|
|
109
|
+
tween(obj, "x", -100).relative()
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### TweenController#chain()
|
|
113
|
+
|
|
114
|
+
Make another tween start right after this tween ends.
|
|
115
|
+
|
|
116
|
+
Syntax: `.relative(another: TweenController): TweenController`
|
|
117
|
+
|
|
118
|
+
```js
|
|
119
|
+
const obj = { x: 0, angle: 0 }
|
|
120
|
+
|
|
121
|
+
const moveRight = tween(obj, "x", 100, 1).relative()
|
|
122
|
+
const moveLeft = tween(obj, "x", -100, 1).relative()
|
|
123
|
+
const moveLeft = tween(obj, "angle", Math.PI, 1).relative()
|
|
124
|
+
|
|
125
|
+
// move 100px to right, move 100px to left and rotate
|
|
126
|
+
moveRight.chain(moveLeft)
|
|
127
|
+
moveRight.start()
|
|
128
|
+
```
|
|
129
|
+
|
|
88
130
|
### TweenController#onEnd()
|
|
89
131
|
|
|
90
132
|
Enqueues a callback to be executed when the animation finishes.
|
package/src/tween/index.js
CHANGED
|
@@ -2,6 +2,14 @@ import "litecanvas"
|
|
|
2
2
|
|
|
3
3
|
const HALF_PI = Math.PI / 2
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* @param {any} object
|
|
7
|
+
* @param {string} prop
|
|
8
|
+
* @param {number|number} toValue
|
|
9
|
+
* @param {number} [duration]
|
|
10
|
+
* @param {(n: number) => number} [easing]
|
|
11
|
+
* @returns {TweenController}
|
|
12
|
+
*/
|
|
5
13
|
export const tween = (object, prop, toValue, duration = 1, easing = LINEAR) => {
|
|
6
14
|
return new TweenController(object, prop, toValue, duration, easing)
|
|
7
15
|
}
|
|
@@ -74,25 +82,32 @@ class TweenController {
|
|
|
74
82
|
_o
|
|
75
83
|
/** @type {string} */
|
|
76
84
|
_p
|
|
77
|
-
/** @type {number} */
|
|
85
|
+
/** @type {number|number} */
|
|
78
86
|
_x
|
|
79
87
|
/** @type {number} */
|
|
80
88
|
_d
|
|
81
89
|
/** @type {(x: number) => number} */
|
|
82
90
|
_e
|
|
91
|
+
/** @type {boolean} */
|
|
92
|
+
_rel
|
|
93
|
+
|
|
83
94
|
/** @type {Function[]} */
|
|
84
95
|
_cb = []
|
|
85
96
|
/** @type {number} */
|
|
86
97
|
_t = 0
|
|
87
98
|
/** @type {Function} */
|
|
88
99
|
_u = 0
|
|
100
|
+
/** @type {TweenController} */
|
|
101
|
+
_ch = this
|
|
102
|
+
/** @type {TweenController} */
|
|
103
|
+
_cu = this
|
|
89
104
|
/** @type {LitecanvasInstance} */
|
|
90
105
|
_lc
|
|
91
106
|
|
|
92
107
|
/**
|
|
93
108
|
* @param {*} object
|
|
94
109
|
* @param {string} prop
|
|
95
|
-
* @param {number} toValue
|
|
110
|
+
* @param {number|number} toValue
|
|
96
111
|
* @param {number} duration
|
|
97
112
|
* @param {(x: number) => number} easing
|
|
98
113
|
*/
|
|
@@ -105,26 +120,31 @@ class TweenController {
|
|
|
105
120
|
}
|
|
106
121
|
|
|
107
122
|
/**
|
|
108
|
-
*
|
|
109
|
-
* @
|
|
123
|
+
* @param {LitecanvasInstance} [engine]
|
|
124
|
+
* @returns {TweenController} this instance
|
|
110
125
|
*/
|
|
111
|
-
start(engine
|
|
126
|
+
start(engine) {
|
|
112
127
|
if (!this.running) {
|
|
113
128
|
this.stop()
|
|
114
129
|
}
|
|
115
130
|
|
|
131
|
+
this._cu.stop(false)
|
|
132
|
+
this._ch = this._cu = this
|
|
133
|
+
|
|
116
134
|
const fromValue = this._o[this._p] || 0
|
|
135
|
+
const toValue = this._rel ? fromValue + this._x : this._x
|
|
117
136
|
|
|
118
|
-
this._lc = engine
|
|
119
|
-
|
|
120
|
-
|
|
137
|
+
this._lc = this._lc || engine || globalThis
|
|
138
|
+
|
|
139
|
+
this._u = this._lc.listen("update", (dt) => {
|
|
140
|
+
this._o[this._p] = this._lc.lerp(
|
|
121
141
|
fromValue,
|
|
122
|
-
|
|
142
|
+
toValue,
|
|
123
143
|
this._e(this._t / this._d)
|
|
124
144
|
)
|
|
125
145
|
this._t += dt
|
|
126
146
|
if (this._t >= this._d) {
|
|
127
|
-
this._o[this._p] =
|
|
147
|
+
this._o[this._p] = toValue
|
|
128
148
|
this.stop()
|
|
129
149
|
}
|
|
130
150
|
})
|
|
@@ -151,6 +171,7 @@ class TweenController {
|
|
|
151
171
|
this.running = false
|
|
152
172
|
|
|
153
173
|
this._u()
|
|
174
|
+
this._t = 0
|
|
154
175
|
|
|
155
176
|
if (completed) {
|
|
156
177
|
for (const callback of this._cb) {
|
|
@@ -159,11 +180,37 @@ class TweenController {
|
|
|
159
180
|
}
|
|
160
181
|
}
|
|
161
182
|
|
|
183
|
+
/**
|
|
184
|
+
* @param {TweenController} another
|
|
185
|
+
* @returns {TweenController} this instance
|
|
186
|
+
*/
|
|
187
|
+
chain(another) {
|
|
188
|
+
this._ch.onEnd(() => {
|
|
189
|
+
this._cu = another.start(this._lc)
|
|
190
|
+
})
|
|
191
|
+
this._ch = another
|
|
192
|
+
return this
|
|
193
|
+
}
|
|
194
|
+
|
|
162
195
|
reset() {
|
|
163
196
|
this._cb.length = 0
|
|
164
197
|
this.stop()
|
|
165
198
|
}
|
|
166
199
|
|
|
200
|
+
relative(flag = true) {
|
|
201
|
+
this._rel = flag
|
|
202
|
+
return this
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Returns the current tween of the chain.
|
|
207
|
+
*
|
|
208
|
+
* @returns {TweenController}
|
|
209
|
+
*/
|
|
210
|
+
get current() {
|
|
211
|
+
return this._cu
|
|
212
|
+
}
|
|
213
|
+
|
|
167
214
|
get progress() {
|
|
168
215
|
return this.running ? this._t / this._d : 0
|
|
169
216
|
}
|