UNPKG

@osbjs/osbjs

Version:

a minimalist osu! storyboarding framework

42 lines (41 loc) 1.43 kB
"use strict"; 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;