Added Track start and end angle functions

+Added Track.getStartAngleXZ and .getEndAngleXZ function and implemented them in its child classes
This commit is contained in:
izawartka 2025-07-10 22:36:33 +02:00
parent ccbc50054c
commit 6be4503b93
4 changed files with 44 additions and 0 deletions

View File

@ -22,6 +22,14 @@ export default class BezierTrack extends Track
});
}
getStartAngleXZ() {
return this.points.start.atanY(this.points.control1);
}
getEndAngleXZ() {
return this.points.control2.atanY(this.points.end);
}
static fromText(text) {
const values = text.split(";");
const track = new BezierTrack(

View File

@ -19,6 +19,20 @@ export default class PointTrack extends Track
});
}
getStartAngleXZ() {
return AngleHelper.degToRad(this.rot.y);
}
getEndAngleXZ() {
const startAngle = AngleHelper.degToRad(this.rot.y);
if(this.r === 0) {
return startAngle;
}
return startAngle - this.len / this.r;
}
static _getRotLen(start, end, r) {
// TODO: include track slope in calculations
const pointsAngle = start.atanY(end);

View File

@ -16,6 +16,20 @@ export default class StandardTrack extends Track
this._calcPoints();
}
getStartAngleXZ() {
return AngleHelper.degToRad(this.rot.y);
}
getEndAngleXZ() {
const startAngle = AngleHelper.degToRad(this.rot.y);
if(this.r === 0) {
return startAngle
}
return startAngle - this.len / this.r;
}
static fromText(text) {
const values = text.split(";");
const track = new StandardTrack(

View File

@ -34,6 +34,14 @@ export default class Track extends SceneryObject {
});
}
getStartAngleXZ() {
throw new Error("getStartAngleXZ() must be implemented in subclass");
}
getEndAngleXZ() {
throw new Error("getEndAngleXZ() must be implemented in subclass");
}
static slopesFromText(text) {
return text.split(",", 2);
}