mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 23:19:19 +02:00
Automatic W5 if in train state
Speed table in white font VelSignal only for stop and start
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -58,3 +58,4 @@ MaSzyna.sdf
|
|||||||
MaSzyna.sln
|
MaSzyna.sln
|
||||||
MaSzyna.vcxproj
|
MaSzyna.vcxproj
|
||||||
MaSzyna.vcxproj.filters
|
MaSzyna.vcxproj.filters
|
||||||
|
*.suo
|
||||||
|
|||||||
31
Driver.cpp
31
Driver.cpp
@@ -659,7 +659,7 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
|||||||
if (k < 0)
|
if (k < 0)
|
||||||
k += iSpeedTableSize; // ilość pozycji do przeanalizowania
|
k += iSpeedTableSize; // ilość pozycji do przeanalizowania
|
||||||
iDrivigFlags &=
|
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)
|
for (i = iFirst; k > 0; --k, i = (i + 1) % iSpeedTableSize)
|
||||||
{ // sprawdzenie rekordów od (iFirst) do (iLast), o ile są istotne
|
{ // sprawdzenie rekordów od (iFirst) do (iLast), o ile są istotne
|
||||||
if (sSpeedTable[i].iFlags & spEnabled) // badanie istotności
|
if (sSpeedTable[i].iFlags & spEnabled) // badanie istotności
|
||||||
@@ -971,8 +971,10 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
|||||||
}
|
}
|
||||||
else if (sSpeedTable[i].iFlags & spSemaphor)
|
else if (sSpeedTable[i].iFlags & spSemaphor)
|
||||||
{ // to semaphor
|
{ // to semaphor
|
||||||
if (sSpeedTable[i].fDist < 0)
|
if (sSpeedTable[i].fDist < 0)
|
||||||
VelSignalLast = sSpeedTable[i].fVelNext; //minięty daje prędkość obowiązującą
|
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)
|
else if (sSpeedTable[i].iFlags & spRoadVel)
|
||||||
{ // to W6
|
{ // to W6
|
||||||
@@ -983,9 +985,12 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
|||||||
{ // to W27
|
{ // to W27
|
||||||
if (sSpeedTable[i].fDist < 0)
|
if (sSpeedTable[i].fDist < 0)
|
||||||
VelLimitLast = sSpeedTable[i].fVelNext;
|
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
|
//sprawdzenie eventów pasywnych przed nami
|
||||||
if ((mvOccupied->CategoryFlag & 1) ?
|
if ((mvOccupied->CategoryFlag & 1) ?
|
||||||
sSpeedTable[i].fDist > pVehicles[0]->fTrackBlock - 20.0 :
|
sSpeedTable[i].fDist > pVehicles[0]->fTrackBlock - 20.0 :
|
||||||
false) // jak sygnał jest dalej niż zawalidroga
|
false) // jak sygnał jest dalej niż zawalidroga
|
||||||
@@ -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
|
// VelSignal=v; //nie do końca tak, to jest druga prędkość; -1 nie
|
||||||
// wpisywać...
|
// wpisywać...
|
||||||
if (VelSignal == 0.0)
|
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
|
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
|
// wcale, ale to jeszcze nie to
|
||||||
if (sSpeedTable[i].iFlags & 0x100) // jeśli semafor
|
if (sSpeedTable[i].iFlags & 0x100) // jeśli semafor
|
||||||
if ((sSpeedTable[i].evEvent != eSignSkip) ?
|
if ((sSpeedTable[i].evEvent != eSignSkip) ?
|
||||||
@@ -1134,12 +1139,17 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
|||||||
}
|
}
|
||||||
} // if (sSpeedTable[i].iFlags&1)
|
} // if (sSpeedTable[i].iFlags&1)
|
||||||
} // for
|
} // 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
|
if (fVelDes > VelSignalLast) //analiza spisanych z tabelki ograniczeń i nadpisanie aktualnego
|
||||||
fVelDes = VelSignalLast;
|
fVelDes = VelSignalLast;
|
||||||
else if (fVelDes > VelLimitLast)
|
if (fVelDes > VelLimitLast)
|
||||||
fVelDes = VelLimitLast;
|
fVelDes = VelLimitLast;
|
||||||
else if (fVelDes > VelRoad)
|
if (fVelDes > VelRoad)
|
||||||
fVelDes = VelRoad;
|
fVelDes = VelRoad;
|
||||||
|
// nastepnego semafora albo zwrotnicy to uznajemy, że mijamy W5
|
||||||
return go;
|
return go;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -3950,9 +3960,10 @@ bool TController::UpdateSituation(double dt)
|
|||||||
VelDesired = 0.0; // jak ma czekać, to nie ma jazdy
|
VelDesired = 0.0; // jak ma czekać, to nie ma jazdy
|
||||||
// else if (VelSignal<0)
|
// else if (VelSignal<0)
|
||||||
// VelDesired=fVelMax; //ile fabryka dala (Ra: uwzględione wagony)
|
// 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);
|
VelDesired = Min0R(VelDesired, VelSignal);
|
||||||
if (mvOccupied->RunningTrack.Velmax >=
|
|
||||||
|
if (mvOccupied->RunningTrack.Velmax >=
|
||||||
0) // ograniczenie prędkości z trajektorii ruchu
|
0) // ograniczenie prędkości z trajektorii ruchu
|
||||||
VelDesired =
|
VelDesired =
|
||||||
Min0R(VelDesired,
|
Min0R(VelDesired,
|
||||||
|
|||||||
3
Driver.h
3
Driver.h
@@ -227,11 +227,12 @@ class TController
|
|||||||
double VelDesired; // predkość, z jaką ma jechać, wynikająca z analizy tableki; <=VelSignal
|
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
|
double fAccDesiredAv; // uśrednione przyspieszenie z kolejnych przebłysków świadomości, żeby
|
||||||
// ograniczyć migotanie
|
// ograniczyć migotanie
|
||||||
private:
|
public:
|
||||||
double VelforDriver; // prędkość, używana przy zmianie kierunku (ograniczenie przy nieznajmości
|
double VelforDriver; // prędkość, używana przy zmianie kierunku (ograniczenie przy nieznajmości
|
||||||
// szlaku?)
|
// szlaku?)
|
||||||
double VelSignal; // ograniczenie prędkości z kompilacji znaków i sygnałów
|
double VelSignal; // ograniczenie prędkości z kompilacji znaków i sygnałów
|
||||||
double VelLimit; // predkość zadawana przez event jednokierunkowego ograniczenia prędkości
|
double VelLimit; // predkość zadawana przez event jednokierunkowego ograniczenia prędkości
|
||||||
|
public:
|
||||||
double VelSignalLast; // prędkość zadana na ostatnim semaforze
|
double VelSignalLast; // prędkość zadana na ostatnim semaforze
|
||||||
double VelLimitLast; // prędkość zadana przez ograniczenie
|
double VelLimitLast; // prędkość zadana przez ograniczenie
|
||||||
double VelRoad; // aktualna prędkość drogowa (ze znaku W27)
|
double VelRoad; // aktualna prędkość drogowa (ze znaku W27)
|
||||||
|
|||||||
23
World.cpp
23
World.cpp
@@ -2010,12 +2010,15 @@ bool TWorld::Update()
|
|||||||
if (tmp->Mechanik->DrivigFlags() & j) // jak bit ustawiony
|
if (tmp->Mechanik->DrivigFlags() & j) // jak bit ustawiony
|
||||||
flags[i + 1] ^= 0x20; // to zmiana na wielk¹ literê
|
flags[i + 1] ^= 0x20; // to zmiana na wielk¹ literê
|
||||||
OutText4 = flags;
|
OutText4 = flags;
|
||||||
OutText4 +=
|
OutText4 +=
|
||||||
AnsiString("Driver: Vd=") +
|
AnsiString("Driver: Vd=") +
|
||||||
FloatToStrF(tmp->Mechanik->VelDesired, ffFixed, 4, 0) + AnsiString(" ad=") +
|
FloatToStrF(tmp->Mechanik->VelDesired, ffFixed, 4, 0) + AnsiString(" ad=") +
|
||||||
FloatToStrF(tmp->Mechanik->AccDesired, ffFixed, 5, 2) + AnsiString(" Pd=") +
|
FloatToStrF(tmp->Mechanik->AccDesired, ffFixed, 5, 2) + AnsiString(" Pd=") +
|
||||||
FloatToStrF(tmp->Mechanik->ActualProximityDist, ffFixed, 4, 0) +
|
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->VelNext == 0.0)
|
||||||
if (tmp->Mechanik->eSignNext)
|
if (tmp->Mechanik->eSignNext)
|
||||||
{ // jeœli ma zapamiêtany event semafora
|
{ // jeœli ma zapamiêtany event semafora
|
||||||
@@ -2050,7 +2053,7 @@ bool TWorld::Update()
|
|||||||
{ // ekran drugi, czyli tabelka skanowania AI
|
{ // ekran drugi, czyli tabelka skanowania AI
|
||||||
if (tmp->Mechanik) //¿eby by³a tabelka, musi byæ 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"
|
{ // 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);
|
// glTranslatef(0.0f,0.0f,-0.50f);
|
||||||
glRasterPos2f(-0.25f, 0.20f);
|
glRasterPos2f(-0.25f, 0.20f);
|
||||||
// OutText1="Scan distance: "+AnsiString(tmp->Mechanik->scanmax)+", back:
|
// 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->VelDesired, ffFixed, 4, 0) + AnsiString(" ad=") +
|
||||||
FloatToStrF(tmp->Mechanik->AccDesired, ffFixed, 5, 2) + AnsiString(" Pd=") +
|
FloatToStrF(tmp->Mechanik->AccDesired, ffFixed, 5, 2) + AnsiString(" Pd=") +
|
||||||
FloatToStrF(tmp->Mechanik->ActualProximityDist, ffFixed, 4, 0) +
|
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->VelNext == 0.0)
|
||||||
if (tmp->Mechanik->eSignNext)
|
if (tmp->Mechanik->eSignNext)
|
||||||
{ // jeœli ma zapamiêtany event semafora
|
{ // jeœli ma zapamiêtany event semafora
|
||||||
|
|||||||
Reference in New Issue
Block a user