@osbjs/osbjs
Version:
a minimalist osu! storyboarding framework
42 lines (41 loc) • 1.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BezierCurveGroup = void 0;
const Curve_1 = require("./Curve");
class BezierCurveGroup extends Curve_1.Curve {
constructor(curves) {
super();
this.curves = curves;
this.startPosition = curves[0].startPosition;
this.endPosition = curves[curves.length - 1].endPosition;
this.length = this._initLength();
}
_initLength() {
let length = 0;
this.curves.forEach((c) => {
length += c.length;
});
return length;
}
getPositionAtDistance(distance) {
for (const curve of this.curves) {
if (distance < curve.length)
return curve.getPositionAtDistance(distance);
distance -= curve.length;
}
return this.curves[this.curves.length - 1].endPosition;
}
getPositionAtDelta(delta) {
let length = this.length;
let d = delta;
for (let curveIndex = 0; curveIndex < this.curves.length; ++curveIndex) {
let curve = this.curves[curveIndex];
let curveDelta = curve.length / length;
if (d < curveDelta)
return curve.getPositionAtDelta(d / curveDelta);
d -= curveDelta;
}
return this.endPosition;
}
}
exports.BezierCurveGroup = BezierCurveGroup;