From 4342bb41e8a896c736138476c65a348945752e15 Mon Sep 17 00:00:00 2001 From: dominik-korsa <29484605+dominik-korsa@users.noreply.github.com> Date: Sat, 12 Jul 2025 10:48:06 +0200 Subject: [PATCH] Add crossing prefab definitions --- src/model/defs/defined-switches.js | 20 +------- .../switch-descriptions/switch-prefab.js | 47 +++++++++++++++++-- 2 files changed, 46 insertions(+), 21 deletions(-) diff --git a/src/model/defs/defined-switches.js b/src/model/defs/defined-switches.js index f8f1c25..e917203 100644 --- a/src/model/defs/defined-switches.js +++ b/src/model/defs/defined-switches.js @@ -1,24 +1,8 @@ import SwitchPrefab from "../switch-descriptions/switch-prefab"; const DefinedSwitches = { - // "Crossing": [ - // 0, - // 0, - // [0,1], - // new Vector3(-0.919, 0, -16.59), - // new Vector3(0.919, 0, -16.59), - // new Vector3(0.919, 0, 16.59), - // new Vector3(-0.919, 0, 16.59) - // ], - // "Crossing4.444": [ - // 0, - // 0, - // [0,1], - // new Vector3(-1.104, 0, -9.939), - // new Vector3(1.104, 0, -9.939), - // new Vector3(1.104, 0, 9.939), - // new Vector3(-1.104, 0, 9.939) - // ], + "Crossing": SwitchPrefab.crossing(33.2294, 9.0), + "Crossing4.444": SwitchPrefab.crossing(20.0, 4.444), // Rkp 60E1-190-1_9 ab // Rkp 60E1-190-1_9 ba // Rkpd 60E1-190-1_9 diff --git a/src/model/switch-descriptions/switch-prefab.js b/src/model/switch-descriptions/switch-prefab.js index 7469fcd..4b0ef2e 100644 --- a/src/model/switch-descriptions/switch-prefab.js +++ b/src/model/switch-descriptions/switch-prefab.js @@ -75,13 +75,13 @@ export default class SwitchPrefab { }, ], ), - ...SwitchPrefab._createSwitchTracks( + ...SwitchPrefab._createForkSwitchTracks( radiusA, curveLength, addedLength, 'a', ), - ...SwitchPrefab._createSwitchTracks( + ...SwitchPrefab._createForkSwitchTracks( radiusB, curveLength, addedLength, @@ -92,7 +92,7 @@ export default class SwitchPrefab { return new SwitchPrefab(tracks); } - static _createSwitchTracks(radius, curveLength, addedLength, side) { + static _createForkSwitchTracks(radius, curveLength, addedLength, side) { let curveEnd; let endAngle; if (radius === 0) { @@ -174,4 +174,45 @@ export default class SwitchPrefab { return tracks; } + + static crossing(length, tangentInv) { + const vectorA = Vector3.fromAngleY(Math.atan(1 / tangentInv / 2), length / 2); + const vectorB = Vector3.fromAngleY(-Math.atan(1 / tangentInv / 2), length / 2); + const tracks = { + a: new SwitchPrefabTrack( + vectorA.negate(), + vectorA, + 0, + 0, + [ + { + type: SwitchTrackConnectionType.EXTERNAL, + end: TrackConnectionEnd.START, + }, + { + type: SwitchTrackConnectionType.EXTERNAL, + end: TrackConnectionEnd.END, + }, + ], + ), + b: new SwitchPrefabTrack( + vectorB.negate(), + vectorB, + 0, + 1, + [ + { + type: SwitchTrackConnectionType.EXTERNAL, + end: TrackConnectionEnd.START, + }, + { + type: SwitchTrackConnectionType.EXTERNAL, + end: TrackConnectionEnd.END, + }, + ], + ), + }; + + return new SwitchPrefab(tracks); + } }