Automatic W5 if in train state

Speed table in white font
VelSignal only for stop and start
This commit is contained in:
firleju
2015-10-31 21:27:09 +01:00
parent 553380b8b0
commit 96723c177d
4 changed files with 39 additions and 19 deletions

1
.gitignore vendored
View File

@@ -58,3 +58,4 @@ MaSzyna.sdf
MaSzyna.sln
MaSzyna.vcxproj
MaSzyna.vcxproj.filters
*.suo

View File

@@ -659,7 +659,7 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
if (k < 0)
k += iSpeedTableSize; // ilość pozycji do przeanalizowania
iDrivigFlags &=
~(moveTrackEnd | moveSwitchFound); // te flagi są ustawiane tutaj, w razie potrzeby
~(moveTrackEnd | moveSwitchFound | moveSemaphorFound); // te flagi są ustawiane tutaj, w razie potrzeby
for (i = iFirst; k > 0; --k, i = (i + 1) % iSpeedTableSize)
{ // sprawdzenie rekordów od (iFirst) do (iLast), o ile są istotne
if (sSpeedTable[i].iFlags & spEnabled) // badanie istotności
@@ -973,6 +973,8 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
{ // to semaphor
if (sSpeedTable[i].fDist < 0)
VelSignalLast = sSpeedTable[i].fVelNext; //minięty daje prędkość obowiązującą
else
iDrivigFlags |= moveSemaphorFound; //jeśli z przodu to dajemy falgę, że jest
}
else if (sSpeedTable[i].iFlags & spRoadVel)
{ // to W6
@@ -983,6 +985,9 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
{ // to W27
if (sSpeedTable[i].fDist < 0)
VelLimitLast = sSpeedTable[i].fVelNext;
if (sSpeedTable[i].evEvent->ValueGet(1) > 0.0 &&
sSpeedTable[i].fDist + sSpeedTable[i].evEvent->ValueGet(1) > -fLength)
iDrivigFlags |= moveSpeedLimitFound; // jeśli jesteśmy w ograniczeniu
}
//sprawdzenie eventów pasywnych przed nami
@@ -1034,10 +1039,10 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
// VelSignal=v; //nie do końca tak, to jest druga prędkość; -1 nie
// wpisywać...
if (VelSignal == 0.0)
VelSignal = v; // aby stojący ruszył
VelSignal = -1.0; // aby stojący ruszył
if (sSpeedTable[i].fDist < 0.0) // jeśli przejechany
{
VelSignal = v; //!!! ustawienie, gdy przejechany jest lepsze niż
if (v != 0 ? VelSignal = -1.0 : VelSignal = 0.0); //!!! ustawienie, gdy przejechany jest lepsze niż
// wcale, ale to jeszcze nie to
if (sSpeedTable[i].iFlags & 0x100) // jeśli semafor
if ((sSpeedTable[i].evEvent != eSignSkip) ?
@@ -1134,12 +1139,17 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
}
} // if (sSpeedTable[i].iFlags&1)
} // for
if (VelSignalLast >= 0.0 && !(iDrivigFlags & (moveSemaphorFound | moveSwitchFound)) &&
(OrderCurrentGet() & Obey_train))
VelSignalLast = -1.0; // jeśli mieliśmy ograniczenie z semafora i nie ma przed nami
if (fVelDes > VelSignalLast) //analiza spisanych z tabelki ograniczeń i nadpisanie aktualnego
fVelDes = VelSignalLast;
else if (fVelDes > VelLimitLast)
if (fVelDes > VelLimitLast)
fVelDes = VelLimitLast;
else if (fVelDes > VelRoad)
if (fVelDes > VelRoad)
fVelDes = VelRoad;
// nastepnego semafora albo zwrotnicy to uznajemy, że mijamy W5
return go;
};
@@ -3950,8 +3960,9 @@ bool TController::UpdateSituation(double dt)
VelDesired = 0.0; // jak ma czekać, to nie ma jazdy
// else if (VelSignal<0)
// VelDesired=fVelMax; //ile fabryka dala (Ra: uwzględione wagony)
else if (VelSignal >= 0) // VelSignal>0 jest ograniczeniem prędkości (z semafora)
else if (VelSignal >= 0) // jeśli skład był zatrzymany na początku i teraz już może jechać
VelDesired = Min0R(VelDesired, VelSignal);
if (mvOccupied->RunningTrack.Velmax >=
0) // ograniczenie prędkości z trajektorii ruchu
VelDesired =

View File

@@ -227,11 +227,12 @@ class TController
double VelDesired; // predkość, z jaką ma jechać, wynikająca z analizy tableki; <=VelSignal
double fAccDesiredAv; // uśrednione przyspieszenie z kolejnych przebłysków świadomości, żeby
// ograniczyć migotanie
private:
public:
double VelforDriver; // prędkość, używana przy zmianie kierunku (ograniczenie przy nieznajmości
// szlaku?)
double VelSignal; // ograniczenie prędkości z kompilacji znaków i sygnałów
double VelLimit; // predkość zadawana przez event jednokierunkowego ograniczenia prędkości
public:
double VelSignalLast; // prędkość zadana na ostatnim semaforze
double VelLimitLast; // prędkość zadana przez ograniczenie
double VelRoad; // aktualna prędkość drogowa (ze znaku W27)

View File

@@ -2015,7 +2015,10 @@ bool TWorld::Update()
FloatToStrF(tmp->Mechanik->VelDesired, ffFixed, 4, 0) + AnsiString(" ad=") +
FloatToStrF(tmp->Mechanik->AccDesired, ffFixed, 5, 2) + AnsiString(" Pd=") +
FloatToStrF(tmp->Mechanik->ActualProximityDist, ffFixed, 4, 0) +
AnsiString(" Vn=") + FloatToStrF(tmp->Mechanik->VelNext, ffFixed, 4, 0);
AnsiString(" Vn=") + FloatToStrF(tmp->Mechanik->VelNext, ffFixed, 4, 0) +
AnsiString(" VSm=") + FloatToStrF(tmp->Mechanik->VelSignalLast, ffFixed, 4, 0) +
AnsiString(" VLm=") + FloatToStrF(tmp->Mechanik->VelLimitLast, ffFixed, 4, 0) +
AnsiString(" VRd=") + FloatToStrF(tmp->Mechanik->VelRoad, ffFixed, 4, 0);
if (tmp->Mechanik->VelNext == 0.0)
if (tmp->Mechanik->eSignNext)
{ // jeœli ma zapamiêtany event semafora
@@ -2050,7 +2053,7 @@ bool TWorld::Update()
{ // ekran drugi, czyli tabelka skanowania AI
if (tmp->Mechanik) //¿eby by³a tabelka, musi byæ AI
{ // tabelka jest na u¿ytek testuj¹cych scenerie, wiêc nie musi byæ "³adna"
glColor3f(0.0f, 1.0f, 0.0f); // a, damy zielony
glColor3f(1.0f, 1.0f, 1.0f); // a, damy zielony. GF: jednak bia³y
// glTranslatef(0.0f,0.0f,-0.50f);
glRasterPos2f(-0.25f, 0.20f);
// OutText1="Scan distance: "+AnsiString(tmp->Mechanik->scanmax)+", back:
@@ -2081,7 +2084,11 @@ bool TWorld::Update()
FloatToStrF(tmp->Mechanik->VelDesired, ffFixed, 4, 0) + AnsiString(" ad=") +
FloatToStrF(tmp->Mechanik->AccDesired, ffFixed, 5, 2) + AnsiString(" Pd=") +
FloatToStrF(tmp->Mechanik->ActualProximityDist, ffFixed, 4, 0) +
AnsiString(" Vn=") + FloatToStrF(tmp->Mechanik->VelNext, ffFixed, 4, 0);
AnsiString(" Vn=") + FloatToStrF(tmp->Mechanik->VelNext, ffFixed, 4, 0) +
AnsiString("\n VSm=") + FloatToStrF(tmp->Mechanik->VelSignalLast, ffFixed, 4, 0) +
AnsiString(" VLm=") + FloatToStrF(tmp->Mechanik->VelLimitLast, ffFixed, 4, 0) +
AnsiString(" VRd=") + FloatToStrF(tmp->Mechanik->VelRoad, ffFixed, 4, 0) +
AnsiString(" VSig=") + FloatToStrF(tmp->Mechanik->VelSignal, ffFixed, 4, 0);
if (tmp->Mechanik->VelNext == 0.0)
if (tmp->Mechanik->eSignNext)
{ // jeœli ma zapamiêtany event semafora