From b72dbe8f9a2466ff5a5da5bfdce813fd9ccf3109 Mon Sep 17 00:00:00 2001 From: izawartka <59137928+izawartka@users.noreply.github.com> Date: Mon, 30 Jun 2025 21:11:41 +0200 Subject: [PATCH] Signal signs rendering order and custom height *Signal signs can now have custom height and will still be rendered with proper spacing *Order of signs rendered on signal's pole is now defined by the order in the DefinedSignalSigns dictionary --- .../object-renderers/SignalExtendedRenderer.js | 15 ++++++++------- src/model/defs/defined-signal-signs.js | 5 +++++ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/components/map/object-renderers/SignalExtendedRenderer.js b/src/components/map/object-renderers/SignalExtendedRenderer.js index 29f6923..e5056d7 100644 --- a/src/components/map/object-renderers/SignalExtendedRenderer.js +++ b/src/components/map/object-renderers/SignalExtendedRenderer.js @@ -119,8 +119,8 @@ function getPolePoints(object, headOffsetX) { break; } - const signsCount = Object.keys(object.signal_elements.signs).length; - polePoints.signs = polePoints.bars + signsCount * 1.2; + const signsHeight = Object.keys(object.signal_elements.signs).map(key => (DefinedSignalSigns[key]?.height || 1.0) + 0.2).reduce((a, b) => a + b, 0) || 0; + polePoints.signs = polePoints.bars + signsHeight; polePoints.end = isOverhead ? polePoints.signs : Math.max(polePoints.signs + 0.8, 2.2); return polePoints; @@ -271,13 +271,14 @@ function getSign(id, y) { function getSigns(object, polePoints, headOffsetY) { if(!polePoints) return null; const signs = []; - let y = headOffsetY + polePoints.signs - 0.4; + let y = headOffsetY + polePoints.signs; - for(const [key, value] of Object.entries(object.signal_elements.signs)) { - if(!value) continue; + for(const [key, def] of Object.entries(DefinedSignalSigns)) { + if(!object.signal_elements.signs.hasOwnProperty(key) || !DefinedSignalSigns[key]) continue; + const height = (def.height || 1.0); - signs.push(getSign(key, y)); - y -= 1.2; + signs.push(getSign(key, y - height / 2 + 0.1)); + y -= height + 0.2; } return signs; diff --git a/src/model/defs/defined-signal-signs.js b/src/model/defs/defined-signal-signs.js index 927967a..74c153c 100644 --- a/src/model/defs/defined-signal-signs.js +++ b/src/model/defs/defined-signal-signs.js @@ -1,8 +1,13 @@ +/* +NOTE: Order of signs defined in this dictionary dictates the order of signs rendered on the signal pole +*/ + const DefinedSignalSigns = { "w1": { "regex": /^(?:wsk_)?w1(?:\D)?.*$/, "name": "W1", "icon": "w1.svg", + "height": 1.28504, }, "w18": { "regex": /^(?:wsk_)?w18(?:\D)?.*$/,