Merge pull request #6 from dominik-korsa/derailer-direction

Flip derailer icon depending on the derailing direction
This commit is contained in:
Igor Zawartka 2025-07-18 20:11:43 +02:00 committed by GitHub
commit 2d51dfe260
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 25 additions and 2 deletions

View File

@ -5,9 +5,14 @@ export default function DerailerRenderer(props) {
const { object } = props;
const [x, y] = object.pos.toSVGCoords();
let icon_transform = `translate(-2.835, -2.835)`;
if (object.is_left) {
icon_transform = 'scale(-1, 1) ' + icon_transform;
}
return (
<g className="derailer" transform={`translate(${x}, ${y}) rotate(${object.rot.y})`}>
<g className="derailer-icon" transform={`translate(-2.835, -2.835)`}>
<g className="derailer-icon" transform={icon_transform}>
<ReactSVG
src={`${process.env.PUBLIC_URL}/assets/derailer.svg`}
wrapper='svg'

View File

@ -49,6 +49,7 @@ const Constants = {
signalElemsUnknownSignText: true,
connectTracksFailed: true,
routeInvalidSegment: true,
derailerUnknownDirection: true,
},
errors: {
invalidSceneryInfo: true

View File

@ -1,8 +1,15 @@
import TrackObject from './track-object';
import Vector3 from '../vector3';
import SceneryParserLog from "../scenery-parser-log";
export default class Derailer extends TrackObject {
type = "Derailer";
is_left;
constructor(id, prefab_name, pos, rot, track_id, name) {
super(id, prefab_name, pos, rot, track_id, name);
this.is_left = Derailer._isLeft(prefab_name);
}
getPrintableDerailerName() {
return this.name || "Derailer";
@ -14,6 +21,16 @@ export default class Derailer extends TrackObject {
return regex.test(prefabName);
}
static _isLeft(prefabName) {
const regex = /^wykolejnica(?!_(?:latarnia|belka)).*_([lr])(?:[_,].+)?$/;
const match = regex.exec(prefabName);
if (match === null) {
SceneryParserLog.warn('derailerUnknownDirection', `Failed to determine the direction of derailer: ${prefabName}`);
return false;
}
return match[1] === 'l';
}
static fromText(text) {
const values = text.split(";");
const obj = new Derailer(