Remove TrackSource.BEZIER and create TrackShape enum

This commit is contained in:
dominik-korsa 2025-07-24 22:36:03 +02:00
parent f52800c81d
commit 1f806005aa
No known key found for this signature in database
GPG Key ID: 5A24D76EE0A30974
10 changed files with 34 additions and 18 deletions

View File

@ -42,7 +42,7 @@ const ObjectRendererQueue = [
{ {
'name': 'isolations-ids', 'name': 'isolations-ids',
'category': ['tracks', 'switches'], 'category': ['tracks', 'switches'],
'trackSources': [TrackSource.STANDARD, TrackSource.BEZIER], 'trackSources': [TrackSource.STANDARD],
'renderer': IsolationIdRenderer, 'renderer': IsolationIdRenderer,
'cond': (layers) => layers['isolations-ids'] 'cond': (layers) => layers['isolations-ids']
}, },

View File

@ -141,13 +141,14 @@ function getTrackColor(object, trackColorMode, gradientDef) {
case "type": case "type":
switch (object.source) { switch (object.source) {
case TrackSource.STANDARD: case TrackSource.STANDARD:
if (object.type === 'BezierTrack') {
return modeDef.options['bezier-track'][0];
}
return modeDef.options['standard-track'][0]; return modeDef.options['standard-track'][0];
case TrackSource.SWITCH: case TrackSource.SWITCH:
return modeDef.options['point-track'][0]; return modeDef.options['point-track'][0];
case TrackSource.ROUTE: case TrackSource.ROUTE:
return modeDef.options['route-track'][0]; return modeDef.options['route-track'][0];
case TrackSource.BEZIER:
return modeDef.options['bezier-track'][0];
default: default:
return modeDef.options[modeDef.optionDefault][0]; return modeDef.options[modeDef.optionDefault][0];
} }

View File

@ -1,5 +1,5 @@
import { ElectrificationStatus } from "../../../model/electrification-status"; import { ElectrificationStatus } from "../../../model/electrification-status";
import {TrackSource} from "../../../model/tracks/track"; import {TrackShape, TrackSource} from "../../../model/tracks/track";
const TrackHoverInfoConsts = { const TrackHoverInfoConsts = {
electrification: { electrification: {
@ -11,8 +11,12 @@ const TrackHoverInfoConsts = {
source: { source: {
[TrackSource.STANDARD]: 'Standard track', [TrackSource.STANDARD]: 'Standard track',
[TrackSource.SWITCH]: 'Switch track', [TrackSource.SWITCH]: 'Switch track',
[TrackSource.BEZIER]: 'Bezier track',
[TrackSource.ROUTE]: 'Route track', [TrackSource.ROUTE]: 'Route track',
},
shape: {
[TrackShape.STRAIGHT]: 'Straight',
[TrackShape.ARC]: 'Circle arc',
[TrackShape.BEZIER]: 'Bézier curve',
} }
}; };

View File

@ -21,6 +21,7 @@ export default function TrackHoverInfoPopup(props) {
<InfoPopupItem value={track['electrificationStatus']} label="Electrification" options={{translationConstKey: 'electrification'}} /> <InfoPopupItem value={track['electrificationStatus']} label="Electrification" options={{translationConstKey: 'electrification'}} />
<InfoPopupItem value={track['source']} label="Type" options={{translationConstKey: 'source'}} /> <InfoPopupItem value={track['source']} label="Type" options={{translationConstKey: 'source'}} />
<InfoPopupSwitchItems track={track} /> <InfoPopupSwitchItems track={track} />
<InfoPopupItem value={track['shape']} label="Shape" options={{translationConstKey: 'shape'}} />
<InfoPopupShapeItems track={track} /> <InfoPopupShapeItems track={track} />
</tbody> </tbody>
</table> </table>
@ -36,8 +37,8 @@ function InfoPopupSwitchItems(props) {
if (!track.switch) return null; if (!track.switch) return null;
return <> return <>
<InfoPopupItem value={track.switch.id_switch} label="Switch ID" /> <InfoPopupItem value={track.createSwitchTrack.id_switch} label="Switch ID" />
<InfoPopupItem value={track.switch.bare_model} label="Switch model" /> <InfoPopupItem value={track.createSwitchTrack.bare_model} label="Switch model" />
</> </>
} }

View File

@ -152,7 +152,7 @@ const Constants = {
options: { options: {
'standard-track': ['#00a', 'Standard track'], 'standard-track': ['#00a', 'Standard track'],
'point-track': ['#0a0', 'Switch track'], 'point-track': ['#0a0', 'Switch track'],
'bezier-track': ['#aa8', 'Bezier track'], 'bezier-track': ['#aa8', 'Bézier track'],
'route-track': ['#a6d', 'Route track'], 'route-track': ['#a6d', 'Route track'],
} }
}, },

View File

@ -68,7 +68,7 @@ export default class Route extends SceneryObject {
trackLength *= (trackRadius / radius); trackLength *= (trackRadius / radius);
} }
return StandardTrack.route( return StandardTrack.createRouteTrack(
trackIds[index], trackIds[index],
startPoint, startPoint,
rotDeg, rotDeg,

View File

@ -153,7 +153,7 @@ export default class Switch extends SceneryObject {
const connections = this._createTrackConnections(switchDef, trackDef, ids); const connections = this._createTrackConnections(switchDef, trackDef, ids);
const { startPos, rotationDeg } = CurveHelper.transformStart(this.pos, this.rot, trackDef.pos, trackDef.rot); const { startPos, rotationDeg } = CurveHelper.transformStart(this.pos, this.rot, trackDef.pos, trackDef.rot);
const track = StandardTrack.switch( const track = StandardTrack.createSwitchTrack(
trackId, trackId,
startPos, startPos,
rotationDeg, rotationDeg,

View File

@ -1,4 +1,4 @@
import Track, {TrackSource} from "./track"; import Track, {TrackShape, TrackSource} from "./track";
import Vector3 from "../vector3"; import Vector3 from "../vector3";
import TrackConnection, {TrackConnectionEnd} from "../track-connection"; import TrackConnection, {TrackConnectionEnd} from "../track-connection";
@ -20,7 +20,9 @@ export default class BezierTrack extends Track
Vector3.zero(), // rotation Vector3.zero(), // rotation
length, length,
0, // radius 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, { Object.assign(this.points, {

View File

@ -1,5 +1,5 @@
import AngleHelper from "../../helpers/angleHelper"; import AngleHelper from "../../helpers/angleHelper";
import Track, {TrackSource} from "./track"; import Track, {TrackShape, TrackSource} from "./track";
import Vector3 from "../vector3"; import Vector3 from "../vector3";
import TrackConnection, {TrackConnectionEnd} from "../track-connection"; import TrackConnection, {TrackConnectionEnd} from "../track-connection";
import {ElectrificationStatus} from "../electrification-status"; 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) { 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(); this._calcPoints();
} }
@ -80,7 +81,7 @@ export default class StandardTrack extends Track {
super.applyObject(scenery); 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( const track = new StandardTrack(
id, start, rot, len, r, id, start, rot, len, r,
connections, connections,
@ -98,7 +99,7 @@ export default class StandardTrack extends Track {
return 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( const track = new StandardTrack(
id, start, rot, len, r, id, start, rot, len, r,
connections, connections,

View File

@ -4,11 +4,16 @@ import {TrackConnectionEnd} from "../track-connection";
export const TrackSource = { export const TrackSource = {
STANDARD: Symbol("TrackSource.STANDARD"), STANDARD: Symbol("TrackSource.STANDARD"),
BEZIER: Symbol("TrackSource.BEZIER"),
SWITCH: Symbol("TrackSource.SWITCH"), SWITCH: Symbol("TrackSource.SWITCH"),
ROUTE: Symbol("TrackSource.ROUTE"), 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 { export default class Track extends SceneryObject {
len; len;
r; r;
@ -27,8 +32,9 @@ export default class Track extends SceneryObject {
electrificationStatus = ElectrificationStatus.NOT_CHECKED; electrificationStatus = ElectrificationStatus.NOT_CHECKED;
hasNEVP = false; hasNEVP = false;
source; 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); super(id, pos, rot);
Object.assign(this, { Object.assign(this, {
len, r, len, r,
@ -39,6 +45,7 @@ export default class Track extends SceneryObject {
prefab_name, prefab_name,
maxspeed, derailspeed, maxspeed, derailspeed,
source, source,
shape,
}); });
} }