1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- import { Vector3 } from "../Maths/math.vector.js";
- /**
- * A cursor which tracks a point on a path
- */
- export class PathCursor {
- /**
- * Initializes the path cursor
- * @param _path The path to track
- */
- constructor(_path) {
- this._path = _path;
- /**
- * Stores path cursor callbacks for when an onchange event is triggered
- */
- this._onchange = new Array();
- /**
- * The value of the path cursor
- */
- this.value = 0;
- /**
- * The animation array of the path cursor
- */
- this.animations = [];
- }
- /**
- * Gets the cursor point on the path
- * @returns A point on the path cursor at the cursor location
- */
- getPoint() {
- const point = this._path.getPointAtLengthPosition(this.value);
- return new Vector3(point.x, 0, point.y);
- }
- /**
- * Moves the cursor ahead by the step amount
- * @param step The amount to move the cursor forward
- * @returns This path cursor
- */
- moveAhead(step = 0.002) {
- this.move(step);
- return this;
- }
- /**
- * Moves the cursor behind by the step amount
- * @param step The amount to move the cursor back
- * @returns This path cursor
- */
- moveBack(step = 0.002) {
- this.move(-step);
- return this;
- }
- /**
- * Moves the cursor by the step amount
- * If the step amount is greater than one, an exception is thrown
- * @param step The amount to move the cursor
- * @returns This path cursor
- */
- move(step) {
- if (Math.abs(step) > 1) {
- // eslint-disable-next-line no-throw-literal
- throw "step size should be less than 1.";
- }
- this.value += step;
- this._ensureLimits();
- this._raiseOnChange();
- return this;
- }
- /**
- * Ensures that the value is limited between zero and one
- * @returns This path cursor
- */
- _ensureLimits() {
- while (this.value > 1) {
- this.value -= 1;
- }
- while (this.value < 0) {
- this.value += 1;
- }
- return this;
- }
- /**
- * Runs onchange callbacks on change (used by the animation engine)
- * @returns This path cursor
- */
- _raiseOnChange() {
- this._onchange.forEach((f) => f(this));
- return this;
- }
- /**
- * Executes a function on change
- * @param f A path cursor onchange callback
- * @returns This path cursor
- */
- onchange(f) {
- this._onchange.push(f);
- return this;
- }
- }
- //# sourceMappingURL=pathCursor.js.map
|