16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-22 10:29:19 +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
parent d307e96275
commit c36fc565e5
2 changed files with 73 additions and 3 deletions

View File

@@ -2789,7 +2789,7 @@ bool TController::IncBrake()
OK = mvOccupied->BrakeLevelAdd(1.0); OK = mvOccupied->BrakeLevelAdd(1.0);
} }
else { else {
OK = mvOccupied->IncLocalBrakeLevel(1); OK = IncBrakeEIM();
} }
} }
else if( mvOccupied->fBrakeCtrlPos != mvOccupied->Handle->GetPos( bh_EPB ) ) { else if( mvOccupied->fBrakeCtrlPos != mvOccupied->Handle->GetPos( bh_EPB ) ) {
@@ -2807,6 +2807,28 @@ bool TController::IncBrake()
return OK; 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() bool TController::DecBrake()
{ // zmniejszenie siły hamowania { // zmniejszenie siły hamowania
bool OK = false; bool OK = false;
@@ -2844,7 +2866,7 @@ bool TController::DecBrake()
OK = mvOccupied->BrakeLevelAdd(-1.0); OK = mvOccupied->BrakeLevelAdd(-1.0);
} }
else { else {
OK = mvOccupied->DecLocalBrakeLevel(1); OK = DecBrakeEIM();
} }
} }
else if (mvOccupied->fBrakeCtrlPos != mvOccupied->Handle->GetPos(bh_EPR)) else if (mvOccupied->fBrakeCtrlPos != mvOccupied->Handle->GetPos(bh_EPR))
@@ -2863,6 +2885,28 @@ bool TController::DecBrake()
return OK; 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() bool TController::IncSpeed()
{ // zwiększenie prędkości; zwraca false, jeśli dalej się nie da zwiększać { // zwiększenie prędkości; zwraca false, jeśli dalej się nie da zwiększać
if( true == tsGuardSignal.is_playing() ) { if( true == tsGuardSignal.is_playing() ) {
@@ -3075,7 +3119,7 @@ bool TController::DecSpeed(bool force)
OK = mvControlling->DecMainCtrl(2 + (mvControlling->MainCtrlPos / 2)); OK = mvControlling->DecMainCtrl(2 + (mvControlling->MainCtrlPos / 2));
break; break;
case TEngineType::ElectricInductionMotor: case TEngineType::ElectricInductionMotor:
OK = mvControlling->DecMainCtrl(1); OK = DecSpeedEIM();
break; break;
case TEngineType::WheelsDriven: case TEngineType::WheelsDriven:
if (!mvControlling->CabNo) if (!mvControlling->CabNo)
@@ -3102,6 +3146,28 @@ bool TController::DecSpeed(bool force)
return OK; 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() void TController::SpeedSet()
{ // Ra: regulacja prędkości, wykonywana w każdym przebłysku świadomości AI { // 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 // ma dokręcać do bezoporowych i zdejmować pozycje w przypadku przekroczenia prądu

View File

@@ -211,6 +211,10 @@ private:
bool DecBrake(); bool DecBrake();
bool IncSpeed(); bool IncSpeed();
bool DecSpeed(bool force = false); bool DecSpeed(bool force = false);
bool IncBrakeEIM();
bool DecBrakeEIM();
bool IncSpeedEIM();
bool DecSpeedEIM();
void SpeedSet(); void SpeedSet();
void SpeedCntrl(double DesiredSpeed); void SpeedCntrl(double DesiredSpeed);
double ESMVelocity(bool Main); double ESMVelocity(bool Main);