diff --git a/src/components/map/Map.css b/src/components/map/Map.css
index b89221a..50b2248 100644
--- a/src/components/map/Map.css
+++ b/src/components/map/Map.css
@@ -53,6 +53,10 @@
stroke: #eee;
}
+.map svg g.extended-signal-icon g path.background {
+ fill: #111;
+}
+
.map svg g.route g {
fill: #eee;
}
diff --git a/src/components/map/ObjectsRenderQueue.js b/src/components/map/ObjectsRenderQueue.js
index f9a576f..a4f84bf 100644
--- a/src/components/map/ObjectsRenderQueue.js
+++ b/src/components/map/ObjectsRenderQueue.js
@@ -42,6 +42,13 @@ const ObjectRendererQueue = [
'renderer': DerailerRenderer,
'cond': (layers) => layers['derailers']
},
+ {
+ 'name': 'signs',
+ 'category': 'track-objects',
+ 'type': 'Sign',
+ 'renderer': SignRenderer,
+ 'cond': (layers) => layers['signs']
+ },
{
'name': 'nevps',
'category': 'track-objects',
@@ -56,13 +63,6 @@ const ObjectRendererQueue = [
'renderer': SignalRenderer,
'cond': (layers) => layers['signals']
},
- {
- 'name': 'signs',
- 'category': 'track-objects',
- 'type': 'Sign',
- 'renderer': SignRenderer,
- 'cond': (layers) => layers['signs']
- },
{
'name': 'spawn-points',
'category': 'track-objects',
diff --git a/src/components/map/object-renderers/SignalExtendedRenderer.js b/src/components/map/object-renderers/SignalExtendedRenderer.js
index bf0ef57..6784cb9 100644
--- a/src/components/map/object-renderers/SignalExtendedRenderer.js
+++ b/src/components/map/object-renderers/SignalExtendedRenderer.js
@@ -29,12 +29,13 @@ function SignalIcon(props) {
const halfBaseWidth = getHalfBaseWidth(object);
const headOff = getHeadOffset(object);
- const poleLength = getPoleLength(object);
+ const poleLength = getPoleLength(object, headOff);
return (
{ getBase(halfBaseWidth) }
{ getPole(poleLength, headOff) }
+ { getBars(object, poleLength, headOff) }
{ getHead(object, poleLength, headOff) }
);
@@ -76,17 +77,36 @@ function getHeadOffset(object) {
}
}
-function getPoleLength(object) {
+function getPoleLength(object, headOff) {
const headPos = object.signal_elements.headPosition;
if(headPos === SignalElementsEnums.HeadPosition.NO_POLE) return 0;
- return 2;
+
+ let length = 0.8;
+
+ if(headOff !== 0) {
+ length += 0.4;
+ }
+
+ switch(object.signal_elements.bar) {
+ case SignalElementsEnums.BarType.YELLOW:
+ case SignalElementsEnums.BarType.GREEN:
+ length += 1.0;
+ break;
+ case SignalElementsEnums.BarType.YELLOW_GREEN:
+ length += 1.8;
+ break;
+ default:
+ break;
+ }
+
+ return Math.max(length, 2);
}
function getPole(poleLength, headOff) {
if(!poleLength) return null;
if(headOff) {
- return ;
+ return ;
}
return ;
@@ -96,7 +116,7 @@ function getUnit(key, unitType, x, y) {
const r = 0.6;
const c = 0.4;
- const baseCircle = ;
+ const baseCircle = ;
switch(unitType) {
case SignalElementsEnums.UnitType.RED:
@@ -174,4 +194,36 @@ function getHeadTOP(object, poleLength) {
{ getUnit(2, SignalElementsEnums.UnitType.WHITE, 0, -poleLength-5*r) }
{ getUnit(3, SignalElementsEnums.UnitType.YELLOW_LOWER, whiteCX, -poleLength-r) }
>
+}
+
+function getBar(object, headOff, y, isYellow, key = 0) {
+ const yellowOff = isYellow ? 0.2 : 0;
+
+ return
+ ;
+ ;
+
+}
+
+function getBars(object, poleLength, headOff) {
+ const barType = object.signal_elements.bar;
+ const headOffOffset = headOff !== 0 ? 0.4 : 0;
+ const y = -poleLength + headOffOffset + 0.6;
+
+ if(barType === SignalElementsEnums.BarType.NONE) return null;
+
+ switch(barType) {
+ case SignalElementsEnums.BarType.NONE:
+ default:
+ return null;
+ case SignalElementsEnums.BarType.YELLOW:
+ return getBar(object, 0, y, true);
+ case SignalElementsEnums.BarType.GREEN:
+ return getBar(object, 0, y, false);
+ case SignalElementsEnums.BarType.YELLOW_GREEN:
+ return <>
+ { getBar(object, 0, y, false, 0) }
+ { getBar(object, 0, y + 0.8, true, 1) }
+ >
+ }
}
\ No newline at end of file
diff --git a/src/helpers/constants.js b/src/helpers/constants.js
index 8b18860..3440c9a 100644
--- a/src/helpers/constants.js
+++ b/src/helpers/constants.js
@@ -13,6 +13,12 @@ const Constants = {
runTracksConnectionTest: false,
resolveElectrification: true,
maxRouteConnectionDistance: 0.2,
+ attachSigns: true,
+ attachSignsNeedsSameTrack: false,
+ attachSignsMaxDistanceZ: 1.0,
+ attachSignsMaxDistanceX: 0.2,
+ attachSignsGridSize: 10,
+ logAttachedSigns: true,
},
warnings: {
all: false, // enable all warnings
@@ -38,6 +44,7 @@ const Constants = {
electrificationResolverWarnings: true,
signalElemsUnknownPrefab: true,
signalElemsRecognizedUnknownPrefab: true,
+ attachSignsOutOfBounds: true,
},
errors: {
invalidSceneryInfo: true