mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-19 06:29:18 +02:00
LCD Screens in python
Merge with python branch
This commit is contained in:
99
Track.cpp
99
Track.cpp
@@ -68,8 +68,8 @@ TSwitchExtension::TSwitchExtension(TTrack *owner, int what)
|
||||
Segments[2] = (what >= 3) ?
|
||||
new TSegment(owner) :
|
||||
NULL; // z punktu 2 do 4 skrzyżowanie od góry: wersja "-1":
|
||||
Segments[3] = (what >= 4) ? new TSegment(owner) :
|
||||
NULL; // z punktu 4 do 1 1 1=4 0 0=3
|
||||
Segments[3] =
|
||||
(what >= 4) ? new TSegment(owner) : NULL; // z punktu 4 do 1 1 1=4 0 0=3
|
||||
Segments[4] =
|
||||
(what >= 5) ? new TSegment(owner) : NULL; // z punktu 1 do 3 4 x 3 3 3 x 2 2
|
||||
Segments[5] = (what >= 6) ? new TSegment(owner) :
|
||||
@@ -102,16 +102,17 @@ TIsolated::TIsolated(const AnsiString &n, TIsolated *i)
|
||||
pMemCell = NULL; // podpiąć istniejącą albo utworzyć pustą
|
||||
};
|
||||
|
||||
TIsolated::~TIsolated(){// usuwanie
|
||||
/*
|
||||
TIsolated *p=pRoot;
|
||||
while (pRoot)
|
||||
{
|
||||
p=pRoot;
|
||||
p->pNext=NULL;
|
||||
delete p;
|
||||
}
|
||||
*/
|
||||
TIsolated::~TIsolated(){
|
||||
// usuwanie
|
||||
/*
|
||||
TIsolated *p=pRoot;
|
||||
while (pRoot)
|
||||
{
|
||||
p=pRoot;
|
||||
p->pNext=NULL;
|
||||
delete p;
|
||||
}
|
||||
*/
|
||||
};
|
||||
|
||||
TIsolated *__fastcall TIsolated::Find(const AnsiString &n)
|
||||
@@ -324,7 +325,7 @@ TTrack *__fastcall TTrack::NullCreate(int dir)
|
||||
trk2->bVisible = false;
|
||||
trk2->fVelocity = 20.0; // zawracanie powoli
|
||||
trk2->fRadius = 20.0; // promień, aby się dodawało do tabelki prędkości i liczyło
|
||||
// narastająco
|
||||
// narastająco
|
||||
trk2->Init(); // utworzenie segmentu
|
||||
switch (dir)
|
||||
{ //łączenie z nowym torem
|
||||
@@ -796,7 +797,7 @@ void TTrack::Load(cParser *parser, vector3 pOrigin, AnsiString name)
|
||||
if (SwitchExtension) // jeśli tor ruchomy
|
||||
if (fabs(fVelocity) >= 1.0) //żeby zero nie ograniczało dożywotnio
|
||||
SwitchExtension->fVelocity = fVelocity; // zapamiętanie głównego ograniczenia; a
|
||||
// np. -40 ogranicza tylko na bok
|
||||
// np. -40 ogranicza tylko na bok
|
||||
}
|
||||
else if (str == "isolated")
|
||||
{ // obwód izolowany, do którego tor należy
|
||||
@@ -830,16 +831,16 @@ void TTrack::Load(cParser *parser, vector3 pOrigin, AnsiString name)
|
||||
}
|
||||
else if (str == "overhead")
|
||||
{ // informacja o stanie sieci: 0-jazda bezprądowa, >0-z opuszczonym i ograniczeniem
|
||||
// prędkości
|
||||
// prędkości
|
||||
parser->getTokens();
|
||||
*parser >> fOverhead;
|
||||
if (fOverhead > 0.0)
|
||||
iAction |= 0x40; // flaga opuszczenia pantografu (tor uwzględniany w skanowaniu jako
|
||||
// ograniczenie dla pantografujących)
|
||||
// ograniczenie dla pantografujących)
|
||||
}
|
||||
else if (str == "colides")
|
||||
{ // informacja o stanie sieci: 0-jazda bezprądowa, >0-z opuszczonym i ograniczeniem
|
||||
// prędkości
|
||||
// prędkości
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
// trColides=; //tor kolizyjny, na którym trzeba sprawdzać pojazdy pod kątem zderzenia
|
||||
@@ -1222,7 +1223,7 @@ void TTrack::Compile(GLuint tex)
|
||||
switch (eType) // dalej zależnie od typu
|
||||
{
|
||||
case tt_Table: // obrotnica jak zwykły tor, animacja wykonywana w RaAnimate(), tutaj tylko
|
||||
// regeneracja siatek
|
||||
// regeneracja siatek
|
||||
case tt_Normal:
|
||||
if (TextureID2)
|
||||
if (tex ? TextureID2 == tex : true) // jeśli pasuje do grupy (tex)
|
||||
@@ -1232,7 +1233,7 @@ void TTrack::Compile(GLuint tex)
|
||||
if (fTexLength ==
|
||||
4.0) // jeśli stare mapowanie na profil 0.2 0.5 1.1 (również 6-9-9/noil)
|
||||
{ // stare mapowanie z różną gęstością pikseli i oddzielnymi teksturami na każdy
|
||||
// profil
|
||||
// profil
|
||||
if (iTrapezoid) // trapez albo przechyłki
|
||||
{ // podsypka z podkladami trapezowata
|
||||
// ewentualnie poprawić mapowanie, żeby środek mapował się na
|
||||
@@ -1272,9 +1273,9 @@ void TTrack::Compile(GLuint tex)
|
||||
}
|
||||
else
|
||||
{ // mapowanie proporcjonalne do powierzchni, rozmiar w poprzek określa
|
||||
// fTexLength
|
||||
// fTexLength
|
||||
double max = fTexRatio2 * fTexLength; // szerokość proporcjonalna do
|
||||
// długości
|
||||
// długości
|
||||
double map11 =
|
||||
max > 0.0 ? (fHTW + side) / max : 0.25; // załamanie od strony 1
|
||||
double map12 =
|
||||
@@ -1451,7 +1452,7 @@ void TTrack::Compile(GLuint tex)
|
||||
if (TextureID2)
|
||||
if (tex ? TextureID2 == tex : true) // jeśli pasuje do grupy (tex)
|
||||
{ // pobocze drogi - poziome przy przechyłce (a może krawężnik i chodnik zrobić jak
|
||||
// w Midtown Madness 2?)
|
||||
// w Midtown Madness 2?)
|
||||
if (!tex)
|
||||
glBindTexture(GL_TEXTURE_2D, TextureID2);
|
||||
vector6 rpts1[6],
|
||||
@@ -1469,7 +1470,7 @@ void TTrack::Compile(GLuint tex)
|
||||
rpts2[2] = vector6(-rozp, -fTexHeight1, 0.0); // prawy brzeg podstawy
|
||||
if (iTrapezoid) // trapez albo przechyłki
|
||||
{ // pobocza do trapezowatej nawierzchni - dodatkowe punkty z drugiej strony
|
||||
// odcinka
|
||||
// odcinka
|
||||
rpts1[3] =
|
||||
vector6(rozp2, -fTexHeight2, 0.0); // lewy brzeg lewego pobocza
|
||||
rpts1[4] =
|
||||
@@ -1509,7 +1510,7 @@ void TTrack::Compile(GLuint tex)
|
||||
0.484375 - map1l); // lewy brzeg lewego chodnika
|
||||
if (iTrapezoid) // trapez albo przechyłki
|
||||
{ // pobocza do trapezowatej nawierzchni - dodatkowe punkty z drugiej strony
|
||||
// odcinka
|
||||
// odcinka
|
||||
slop2 = fabs((iTrapezoid & 2) ? slop2 :
|
||||
slop); // szerokość chodnika po prawej
|
||||
double map2l =
|
||||
@@ -1534,7 +1535,7 @@ void TTrack::Compile(GLuint tex)
|
||||
}
|
||||
if (iTrapezoid) // trapez albo przechyłki
|
||||
{ // pobocza do trapezowatej nawierzchni - dodatkowe punkty z drugiej strony
|
||||
// odcinka
|
||||
// odcinka
|
||||
if ((fTexHeight1 >= 0.0) ? true : (slop != 0.0))
|
||||
Segment->RenderLoft(rpts1, -3, fTexLength); // tylko jeśli jest z prawej
|
||||
if ((fTexHeight1 >= 0.0) ? true : (side != 0.0))
|
||||
@@ -1595,7 +1596,7 @@ void TTrack::Compile(GLuint tex)
|
||||
SwitchExtension->Segments[5]->RaSegCount(); // mogą być tylko 3 drogi
|
||||
SwitchExtension->vPoints =
|
||||
new vector3[SwitchExtension->iPoints]; // tablica utworzona z zapasem, ale nie
|
||||
// wypełniona współrzędnymi
|
||||
// wypełniona współrzędnymi
|
||||
}
|
||||
vector3 *b =
|
||||
SwitchExtension->bPoints ?
|
||||
@@ -1630,7 +1631,7 @@ void TTrack::Compile(GLuint tex)
|
||||
// if (TextureID2)
|
||||
// if (tex?TextureID2==tex:true) //jeśli pasuje do grupy (tex)
|
||||
{ // pobocze drogi - poziome przy przechyłce (a może krawężnik i chodnik zrobić jak w
|
||||
// Midtown Madness 2?)
|
||||
// Midtown Madness 2?)
|
||||
if (TextureID2)
|
||||
if (!tex)
|
||||
glBindTexture(GL_TEXTURE_2D, TextureID2);
|
||||
@@ -1642,7 +1643,7 @@ void TTrack::Compile(GLuint tex)
|
||||
{ // standardowo: od zewnątrz pochylenie, a od wewnątrz poziomo
|
||||
rpts1[0] = vector6(rozp, -fTexHeight1, 0.0); // lewy brzeg podstawy
|
||||
rpts1[1] = vector6(bpts1[0].x + side, bpts1[0].y, 0.5); // lewa krawędź
|
||||
// załamania
|
||||
// załamania
|
||||
rpts1[2] = vector6(bpts1[0].x, bpts1[0].y,
|
||||
1.0); // lewy brzeg pobocza (mapowanie może być inne
|
||||
rpts2[0] = vector6(bpts1[1].x, bpts1[1].y, 1.0); // prawy brzeg pobocza
|
||||
@@ -1651,15 +1652,15 @@ void TTrack::Compile(GLuint tex)
|
||||
rpts2[2] = vector6(-rozp, -fTexHeight1, 0.0); // prawy brzeg podstawy
|
||||
// if (iTrapezoid) //trapez albo przechyłki
|
||||
{ // pobocza do trapezowatej nawierzchni - dodatkowe punkty z drugiej strony
|
||||
// odcinka
|
||||
// odcinka
|
||||
rpts1[3] = vector6(rozp2, -fTexHeight2, 0.0); // lewy brzeg lewego pobocza
|
||||
rpts1[4] = vector6(bpts1[2].x + side2, bpts1[2].y, 0.5); // krawędź
|
||||
// załamania
|
||||
// załamania
|
||||
rpts1[5] = vector6(bpts1[2].x, bpts1[2].y, 1.0); // brzeg pobocza
|
||||
rpts2[3] = vector6(bpts1[3].x, bpts1[3].y, 1.0);
|
||||
rpts2[4] = vector6(bpts1[3].x - side2, bpts1[3].y, 0.5);
|
||||
rpts2[5] = vector6(-rozp2, -fTexHeight2, 0.0); // prawy brzeg prawego
|
||||
// pobocza
|
||||
// pobocza
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1690,7 +1691,7 @@ void TTrack::Compile(GLuint tex)
|
||||
0.484375 - map1l); // lewy brzeg lewego chodnika
|
||||
// if (iTrapezoid) //trapez albo przechyłki
|
||||
{ // pobocza do trapezowatej nawierzchni - dodatkowe punkty z drugiej strony
|
||||
// odcinka
|
||||
// odcinka
|
||||
slop2 =
|
||||
fabs((iTrapezoid & 2) ? slop2 : slop); // szerokość chodnika po prawej
|
||||
double map2l = max > 0.0 ?
|
||||
@@ -1715,7 +1716,7 @@ void TTrack::Compile(GLuint tex)
|
||||
}
|
||||
bool render = TextureID2 ? (tex ? TextureID2 == tex : true) :
|
||||
false; // renderować nie trzeba, ale trzeba wyznaczyć
|
||||
// punkty brzegowe nawierzchni
|
||||
// punkty brzegowe nawierzchni
|
||||
// if (iTrapezoid) //trapez albo przechyłki
|
||||
if (SwitchExtension->iRoads == 4)
|
||||
{ // pobocza do trapezowatej nawierzchni - dodatkowe punkty z drugiej strony odcinka
|
||||
@@ -1734,7 +1735,7 @@ void TTrack::Compile(GLuint tex)
|
||||
}
|
||||
else // to będzie ewentualnie dla prostego na skrzyżowaniu trzech dróg
|
||||
{ // punkt 3 pokrywa się z punktem 1, jak w zwrotnicy; połączenie 1->2 nie musi być
|
||||
// prostoliniowe
|
||||
// prostoliniowe
|
||||
if ((fTexHeight1 >= 0.0) ? true : (side != 0.0)) // OK
|
||||
SwitchExtension->Segments[2]->RenderLoft(rpts2, -3, fTexLength, 0, 1, &b,
|
||||
render); // z P2 do P4
|
||||
@@ -1760,15 +1761,15 @@ void TTrack::Compile(GLuint tex)
|
||||
{ // coś się gubi w obliczeniach na wskaźnikach
|
||||
i = (int((void *)(b)) - int((void *)(SwitchExtension->vPoints))) /
|
||||
sizeof(vector3); // ustalenie liczby punktów, bo mogło wyjść inaczej niż
|
||||
// policzone z góry
|
||||
// policzone z góry
|
||||
if (i > 0)
|
||||
{ // jeśli zostało to właśnie utworzone
|
||||
if (SwitchExtension->iPoints > i) // jeśli wyszło mniej niż było miejsca
|
||||
SwitchExtension->iPoints = i; // domknięcie wachlarza
|
||||
else
|
||||
--SwitchExtension->iPoints; // jak tutaj wejdzie, to błąd jest - zrobić
|
||||
// miejsce na powtórzenie pierwszego punktu
|
||||
// na końcu
|
||||
// miejsce na powtórzenie pierwszego punktu
|
||||
// na końcu
|
||||
SwitchExtension->vPoints[SwitchExtension->iPoints++] =
|
||||
SwitchExtension->vPoints[0];
|
||||
SwitchExtension->bPoints = true; // tablica punktów została wypełniona
|
||||
@@ -2077,7 +2078,7 @@ void TTrack::RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start)
|
||||
vector6 bpts1[8]; // punkty głównej płaszczyzny nie przydają się do robienia boków
|
||||
if (fTexLength == 4.0) // jeśli stare mapowanie
|
||||
{ // stare mapowanie z różną gęstością pikseli i oddzielnymi teksturami na każdy
|
||||
// profil
|
||||
// profil
|
||||
if (iTrapezoid) // trapez albo przechyłki
|
||||
{ // podsypka z podkladami trapezowata
|
||||
// ewentualnie poprawić mapowanie, żeby środek mapował się na 1.435/4.671
|
||||
@@ -2259,7 +2260,7 @@ void TTrack::RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start)
|
||||
}
|
||||
if (TextureID2)
|
||||
{ // pobocze drogi - poziome przy przechyłce (a może krawężnik i chodnik zrobić jak w
|
||||
// Midtown Madness 2?)
|
||||
// Midtown Madness 2?)
|
||||
vector6 rpts1[6],
|
||||
rpts2[6]; // współrzędne przekroju i mapowania dla prawej i lewej strony
|
||||
if (fTexHeight1 >= 0.0)
|
||||
@@ -2275,15 +2276,15 @@ void TTrack::RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start)
|
||||
rpts2[2] = vector6(-rozp, -fTexHeight1, 0.0); // prawy brzeg podstawy
|
||||
if (iTrapezoid) // trapez albo przechyłki
|
||||
{ // pobocza do trapezowatej nawierzchni - dodatkowe punkty z drugiej strony
|
||||
// odcinka
|
||||
// odcinka
|
||||
rpts1[3] = vector6(rozp2, -fTexHeight2, 0.0); // lewy brzeg lewego pobocza
|
||||
rpts1[4] = vector6(bpts1[2].x + side2, bpts1[2].y, 0.5); // krawędź
|
||||
// załamania
|
||||
// załamania
|
||||
rpts1[5] = vector6(bpts1[2].x, bpts1[2].y, 1.0); // brzeg pobocza
|
||||
rpts2[3] = vector6(bpts1[3].x, bpts1[3].y, 1.0);
|
||||
rpts2[4] = vector6(bpts1[3].x - side2, bpts1[3].y, 0.5);
|
||||
rpts2[5] = vector6(-rozp2, -fTexHeight2, 0.0); // prawy brzeg prawego
|
||||
// pobocza
|
||||
// pobocza
|
||||
Segment->RaRenderLoft(Vert, rpts1, -3, fTexLength);
|
||||
Segment->RaRenderLoft(Vert, rpts2, -3, fTexLength);
|
||||
}
|
||||
@@ -2323,7 +2324,7 @@ void TTrack::RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start)
|
||||
0.484375 - map1l); // lewy brzeg lewego chodnika
|
||||
if (iTrapezoid) // trapez albo przechyłki
|
||||
{ // pobocza do trapezowatej nawierzchni - dodatkowe punkty z drugiej strony
|
||||
// odcinka
|
||||
// odcinka
|
||||
slop2 =
|
||||
fabs((iTrapezoid & 2) ? slop2 : slop); // szerokość chodnika po prawej
|
||||
double map2l = max > 0.0 ?
|
||||
@@ -2400,7 +2401,7 @@ void TTrack::RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start)
|
||||
}
|
||||
if (TextureID2)
|
||||
{ // pobocze drogi - poziome przy przechyłce (a może krawężnik i chodnik zrobić jak w
|
||||
// Midtown Madness 2?)
|
||||
// Midtown Madness 2?)
|
||||
vector6 rpts1[6],
|
||||
rpts2[6]; // współrzędne przekroju i mapowania dla prawej i lewej strony
|
||||
rpts1[0] = vector6(rozp, -fTexHeight1, 0.0); // lewy brzeg podstawy
|
||||
@@ -2681,7 +2682,7 @@ bool TTrack::Switch(int i, double t, double d)
|
||||
{ // nie ma się co bawić
|
||||
SwitchExtension->fOffset = SwitchExtension->fDesiredOffset;
|
||||
RaAnimate(); // przeliczenie położenia iglic; czy zadziała na niewyświetlanym
|
||||
// sektorze w VBO?
|
||||
// sektorze w VBO?
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -2950,7 +2951,7 @@ TTrack *__fastcall TTrack::RaAnimate()
|
||||
SwitchExtension->vTrans)) // czy przemieściło się od ostatniego sprawdzania
|
||||
{
|
||||
double hlen = 0.5 * SwitchExtension->Segments[0]->GetLength(); // połowa
|
||||
// długości
|
||||
// długości
|
||||
SwitchExtension->fOffset = ac->AngleGet(); // pobranie kąta z submodelu
|
||||
double sina = -hlen * sin(DegToRad(SwitchExtension->fOffset)),
|
||||
cosa = -hlen * cos(DegToRad(SwitchExtension->fOffset));
|
||||
@@ -2962,7 +2963,7 @@ TTrack *__fastcall TTrack::RaAnimate()
|
||||
middle - vector3(sina, 0.0, cosa), 5.0); // nowy odcinek
|
||||
for (int i = 0; i < iNumDynamics; i++)
|
||||
Dynamics[i]->Move(0.000001); // minimalny ruch, aby przeliczyć pozycję i
|
||||
// kąty
|
||||
// kąty
|
||||
if (Global::bUseVBO)
|
||||
{ // dla OpenGL 1.4 odświeży się cały sektor, w późniejszych poprawiamy fragment
|
||||
// aktualizacja pojazdów na torze
|
||||
@@ -3147,7 +3148,7 @@ void TTrack::ConnectionsLog()
|
||||
|
||||
TTrack *__fastcall TTrack::Neightbour(int s, double &d)
|
||||
{ // zwraca wskaźnik na sąsiedni tor, w kierunku określonym znakiem (s), odwraca (d) w razie
|
||||
// niezgodności kierunku torów
|
||||
// niezgodności kierunku torów
|
||||
TTrack *t; // nie zmieniamy kierunku (d), jeśli nie ma toru dalej
|
||||
if (eType != tt_Cross)
|
||||
{ // jeszcze trzeba sprawdzić zgodność
|
||||
@@ -3155,7 +3156,7 @@ TTrack *__fastcall TTrack::Neightbour(int s, double &d)
|
||||
if (t) // o ile jest na co przejść, zmieniamy znak kierunku na nowym torze
|
||||
if (t->eType == tt_Cross)
|
||||
{ // jeśli wjazd na skrzyżowanie, trzeba ustalić segment, bo od tego zależy zmiana
|
||||
// kierunku (d)
|
||||
// kierunku (d)
|
||||
// if (r) //gdy nie podano (r), to nie zmieniać (d)
|
||||
// if (s*t->CrossSegment(((s>0)?iNextDirection:iPrevDirection),r)<0)
|
||||
// d=-d;
|
||||
|
||||
Reference in New Issue
Block a user