From d3260b1e0105c765b3fa1d78c7cc800554387e51 Mon Sep 17 00:00:00 2001 From: Hirek Date: Tue, 7 Jan 2025 14:13:54 +0100 Subject: [PATCH] Bring back hasler and door lock tweaks --- McZapkie/MOVER.h | 2 ++ McZapkie/Mover.cpp | 10 ++++++---- Train.cpp | 15 +++++++++++---- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/McZapkie/MOVER.h b/McZapkie/MOVER.h index b45e49fc..d24a81a2 100644 --- a/McZapkie/MOVER.h +++ b/McZapkie/MOVER.h @@ -971,6 +971,7 @@ class TMoverParameters std::array instances; // door on the right and left side of the vehicle // ld outputs bool is_locked{false}; + double doorLockSpeed = 10.0; // predkosc przy ktorej wyzwalana jest blokada drzwi }; struct water_heater @@ -1415,6 +1416,7 @@ class TMoverParameters #endif double MirrorMaxShift{90.0}; double MirrorVelClose{5.0}; + double maxTachoSpeed = 0.0; // maksymalna predkosc na tarczce predkosciomierza analogowego bool MirrorForbidden{false}; /*czy jest pozwolenie na otworzenie lusterek (przycisk)*/ bool ScndS = false; /*Czy jest bocznikowanie na szeregowej*/ bool SpeedCtrl = false; /*czy jest tempomat*/ diff --git a/McZapkie/Mover.cpp b/McZapkie/Mover.cpp index 57fe8cf3..60d4b10a 100644 --- a/McZapkie/Mover.cpp +++ b/McZapkie/Mover.cpp @@ -8615,10 +8615,7 @@ TMoverParameters::update_doors( double const Deltatime ) { || ( Doors.close_control == control_t::conductor ) || ( Doors.close_control == control_t::mixed ) }; - Doors.is_locked = - ( true == Doors.has_lock ) - && ( true == Doors.lock_enabled ) - && ( Vel >= 10.0 ); + Doors.is_locked = (true == Doors.has_lock) && (true == Doors.lock_enabled) && (Vel >= Doors.doorLockSpeed); for( auto &door : Doors.instances ) { // revoke permit if... @@ -10319,6 +10316,7 @@ void TMoverParameters::LoadFIZ_Doors( std::string const &line ) { extract_value( Doors.has_warning, "DoorClosureWarning", line, "" ); extract_value( Doors.has_autowarning, "DoorClosureWarningAuto", line, "" ); extract_value( Doors.has_lock, "DoorBlocked", line, "" ); + extract_value(Doors.doorLockSpeed, "DoorLockSpeed", line, ""); { auto const remotedoorcontrol { @@ -10567,6 +10565,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 d179af07..06462b52 100644 --- a/Train.cpp +++ b/Train.cpp @@ -7005,16 +7005,23 @@ bool TTrain::Update( double const Deltatime ) // McZapkie: predkosc wyswietlana na tachometrze brana jest z obrotow kol auto const maxtacho { 3.0 }; + 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)); fTachoVelocity = static_cast( std::min( std::abs(11.31 * mvControlled->WheelDiameter * mvControlled->nrot), mvControlled->Vmax * 1.05) ); { // skacze osobna zmienna float ff = simulation::Time.data().wSecond; // skacze co sekunde - pol sekundy // pomiar, pol sekundy ustawienie if (ff != fTachoTimer) // jesli w tej sekundzie nie zmienial { - if (fTachoVelocity > 1) // jedzie - fTachoVelocityJump = fTachoVelocity + (2.0 - LocalRandom(3) + LocalRandom(3)) * 0.5; - else - fTachoVelocityJump = 0; // stoi + if (fTachoVelocity >= 5) // jedzie + fTachoVelocityJump = fTachoVelocity + (2.0 - LocalRandom(3) + LocalRandom(3)) * 0.5; + else if (fTachoVelocity < 5 && fTachoVelocity > 1) + fTachoVelocityJump = Random(0, 4); // tu ma sie bujac jak wariat i zatrzymac na jakiejs predkosci + // fTachoVelocityJump = 0; // stoi fTachoTimer = ff; // juz zmienil } }