From 1f806005aab448fecc6dccf954f9c616093128f5 Mon Sep 17 00:00:00 2001
From: dominik-korsa <29484605+dominik-korsa@users.noreply.github.com>
Date: Thu, 24 Jul 2025 22:36:03 +0200
Subject: [PATCH] Remove TrackSource.BEZIER and create TrackShape enum
---
src/components/map/ObjectsRenderQueue.js | 2 +-
src/components/map/object-renderers/TrackRenderer.js | 5 +++--
.../map/track-hover-info/TrackHoverInfoConsts.js | 8 ++++++--
.../map/track-hover-info/TrackHoverInfoPopup.js | 5 +++--
src/helpers/constants.js | 2 +-
src/model/route.js | 2 +-
src/model/switch.js | 2 +-
src/model/tracks/bezier-track.js | 6 ++++--
src/model/tracks/standard-track.js | 9 +++++----
src/model/tracks/track.js | 11 +++++++++--
10 files changed, 34 insertions(+), 18 deletions(-)
diff --git a/src/components/map/ObjectsRenderQueue.js b/src/components/map/ObjectsRenderQueue.js
index 985cd30..91d1feb 100644
--- a/src/components/map/ObjectsRenderQueue.js
+++ b/src/components/map/ObjectsRenderQueue.js
@@ -42,7 +42,7 @@ const ObjectRendererQueue = [
{
'name': 'isolations-ids',
'category': ['tracks', 'switches'],
- 'trackSources': [TrackSource.STANDARD, TrackSource.BEZIER],
+ 'trackSources': [TrackSource.STANDARD],
'renderer': IsolationIdRenderer,
'cond': (layers) => layers['isolations-ids']
},
diff --git a/src/components/map/object-renderers/TrackRenderer.js b/src/components/map/object-renderers/TrackRenderer.js
index 39da0a9..1827214 100644
--- a/src/components/map/object-renderers/TrackRenderer.js
+++ b/src/components/map/object-renderers/TrackRenderer.js
@@ -141,13 +141,14 @@ function getTrackColor(object, trackColorMode, gradientDef) {
case "type":
switch (object.source) {
case TrackSource.STANDARD:
+ if (object.type === 'BezierTrack') {
+ return modeDef.options['bezier-track'][0];
+ }
return modeDef.options['standard-track'][0];
case TrackSource.SWITCH:
return modeDef.options['point-track'][0];
case TrackSource.ROUTE:
return modeDef.options['route-track'][0];
- case TrackSource.BEZIER:
- return modeDef.options['bezier-track'][0];
default:
return modeDef.options[modeDef.optionDefault][0];
}
diff --git a/src/components/map/track-hover-info/TrackHoverInfoConsts.js b/src/components/map/track-hover-info/TrackHoverInfoConsts.js
index 63a2bb0..c520047 100644
--- a/src/components/map/track-hover-info/TrackHoverInfoConsts.js
+++ b/src/components/map/track-hover-info/TrackHoverInfoConsts.js
@@ -1,5 +1,5 @@
import { ElectrificationStatus } from "../../../model/electrification-status";
-import {TrackSource} from "../../../model/tracks/track";
+import {TrackShape, TrackSource} from "../../../model/tracks/track";
const TrackHoverInfoConsts = {
electrification: {
@@ -11,8 +11,12 @@ const TrackHoverInfoConsts = {
source: {
[TrackSource.STANDARD]: 'Standard track',
[TrackSource.SWITCH]: 'Switch track',
- [TrackSource.BEZIER]: 'Bezier track',
[TrackSource.ROUTE]: 'Route track',
+ },
+ shape: {
+ [TrackShape.STRAIGHT]: 'Straight',
+ [TrackShape.ARC]: 'Circle arc',
+ [TrackShape.BEZIER]: 'Bézier curve',
}
};
diff --git a/src/components/map/track-hover-info/TrackHoverInfoPopup.js b/src/components/map/track-hover-info/TrackHoverInfoPopup.js
index 2042621..c8e1262 100644
--- a/src/components/map/track-hover-info/TrackHoverInfoPopup.js
+++ b/src/components/map/track-hover-info/TrackHoverInfoPopup.js
@@ -21,6 +21,7 @@ export default function TrackHoverInfoPopup(props) {
+
@@ -36,8 +37,8 @@ function InfoPopupSwitchItems(props) {
if (!track.switch) return null;
return <>
-
-
+
+
>
}
diff --git a/src/helpers/constants.js b/src/helpers/constants.js
index 439e21b..79ad795 100644
--- a/src/helpers/constants.js
+++ b/src/helpers/constants.js
@@ -152,7 +152,7 @@ const Constants = {
options: {
'standard-track': ['#00a', 'Standard track'],
'point-track': ['#0a0', 'Switch track'],
- 'bezier-track': ['#aa8', 'Bezier track'],
+ 'bezier-track': ['#aa8', 'Bézier track'],
'route-track': ['#a6d', 'Route track'],
}
},
diff --git a/src/model/route.js b/src/model/route.js
index 5034f44..f26e541 100644
--- a/src/model/route.js
+++ b/src/model/route.js
@@ -68,7 +68,7 @@ export default class Route extends SceneryObject {
trackLength *= (trackRadius / radius);
}
- return StandardTrack.route(
+ return StandardTrack.createRouteTrack(
trackIds[index],
startPoint,
rotDeg,
diff --git a/src/model/switch.js b/src/model/switch.js
index 4ca5733..9ccc11b 100644
--- a/src/model/switch.js
+++ b/src/model/switch.js
@@ -153,7 +153,7 @@ export default class Switch extends SceneryObject {
const connections = this._createTrackConnections(switchDef, trackDef, ids);
const { startPos, rotationDeg } = CurveHelper.transformStart(this.pos, this.rot, trackDef.pos, trackDef.rot);
- const track = StandardTrack.switch(
+ const track = StandardTrack.createSwitchTrack(
trackId,
startPos,
rotationDeg,
diff --git a/src/model/tracks/bezier-track.js b/src/model/tracks/bezier-track.js
index f34740f..841d765 100644
--- a/src/model/tracks/bezier-track.js
+++ b/src/model/tracks/bezier-track.js
@@ -1,4 +1,4 @@
-import Track, {TrackSource} from "./track";
+import Track, {TrackShape, TrackSource} from "./track";
import Vector3 from "../vector3";
import TrackConnection, {TrackConnectionEnd} from "../track-connection";
@@ -20,7 +20,9 @@ export default class BezierTrack extends Track
Vector3.zero(), // rotation
length,
0, // radius
- connections, id_station, start_slope, end_slope, id_isolation, prefab_name, maxspeed, derailspeed, TrackSource.BEZIER,
+ connections, id_station, start_slope, end_slope, id_isolation, prefab_name, maxspeed, derailspeed,
+ TrackSource.STANDARD,
+ TrackShape.BEZIER,
);
Object.assign(this.points, {
diff --git a/src/model/tracks/standard-track.js b/src/model/tracks/standard-track.js
index 8b00ccb..9c96550 100644
--- a/src/model/tracks/standard-track.js
+++ b/src/model/tracks/standard-track.js
@@ -1,5 +1,5 @@
import AngleHelper from "../../helpers/angleHelper";
-import Track, {TrackSource} from "./track";
+import Track, {TrackShape, TrackSource} from "./track";
import Vector3 from "../vector3";
import TrackConnection, {TrackConnectionEnd} from "../track-connection";
import {ElectrificationStatus} from "../electrification-status";
@@ -14,7 +14,8 @@ export default class StandardTrack extends Track {
};
constructor(id, start, rot, len, r, connections, id_station, start_slope, end_slope, id_isolation, prefab_name, maxspeed, derailspeed, source) {
- super(id, start, rot, len, r, connections, id_station, start_slope, end_slope, id_isolation, prefab_name, maxspeed, derailspeed, source);
+ const shape = r === 0 ? TrackShape.STRAIGHT : TrackShape.ARC;
+ super(id, start, rot, len, r, connections, id_station, start_slope, end_slope, id_isolation, prefab_name, maxspeed, derailspeed, source, shape);
this._calcPoints();
}
@@ -80,7 +81,7 @@ export default class StandardTrack extends Track {
super.applyObject(scenery);
}
- static route(id, start, rot, len, r, connections, electrified, route) {
+ static createRouteTrack(id, start, rot, len, r, connections, electrified, route) {
const track = new StandardTrack(
id, start, rot, len, r,
connections,
@@ -98,7 +99,7 @@ export default class StandardTrack extends Track {
return track;
}
- static switch(id, start, rot, len, r, connections, start_slope, end_slope, object) {
+ static createSwitchTrack(id, start, rot, len, r, connections, start_slope, end_slope, object) {
const track = new StandardTrack(
id, start, rot, len, r,
connections,
diff --git a/src/model/tracks/track.js b/src/model/tracks/track.js
index 276e38e..f1064d7 100644
--- a/src/model/tracks/track.js
+++ b/src/model/tracks/track.js
@@ -4,11 +4,16 @@ import {TrackConnectionEnd} from "../track-connection";
export const TrackSource = {
STANDARD: Symbol("TrackSource.STANDARD"),
- BEZIER: Symbol("TrackSource.BEZIER"),
SWITCH: Symbol("TrackSource.SWITCH"),
ROUTE: Symbol("TrackSource.ROUTE"),
};
+export const TrackShape = {
+ STRAIGHT: Symbol("TrackShape.STRAIGHT"),
+ ARC: Symbol("TrackShape.ARC"),
+ BEZIER: Symbol("TrackShape.BEZIER"),
+};
+
export default class Track extends SceneryObject {
len;
r;
@@ -27,8 +32,9 @@ export default class Track extends SceneryObject {
electrificationStatus = ElectrificationStatus.NOT_CHECKED;
hasNEVP = false;
source;
+ shape;
- constructor(id, pos, rot, len, r, connections, id_station, start_slope, end_slope, id_isolation, prefab_name, maxspeed, derailspeed, source) {
+ constructor(id, pos, rot, len, r, connections, id_station, start_slope, end_slope, id_isolation, prefab_name, maxspeed, derailspeed, source, shape) {
super(id, pos, rot);
Object.assign(this, {
len, r,
@@ -39,6 +45,7 @@ export default class Track extends SceneryObject {
prefab_name,
maxspeed, derailspeed,
source,
+ shape,
});
}