diff --git a/src/components/map/Map.css b/src/components/map/Map.css index f99c711..eadb3f5 100644 --- a/src/components/map/Map.css +++ b/src/components/map/Map.css @@ -99,6 +99,10 @@ fill: #111; } +.map .signal-sign-text { + stroke: none; +} + .map svg g.nevp path { fill: #eee; } diff --git a/src/components/map/object-renderers/SignalExtendedRenderer.js b/src/components/map/object-renderers/SignalExtendedRenderer.js index 5e52599..3ab9048 100644 --- a/src/components/map/object-renderers/SignalExtendedRenderer.js +++ b/src/components/map/object-renderers/SignalExtendedRenderer.js @@ -321,6 +321,21 @@ function getBars(object, polePoints, headOffsetY) { } } +function getSignText(id, text, y) { + if(!text) return null; + const def = DefinedSignalSigns[id]; + if(!def) return null; + + return {text}; +} + function getSign(id, y) { const def = DefinedSignalSigns[id]; if(!def) return null; @@ -342,9 +357,16 @@ function getSigns(object, polePoints, headOffsetY) { const signs = []; let y = headOffsetY + polePoints.signs; - for(const [key, def] of Object.entries(DefinedSignalSigns)) { - if(!object.signal_elements.signs.hasOwnProperty(key) || !DefinedSignalSigns[key]) continue; + for(const [id, def] of Object.entries(DefinedSignalSigns)) { + if(!object.signal_elements.signs.hasOwnProperty(id) || !DefinedSignalSigns[id]) continue; const height = (def.height || 1.0); + const text = object.signal_elements.signs[id]?.text || null; + const signY = y - height / 2 + 0.1; + + signs.push(getSign(id, signY, text)); + + const textComponent = getSignText(id, text, signY); + if(textComponent) signs.push(textComponent); signs.push(getSign(key, y - height / 2 + 0.1)); y -= height + 0.2; diff --git a/src/helpers/constants.js b/src/helpers/constants.js index b6f2107..190444c 100644 --- a/src/helpers/constants.js +++ b/src/helpers/constants.js @@ -45,7 +45,9 @@ const Constants = { signalElemsUnknownPrefab: true, signalElemsRecognizedUnknownPrefab: true, attachSignsOutOfBounds: true, - signalElemsUnknownSign: true + signalElemsUnknownSign: true, + signalElemsUnknownSignText: true, + }, errors: { invalidSceneryInfo: true diff --git a/src/model/signal-elements/parsers/common.js b/src/model/signal-elements/parsers/common.js index 94b0e96..66322b1 100644 --- a/src/model/signal-elements/parsers/common.js +++ b/src/model/signal-elements/parsers/common.js @@ -109,8 +109,22 @@ export default class SignalElementsParserCommon { SceneryParserLog.warn('signalElemsUnknownSign', `Unknown signal sign: ${entry}`); continue; } - + signs[key] = true; + + const def = DefinedSignalSigns[key]; + if(!def.textRegex) continue; + + const match = def.textRegex.exec(entry); + if(!match) { + SceneryParserLog.warn('signalElemsUnknownSignText', `Signal sign ${entry} does not match text regex for ${key}`); + continue; + } + + const text = match[1]?.trim(); + signs[key] = { + text: text || null, + } } return signs;