@downpourdigital/physics
Version:
Animation physics!
2 lines (1 loc) • 3.29 kB
JavaScript
import{S as t,_ as s,d as e}from"./96927387.js";export{W as World,d as defaultWorld}from"./96927387.js";class i extends t{constructor(t={}){var{value:e=0,velocity:i=0,mass:a=1,restDelta:h=5e-4}=t;super(s(t,["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 a extends i{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 h(t,s,e,i){return-e*(t[0]-s)-i*t[1]}class r extends a{constructor(t={}){var{stiffness:e=250,damping:i=15}=t;super(s(t,["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 h(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}}class n extends i{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]}}class o extends n{constructor(t={}){var{stiffness:e=250,damping:i=15}=t;super(s(t,["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 h(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}}class g{constructor({value:t=0,speed:s=1,autoStep:i=!0}={}){this.target=0,this.initial=0,this.position=0,this.lastFrame=0,this.isResting=!1,this.initial=t,this.speed=s,this.reset(),i&&e.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(){e.remove(this)}}class c{constructor({value:t=0,autoStep:s=!0}={}){this.isResting=!1,this.initial=t,this.reset(),s&&e.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(){e.remove(this)}}export{r as EulerSpring,g as LinearMotion,c as Passthrough,o as RK4Spring};