UNPKG

@downpourdigital/physics

Version:

Animation physics!

2 lines (1 loc) 3.42 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("./cf94038a.js");class s extends t.Stepper{constructor(s={}){var{value:e=0,velocity:i=0,mass:a=1,restDelta:h=5e-4}=s;super(t.__rest(s,["value","velocity","mass","restDelta"])),this.mass=a,this.restDelta=h,this.state=[e,i],this.initial=e}computeForce(t){return 0}checkResting(){return Math.abs(this.state[1])<this.restDelta}get(){return this.state[0]}getVelocity(){return this.state[1]}setVelocity(t){this.state[1]=t}resetTo(t){this.state[0]=t,this.state[1]=0}reset(){this.resetTo(this.initial)}}class e extends s{integrate(t){const s=t/1e3,e=this.computeForce(this.state)/this.mass,i=this.state[1]+e*s;this.state[0]+=i*s,this.state[1]=i,this.isResting=this.checkResting(),this.isResting&&(this.state[1]=0)}}function i(t,s,e,i){return-e*(t[0]-s)-i*t[1]}class a extends s{integrate(t){const s=t/1e3,e=this.evaluate(0,[0,0]),i=this.evaluate(.5*s,e),a=this.evaluate(.5*s,i),h=this.evaluate(s,a),r=1/6*(e[0]+2*(i[0]+a[0])+h[0]),n=1/6*(e[1]+2*(i[1]+a[1])+h[1]),o=this.state[1]+n*s;this.state[0]+=r*s,this.state[1]=o,this.isResting=this.checkResting(),this.isResting&&(this.state[1]=0)}evaluate(t,s){const e=[this.state[0]+s[0]*t,this.state[1]+s[1]*t];return[e[1],this.computeForce(e)/this.mass]}}exports.World=t.World,exports.defaultWorld=t.defaultWorld,exports.EulerSpring=class extends e{constructor(s={}){var{stiffness:e=250,damping:i=15}=s;super(t.__rest(s,["stiffness","damping"])),this.target=0,this.stiffness=e,this.damping=i,this.target=this.state[0]}step(t){super.step(t),this.isResting&&(this.state[0]=this.target)}computeForce(t){return i(t,this.target,this.stiffness,this.damping)}checkResting(){return Math.abs(this.state[1])<this.restDelta&&Math.abs(this.state[0]-this.target)<this.restDelta}set(t){t!==this.target&&(this.target=t,this.isResting=!1)}resetTo(t){super.resetTo(t),this.target=t}},exports.LinearMotion=class{constructor({value:s=0,speed:e=1,autoStep:i=!0}={}){this.target=0,this.initial=0,this.position=0,this.lastFrame=0,this.isResting=!1,this.initial=s,this.speed=e,this.reset(),i&&t.defaultWorld.add(this)}step(t){if(this.target!==this.position){const s=(t-this.lastFrame)/1e3,e=this.target-this.position;this.position+=Math.min(Math.abs(e),this.speed*s)*Math.sign(e),this.isResting=!1}else this.isResting=!0;this.lastFrame=t}get(){return this.position}set(t){this.target=t}reset(){this.resetTo(this.initial)}resetTo(t){this.position=t,this.target=t}stop(){t.defaultWorld.remove(this)}},exports.Passthrough=class{constructor({value:s=0,autoStep:e=!0}={}){this.isResting=!1,this.initial=s,this.reset(),e&&t.defaultWorld.add(this)}step(){this.isResting=this.position===this.target,this.position=this.target}set(t){this.target=t}get(){return this.position}reset(){this.resetTo(this.initial)}resetTo(t){this.target=t,this.position=t}stop(){t.defaultWorld.remove(this)}},exports.RK4Spring=class extends a{constructor(s={}){var{stiffness:e=250,damping:i=15}=s;super(t.__rest(s,["stiffness","damping"])),this.target=0,this.stiffness=e,this.damping=i,this.target=this.state[0]}step(t){super.step(t),this.isResting&&(this.state[0]=this.target)}computeForce(t){return i(t,this.target,this.stiffness,this.damping)}checkResting(){return Math.abs(this.state[1])<this.restDelta&&Math.abs(this.state[0]-this.target)<this.restDelta}set(t){t!==this.target&&(this.target=t,this.isResting=!1)}resetTo(t){super.resetTo(t),this.target=t}};