16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-18 03:09:18 +02:00

AI now uses EIMCtrlType no 1 and 2 correctly

This commit is contained in:
Królik Uszasty
2019-03-12 18:37:14 +01:00
committed by tmj-fstate
parent 05f0fbb7dd
commit b8ff8703c5
2 changed files with 73 additions and 3 deletions

View File

@@ -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

View File

@@ -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);