From c91aff5157330d1580c0f7f8a6c1cceec2209c52 Mon Sep 17 00:00:00 2001 From: izawartka <59137928+izawartka@users.noreply.github.com> Date: Sat, 21 Jun 2025 12:15:02 +0200 Subject: [PATCH] Added NEVPs layer +Added No Electric Vehicles points parsing and rendering layer --- public/assets/nevp.svg | 7 ++++++ src/components/map/Map.css | 8 ++++++ src/components/map/ObjectsRenderQueue.js | 8 ++++++ .../map/object-renderers/NEVPRenderer.js | 20 +++++++++++++++ src/helpers/constants.js | 5 ++++ src/model/nevp.js | 25 +++++++++++++++++++ src/model/scenery-parser.js | 3 +++ 7 files changed, 76 insertions(+) create mode 100644 public/assets/nevp.svg create mode 100644 src/components/map/object-renderers/NEVPRenderer.js create mode 100644 src/model/nevp.js diff --git a/public/assets/nevp.svg b/public/assets/nevp.svg new file mode 100644 index 0000000..4d7209b --- /dev/null +++ b/public/assets/nevp.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/components/map/Map.css b/src/components/map/Map.css index 9e39ec2..c574063 100644 --- a/src/components/map/Map.css +++ b/src/components/map/Map.css @@ -70,3 +70,11 @@ .map svg g.sign path { fill: #eee; } + +.map svg g.nevp path { + fill: #eee; +} + +.map svg g.nevp path.background { + fill: #111; +} diff --git a/src/components/map/ObjectsRenderQueue.js b/src/components/map/ObjectsRenderQueue.js index 4f21274..53b9904 100644 --- a/src/components/map/ObjectsRenderQueue.js +++ b/src/components/map/ObjectsRenderQueue.js @@ -6,6 +6,7 @@ import SignalRenderer from './object-renderers/SignalRenderer'; import RouteRenderer from './object-renderers/RouteRenderer'; import SignalBoxRenderer from './object-renderers/SignalBoxRenderer'; import SignRenderer from './object-renderers/SignRenderer'; +import NEVPRenderer from './object-renderers/NEVPRenderer'; const ObjectRendererQueue = [ { @@ -34,6 +35,13 @@ const ObjectRendererQueue = [ 'renderer': SignRenderer, 'cond': (layers) => layers['signs'] }, + { + 'name': 'nevps', + 'category': 'track-objects', + 'type': 'NEVP', + 'renderer': NEVPRenderer, + 'cond': (layers) => layers['nevps'] + }, { 'name': 'signals', 'category': 'track-objects', diff --git a/src/components/map/object-renderers/NEVPRenderer.js b/src/components/map/object-renderers/NEVPRenderer.js new file mode 100644 index 0000000..493a13c --- /dev/null +++ b/src/components/map/object-renderers/NEVPRenderer.js @@ -0,0 +1,20 @@ +import { ReactSVG } from 'react-svg' + +export default function NEVPRenderer(props) { + const { object } = props; + const [x, y] = object.pos.toSVGCoords(); + + return ( + + { + svg.setAttribute('width', '1mm'); + svg.setAttribute('height', '1mm'); + }} + /> + + ); +} diff --git a/src/helpers/constants.js b/src/helpers/constants.js index 02412f6..f1fc5c4 100644 --- a/src/helpers/constants.js +++ b/src/helpers/constants.js @@ -65,6 +65,11 @@ const Constants = { name: 'Signs', default: true, }, + { + id: 'nevps', + name: 'No Electric Vehicles Points', + default: true, + }, { id: 'signalboxes', name: 'Signal boxes', diff --git a/src/model/nevp.js b/src/model/nevp.js new file mode 100644 index 0000000..a1c26ab --- /dev/null +++ b/src/model/nevp.js @@ -0,0 +1,25 @@ +import TrackObject from './track-object'; +import Vector3 from './vector3'; + +export default class NEVP extends TrackObject { + type = "NEVP"; + + static isNEVP(text) { + const prefabName = text.split(";", 4)[2]; + return prefabName === 'No Electric Vehicles Point'; + } + + static fromText(text) { + const values = text.split(";"); + const obj = new NEVP( + values[1], // id + values[2], // prefab_name + Vector3.fromValuesArray(values, 3), // pos + Vector3.fromValuesArray(values, 6), // rot + values[9], // track_id + values[11] // name + ); + + return obj; + } +} diff --git a/src/model/scenery-parser.js b/src/model/scenery-parser.js index df06d3a..cccc491 100644 --- a/src/model/scenery-parser.js +++ b/src/model/scenery-parser.js @@ -14,6 +14,7 @@ import SceneryInfo from './scenery-info'; import Sign from './sign'; import CameraHome from './camera-home'; import MainCamera from './main-camera'; +import NEVP from './nevp'; /* TODO: add support for WorldRotation and WorldTranslation @@ -120,6 +121,8 @@ export default class SceneryParser { return Sign.fromText(text); } else if(Signal.isSignal(text)) { return Signal.fromText(text); + } else if(NEVP.isNEVP(text)) { + return NEVP.fromText(text); } else { return TrackObject.fromText(text); }