@animech-public/playcanvas
Version:
PlayCanvas WebGL game engine
2 lines (1 loc) • 1.09 kB
JavaScript
import{CURVE_SMOOTHSTEP as t}from"./constants.js";import{CurveEvaluator as e}from"./curve-evaluator.js";class s{constructor(s){if(this.keys=[],this.type=t,this.tension=.5,this._eval=new e(this),s)for(let t=0;t<s.length-1;t+=2)this.keys.push([s[t],s[t+1]]);this.sort()}get length(){return this.keys.length}add(t,e){const s=this.keys,n=s.length;let r=0;for(;r<n&&!(s[r][0]>t);r++);const i=[t,e];return this.keys.splice(r,0,i),i}get(t){return this.keys[t]}sort(){this.keys.sort(((t,e)=>t[0]-e[0]))}value(t){return this._eval.evaluate(t,!0)}closest(t){const e=this.keys,s=e.length;let n=2,r=null;for(let i=0;i<s;i++){const s=Math.abs(t-e[i][0]);if(!(n>=s))break;n=s,r=e[i]}return r}clone(){const t=new this.constructor;return t.keys=this.keys.map((t=>[...t])),t.type=this.type,t.tension=this.tension,t}quantize(t){t=Math.max(t,2);const e=new Float32Array(t),s=1/(t-1);e[0]=this._eval.evaluate(0,!0);for(let n=1;n<t;n++)e[n]=this._eval.evaluate(s*n);return e}quantizeClamped(t,e,s){const n=this.quantize(t);for(let t=0;t<n.length;++t)n[t]=Math.min(s,Math.max(e,n[t]));return n}}export{s as Curve};