Flip derailer icon depending on the derailing direction
This commit is contained in:
parent
17435b829e
commit
4c4da95016
@ -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'
|
||||
|
||||
@ -49,6 +49,7 @@ const Constants = {
|
||||
signalElemsUnknownSignText: true,
|
||||
connectTracksFailed: true,
|
||||
routeInvalidSegment: true,
|
||||
derailerUnknownDirection: true,
|
||||
},
|
||||
errors: {
|
||||
invalidSceneryInfo: true
|
||||
|
||||
@ -1,9 +1,16 @@
|
||||
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(
|
||||
|
||||
Loading…
Reference in New Issue
Block a user