From c36fc565e5c6d3557b4a71bb2a6b74b923826724 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=B3lik=20Uszasty?= Date: Tue, 12 Mar 2019 18:37:14 +0100 Subject: [PATCH] AI now uses EIMCtrlType no 1 and 2 correctly --- Driver.cpp | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++--- Driver.h | 4 +++ 2 files changed, 73 insertions(+), 3 deletions(-) diff --git a/Driver.cpp b/Driver.cpp index c8783c5e..35208c67 100644 --- a/Driver.cpp +++ b/Driver.cpp @@ -2789,7 +2789,7 @@ bool TController::IncBrake() OK = mvOccupied->BrakeLevelAdd(1.0); } else { - OK = mvOccupied->IncLocalBrakeLevel(1); + OK = IncBrakeEIM(); } } else if( mvOccupied->fBrakeCtrlPos != mvOccupied->Handle->GetPos( bh_EPB ) ) { @@ -2807,6 +2807,28 @@ bool TController::IncBrake() return OK; } +bool TController::IncBrakeEIM() +{ // zwiększenie hamowania + bool OK = false; + switch (mvControlling->EIMCtrlType) + { + case 0: + OK = mvControlling->IncLocalBrakeLevel(1); + break; + case 1: + OK = mvControlling->MainCtrlPos > 0; + if (OK) + mvControlling->MainCtrlPos = 0; + break; + case 2: + OK = mvControlling->MainCtrlPos > 1; + if (OK) + mvControlling->MainCtrlPos = 1; + break; + } + return OK; +} + bool TController::DecBrake() { // zmniejszenie siły hamowania bool OK = false; @@ -2844,7 +2866,7 @@ bool TController::DecBrake() OK = mvOccupied->BrakeLevelAdd(-1.0); } else { - OK = mvOccupied->DecLocalBrakeLevel(1); + OK = DecBrakeEIM(); } } else if (mvOccupied->fBrakeCtrlPos != mvOccupied->Handle->GetPos(bh_EPR)) @@ -2863,6 +2885,28 @@ bool TController::DecBrake() return OK; }; +bool TController::DecBrakeEIM() +{ // zmniejszenie siły hamowania + bool OK = false; + switch (mvControlling->EIMCtrlType) + { + case 0: + OK = mvControlling->DecLocalBrakeLevel(1); + break; + case 1: + OK = mvControlling->MainCtrlPos < 2; + if (OK) + mvControlling->MainCtrlPos = 2; + break; + case 2: + OK = mvControlling->MainCtrlPos < 3; + if (OK) + mvControlling->MainCtrlPos = 3; + break; + } + return OK; +} + bool TController::IncSpeed() { // zwiększenie prędkości; zwraca false, jeśli dalej się nie da zwiększać if( true == tsGuardSignal.is_playing() ) { @@ -3075,7 +3119,7 @@ bool TController::DecSpeed(bool force) OK = mvControlling->DecMainCtrl(2 + (mvControlling->MainCtrlPos / 2)); break; case TEngineType::ElectricInductionMotor: - OK = mvControlling->DecMainCtrl(1); + OK = DecSpeedEIM(); break; case TEngineType::WheelsDriven: if (!mvControlling->CabNo) @@ -3102,6 +3146,28 @@ bool TController::DecSpeed(bool force) return OK; }; +bool TController::DecSpeedEIM() +{ // zmniejszenie prędkości (ale nie hamowanie) + bool OK = false; // domyślnie false, aby wyszło z pętli while + switch (mvControlling->EIMCtrlType) + { + case 0: + OK = mvControlling->DecMainCtrl(1); + break; + case 1: + OK = mvControlling->MainCtrlPos > 4; + if (OK) + mvControlling->MainCtrlPos = 4; + break; + case 2: + OK = mvControlling->MainCtrlPos > 2; + if (OK) + mvControlling->MainCtrlPos = 2; + break; + } + return OK; +} + void TController::SpeedSet() { // Ra: regulacja prędkości, wykonywana w każdym przebłysku świadomości AI // ma dokręcać do bezoporowych i zdejmować pozycje w przypadku przekroczenia prądu diff --git a/Driver.h b/Driver.h index 53f8900a..e1b29651 100644 --- a/Driver.h +++ b/Driver.h @@ -211,6 +211,10 @@ private: bool DecBrake(); bool IncSpeed(); bool DecSpeed(bool force = false); + bool IncBrakeEIM(); + bool DecBrakeEIM(); + bool IncSpeedEIM(); + bool DecSpeedEIM(); void SpeedSet(); void SpeedCntrl(double DesiredSpeed); double ESMVelocity(bool Main);