Merge pull request #6 from dominik-korsa/derailer-direction
Flip derailer icon depending on the derailing direction
This commit is contained in:
commit
2d51dfe260
@ -5,9 +5,14 @@ export default function DerailerRenderer(props) {
|
|||||||
const { object } = props;
|
const { object } = props;
|
||||||
const [x, y] = object.pos.toSVGCoords();
|
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 (
|
return (
|
||||||
<g className="derailer" transform={`translate(${x}, ${y}) rotate(${object.rot.y})`}>
|
<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
|
<ReactSVG
|
||||||
src={`${process.env.PUBLIC_URL}/assets/derailer.svg`}
|
src={`${process.env.PUBLIC_URL}/assets/derailer.svg`}
|
||||||
wrapper='svg'
|
wrapper='svg'
|
||||||
|
|||||||
@ -49,6 +49,7 @@ const Constants = {
|
|||||||
signalElemsUnknownSignText: true,
|
signalElemsUnknownSignText: true,
|
||||||
connectTracksFailed: true,
|
connectTracksFailed: true,
|
||||||
routeInvalidSegment: true,
|
routeInvalidSegment: true,
|
||||||
|
derailerUnknownDirection: true,
|
||||||
},
|
},
|
||||||
errors: {
|
errors: {
|
||||||
invalidSceneryInfo: true
|
invalidSceneryInfo: true
|
||||||
|
|||||||
@ -1,9 +1,16 @@
|
|||||||
import TrackObject from './track-object';
|
import TrackObject from './track-object';
|
||||||
import Vector3 from '../vector3';
|
import Vector3 from '../vector3';
|
||||||
|
import SceneryParserLog from "../scenery-parser-log";
|
||||||
|
|
||||||
export default class Derailer extends TrackObject {
|
export default class Derailer extends TrackObject {
|
||||||
type = "Derailer";
|
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() {
|
getPrintableDerailerName() {
|
||||||
return this.name || "Derailer";
|
return this.name || "Derailer";
|
||||||
}
|
}
|
||||||
@ -14,6 +21,16 @@ export default class Derailer extends TrackObject {
|
|||||||
return regex.test(prefabName);
|
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) {
|
static fromText(text) {
|
||||||
const values = text.split(";");
|
const values = text.split(";");
|
||||||
const obj = new Derailer(
|
const obj = new Derailer(
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user