From fbe570950d9439c5ca2fc3eedbddf96f0379c14a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=B3lik=20Uszasty?= Date: Sun, 28 Apr 2019 10:49:49 +0200 Subject: [PATCH] Delayed ED braking for ELF --- DynObj.cpp | 8 ++++++++ DynObj.h | 1 + McZapkie/Mover.cpp | 2 -- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/DynObj.cpp b/DynObj.cpp index 9c0bd8e1..4f39db3a 100644 --- a/DynObj.cpp +++ b/DynObj.cpp @@ -2783,6 +2783,8 @@ bool TDynamicObject::Update(double dt, double dt1) auto eimic = Min0R(MoverParameters->eimic, MoverParameters->eimicSpeedCtrl); MoverParameters->eimic_real = eimic; + if (MoverParameters->EIMCtrlType == 2 && MoverParameters->MainCtrlPos == 0) + eimic = -1.0; MoverParameters->SendCtrlToNext("EIMIC", Max0R(0, eimic), MoverParameters->CabNo); auto LBR = Max0R(-eimic, 0); auto eim_lb = (Mechanik->AIControllFlag || !MoverParameters->LocHandleTimeTraxx ? 0 : MoverParameters->eim_localbrake); @@ -2892,6 +2894,10 @@ bool TDynamicObject::Update(double dt, double dt1) && ( MoverParameters->BrakeOpModeFlag & bom_MED ) ) ) { FzadED = std::min( Fzad, FmaxED ); } + if (MoverParameters->EIMCtrlType == 2 && MoverParameters->MainCtrlPos < 2 && MoverParameters->eimic > -0.999) + { + FzadED = std::min(FzadED, MED_oldFED); + } if ((MoverParameters->BrakeCtrlPos == MoverParameters->Handle->GetPos(bh_EB)) && (MoverParameters->eimc[eimc_p_abed] < 0.001)) FzadED = 0; //pętla bezpieczeństwa - bez ED @@ -3069,6 +3075,8 @@ bool TDynamicObject::Update(double dt, double dt1) delete[] FzED; delete[] FzEP; delete[] FmaxEP; + + MED_oldFED = FzadED; } Mechanik->UpdateSituation(dt1); // przebłyski świadomości AI diff --git a/DynObj.h b/DynObj.h index 1bbe000a..4b89c201 100644 --- a/DynObj.h +++ b/DynObj.h @@ -658,6 +658,7 @@ private: double MEDLogTime = 0; double MEDLogInactiveTime = 0; int MEDLogCount = 0; + double MED_oldFED = 0; // vehicle shaking calculations // TBD, TODO: make an object out of it diff --git a/McZapkie/Mover.cpp b/McZapkie/Mover.cpp index 15f84897..74783d83 100644 --- a/McZapkie/Mover.cpp +++ b/McZapkie/Mover.cpp @@ -6068,8 +6068,6 @@ void TMoverParameters::CheckEIMIC(double dt) switch (MainCtrlPos) { case 0: - eimic = -1.0; - break; case 1: eimic -= clamp(1.0 + eimic, 0.0, dt*0.15); //odejmuj do -1 if (eimic > 0) eimic = 0;