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

Repair bug in clearing table after switch changing.

This commit is contained in:
firleju
2016-01-08 16:21:13 +01:00
parent 0c48ee726a
commit c50ebbef83

View File

@@ -610,18 +610,22 @@ void TController::TableCheck(double fDistance)
{ {
if (sSpeedTable[i].Update(&pos, &dir, len)) if (sSpeedTable[i].Update(&pos, &dir, len))
{ {
WriteLog("TableCheck: Przestawiona zwrotnica. Kasowanie tableki."); WriteLog("TableCheck: Switch change. Delete next entries. (" +
sSpeedTable[i].trTrack->NameGet() + ")");
int k = (iLast + 1) % iSpeedTableSize; // skanujemy razem z ostatnią pozycją int k = (iLast + 1) % iSpeedTableSize; // skanujemy razem z ostatnią pozycją
for (int j = (i+1) % iSpeedTableSize; j != k; j = (j + 1) % iSpeedTableSize) for (int j = (i+1) % iSpeedTableSize; j != k; j = (j + 1) % iSpeedTableSize)
{ // kasowanie wszystkich rekordów za zmienioną zwrotnicą { // kasowanie wszystkich rekordów za zmienioną zwrotnicą
//if (sSpeedTable[j].iFlags & spTrack) if (sSpeedTable[j].iFlags & spTrack)
// WriteLog("TableCheck: Switch change. Delete from table: " + sSpeedTable[j].trTrack->NameGet()); WriteLog("TableCheck: Delete from table: " + sSpeedTable[j].trTrack->NameGet());
//else if (sSpeedTable[j].iFlags & spEvent) else if (sSpeedTable[j].iFlags & spEvent)
// WriteLog("TableCheck: Switch change. Delete from table: " + sSpeedTable[j].evEvent->asName); WriteLog("TableCheck: Delete from table: " + sSpeedTable[j].evEvent->asName);
sSpeedTable[j].iFlags = 0; sSpeedTable[j].iFlags = 0;
} }
WriteLog("TableCheck: Kasowanie tableki OK."); WriteLog("TableCheck: Delete entries OK.");
TablePurger(); if (sSpeedTable[i].iFlags & spTrack)
WriteLog("TableCheck: New last element: " + sSpeedTable[i].trTrack->NameGet());
else if (sSpeedTable[i].iFlags & spEvent)
WriteLog("TableCheck: New last element: " + sSpeedTable[i].evEvent->asName);
iLast = i; // pokazujemy gdzie jest ostatni kawałek iLast = i; // pokazujemy gdzie jest ostatni kawałek
break; // nie kontynuujemy pętli, trzeba doskanować ciąg dalszy break; // nie kontynuujemy pętli, trzeba doskanować ciąg dalszy
} }
@@ -629,7 +633,7 @@ void TController::TableCheck(double fDistance)
{ {
if (sSpeedTable[i].fDist < -fLength) // a skład wyjechał całą długością poza if (sSpeedTable[i].fDist < -fLength) // a skład wyjechał całą długością poza
{ // degradacja pozycji { // degradacja pozycji
WriteLog( "TableCheck: Track is behind. Delete from table: " + sSpeedTable[i].trTrack->NameGet()); // WriteLog( "TableCheck: Track is behind. Delete from table: " + sSpeedTable[i].trTrack->NameGet());
sSpeedTable[i].iFlags &= ~spEnabled; // nie liczy się sSpeedTable[i].iFlags &= ~spEnabled; // nie liczy się
} }
else if ((sSpeedTable[i].iFlags & 0xF0000028) == else if ((sSpeedTable[i].iFlags & 0xF0000028) ==
@@ -638,7 +642,7 @@ void TController::TableCheck(double fDistance)
{ {
sSpeedTable[i].iFlags = sSpeedTable[i].iFlags =
0; // to nie ma go po co trzymać (odtykacz usunie ze środka) 0; // to nie ma go po co trzymać (odtykacz usunie ze środka)
WriteLog("TableCheck: Track without speed. Delete from table: " + sSpeedTable[i].trTrack->NameGet()); // WriteLog("TableCheck: Track without speed. Delete from table: " + sSpeedTable[i].trTrack->NameGet());
} }
} }
else if (sSpeedTable[i].iFlags & spEvent) // jeśli event else if (sSpeedTable[i].iFlags & spEvent) // jeśli event
@@ -650,7 +654,7 @@ void TController::TableCheck(double fDistance)
sSpeedTable[i].fDist < -fLength) sSpeedTable[i].fDist < -fLength)
{ // pociąg staje zawsze, a samochód tylko jeśli nie przejedzie całą { // pociąg staje zawsze, a samochód tylko jeśli nie przejedzie całą
// długością (może być zaskoczony zmianą) // długością (może być zaskoczony zmianą)
WriteLog("TableCheck: Event is behind. Delete from table: " + sSpeedTable[i].evEvent->asName); // WriteLog("TableCheck: Event is behind. Delete from table: " + sSpeedTable[i].evEvent->asName);
sSpeedTable[i].iFlags &= ~1; // degradacja pozycji dla samochodu; sSpeedTable[i].iFlags &= ~1; // degradacja pozycji dla samochodu;
// semafory usuwane tylko przy sprawdzaniu, // semafory usuwane tylko przy sprawdzaniu,
// bo wysyłają komendy // bo wysyłają komendy