From 931f6b9fbdf573e0d0163e5bdfe41b15ec67bd10 Mon Sep 17 00:00:00 2001 From: Spythere Date: Wed, 5 Feb 2025 14:29:18 +0100 Subject: [PATCH] fix: train speed limits --- src/components/TrainsView/TrainInfo.vue | 18 ++- src/data/speedLimits.json | 156 ----------------------- src/data/speedLimits.ts | 158 ++++++++++++++++++++++++ 3 files changed, 166 insertions(+), 166 deletions(-) delete mode 100644 src/data/speedLimits.json create mode 100644 src/data/speedLimits.ts diff --git a/src/components/TrainsView/TrainInfo.vue b/src/components/TrainsView/TrainInfo.vue index 5f51819..6edb308 100644 --- a/src/components/TrainsView/TrainInfo.vue +++ b/src/components/TrainsView/TrainInfo.vue @@ -187,17 +187,12 @@ import { defineComponent } from 'vue'; import { useMainStore } from '../../store/mainStore'; import { useApiStore } from '../../store/apiStore'; import { Train } from '../../typings/common'; -import speedLimits from '../../data/speedLimits.json'; import styleMixin from '../../mixins/styleMixin'; import trainInfoMixin from '../../mixins/trainInfoMixin'; import trainCategoryMixin from '../../mixins/trainCategoryMixin'; import ProgressBar from '../Global/ProgressBar.vue'; import StockList from '../Global/StockList.vue'; - -export type SpeedLimitLocoType = keyof typeof speedLimits; - -const isCompatibleLoco = (locoType: string): locoType is SpeedLimitLocoType => - locoType in speedLimits; +import { speedLimits } from '../../data/speedLimits'; export default defineComponent({ mixins: [trainInfoMixin, styleMixin, trainCategoryMixin], @@ -239,19 +234,22 @@ export default defineComponent({ const headLoco = this.train.stockList[0].slice(0, this.train.stockList[0].indexOf('-')); - if (!isCompatibleLoco(headLoco)) return vehicleMaxSpeed; + if (speedLimits[headLoco] === undefined) return vehicleMaxSpeed; if (this.train.stockList.length == 1) return speedLimits[headLoco]['none']; - const speedTable = speedLimits[headLoco][isPassenger ? 'passenger' : 'cargo']; + const speedTable: Record = + speedLimits[headLoco][isPassenger ? 'passenger' : 'cargo']; if (!speedTable) return vehicleMaxSpeed; - let massKey = Object.keys(speedTable).findLast( + const massKey = Object.keys(speedTable).findLast( (massKey) => this.train.mass >= Number(massKey) ); - return massKey ? ((speedTable as any)[massKey] as number) : vehicleMaxSpeed; + const massMaxSpeed = massKey ? speedTable[massKey] : Infinity; + + return Math.min(massMaxSpeed, vehicleMaxSpeed); }, journalRouteLocation() { return { diff --git a/src/data/speedLimits.json b/src/data/speedLimits.json deleted file mode 100644 index 14af405..0000000 --- a/src/data/speedLimits.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "EU07": { - "passenger": { - "650000": 125 - }, - "cargo": { - "2000000": 70 - }, - "none": 110 - }, - "4E": { - "passenger": { - "650000": 125 - }, - "cargo": { - "2000000": 70 - }, - "none": 110 - }, - "EU07E": { - "passenger": { - "650000": 125 - }, - "cargo": { - "2000000": 70 - }, - "none": 110 - }, - "EP07": { - "passenger": { - "650000": 125 - }, - "cargo": null, - "none": 110 - }, - "EP08": { - "passenger": { - "650000": 140 - }, - "cargo": null, - "none": 110 - }, - "EP09": { - "passenger": { - "650000": 160 - }, - "cargo": null, - "none": 160 - }, - "ET22": { - "passenger": { - "650000": 125 - }, - "cargo": { - "1200000": 100, - "3100000": 70 - }, - "none": 125 - }, - "201E": { - "passenger": { - "650000": 125 - }, - "cargo": { - "1200000": 100, - "3100000": 70 - }, - "none": 125 - }, - "ET41": { - "passenger": { - "700000": 125 - }, - "cargo": { - "4000000": 70, - "3500000": 80, - "2500000": 90, - "2000000": 100 - }, - "none": 110 - }, - "SM42": { - "passenger": { - "95000": 90, - "200000": 80, - "300000": 70, - "450000": 60, - "750000": 50, - "1130000": 40, - "1720000": 30, - "2400000": 20 - }, - "cargo": { - "95000": 90, - "200000": 80, - "300000": 70, - "450000": 60, - "750000": 50, - "1130000": 40, - "1720000": 30, - "2400000": 20 - }, - "none": 90 - }, - "M62": { - "passenger": { - "500000": 100, - "800000": 80, - "1200000": 60, - "2000000": 40, - "3000000": 20 - }, - "cargo": { - "500000": 100, - "800000": 80, - "1200000": 60, - "2000000": 40, - "3000000": 20 - }, - "none": 100 - }, - "ST44": { - "passenger": { - "500000": 100, - "800000": 80, - "1200000": 60, - "2000000": 40, - "3000000": 20 - }, - "cargo": { - "500000": 100, - "800000": 80, - "1200000": 60, - "2000000": 40, - "3000000": 20 - }, - "none": 100 - }, - "CTLR4C": { - "passenger": { - "500000": 100, - "800000": 80, - "1200000": 60, - "2000000": 40, - "3000000": 20 - }, - "cargo": { - "500000": 100, - "800000": 80, - "1200000": 60, - "2000000": 40, - "3000000": 20 - }, - "none": 100 - } -} \ No newline at end of file diff --git a/src/data/speedLimits.ts b/src/data/speedLimits.ts new file mode 100644 index 0000000..2546c4b --- /dev/null +++ b/src/data/speedLimits.ts @@ -0,0 +1,158 @@ +export const speedLimits: Record = { + EU07: { + passenger: { + '650000': 125 + }, + cargo: { + '2000000': 70 + }, + none: 110 + }, + '4E': { + passenger: { + '650000': 125 + }, + cargo: { + '2000000': 70 + }, + none: 110 + }, + EU07E: { + passenger: { + '650000': 125 + }, + cargo: { + '2000000': 70 + }, + none: 110 + }, + EP07: { + passenger: { + '650000': 125 + }, + cargo: null, + none: 110 + }, + EP08: { + passenger: { + '650000': 140 + }, + cargo: null, + none: 110 + }, + EP09: { + passenger: { + '650000': 160 + }, + cargo: null, + none: 160 + }, + ET22: { + passenger: { + '650000': 125 + }, + cargo: { + '1200000': 100, + '1800000': 90, + '2500000': 80, + '3100000': 70 + }, + none: 100 + }, + '201E': { + passenger: { + '650000': 125 + }, + cargo: { + '1200000': 100, + '3100000': 70 + }, + none: 125 + }, + ET41: { + passenger: { + '700000': 125 + }, + cargo: { + '4000000': 70, + '3500000': 80, + '2500000': 90, + '2000000': 100 + }, + none: 110 + }, + SM42: { + passenger: { + '95000': 90, + '200000': 80, + '300000': 70, + '450000': 60, + '750000': 50, + '1130000': 40, + '1720000': 30, + '2400000': 20 + }, + cargo: { + '95000': 90, + '200000': 80, + '300000': 70, + '450000': 60, + '750000': 50, + '1130000': 40, + '1720000': 30, + '2400000': 20 + }, + none: 90 + }, + M62: { + passenger: { + '500000': 100, + '800000': 80, + '1200000': 60, + '2000000': 40, + '3000000': 20 + }, + cargo: { + '500000': 100, + '800000': 80, + '1200000': 60, + '2000000': 40, + '3000000': 20 + }, + none: 100 + }, + ST44: { + passenger: { + '500000': 100, + '800000': 80, + '1200000': 60, + '2000000': 40, + '3000000': 20 + }, + cargo: { + '500000': 100, + '800000': 80, + '1200000': 60, + '2000000': 40, + '3000000': 20 + }, + none: 100 + }, + CTLR4C: { + passenger: { + '500000': 100, + '800000': 80, + '1200000': 60, + '2000000': 40, + '3000000': 20 + }, + cargo: { + '500000': 100, + '800000': 80, + '1200000': 60, + '2000000': 40, + '3000000': 20 + }, + none: 100 + } +};