This commit is contained in:
Andras Schmelczer 2026-08-23 10:27:53 +01:00
commit 82e092ba55
2 changed files with 373 additions and 539 deletions

View file

@ -0,0 +1,22 @@
import { Circle } from 'shared';
import { LinearInterpolator } from './linear-interpolator';
import { Vec2Interpolator } from './vec2-interpolator';
export class CircleInterpolator {
private center: Vec2Interpolator;
private radius: LinearInterpolator;
constructor(currentValue: Circle) {
this.center = new Vec2Interpolator(currentValue.center);
this.radius = new LinearInterpolator(currentValue.radius);
}
public addFrame(value: Circle, rateOfChange: Circle) {
this.center.addFrame(value.center, rateOfChange.center);
this.radius.addFrame(value.radius, rateOfChange.radius);
}
public getValue(deltaTime: number): Circle {
return new Circle(this.center.getValue(deltaTime), this.radius.getValue(deltaTime));
}
}

View file

@ -0,0 +1,22 @@
import { vec2 } from 'gl-matrix';
import { LinearInterpolator } from './linear-interpolator';
// Indexed access, not .x/.y, so it never depends on the vec2 prototype plugin.
export class Vec2Interpolator {
private x: LinearInterpolator;
private y: LinearInterpolator;
constructor(currentValue: vec2) {
this.x = new LinearInterpolator(currentValue[0]);
this.y = new LinearInterpolator(currentValue[1]);
}
public addFrame(value: vec2, rateOfChange: vec2) {
this.x.addFrame(value[0], rateOfChange[0]);
this.y.addFrame(value[1], rateOfChange[1]);
}
public getValue(deltaTime: number): vec2 {
return vec2.fromValues(this.x.getValue(deltaTime), this.y.getValue(deltaTime));
}
}