From d66d4751c22c7de454fd8180ec1f583c0c80cc88 Mon Sep 17 00:00:00 2001 From: Hirek Date: Mon, 6 Jan 2025 20:27:25 +0100 Subject: [PATCH] Add logic for defining max analog tacho display speed MaxTachoSpeed in Cntrl. section in fiz --- McZapkie/MOVER.h | 1 + McZapkie/Mover.cpp | 4 ++++ Train.cpp | 8 +++++++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/McZapkie/MOVER.h b/McZapkie/MOVER.h index 29e3f0b4..8d469041 100644 --- a/McZapkie/MOVER.h +++ b/McZapkie/MOVER.h @@ -1191,6 +1191,7 @@ public: int Lights[2][17]; // pozycje świateł, przód - tył, 1 .. 16 int ScndInMain{ 0 }; /*zaleznosc bocznika od nastawnika*/ bool MBrake = false; /*Czy jest hamulec reczny*/ + double maxTachoSpeed = 0.0; // maksymalna predkosc na tarczce predkosciomierza analogowego double StopBrakeDecc = 0.0; bool ReleaseParkingBySpringBrake { false }; bool ReleaseParkingBySpringBrakeWhenDoorIsOpen{ false }; diff --git a/McZapkie/Mover.cpp b/McZapkie/Mover.cpp index 886209a9..7d030eed 100644 --- a/McZapkie/Mover.cpp +++ b/McZapkie/Mover.cpp @@ -10540,6 +10540,10 @@ void TMoverParameters::LoadFIZ_Cntrl( std::string const &line ) { } // mbrake extract_value( MBrake, "ManualBrake", line, "" ); + + // maksymalna predkosc dostepna na tarczce predkosciomierza + extract_value(maxTachoSpeed, "MaxTachoSpeed", line, ""); + // dynamicbrake { std::map dynamicbrakes{ diff --git a/Train.cpp b/Train.cpp index 446a3fbe..f460a309 100644 --- a/Train.cpp +++ b/Train.cpp @@ -6943,7 +6943,13 @@ bool TTrain::Update( double const Deltatime ) // McZapkie: predkosc wyswietlana na tachometrze brana jest z obrotow kol auto const maxtacho { 3.0 }; - fTachoVelocity = static_cast( std::min( std::abs(11.31 * mvControlled->WheelDiameter * mvControlled->nrot), mvControlled->Vmax * 1.05) ); + + double maxSpeed = mvControlled->Vmax * 1.05; // zachowanie starej logiki jak nie ma definicji max tarczki + if (mvOccupied->maxTachoSpeed != 0) + { + maxSpeed = mvOccupied->maxTachoSpeed; + } + fTachoVelocity = static_cast(std::min(std::abs(11.31 * mvControlled->WheelDiameter * mvControlled->nrot), maxSpeed)); { // skacze osobna zmienna float ff = simulation::Time.data().wSecond; // skacze co sekunde - pol sekundy // pomiar, pol sekundy ustawienie