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