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);
}