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, }); }