mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-23 02:49:19 +02:00
prevent AI SpeedCtrlPowerInc deadlock
This commit is contained in:
10
Driver.cpp
10
Driver.cpp
@@ -3893,17 +3893,17 @@ void TController::SpeedSet()
|
|||||||
void TController::SpeedCntrl(double DesiredSpeed)
|
void TController::SpeedCntrl(double DesiredSpeed)
|
||||||
{
|
{
|
||||||
if (mvControlling->SpeedCtrlUnit.PowerStep > 0) {
|
if (mvControlling->SpeedCtrlUnit.PowerStep > 0) {
|
||||||
while (mvControlling->SpeedCtrlUnit.DesiredPower < mvControlling->SpeedCtrlUnit.MaxPower)
|
if (!mvControlling->ScndCtrlPos)
|
||||||
{
|
mvControlling->IncScndCtrl(1);
|
||||||
mvControlling->SpeedCtrlPowerInc();
|
while (mvControlling->SpeedCtrlUnit.DesiredPower < mvControlling->SpeedCtrlUnit.MaxPower
|
||||||
}
|
&& mvControlling->SpeedCtrlPowerInc());
|
||||||
}
|
}
|
||||||
if (mvControlling->EngineType == TEngineType::DieselEngine)
|
if (mvControlling->EngineType == TEngineType::DieselEngine)
|
||||||
{
|
{
|
||||||
if (DesiredSpeed < 0.1) {
|
if (DesiredSpeed < 0.1) {
|
||||||
mvControlling->DecScndCtrl(2);
|
mvControlling->DecScndCtrl(2);
|
||||||
DesiredSpeed = 0;
|
DesiredSpeed = 0;
|
||||||
}
|
}
|
||||||
else if (mvControlling->ScndCtrlPos < 1) {
|
else if (mvControlling->ScndCtrlPos < 1) {
|
||||||
mvControlling->IncScndCtrl(1);
|
mvControlling->IncScndCtrl(1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1824,8 +1824,8 @@ public:
|
|||||||
void SpeedCtrlButton(int button);
|
void SpeedCtrlButton(int button);
|
||||||
void SpeedCtrlInc();
|
void SpeedCtrlInc();
|
||||||
void SpeedCtrlDec();
|
void SpeedCtrlDec();
|
||||||
void SpeedCtrlPowerInc();
|
bool SpeedCtrlPowerInc();
|
||||||
void SpeedCtrlPowerDec();
|
bool SpeedCtrlPowerDec();
|
||||||
|
|
||||||
/*-funkcje typowe dla lokomotywy spalinowej z przekladnia mechaniczna*/
|
/*-funkcje typowe dla lokomotywy spalinowej z przekladnia mechaniczna*/
|
||||||
bool dizel_EngageSwitch(double state);
|
bool dizel_EngageSwitch(double state);
|
||||||
|
|||||||
@@ -7199,18 +7199,28 @@ void TMoverParameters::SpeedCtrlDec()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TMoverParameters::SpeedCtrlPowerInc()
|
bool TMoverParameters::SpeedCtrlPowerInc()
|
||||||
{
|
{
|
||||||
if ((SpeedCtrl) && (ScndCtrlPos > 0)) {
|
if (!(SpeedCtrl && ScndCtrlPos > 0))
|
||||||
SpeedCtrlUnit.DesiredPower = std::min(SpeedCtrlUnit.DesiredPower + SpeedCtrlUnit.PowerStep, SpeedCtrlUnit.MaxPower);
|
return false;
|
||||||
}
|
|
||||||
|
if (SpeedCtrlUnit.DesiredPower == SpeedCtrlUnit.MaxPower)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
SpeedCtrlUnit.DesiredPower = std::min(SpeedCtrlUnit.DesiredPower + SpeedCtrlUnit.PowerStep, SpeedCtrlUnit.MaxPower);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TMoverParameters::SpeedCtrlPowerDec()
|
bool TMoverParameters::SpeedCtrlPowerDec()
|
||||||
{
|
{
|
||||||
if ((SpeedCtrl) && (ScndCtrlPos > 0)) {
|
if (!(SpeedCtrl && ScndCtrlPos > 0))
|
||||||
SpeedCtrlUnit.DesiredPower = std::max(SpeedCtrlUnit.DesiredPower - SpeedCtrlUnit.PowerStep, SpeedCtrlUnit.MinPower);
|
return false;
|
||||||
}
|
|
||||||
|
if (SpeedCtrlUnit.DesiredPower == SpeedCtrlUnit.MinPower)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
SpeedCtrlUnit.DesiredPower = std::max(SpeedCtrlUnit.DesiredPower - SpeedCtrlUnit.PowerStep, SpeedCtrlUnit.MinPower);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// *************************************************************************************************
|
// *************************************************************************************************
|
||||||
|
|||||||
Reference in New Issue
Block a user