diff --git a/Driver.cpp b/Driver.cpp index cf5a91d1..ae397630 100644 --- a/Driver.cpp +++ b/Driver.cpp @@ -243,6 +243,7 @@ bool TSpeedPos::Update(vector3 *p, vector3 *dir, double &len) if ((iFlags & spElapsed) == 0) // jeśli nie wjechał if (trTrack->iNumDynamics > 0) // a skrzyżowanie zawiera pojazd { + if (Global::iWriteLogEnabled & 8) WriteLog("Tor " + trTrack->NameGet() + " zajety przed pojazdem. Num=" + trTrack->iNumDynamics + "Dist= " + fDist); fVelNext = 0.0; // to zabronić wjazdu (chyba że ten z przodu też jedzie prosto) @@ -265,6 +266,7 @@ bool TSpeedPos::Update(vector3 *p, vector3 *dir, double &len) trTrack->iNumDynamics > 0) // jeśli jeszcze nie wjechano na tor, a coś na nim jest { + if (Global::iWriteLogEnabled & 8) WriteLog("Rozjazd " + trTrack->NameGet() + " zajety przed pojazdem. Num=" + trTrack->iNumDynamics + "Dist= "+fDist); //fDist -= 30.0; fVelNext = 0.0; // to niech stanie w zwiększonej odległości @@ -416,6 +418,7 @@ bool TController::TableNotFound(TEvent *e) spEvent)) // o ile używana pozycja if (sSpeedTable[i].evEvent == e) { + if (Global::iWriteLogEnabled & 8) WriteLog("TableNotFound: Event already in SpeedTable: " + sSpeedTable[i].evEvent->asName); return false; // już jest, drugi raz dodawać nie ma po co } @@ -517,22 +520,27 @@ void TController::TableTraceRoute(double fDistance, TDynamicObject *pVehicle) if (TableNotFound(pEvent)) // jeśli nie ma if (TableAddNew()) { - WriteLog("TableTraceRoute: new event found " + pEvent->asName + " by " + - OwnerName()); - if (sSpeedTable[iLast].Set( - pEvent, fCurrentDistance, - OrderCurrentGet())) // dodanie odczytu sygnału + if (Global::iWriteLogEnabled & 8) + WriteLog("TableTraceRoute: new event found " + pEvent->asName + " by " + OwnerName()); + if (sSpeedTable[iLast].Set( pEvent, fCurrentDistance, OrderCurrentGet())) // dodanie odczytu sygnału { fDistance = fCurrentDistance; // jeśli sygnał stop, to nie ma // potrzeby dalej skanować sSemNextStop = &sSpeedTable[iLast]; if (!sSemNext) sSemNext = &sSpeedTable[iLast]; + if (Global::iWriteLogEnabled & 8) WriteLog("Signal stop. Next Semaphor ", false); if (sSemNextStop) + { + if (Global::iWriteLogEnabled & 8) WriteLog(sSemNextStop->GetName()); + } else + { + if (Global::iWriteLogEnabled & 8) WriteLog("none"); + } } else { @@ -540,11 +548,18 @@ void TController::TableTraceRoute(double fDistance, TDynamicObject *pVehicle) sSemNext == NULL) sSemNext = &sSpeedTable[iLast]; // sprawdzamy czy pierwszy na drodze + if (Global::iWriteLogEnabled & 8) WriteLog("Signal forward. Next Semaphor ", false); if (sSemNext) + { + if (Global::iWriteLogEnabled & 8) WriteLog(sSemNext->GetName()); + } else + { + if (Global::iWriteLogEnabled & 8) WriteLog("none"); + } } } } // event dodajemy najpierw, żeby móc sprawdzić, czy tor został dodany po @@ -693,11 +708,12 @@ void TController::TableCheck(double fDistance) { if (sSpeedTable[i].Update(&pos, &dir, len)) { - WriteLog("TableCheck: Switch change. Delete next entries. (" + - sSpeedTable[i].trTrack->NameGet() + ")"); + if (Global::iWriteLogEnabled & 8) + WriteLog("TableCheck: Switch change. Delete next entries. (" + sSpeedTable[i].trTrack->NameGet() + ")"); int k = (iLast + 1) % iSpeedTableSize; // skanujemy razem z ostatnią pozycją for (int j = (i+1) % iSpeedTableSize; j != k; j = (j + 1) % iSpeedTableSize) { // kasowanie wszystkich rekordów za zmienioną zwrotnicą + if (Global::iWriteLogEnabled & 8) WriteLog("TableCheck: Delete from table: " + sSpeedTable[j].GetName()); sSpeedTable[j].iFlags = 0; if (&sSpeedTable[j] == sSemNext) @@ -705,8 +721,11 @@ void TController::TableCheck(double fDistance) if (&sSpeedTable[j] == sSemNextStop) sSemNextStop = NULL; // przy kasowaniu tabelki zrzucamy także semafor } + if (Global::iWriteLogEnabled & 8) + { WriteLog("TableCheck: Delete entries OK."); WriteLog("TableCheck: New last element: " + sSpeedTable[i].GetName()); + } iLast = i; // pokazujemy gdzie jest ostatni kawałek break; // nie kontynuujemy pętli, trzeba doskanować ciąg dalszy } @@ -1052,12 +1071,14 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN // sprawdzanie eventów pasywnych miniętych if (sSpeedTable[i].fDist < 0.0 && sSemNext == &sSpeedTable[i]) { + if (Global::iWriteLogEnabled & 8) WriteLog("TableUpdate: semaphor " + sSemNext->GetName() + " passed by " + OwnerName()); 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 && sSemNextStop == &sSpeedTable[i]) { + if (Global::iWriteLogEnabled & 8) WriteLog("TableUpdate: semaphor " + sSemNextStop->GetName() + " passed by " + OwnerName()); sSemNextStop = NULL; // jeśli minęliśmy semafor od ograniczenia to go kasujemy ze // zmiennej sprawdzającej dla skanowania w przód @@ -1071,6 +1092,7 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN // semafor a wcześniej // byl nowy to go dorzucamy do zmiennej, żeby cały // czas widział najbliższy + if (Global::iWriteLogEnabled & 8) WriteLog("TableUpdate: Next semaphor: " + sSemNext->GetName() + " by " + OwnerName()); } if (!sSemNextStop || (sSemNextStop && sSemNextStop->fVelNext != 0 && @@ -1142,6 +1164,7 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN { if (sSpeedTable[i].fSectionVelocityDist == 0.0) { + if (Global::iWriteLogEnabled & 8) WriteLog("TableUpdate: Event is behind. SVD = 0: " + sSpeedTable[i].evEvent->asName); sSpeedTable[i].iFlags = 0; // jeśli punktowy to kasujemy i nie dajemy ograniczenia na stałe } @@ -1155,6 +1178,7 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN else if (sSpeedTable[i].fDist < -fLength) { // jeśli większe to musi wyjechać za poprzednie VelLimitLast = sSpeedTable[i].fVelNext; + if (Global::iWriteLogEnabled & 8) WriteLog("TableUpdate: Event is behind. SVD < 0: " + sSpeedTable[i].evEvent->asName); sSpeedTable[i].iFlags = 0; // wyjechaliśmy poza poprzednie, można skasować } @@ -1173,6 +1197,7 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN else if (sSpeedTable[i].fDist < -fLength - sSpeedTable[i].fSectionVelocityDist) { // VelLimitLast = -1.0; + if (Global::iWriteLogEnabled & 8) WriteLog("TableUpdate: Event is behind. SVD > 0: " + sSpeedTable[i].evEvent->asName); sSpeedTable[i].iFlags = 0; // wyjechaliśmy poza poprzednie, można skasować } @@ -1351,6 +1376,7 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN void TController::TablePurger() { // odtykacz: usuwa mniej istotne pozycje ze środka tabelki, aby uniknąć zatkania //(np. brak ograniczenia pomiędzy zwrotnicami, usunięte sygnały, minięte odcinki łuku) + if (Global::iWriteLogEnabled & 8) WriteLog("TablePurger: Czyszczenie tableki."); int i, j, k = iLast - iFirst; // może być 15 albo 16 pozycji, ostatniej nie ma co sprawdzać if (k < 0) @@ -1370,6 +1396,7 @@ void TController::TablePurger() if (&sSpeedTable[(i + 1) % iSpeedTableSize] == sSemNextStop) sSemNextStop = &sSpeedTable[i]; // przeniesienie znacznika o semaforze } + if (Global::iWriteLogEnabled & 8) WriteLog("Odtykacz usuwa pozycję"); iLast = (iLast - 1 + iSpeedTableSize) % iSpeedTableSize; // cofnięcie z zawinięciem return; @@ -1394,6 +1421,7 @@ void TController::TablePurger() delete[] sSpeedTable; // to już nie potrzebne sSpeedTable = t; // bo jest nowe iSpeedTableSize += 16; + if (Global::iWriteLogEnabled & 8) WriteLog("Tabelka powiększona do "+AnsiString(iSpeedTableSize)+" pozycji"); }; //---------------------------------------------------------------------------