diff --git a/Driver.cpp b/Driver.cpp index 488ec00d..b6bc001e 100644 --- a/Driver.cpp +++ b/Driver.cpp @@ -1046,21 +1046,24 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN moveSwitchFound; // rozjazd z przodu/pod ogranicza np. sens skanowania wstecz else if (sSpeedTable[i].iFlags & spEvent) // W4 może się deaktywować { // jeżeli event, może być potrzeba wysłania komendy, aby ruszył - //sprawdzanie eventów pasywnych miniętych - if (sSpeedTable[i].fDist < 0.0 && sSemNext == &sSpeedTable[i]) - { - WriteLog("TableUpdate: semaphor " + sSemNext->GetName() + " passed"); - sSemNext = NULL; // jeśli minęliśmy semafor od ograniczenia to go kasujemy ze - // zmiennej sprawdzającej dla skanowania w przód - } - if (sSpeedTable[i].fDist > 0.0 && !sSemNext && - sSpeedTable[i].IsProperSemaphor(OrderCurrentGet())) - { - sSemNext = &sSpeedTable[i]; // jeśli jest mienięty poprzedni semafor a wcześniej - // byl nowy to go dorzucamy do zmiennej, żeby cały - // czas widział najbliższy - WriteLog("TableUpdate: Next semaphor: " + sSemNext->GetName()); - } + // sprawdzanie eventów pasywnych miniętych + if (sSpeedTable[i].fDist < 0.0 && sSemNext == &sSpeedTable[i]) + { + WriteLog("TableUpdate: semaphor " + sSemNext->GetName() + " passed"); + sSemNext = NULL; // jeśli minęliśmy semafor od ograniczenia to go kasujemy ze + // zmiennej sprawdzającej dla skanowania w przód + } + if (sSpeedTable[i].fDist > 0.0 && + sSpeedTable[i].IsProperSemaphor(OrderCurrentGet()) && + (!sSemNext || + (sSemNext && sSemNext->fVelNext != 0 && sSpeedTable[i].fVelNext == 0))) + { + sSemNext = &sSpeedTable[i]; // jeśli jest mienięty poprzedni + // semafor a wcześniej + // byl nowy to go dorzucamy do zmiennej, żeby cały + // czas widział najbliższy + WriteLog("TableUpdate: Next semaphor: " + sSemNext->GetName()); + } if (sSpeedTable[i].iFlags & spOutsideStation) { // jeśli W5, to reakcja zależna od trybu jazdy if (OrderCurrentGet() & Obey_train)