From b6ca21d2803a15a4e3d31af6dd247d1d5a469545 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=B3lik=20Uszasty?= Date: Mon, 9 Sep 2019 22:39:45 +0200 Subject: [PATCH] Manual and automatic sanding working independently in EIM vehicles --- McZapkie/MOVER.h | 5 ++++ McZapkie/Mover.cpp | 61 ++++++++++++++++++++++++++++++++++++++++++++-- Train.cpp | 4 +-- 3 files changed, 66 insertions(+), 4 deletions(-) diff --git a/McZapkie/MOVER.h b/McZapkie/MOVER.h index 5575c5d9..944d917c 100644 --- a/McZapkie/MOVER.h +++ b/McZapkie/MOVER.h @@ -1197,6 +1197,9 @@ public: double UnitBrakeForce = 0.0; /*!s siła hamowania przypadająca na jeden element*/ double Ntotal = 0.0; /*!s siła nacisku klockow*/ bool SlippingWheels = false; bool SandDose = false; /*! poslizg kol, sypanie piasku*/ + bool SandDoseManual = false; /*piaskowanie reczne*/ + bool SandDoseAuto = false; /*piaskowanie automatyczne*/ + bool SandDoseAutoAllow = true; /*zezwolenie na automatyczne piaskowanie*/ double Sand = 0.0; /*ilosc piasku*/ double BrakeSlippingTimer = 0.0; /*pomocnicza zmienna do wylaczania przeciwposlizgu*/ double dpBrake = 0.0; double dpPipe = 0.0; double dpMainValve = 0.0; double dpLocalValve = 0.0; @@ -1488,6 +1491,8 @@ public: bool AddPulseForce(int Multipler);/*dla drezyny*/ + bool SandboxManual( bool const State, range_t const Notify = range_t::consist );/*wlacza/wylacza sypanie piasku*/ + bool SandboxAuto( bool const State, range_t const Notify = range_t::consist );/*wlacza/wylacza sypanie piasku*/ bool Sandbox( bool const State, range_t const Notify = range_t::consist );/*wlacza/wylacza sypanie piasku*/ /*! zbijanie czuwaka/SHP*/ diff --git a/McZapkie/Mover.cpp b/McZapkie/Mover.cpp index 1e5d59aa..eb490ede 100644 --- a/McZapkie/Mover.cpp +++ b/McZapkie/Mover.cpp @@ -2341,6 +2341,63 @@ bool TMoverParameters::AddPulseForce(int Multipler) return APF; } +// ************************************************************************************************* +// yB: 20190909 +// sypanie piasku reczne +// ************************************************************************************************* +bool TMoverParameters::SandboxManual(bool const State, range_t const Notify) +{ + bool result{ false }; + + if (SandDoseManual != State) { + if (SandDoseManual == false) { + // switch on + if (Sand > 0) { + SandDoseManual = true; + result = true; + } + } + else { + // switch off + SandDoseManual = false; + result = true; + } + } + + Sandbox(SandDoseManual || SandDoseAuto, Notify); + + return result; +} + +// ************************************************************************************************* +// yB: 20190909 +// sypanie piasku automatyczne +// ************************************************************************************************* +bool TMoverParameters::SandboxAuto(bool const State, range_t const Notify) +{ + bool result{ false }; + bool NewState = State && SandDoseAutoAllow; + if (SandDoseAuto != NewState) { + if (SandDoseAuto == false) { + // switch on + if (Sand > 0) { + SandDoseAuto = true; + result = true; + } + } + else { + // switch off + SandDoseAuto = false; + result = true; + } + } + + Sandbox(SandDoseManual || SandDoseAuto, Notify); + + return result; +} + + // ************************************************************************************************* // Q: 20160713 // sypanie piasku @@ -5507,11 +5564,11 @@ double TMoverParameters::TractionForce( double dt ) { if( ( SlippingWheels ) ) { PosRatio = 0; tmp = 10; - Sandbox( true, range_t::unit ); + SandboxAuto( true, range_t::unit ); } // przeciwposlizg else { // switch sandbox off - Sandbox( false, range_t::unit ); + SandboxAuto( false, range_t::unit ); } eimv_pr += Max0R(Min0R(PosRatio - eimv_pr, 0.02), -0.02) * 12 * diff --git a/Train.cpp b/Train.cpp index 36b276d8..f4d802a5 100644 --- a/Train.cpp +++ b/Train.cpp @@ -1437,13 +1437,13 @@ void TTrain::OnCommand_sandboxactivate( TTrain *Train, command_data const &Comma // visual feedback Train->ggSandButton.UpdateValue( 1.0, Train->dsbSwitch ); - Train->mvControlled->Sandbox( true ); + Train->mvControlled->SandboxManual( true ); } else if( Command.action == GLFW_RELEASE) { // visual feedback Train->ggSandButton.UpdateValue( 0.0 ); - Train->mvControlled->Sandbox( false ); + Train->mvControlled->SandboxManual( false ); } }