diff --git a/public/assets/signal_signs/w1.svg b/public/assets/signal_signs/w1.svg new file mode 100644 index 0000000..e3042ff --- /dev/null +++ b/public/assets/signal_signs/w1.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/assets/signal_signs/w18.svg b/public/assets/signal_signs/w18.svg new file mode 100644 index 0000000..e641492 --- /dev/null +++ b/public/assets/signal_signs/w18.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/components/map/object-renderers/SignRenderer.js b/src/components/map/object-renderers/SignRenderer.js index e922805..12a6f32 100644 --- a/src/components/map/object-renderers/SignRenderer.js +++ b/src/components/map/object-renderers/SignRenderer.js @@ -3,6 +3,7 @@ import { ReactSVG } from 'react-svg' export default function SignRenderer(props) { const { object } = props; if(!object.def) return null; + if(object.attached_skip_rendering) return null; const [x, y] = object.pos.toSVGCoords(); diff --git a/src/model/attach-signs.js b/src/model/attach-signs.js index 1d6a2bc..bf31bc9 100644 --- a/src/model/attach-signs.js +++ b/src/model/attach-signs.js @@ -43,6 +43,22 @@ function getGridCellPositions(pos, scenery, gridSize, maxDist) { return positions; } +function attach(sign, signal) { + if(Constants.parser.logAttachedSigns) { + const distance = sign.pos.distanceExcludeY(signal.pos); + console.log(`Attaching sign ${sign.name} (${sign.id}) to signal ${signal.name} (${signal.id}) at distance ${distance.toFixed(2)} m`); + } + + sign.attached_to = signal; + signal.attached_signs.push(sign); + + const attachAs = sign.def?.attachAs || null; + if(!attachAs || !signal.signal_elements) return; + + sign.attached_skip_rendering = true; + signal.signal_elements.signs[attachAs] = true; +} + export function attachSigns(scenery) { const maxDistSq = Constants.parser.attachSignsMaxDistanceZ ** 2 + Constants.parser.attachSignsMaxDistanceX ** 2; const maxDist = Math.sqrt(maxDistSq); @@ -89,11 +105,6 @@ export function attachSigns(scenery) { if(!closestSignal) continue; - if(Constants.parser.logAttachedSigns) { - console.log(`Attaching sign ${trackObject.name} (${trackObject.id}) to signal ${closestSignal.name} (${closestSignal.id}) at distance ${Math.sqrt(closestDistanceSq).toFixed(2)} m`); - } - - trackObject.attached_to = closestSignal; - closestSignal.attached_signs.push(trackObject); + attach(trackObject, closestSignal); } } \ No newline at end of file diff --git a/src/model/defs/defined-signal-signs.js b/src/model/defs/defined-signal-signs.js index adc3623..927967a 100644 --- a/src/model/defs/defined-signal-signs.js +++ b/src/model/defs/defined-signal-signs.js @@ -1,8 +1,13 @@ const DefinedSignalSigns = { - "w24": { - "regex": /^(?:wsk_)?w24(?:\D)?.*$/, - "name": "W24", - "icon": "w24.svg", + "w1": { + "regex": /^(?:wsk_)?w1(?:\D)?.*$/, + "name": "W1", + "icon": "w1.svg", + }, + "w18": { + "regex": /^(?:wsk_)?w18(?:\D)?.*$/, + "name": "W18", + "icon": "w18.svg", }, "w19": { "regex": /^(?:wsk_)?w19(?:\D)?.*$/, @@ -13,7 +18,12 @@ const DefinedSignalSigns = { "regex": /^(?:wsk_)?w20(?:\D)?.*$/, "name": "W20", "icon": "w20.svg", - } + }, + "w24": { + "regex": /^(?:wsk_)?w24(?:\D)?.*$/, + "name": "W24", + "icon": "w24.svg", + }, }; export default DefinedSignalSigns; diff --git a/src/model/defs/defined-signs.js b/src/model/defs/defined-signs.js index 1f362db..31caf3d 100644 --- a/src/model/defs/defined-signs.js +++ b/src/model/defs/defined-signs.js @@ -190,22 +190,26 @@ const DefinedSigns = { "w18": { "name": "W18", "icon": "w18.svg", - "offsetY": 3.89 + "offsetY": 3.89, + "attachAs": "w18", }, "w19": { "name": "W19", "icon": "w19.svg", - "offsetY": 3.89 + "offsetY": 3.89, + "attachAs": "w19" }, "w20": { "name": "W20", "icon": "w20.svg", - "offsetY": 3.89 + "offsetY": 3.89, + "attachAs": "w20" }, "w1": { "name": "W1", "icon": "w1.svg", - "offsetY": 3.89 + "offsetY": 3.89, + "attachAs": "w1" }, "latarnia_w4": {alias: "w4"}, "w4": { diff --git a/src/model/track-objects/sign.js b/src/model/track-objects/sign.js index be497e0..dbdad31 100644 --- a/src/model/track-objects/sign.js +++ b/src/model/track-objects/sign.js @@ -8,6 +8,7 @@ export default class Sign extends TrackObject { data; def; attached_to = null; + attached_skip_rendering = false; constructor(id, prefab_name, pos, rot, track_id, name, data) { super(id, prefab_name, pos, rot, track_id, name); diff --git a/src/model/vector3.js b/src/model/vector3.js index 1f56871..1cdf9f7 100644 --- a/src/model/vector3.js +++ b/src/model/vector3.js @@ -124,6 +124,10 @@ export default class Vector3 { return Math.sqrt(this.distanceSq(other)); } + distanceExcludeY(other) { + return Math.sqrt(this.distanceSqExcludeY(other)); + } + mannhattanDistance(other) { return Math.abs(this.x - other.x) + Math.abs(this.y - other.y) + Math.abs(this.z - other.z); }