Spaces:
Running
Running
File size: 1,220 Bytes
2b7aae2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | import { Vector2 } from '../../math/Vector2.js';
import { Curve } from '../core/Curve.js';
class LineCurve extends Curve {
constructor(v1 = new Vector2(), v2 = new Vector2()) {
super();
this.type = 'LineCurve';
this.v1 = v1;
this.v2 = v2;
}
getPoint(t, optionalTarget = new Vector2()) {
const point = optionalTarget;
if (t === 1) {
point.copy(this.v2);
} else {
point.copy(this.v2).sub(this.v1);
point.multiplyScalar(t).add(this.v1);
}
return point;
}
// Line curve is linear, so we can overwrite default getPointAt
getPointAt(u, optionalTarget) {
return this.getPoint(u, optionalTarget);
}
getTangent(t, optionalTarget) {
const tangent = optionalTarget || new Vector2();
tangent.copy(this.v2).sub(this.v1).normalize();
return tangent;
}
copy(source) {
super.copy(source);
this.v1.copy(source.v1);
this.v2.copy(source.v2);
return this;
}
toJSON() {
const data = super.toJSON();
data.v1 = this.v1.toArray();
data.v2 = this.v2.toArray();
return data;
}
fromJSON(json) {
super.fromJSON(json);
this.v1.fromArray(json.v1);
this.v2.fromArray(json.v2);
return this;
}
}
LineCurve.prototype.isLineCurve = true;
export { LineCurve };
|