From 8cd43adff3f047ef15bcccdfeaa49964e9bab555 Mon Sep 17 00:00:00 2001 From: Spythere Date: Sat, 28 Oct 2023 13:44:55 +0200 Subject: [PATCH] acceptable masses & speeds update --- src/components/tabs/StockListTab.vue | 2 +- src/constants/massLimits.json | 10 ++++++++++ src/utils/speedLimitUtils.ts | 19 ------------------- src/utils/vehicleLimitsUtils.ts | 20 ++++++++++++++++++++ src/utils/vehicleUtils.ts | 24 +++++------------------- 5 files changed, 36 insertions(+), 39 deletions(-) create mode 100644 src/constants/massLimits.json delete mode 100644 src/utils/speedLimitUtils.ts create mode 100644 src/utils/vehicleLimitsUtils.ts diff --git a/src/components/tabs/StockListTab.vue b/src/components/tabs/StockListTab.vue index 5e7ede7..c597d21 100644 --- a/src/components/tabs/StockListTab.vue +++ b/src/components/tabs/StockListTab.vue @@ -97,7 +97,7 @@ (!) diff --git a/src/constants/massLimits.json b/src/constants/massLimits.json new file mode 100644 index 0000000..29e887e --- /dev/null +++ b/src/constants/massLimits.json @@ -0,0 +1,10 @@ +{ + "EU06": [650, 2000], + "EU07": [650, 2000], + "EU07E": [650, 2000], + "EP07": [650, 650], + "EP08": [650, 650], + "EP09": [800, 800], + "ET41": [700, 4000], + "SM42": [2400, 2400] +} diff --git a/src/utils/speedLimitUtils.ts b/src/utils/speedLimitUtils.ts deleted file mode 100644 index c758b9e..0000000 --- a/src/utils/speedLimitUtils.ts +++ /dev/null @@ -1,19 +0,0 @@ -import speedLimitTable from "../constants/speedLimits.json"; -export type LocoType = keyof typeof speedLimitTable; - -export const calculateSpeedLimit = ( - locoType: LocoType, - stockMass: number, - isTrainPassenger: boolean, -) => { - const speedTable = - speedLimitTable[locoType][isTrainPassenger ? "passenger" : "cargo"]; - - if (!speedTable) return undefined; - - let speedLimit = 0; - for (const mass in speedTable) - if (stockMass > Number(mass)) speedLimit = (speedTable as any)[mass]; - - return speedLimit; -}; diff --git a/src/utils/vehicleLimitsUtils.ts b/src/utils/vehicleLimitsUtils.ts new file mode 100644 index 0000000..b55921c --- /dev/null +++ b/src/utils/vehicleLimitsUtils.ts @@ -0,0 +1,20 @@ +import speedLimits from '../constants/speedLimits.json'; +import massLimits from '../constants/massLimits.json'; + +export type SpeedLimitLocoType = keyof typeof speedLimits; +export type MassLimitLocoType = keyof typeof massLimits; + +export function calculateSpeedLimit(locoType: SpeedLimitLocoType, stockMass: number, isTrainPassenger: boolean) { + const speedTable = speedLimits[locoType][isTrainPassenger ? 'passenger' : 'cargo']; + + if (!speedTable) return undefined; + + let speedLimit = 0; + for (const mass in speedTable) if (stockMass > Number(mass)) speedLimit = (speedTable as any)[mass]; + + return speedLimit; +} + +export function calculateMassLimit(locoType: MassLimitLocoType, isTrainPassenger: boolean) { + return massLimits[locoType][isTrainPassenger ? 0 : 1] || 0; +} diff --git a/src/utils/vehicleUtils.ts b/src/utils/vehicleUtils.ts index 232a776..f23fac4 100644 --- a/src/utils/vehicleUtils.ts +++ b/src/utils/vehicleUtils.ts @@ -1,6 +1,6 @@ import { EVehicleUseType } from '../enums/EVehicleUseType'; import { ICarWagon, ILocomotive, IStore, TCarWagonGroup, TLocoGroup } from '../types'; -import { LocoType, calculateSpeedLimit } from './speedLimitUtils'; +import { MassLimitLocoType, SpeedLimitLocoType, calculateMassLimit, calculateSpeedLimit } from './vehicleLimitsUtils'; export function isLocomotive(vehicle: ILocomotive | ICarWagon): vehicle is ILocomotive { return (vehicle as ILocomotive).power !== undefined; @@ -106,33 +106,19 @@ export function maxStockSpeed(state: IStore) { const stockMass = totalMass(state); - const speedLimitByMass = calculateSpeedLimit(locoType as LocoType, stockMass, isTrainPassenger(state)); + const speedLimitByMass = calculateSpeedLimit(locoType as SpeedLimitLocoType, stockMass, isTrainPassenger(state)); return speedLimitByMass ? Math.min(stockSpeedLimit, speedLimitByMass) : stockSpeedLimit; } export function acceptableMass(state: IStore) { if (state.stockList.length == 0 || !state.stockList[0].isLoco) return 0; - const activeLocomotiveType = state.stockList[0].type; - if (/^SM/.test(activeLocomotiveType)) return 2400; + const activeLocomotiveType = state.stockList[0].type.split('-')[0]; - // Elektryczne EU07 / EP07 / EP08 / ET41 + const locoMassLimit = calculateMassLimit(activeLocomotiveType as MassLimitLocoType, isTrainPassenger(state)); - // Pasażerski elektr. - if (isTrainPassenger(state)) { - if (/^(EU|EP)/.test(activeLocomotiveType)) return 650; - if (/^ET/.test(activeLocomotiveType)) return 700; - - return 0; - } - - // Towarowy / inny elektr. - if (/^EU/.test(activeLocomotiveType)) return 2000; - if (/^ET/.test(activeLocomotiveType)) return 4000; - if (/^EP/.test(activeLocomotiveType)) return 650; - - return 0; + return locoMassLimit; } export function isTrainPassenger(state: IStore) {