Added NEVPs layer

+Added No Electric Vehicles points parsing and rendering layer
This commit is contained in:
izawartka 2025-06-21 12:15:02 +02:00
parent 3bc94ce3cf
commit c91aff5157
7 changed files with 76 additions and 0 deletions

7
public/assets/nevp.svg Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<path d="m7.5736 44.343 36.77-36.77c3.1339-3.1339 8.1798-3.1339 11.314 0l36.77 36.77c3.1339 3.1339 3.1339 8.1798 0 11.314l-36.77 36.77c-3.1339 3.1339-8.1798 3.1339-11.314 0l-36.77-36.77c-3.1339-3.1339-3.1339-8.1798 0-11.314z" class="background"/>
<path d="m50 1.2559c-3.0797 0-6.1584 1.1643-8.4844 3.4902l-36.77 36.77c-4.6519 4.6519-4.6519 12.317 0 16.969l36.77 36.77c4.6519 4.6519 12.317 4.6519 16.969 0l36.77-36.77c4.6519-4.6519 4.6519-12.317 0-16.969l-36.77-36.77c-2.326-2.326-5.4047-3.4902-8.4844-3.4902zm0 7.9336c1.0102 0 2.0202 0.40495 2.8281 1.2129l36.77 36.77c1.6159 1.6159 1.6159 4.0404 0 5.6562l-36.77 36.77c-1.6159 1.6159-4.0404 1.6159-5.6562 0l-36.77-36.77c-1.6159-1.6159-1.6159-4.0404 0-5.6562l36.77-36.77c0.80794-0.80794 1.8179-1.2129 2.8281-1.2129z" stop-color="#000000"/>
<path d="m50 21.809c-1.7985 0-3.5965 0.67656-4.9492 2.0293l-21.213 21.213c-2.7055 2.7055-2.7055 7.193 0 9.8984l21.213 21.213c2.7055 2.7055 7.193 2.7055 9.8984 0l21.213-21.213c2.7055-2.7055 2.7055-7.193 0-9.8984l-21.213-21.213c-1.3527-1.3527-3.1507-2.0293-4.9492-2.0293zm0 5.9492c0.24645 0 0.49282 0.10805 0.70703 0.32227l21.213 21.213c0.42843 0.42843 0.42843 0.98563 0 1.4141l-21.213 21.213c-0.42843 0.42843-0.98563 0.42843-1.4141 0l-21.213-21.213c-0.42843-0.42843-0.42843-0.98563 0-1.4141l21.213-21.213c0.21422-0.21422 0.46058-0.32227 0.70703-0.32227z" stop-color="#000000"/>
<path d="m40.101 48.586 8.4853-8.4853c0.78347-0.78347 2.045-0.78347 2.8284 0l8.4853 8.4853c0.78348 0.78348 0.78348 2.045 0 2.8284l-8.4853 8.4853c-0.78347 0.78347-2.045 0.78347-2.8284 0l-8.4853-8.4853c-0.78348-0.78348-0.78348-2.045 0-2.8284z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

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

View File

@ -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',

View File

@ -0,0 +1,20 @@
import { ReactSVG } from 'react-svg'
export default function NEVPRenderer(props) {
const { object } = props;
const [x, y] = object.pos.toSVGCoords();
return (
<g className="nevp" transform={`translate(${x}, ${y}) rotate(${object.rot.y}) translate(-1.89, -1.89)`}>
<ReactSVG
src={`${process.env.PUBLIC_URL}/assets/nevp.svg`}
wrapper='svg'
beforeInjection={(svg) => {
svg.setAttribute('width', '1mm');
svg.setAttribute('height', '1mm');
}}
/>
</g>
);
}

View File

@ -65,6 +65,11 @@ const Constants = {
name: 'Signs',
default: true,
},
{
id: 'nevps',
name: 'No Electric Vehicles Points',
default: true,
},
{
id: 'signalboxes',
name: 'Signal boxes',

25
src/model/nevp.js Normal file
View File

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

View File

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