diff --git a/AdvSound.cpp b/AdvSound.cpp index c0a6a239..578e9a34 100644 --- a/AdvSound.cpp +++ b/AdvSound.cpp @@ -22,7 +22,7 @@ TAdvancedSound::TAdvancedSound() } TAdvancedSound::~TAdvancedSound() -{ // Ra: stopowanie si sypie +{ // Ra: stopowanie się sypie // SoundStart.Stop(); // SoundCommencing.Stop(); // SoundShut.Stop(); @@ -172,9 +172,9 @@ void TAdvancedSound::UpdateAF(double A, double F, bool ListenerInside, vector3 N } void TAdvancedSound::CopyIfEmpty(TAdvancedSound &s) -{ // skopiowanie, gdyby by potrzebny, a nie zosta wczytany +{ // skopiowanie, gdyby był potrzebny, a nie został wczytany if ((fStartLength > 0.0) || (fShutLength > 0.0)) - return; // co jest + return; // coś jest SoundStart = s.SoundStart; SoundCommencing = s.SoundCommencing; SoundShut = s.SoundShut; diff --git a/AdvSound.h b/AdvSound.h index d0a2b03a..9159faf6 100644 --- a/AdvSound.h +++ b/AdvSound.h @@ -23,7 +23,7 @@ typedef enum } TSoundState; class TAdvancedSound -{ // klasa dwikw majcych pocztek, dowolnie dugi rodek oraz zakoczenie (np. Rp1) +{ // klasa dźwięków mających początek, dowolnie długi środek oraz zakończenie (np. Rp1) TRealSound SoundStart; TRealSound SoundCommencing; TRealSound SoundShut; diff --git a/AirCoupler.cpp b/AirCoupler.cpp index 1226c6f3..62b72624 100644 --- a/AirCoupler.cpp +++ b/AirCoupler.cpp @@ -20,7 +20,7 @@ TAirCoupler::~TAirCoupler() } int TAirCoupler::GetStatus() -{ // zwraca 1, jeli istnieje model prosty, 2 gdy skony +{ // zwraca 1, jeśli istnieje model prosty, 2 gdy skośny int x = 0; if (pModelOn) x = 1; @@ -30,7 +30,7 @@ int TAirCoupler::GetStatus() } void TAirCoupler::Clear() -{ // zerowanie wskanikw +{ // zerowanie wskaźników pModelOn = NULL; pModelOff = NULL; pModelxOn = NULL; @@ -41,10 +41,10 @@ void TAirCoupler::Clear() void TAirCoupler::Init(std::string const &asName, TModel3d *pModel) { // wyszukanie submodeli if (!pModel) - return; // nie ma w czym szuka - pModelOn = pModel->GetFromName( (asName + "_on").c_str() ); // poczony na wprost + return; // nie ma w czym szukać + pModelOn = pModel->GetFromName( (asName + "_on").c_str() ); // połączony na wprost pModelOff = pModel->GetFromName( (asName + "_off").c_str() ); // odwieszony - pModelxOn = pModel->GetFromName( (asName + "_xon").c_str() ); // poczony na skos + pModelxOn = pModel->GetFromName( (asName + "_xon").c_str() ); // połączony na skos } void TAirCoupler::Load(cParser *Parser, TModel3d *pModel) diff --git a/AnimModel.cpp b/AnimModel.cpp index a0357698..54e0d2b6 100644 --- a/AnimModel.cpp +++ b/AnimModel.cpp @@ -29,36 +29,36 @@ TAnimContainer *TAnimModel::acAnimList = NULL; TAnimAdvanced::TAnimAdvanced(){}; TAnimAdvanced::~TAnimAdvanced(){ - // delete[] pVocaloidMotionData; //plik zosta zmodyfikowany + // delete[] pVocaloidMotionData; //plik został zmodyfikowany }; int TAnimAdvanced::SortByBone() { // sortowanie pliku animacji w celu optymalniejszego wykonania - // rekordy zostaj uoone wg kolejnych ramek dla kadej koci - // uoenie koci alfabetycznie nie jest niezbdne, ale upraszcza sortowanie bbelkowe - TAnimVocaloidFrame buf; // bufor roboczy (przydao by si pascalowe Swap() + // rekordy zostają ułożone wg kolejnych ramek dla każdej kości + // ułożenie kości alfabetycznie nie jest niezbędne, ale upraszcza sortowanie bąbelkowe + TAnimVocaloidFrame buf; // bufor roboczy (przydało by się pascalowe Swap() int i, j, k, swaps = 0, last = iMovements - 1, e; for (i = 0; i < iMovements; ++i) for (j = 0; j < 15; ++j) - if (pMovementData[i].cBone[j] == '\0') // jeli znacznik koca + if (pMovementData[i].cBone[j] == '\0') // jeśli znacznik końca for (++j; j < 15; ++j) - pMovementData[i].cBone[j] = '\0'; // zerowanie bajtw za znacznikiem koca + pMovementData[i].cBone[j] = '\0'; // zerowanie bajtów za znacznikiem końca for (i = 0; i < last; ++i) // do przedostatniego - { // dopki nie posortowane - j = i; // z ktrym porwnywa - k = i; // z ktrym zamieni (nie trzeba zamienia, jeli ==i) + { // dopóki nie posortowane + j = i; // z którym porównywać + k = i; // z którym zamienić (nie trzeba zamieniać, jeśli ==i) while (++j < iMovements) { e = strcmp(pMovementData[k].cBone, - pMovementData[j].cBone); // numery trzeba porwnywa inaczej + pMovementData[j].cBone); // numery trzeba porównywać inaczej if (e > 0) - k = j; // trzeba zamieni - ten pod j jest mniejszy + k = j; // trzeba zamienić - ten pod j jest mniejszy else if (!e) if (pMovementData[k].iFrame > pMovementData[j].iFrame) k = j; // numer klatki pod j jest mniejszy } if (k > i) - { // jeli trzeba przestawi + { // jeśli trzeba przestawić // buf=pMovementData[i]; // pMovementData[i]=pMovementData[k]; // pMovementData[k]=buf; @@ -74,25 +74,25 @@ int TAnimAdvanced::SortByBone() TAnimContainer::TAnimContainer() { pNext = NULL; - vRotateAngles = vector3(0.0f, 0.0f, 0.0f); // aktualne kty obrotu - vDesiredAngles = vector3(0.0f, 0.0f, 0.0f); // docelowe kty obrotu + vRotateAngles = vector3(0.0f, 0.0f, 0.0f); // aktualne kąty obrotu + vDesiredAngles = vector3(0.0f, 0.0f, 0.0f); // docelowe kąty obrotu fRotateSpeed = 0.0; - vTranslation = vector3(0.0f, 0.0f, 0.0f); // aktualne przesunicie - vTranslateTo = vector3(0.0f, 0.0f, 0.0f); // docelowe przesunicie + vTranslation = vector3(0.0f, 0.0f, 0.0f); // aktualne przesunięcie + vTranslateTo = vector3(0.0f, 0.0f, 0.0f); // docelowe przesunięcie fTranslateSpeed = 0.0; fAngleSpeed = 0.0; pSubModel = NULL; - iAnim = 0; // pooenie pocztkowe + iAnim = 0; // położenie początkowe pMovementData = NULL; // nie ma zaawansowanej animacji mAnim = NULL; // nie ma macierzy obrotu dla submodelu - evDone = NULL; // powiadamianie o zakoczeniu animacji - acAnimNext = NULL; // na razie jest poza list + evDone = NULL; // powiadamianie o zakończeniu animacji + acAnimNext = NULL; // na razie jest poza listą } TAnimContainer::~TAnimContainer() { SafeDelete(pNext); - delete mAnim; // AnimContainer jest wacicielem takich macierzy + delete mAnim; // AnimContainer jest właścicielem takich macierzy } bool TAnimContainer::Init(TSubModel *pNewSubModel) @@ -105,21 +105,21 @@ bool TAnimContainer::Init(TSubModel *pNewSubModel) void TAnimContainer::SetRotateAnim(vector3 vNewRotateAngles, double fNewRotateSpeed) { if (!this) - return; // wywoywane z eventu, gdy brak modelu + return; // wywoływane z eventu, gdy brak modelu vDesiredAngles = vNewRotateAngles; fRotateSpeed = fNewRotateSpeed; iAnim |= 1; - /* //Ra 2014-07: jeli model nie jest renderowany, to obliczy czas animacji i doda event - wewntrzny - //mona by te ustawi czas pocztku animacji zamiast pobiera czas ramki i liczy rnic + /* //Ra 2014-07: jeśli model nie jest renderowany, to obliczyć czas animacji i dodać event + wewnętrzny + //można by też ustawić czas początku animacji zamiast pobierać czas ramki i liczyć różnicę */ if (evDone) - { // doczy model do listy aniomowania, eby animacje byy przeliczane rwnie bez - // wywietlania + { // dołączyć model do listy aniomowania, żeby animacje były przeliczane również bez + // wyświetlania if (iAnim >= 0) - { // jeli nie jest jeszcze na licie animacyjnej - acAnimNext = TAnimModel::acAnimList; // pozostae dokli sobie jako ogon - TAnimModel::acAnimList = this; // a wstawi si na pocztek + { // jeśli nie jest jeszcze na liście animacyjnej + acAnimNext = TAnimModel::acAnimList; // pozostałe doklić sobie jako ogon + TAnimModel::acAnimList = this; // a wstawić się na początek iAnim |= 0x80000000; // dodany do listy } } @@ -128,21 +128,21 @@ void TAnimContainer::SetRotateAnim(vector3 vNewRotateAngles, double fNewRotateSp void TAnimContainer::SetTranslateAnim(vector3 vNewTranslate, double fNewSpeed) { if (!this) - return; // wywoywane z eventu, gdy brak modelu + return; // wywoływane z eventu, gdy brak modelu vTranslateTo = vNewTranslate; fTranslateSpeed = fNewSpeed; iAnim |= 2; - /* //Ra 2014-07: jeli model nie jest renderowany, to obliczy czas animacji i doda event - wewntrzny - //mona by te ustawi czas pocztku animacji zamiast pobiera czas ramki i liczy rnic + /* //Ra 2014-07: jeśli model nie jest renderowany, to obliczyć czas animacji i dodać event + wewnętrzny + //można by też ustawić czas początku animacji zamiast pobierać czas ramki i liczyć różnicę */ if (evDone) - { // doczy model do listy aniomowania, eby animacje byy przeliczane rwnie bez - // wywietlania + { // dołączyć model do listy aniomowania, żeby animacje były przeliczane również bez + // wyświetlania if (iAnim >= 0) - { // jeli nie jest jeszcze na licie animacyjnej - acAnimNext = TAnimModel::acAnimList; // pozostae dokli sobie jako ogon - TAnimModel::acAnimList = this; // a wstawi si na pocztek + { // jeśli nie jest jeszcze na liście animacyjnej + acAnimNext = TAnimModel::acAnimList; // pozostałe doklić sobie jako ogon + TAnimModel::acAnimList = this; // a wstawić się na początek iAnim |= 0x80000000; // dodany do listy } } @@ -151,89 +151,89 @@ void TAnimContainer::SetTranslateAnim(vector3 vNewTranslate, double fNewSpeed) void TAnimContainer::AnimSetVMD(double fNewSpeed) { if (!this) - return; // wywoywane z eventu, gdy brak modelu - // skala do ustalenia, "cal" japoski (sun) to nieco ponad 3cm - // X-w lewo, Y-w gr, Z-do tyu - // minimalna wysoko to -7.66, a nadal musi by ponad podog + return; // wywoływane z eventu, gdy brak modelu + // skala do ustalenia, "cal" japoński (sun) to nieco ponad 3cm + // X-w lewo, Y-w górę, Z-do tyłu + // minimalna wysokość to -7.66, a nadal musi być ponad podłogą // if (pMovementData->iFrame>0) return; //tylko pierwsza ramka vTranslateTo = vector3(0.1 * pMovementData->f3Vector.x, 0.1 * pMovementData->f3Vector.z, 0.1 * pMovementData->f3Vector.y); if (LengthSquared3(vTranslateTo) > 0.0 ? true : LengthSquared3(vTranslation) > 0.0) - { // jeli ma by przesunite albo jest przesunicie - iAnim |= 2; // wyczy si samo + { // jeśli ma być przesunięte albo jest przesunięcie + iAnim |= 2; // wyłączy się samo if (fNewSpeed > 0.0) - fTranslateSpeed = fNewSpeed; // prdko jest mnonikiem, nie podlega skalowaniu - else // za pno na animacje, trzeba przestawi + fTranslateSpeed = fNewSpeed; // prędkość jest mnożnikiem, nie podlega skalowaniu + else // za późno na animacje, trzeba przestawić vTranslation = vTranslateTo; } // if ((qCurrent.w<1.0)||(pMovementData->qAngle.w<1.0)) - { // jeli jest jaki obrt + { // jeśli jest jakiś obrót if (!mAnim) { - mAnim = new float4x4(); // bdzie potrzebna macierz animacji - mAnim->Identity(); // jedynkowanie na pocztek + mAnim = new float4x4(); // będzie potrzebna macierz animacji + mAnim->Identity(); // jedynkowanie na początek } iAnim |= 4; // animacja kwaternionowa - qStart = qCurrent; // potrzebna pocztkowa do interpolacji - //---+ - te niby dobrze, ale nie tak trca wosy na pocztku (macha w d) - //-+-+ - do ma w grze zamiast na pasie w pozycji pocztkowej - //+--+ - gowa do tyu (broda w gr) w pozycji pocztkowej - //--++ - pozycja pocztkowa dobra, trca u gry, ale z rkami jako nie tak, kko w - // przeciwn stron - //++++ - kadzie si brzuchem do gry - //-+++ - rce w grze na pocztku, zamiast w d, okie jakby w przeciwn stron - //+-++ - nie podnosi rki do gowy - //++-+ - do ma w grze zamiast na pasie + qStart = qCurrent; // potrzebna początkowa do interpolacji + //---+ - też niby dobrze, ale nie tak trąca włosy na początku (macha w dół) + //-+-+ - dłoń ma w górze zamiast na pasie w pozycji początkowej + //+--+ - głowa do tyłu (broda w górę) w pozycji początkowej + //--++ - pozycja początkowa dobra, trąca u góry, ale z rękami jakoś nie tak, kółko w + // przeciwną stronę + //++++ - kładzie się brzuchem do góry + //-+++ - ręce w górze na początku, zamiast w dół, łokieć jakby w przeciwną stronę + //+-++ - nie podnosi ręki do głowy + //++-+ - dłoń ma w górze zamiast na pasie qDesired = Normalize(float4(-pMovementData->qAngle.x, -pMovementData->qAngle.z, -pMovementData->qAngle.y, - pMovementData->qAngle.w)); // tu trzeba bdzie osie zamieni + pMovementData->qAngle.w)); // tu trzeba będzie osie zamienić if (fNewSpeed > 0.0) { - fAngleSpeed = fNewSpeed; // wtedy animowa za pomoc interpolacji - fAngleCurrent = 0.0; // pocztek interpolacji + fAngleSpeed = fNewSpeed; // wtedy animować za pomocą interpolacji + fAngleCurrent = 0.0; // początek interpolacji } else - { // za pno na animacj, mona tylko przestawi w docelowe miejsce + { // za późno na animację, można tylko przestawić w docelowe miejsce fAngleSpeed = 0.0; - fAngleCurrent = 1.0; // interpolacja zakoczona + fAngleCurrent = 1.0; // interpolacja zakończona qCurrent = qDesired; } } - // if (!strcmp(pSubModel->pName,"?Z??^?[")) //jak gwna ko - // if (!strcmp(pSubModel->pName,"‚?hj")) //IK lewej stopy + // if (!strcmp(pSubModel->pName,"?Z?“?^?[")) //jak główna kość + // if (!strcmp(pSubModel->pName,"Ť¶‚‚Ü?ć‚h‚j")) //IK lewej stopy // WriteLog(AnsiString(pMovementData->iFrame)+": "+AnsiString(pMovementData->f3Vector.x)+" // "+AnsiString(pMovementData->f3Vector.y)+" "+AnsiString(pMovementData->f3Vector.z)); } void TAnimContainer::UpdateModel() -{ // przeliczanie animacji wykona tylko raz na model - if (pSubModel) // pozby si tego - sprawdza wczeniej +{ // przeliczanie animacji wykonać tylko raz na model + if (pSubModel) // pozbyć się tego - sprawdzać wcześniej { if (fTranslateSpeed != 0.0) { vector3 dif = vTranslateTo - vTranslation; // wektor w kierunku docelowym - double l = LengthSquared3(dif); // dugo wektora potrzebnego przemieszczenia + double l = LengthSquared3(dif); // długość wektora potrzebnego przemieszczenia if (l >= 0.0001) - { // jeli do przemieszczenia jest ponad 1cm + { // jeśli do przemieszczenia jest ponad 1cm vector3 s = SafeNormalize(dif); // jednostkowy wektor kierunku s = s * (fTranslateSpeed * - Timer::GetDeltaTime()); // przemieszczenie w podanym czasie z dan prdkoci - if (LengthSquared3(s) < l) //eby nie jechao na drug stron + Timer::GetDeltaTime()); // przemieszczenie w podanym czasie z daną prędkością + if (LengthSquared3(s) < l) //żeby nie jechało na drugą stronę vTranslation += s; else vTranslation = vTranslateTo; // koniec animacji, "koniec animowania" uruchomi - // si w nastpnej klatce + // się w następnej klatce } else { // koniec animowania vTranslation = vTranslateTo; - fTranslateSpeed = 0.0; // wyczenie przeliczania wektora - if (LengthSquared3(vTranslation) <= 0.0001) // jeli jest w punkcie pocztkowym - iAnim &= ~2; // wyczy zmian pozycji submodelu + fTranslateSpeed = 0.0; // wyłączenie przeliczania wektora + if (LengthSquared3(vTranslation) <= 0.0001) // jeśli jest w punkcie początkowym + iAnim &= ~2; // wyłączyć zmianę pozycji submodelu if (evDone) - Global::AddToQuery(evDone, NULL); // wykonanie eventu informujcego o - // zakoczeniu + Global::AddToQuery(evDone, NULL); // wykonanie eventu informującego o + // zakończeniu } } if (fRotateSpeed != 0) @@ -294,67 +294,67 @@ void TAnimContainer::UpdateModel() if (vRotateAngles.x == 0.0) if (vRotateAngles.y == 0.0) if (vRotateAngles.z == 0.0) - iAnim &= ~1; // kty s zerowe + iAnim &= ~1; // kąty są zerowe if (!anim) - { // nie potrzeba przelicza ju + { // nie potrzeba przeliczać już fRotateSpeed = 0.0; if (evDone) - Global::AddToQuery(evDone, NULL); // wykonanie eventu informujcego o - // zakoczeniu + Global::AddToQuery(evDone, NULL); // wykonanie eventu informującego o + // zakończeniu } } if (fAngleSpeed != 0.0) - { // obrt kwaternionu (interpolacja) + { // obrót kwaternionu (interpolacja) } } }; void TAnimContainer::PrepareModel() -{ // tutaj zostawi tylko ustawienie submodelu, przeliczanie ma by w UpdateModel() - if (pSubModel) // pozby si tego - sprawdza wczeniej +{ // tutaj zostawić tylko ustawienie submodelu, przeliczanie ma być w UpdateModel() + if (pSubModel) // pozbyć się tego - sprawdzać wcześniej { // nanoszenie animacji na wzorzec - if (iAnim & 1) // zmieniona pozycja wzgldem pocztkowej + if (iAnim & 1) // zmieniona pozycja względem początkowej pSubModel->SetRotateXYZ(vRotateAngles); // ustawia typ animacji - if (iAnim & 2) // zmieniona pozycja wzgldem pocztkowej + if (iAnim & 2) // zmieniona pozycja względem początkowej pSubModel->SetTranslate(vTranslation); - if (iAnim & 4) // zmieniona pozycja wzgldem pocztkowej + if (iAnim & 4) // zmieniona pozycja względem początkowej { if (fAngleSpeed > 0.0f) { fAngleCurrent += fAngleSpeed * Timer::GetDeltaTime(); // aktualny parametr interpolacji if (fAngleCurrent >= 1.0f) - { // interpolacja zakoczona, ustawienie na pozycj kocow + { // interpolacja zakończona, ustawienie na pozycję końcową qCurrent = qDesired; - fAngleSpeed = 0.0; // wyczenie przeliczania wektora + fAngleSpeed = 0.0; // wyłączenie przeliczania wektora if (evDone) Global::AddToQuery(evDone, - NULL); // wykonanie eventu informujcego o zakoczeniu + NULL); // wykonanie eventu informującego o zakończeniu } else - { // obliczanie pozycji poredniej - // normalizacja jest wymagana do interpolacji w nastpnej animacji + { // obliczanie pozycji pośredniej + // normalizacja jest wymagana do interpolacji w następnej animacji qCurrent = Normalize( - Slerp(qStart, qDesired, fAngleCurrent)); // interpolacja sferyczna kta - // qCurrent=Slerp(qStart,qDesired,fAngleCurrent); //interpolacja sferyczna kta + Slerp(qStart, qDesired, fAngleCurrent)); // interpolacja sferyczna kąta + // qCurrent=Slerp(qStart,qDesired,fAngleCurrent); //interpolacja sferyczna kąta if (qCurrent.w == - 1.0) // rozpozna brak obrotu i wyczy w iAnim w takim przypadku - iAnim &= ~4; // kty s zerowe + 1.0) // rozpoznać brak obrotu i wyłączyć w iAnim w takim przypadku + iAnim &= ~4; // kąty są zerowe } } - mAnim->Quaternion(&qCurrent); // wypenienie macierzy (wymaga normalizacji?) - pSubModel->mAnimMatrix = mAnim; // uyczenie do submodelu (na czas renderowania!) + mAnim->Quaternion(&qCurrent); // wypełnienie macierzy (wymaga normalizacji?) + pSubModel->mAnimMatrix = mAnim; // użyczenie do submodelu (na czas renderowania!) } } - // if (!strcmp(pSubModel->pName,"?Z??^?[")) //jak gwna ko + // if (!strcmp(pSubModel->pName,"?Z?“?^?[")) //jak główna kość // WriteLog(AnsiString(pMovementData->iFrame)+": "+AnsiString(iAnim)+" // "+AnsiString(vTranslation.x)+" "+AnsiString(vTranslation.y)+" "+AnsiString(vTranslation.z)); } void TAnimContainer::UpdateModelIK() { // odwrotna kinematyka wyliczana dopiero po ustawieniu macierzy w submodelach - if (pSubModel) // pozby si tego - sprawdza wczeniej + if (pSubModel) // pozbyć się tego - sprawdzać wcześniej { if (pSubModel->b_Anim & at_IK) { // odwrotna kinematyka @@ -362,25 +362,25 @@ void TAnimContainer::UpdateModelIK() TSubModel *ch = pSubModel->ChildGet(); switch (pSubModel->b_Anim) { - case at_IK11: // stopa: ustawi w kierunku czubka (pierwszy potomny) - d = ch->Translation1Get(); // wektor wzgldem aktualnego ukadu (nie uwzgldnia + case at_IK11: // stopa: ustawić w kierunku czubka (pierwszy potomny) + d = ch->Translation1Get(); // wektor względem aktualnego układu (nie uwzględnia // obrotu) k = float3(RadToDeg(atan2(d.z, hypot(d.x, d.y))), 0.0, -RadToDeg(atan2(d.y, d.x))); // proste skierowanie na punkt pSubModel->SetRotateIK1(k); - // if (!strcmp(pSubModel->pName,"?Z??^?[")) //jak gwna ko + // if (!strcmp(pSubModel->pName,"?Z?“?^?[")) //jak główna kość // WriteLog("--> "+AnsiString(k.x)+" "+AnsiString(k.y)+" "+AnsiString(k.z)); - // Ra: to ju jest dobrze, moe by inna wiartka i znak + // Ra: to już jest dobrze, może być inna ćwiartka i znak break; - case at_IK22: // udo: ustawi w kierunku pierwszej potomnej pierwszej potomnej (kostki) - // pozycj kostki naley okreli wzgldem koci centralnej (+biodro moe by + case at_IK22: // udo: ustawić w kierunku pierwszej potomnej pierwszej potomnej (kostki) + // pozycję kostki należy określić względem kości centralnej (+biodro może być // pochylone) - // potem wyliczy ewentualne odchylenie w tej i nastpnej - // w sumie to proste, jak wyznaczenie ktw w trjkcie o znanej dugoci bokw... - d = ch->Translation2Get(); // wektor wzgldem aktualnego ukadu (nie uwzgldnia + // potem wyliczyć ewentualne odchylenie w tej i następnej + // w sumie to proste, jak wyznaczenie kątów w trójkącie o znanej długości boków... + d = ch->Translation2Get(); // wektor względem aktualnego układu (nie uwzględnia // obrotu) // if () - { // ko IK jest dalej ni pozycja spoczynkowa + { // kość IK jest dalej niż pozycja spoczynkowa k = float3(RadToDeg(atan2(d.z, hypot(d.x, d.y))), 0.0, -RadToDeg(atan2(d.y, d.x))); // proste skierowanie na punkt pSubModel->SetRotateIK1(k); @@ -397,7 +397,7 @@ bool TAnimContainer::InMovement() } void TAnimContainer::EventAssign(TEvent *ev) -{ // przypisanie eventu wykonywanego po zakoczeniu animacji +{ // przypisanie eventu wykonywanego po zakończeniu animacji evDone = ev; }; @@ -419,11 +419,11 @@ TAnimModel::TAnimModel() for (int i = 0; i < iMaxNumLights; i++) { LightsOn[i] = LightsOff[i] = NULL; // normalnie nie ma - lsLights[i] = ls_Off; // a jeli s, to wyczone + lsLights[i] = ls_Off; // a jeśli są, to wyłączone } - vAngle.x = vAngle.y = vAngle.z = 0.0; // zerowanie obrotw egzemplarza + vAngle.x = vAngle.y = vAngle.z = 0.0; // zerowanie obrotów egzemplarza pAdvanced = NULL; // nie ma zaawansowanej animacji - fDark = 0.25; // standardowy prg zaplania + fDark = 0.25; // standardowy próg zaplania fOnTime = 0.66; fOffTime = fOnTime + 0.66; } @@ -445,29 +445,29 @@ bool TAnimModel::Init(TModel3d *pNewModel) bool TAnimModel::Init(std::string const &asName, std::string const &asReplacableTexture) { if (asReplacableTexture.substr(0, 1) == - "*") // od gwiazdki zaczynaj si teksty na wywietlaczach - asText = asReplacableTexture.substr(1, asReplacableTexture.length() - 1); // zapamitanie tekstu + "*") // od gwiazdki zaczynają się teksty na wyświetlaczach + asText = asReplacableTexture.substr(1, asReplacableTexture.length() - 1); // zapamiętanie tekstu else if (asReplacableTexture != "none") ReplacableSkinId[1] = TTexturesManager::GetTextureID(NULL, NULL, asReplacableTexture.c_str()); if (TTexturesManager::GetAlpha(ReplacableSkinId[1])) iTexAlpha = - 0x31310031; // tekstura z kanaem alfa - nie renderowa w cyklu nieprzezroczystych + 0x31310031; // tekstura z kanałem alfa - nie renderować w cyklu nieprzezroczystych else - iTexAlpha = 0x30300030; // tekstura nieprzezroczysta - nie renderowa w cyklu + iTexAlpha = 0x30300030; // tekstura nieprzezroczysta - nie renderować w cyklu // przezroczystych return (Init(TModelsManager::GetModel(asName.c_str()))); } bool TAnimModel::Load(cParser *parser, bool ter) -{ // rozpoznanie wpisu modelu i ustawienie wiate +{ // rozpoznanie wpisu modelu i ustawienie świateł std::string name = parser->getToken(); - std::string texture = parser->getToken(false); // tekstura (zmienia na mae) + std::string texture = parser->getToken(false); // tekstura (zmienia na małe) if (!Init( name, texture )) { if (name != "notload") { // gdy brak modelu - if (ter) // jeli teren + if (ter) // jeśli teren { if( name.substr( name.rfind( '.' ) ) == ".t3d" ) { name[ name.length() - 2 ] = 'e'; @@ -480,7 +480,7 @@ bool TAnimModel::Load(cParser *parser, bool ter) } } else - { // wizanie wiate, o ile model wczytany + { // wiązanie świateł, o ile model wczytany LightsOn[0] = pModel->GetFromName("Light_On00"); LightsOn[1] = pModel->GetFromName("Light_On01"); LightsOn[2] = pModel->GetFromName("Light_On02"); @@ -499,7 +499,7 @@ bool TAnimModel::Load(cParser *parser, bool ter) LightsOff[7] = pModel->GetFromName("Light_Off07"); } for (int i = 0; i < iMaxNumLights; ++i) - if (LightsOn[i] || LightsOff[i]) // Ra: zlikwidowaem wymg istnienia obu + if (LightsOn[i] || LightsOff[i]) // Ra: zlikwidowałem wymóg istnienia obu iNumLights = i + 1; if ( parser->getToken() == "lights" ) @@ -509,7 +509,7 @@ bool TAnimModel::Load(cParser *parser, bool ter) while( ( token != "" ) && ( token != "endmodel" ) ) { - LightSet( i, std::stod( token ) ); // stan wiata jest liczb z uamkiem + LightSet( i, std::stod( token ) ); // stan światła jest liczbą z ułamkiem ++i; token = ""; @@ -548,23 +548,23 @@ TAnimContainer * TAnimModel::GetContainer(char *pName) } void TAnimModel::RaAnimate() -{ // przeliczenie animacji - jednorazowo na klatk - // Ra 2F1I: to by mona pomija dla modeli bez animacji, ktrych jest wikszo +{ // przeliczenie animacji - jednorazowo na klatkę + // Ra 2F1I: to by można pomijać dla modeli bez animacji, których jest większość TAnimContainer *pCurrent; for (pCurrent = pRoot; pCurrent != NULL; pCurrent = pCurrent->pNext) - if (!pCurrent->evDone) // jeli jest bez eventu - pCurrent->UpdateModel(); // przeliczenie animacji kadego submodelu + if (!pCurrent->evDone) // jeśli jest bez eventu + pCurrent->UpdateModel(); // przeliczenie animacji każdego submodelu // if () //tylko dla modeli z IK !!!! - for (pCurrent = pRoot; pCurrent != NULL; pCurrent = pCurrent->pNext) // albo osobny acuch + for (pCurrent = pRoot; pCurrent != NULL; pCurrent = pCurrent->pNext) // albo osobny łańcuch pCurrent->UpdateModelIK(); // przeliczenie odwrotnej kinematyki }; void TAnimModel::RaPrepare() -{ // ustawia wiata i animacje we wzorcu modelu przed renderowaniem egzemplarza +{ // ustawia światła i animacje we wzorcu modelu przed renderowaniem egzemplarza fBlinkTimer -= Timer::GetDeltaTime(); if (fBlinkTimer <= 0) fBlinkTimer = fOffTime; - bool state; // stan wiata + bool state; // stan światła for (int i = 0; i < iNumLights; i++) { switch (lsLights[i]) @@ -583,20 +583,20 @@ void TAnimModel::RaPrepare() if (LightsOff[i]) LightsOff[i]->iVisible = !state; } - TSubModel::iInstance = (int)this; //eby nie robi cudzych animacji - TSubModel::pasText = &asText; // przekazanie tekstu do wywietlacza (!!!! do przemylenia) - if (pAdvanced) // jeli jest zaawansowana animacja - Advanced(); // wykona co tam trzeba + TSubModel::iInstance = (int)this; //żeby nie robić cudzych animacji + TSubModel::pasText = &asText; // przekazanie tekstu do wyświetlacza (!!!! do przemyślenia) + if (pAdvanced) // jeśli jest zaawansowana animacja + Advanced(); // wykonać co tam trzeba TAnimContainer *pCurrent; for (pCurrent = pRoot; pCurrent != NULL; pCurrent = pCurrent->pNext) - pCurrent->PrepareModel(); // ustawienie animacji egzemplarza dla kadego submodelu + pCurrent->PrepareModel(); // ustawienie animacji egzemplarza dla każdego submodelu // if () //tylko dla modeli z IK !!!! - // for (pCurrent=pRoot;pCurrent!=NULL;pCurrent=pCurrent->pNext) //albo osobny acuch + // for (pCurrent=pRoot;pCurrent!=NULL;pCurrent=pCurrent->pNext) //albo osobny łańcuch // pCurrent->UpdateModelIK(); //przeliczenie odwrotnej kinematyki } /* void TAnimModel::RenderVBO(vector3 pPosition, double fAngle) -{ // sprawdza wiata i rekurencyjnie renderuje TModel3d +{ // sprawdza światła i rekurencyjnie renderuje TModel3d RaAnimate(); // jednorazowe przeliczenie animacji RaPrepare(); if (pModel) // renderowanie rekurencyjne submodeli @@ -626,21 +626,21 @@ void TAnimModel::RenderAlphaDL(vector3 pPosition, double fAngle) }; */ int TAnimModel::Flags() -{ // informacja dla TGround, czy ma by w Render, RenderAlpha, czy RenderMixed - int i = pModel ? pModel->Flags() : 0; // pobranie flag caego modelu - if (ReplacableSkinId[1] > 0) // jeli ma wymienn tekstur 0 +{ // informacja dla TGround, czy ma być w Render, RenderAlpha, czy RenderMixed + int i = pModel ? pModel->Flags() : 0; // pobranie flag całego modelu + if (ReplacableSkinId[1] > 0) // jeśli ma wymienną teksturę 0 i |= (i & 0x01010001) * ((iTexAlpha & 1) ? 0x20 : 0x10); - // if (ReplacableSkinId[2]>0) //jeli ma wymienn tekstur 1 + // if (ReplacableSkinId[2]>0) //jeśli ma wymienną teksturę 1 // i|=(i&0x02020002)*((iTexAlpha&1)?0x10:0x08); - // if (ReplacableSkinId[3]>0) //jeli ma wymienn tekstur 2 + // if (ReplacableSkinId[3]>0) //jeśli ma wymienną teksturę 2 // i|=(i&0x04040004)*((iTexAlpha&1)?0x08:0x04); - // if (ReplacableSkinId[4]>0) //jeli ma wymienn tekstur 3 + // if (ReplacableSkinId[4]>0) //jeśli ma wymienną teksturę 3 // i|=(i&0x08080008)*((iTexAlpha&1)?0x04:0x02); return i; }; //----------------------------------------------------------------------------- -// 2011-03-16 cztery nowe funkcje renderowania z moliwoci pochylania obiektw +// 2011-03-16 cztery nowe funkcje renderowania z możliwością pochylania obiektów //----------------------------------------------------------------------------- void TAnimModel::RenderDL(vector3 *vPosition) @@ -672,15 +672,15 @@ void TAnimModel::RenderAlphaVBO(vector3 *vPosition) //--------------------------------------------------------------------------- bool TAnimModel::TerrainLoaded() -{ // zliczanie kwadratw kilometrowych (gwna linia po Next) do tworznia tablicy +{ // zliczanie kwadratów kilometrowych (główna linia po Next) do tworznia tablicy return (this ? pModel != NULL : false); }; int TAnimModel::TerrainCount() -{ // zliczanie kwadratw kilometrowych (gwna linia po Next) do tworznia tablicy +{ // zliczanie kwadratów kilometrowych (główna linia po Next) do tworznia tablicy return pModel ? pModel->TerrainCount() : 0; }; TSubModel * TAnimModel::TerrainSquare(int n) -{ // pobieranie wskanikw do pierwszego submodelu +{ // pobieranie wskaźników do pierwszego submodelu return pModel ? pModel->TerrainSquare(n) : 0; }; void TAnimModel::TerrainRenderVBO(int n) @@ -697,21 +697,21 @@ void TAnimModel::Advanced() int frame = floor(pAdvanced->fCurrent); // numer klatki jako int TAnimContainer *pCurrent; if (pAdvanced->fCurrent >= pAdvanced->fLast) - { // animacja zostaa zakoczona + { // animacja została zakończona delete pAdvanced; - pAdvanced = NULL; // dalej ju nic + pAdvanced = NULL; // dalej już nic for (pCurrent = pRoot; pCurrent != NULL; pCurrent = pCurrent->pNext) - if (pCurrent->pMovementData) // jeli obsugiwany tabelk animacji - pCurrent->pMovementData = NULL; // usuwanie wskanikw + if (pCurrent->pMovementData) // jeśli obsługiwany tabelką animacji + pCurrent->pMovementData = NULL; // usuwanie wskaźników } else - { // co trzeba poanimowa - wszystkie animowane submodele s w tym acuchu + { // coś trzeba poanimować - wszystkie animowane submodele są w tym łańcuchu for (pCurrent = pRoot; pCurrent != NULL; pCurrent = pCurrent->pNext) - if (pCurrent->pMovementData) // jeli obsugiwany tabelk animacji + if (pCurrent->pMovementData) // jeśli obsługiwany tabelką animacji if (frame >= pCurrent->pMovementData->iFrame) // koniec czekania if (!strcmp(pCurrent->pMovementData->cBone, (pCurrent->pMovementData + 1)->cBone)) - { // jak kolejna ramka dotyczy tego samego submodelu, ustawi animacj do + { // jak kolejna ramka dotyczy tego samego submodelu, ustawić animację do // kolejnej ramki ++pCurrent->pMovementData; // kolejna klatka pCurrent->AnimSetVMD( @@ -720,18 +720,18 @@ void TAnimModel::Advanced() } else pCurrent->pMovementData = - NULL; // inna nazwa, animowanie zakoczone w aktualnym pooeniu + NULL; // inna nazwa, animowanie zakończone w aktualnym położeniu } }; void TAnimModel::AnimationVND(void *pData, double a, double b, double c, double d) -{ // rozpoczcie wykonywania animacji z podanego pliku - // tabela w pliku musi by posortowana wg klatek dla kolejnych koci! - // skrcone nagranie ma 3:42 = 222 sekundy, animacja koczy si na klatce 6518 - // daje to 29.36 (~=30) klatek na sekund +{ // rozpoczęcie wykonywania animacji z podanego pliku + // tabela w pliku musi być posortowana wg klatek dla kolejnych kości! + // skrócone nagranie ma 3:42 = 222 sekundy, animacja kończy się na klatce 6518 + // daje to 29.36 (~=30) klatek na sekundę // w opisach jest podawane 24 albo 36 jako standard => powiedzmy, parametr (d) to FPS animacji - delete pAdvanced; // usunicie ewentualnego poprzedniego - pAdvanced = NULL; // gdyby si nie udao rozpozna pliku + delete pAdvanced; // usunięcie ewentualnego poprzedniego + pAdvanced = NULL; // gdyby się nie udało rozpoznać pliku if (std::string(static_cast(pData)) == "Vocaloid Motion Data 0002") { pAdvanced = new TAnimAdvanced(); @@ -743,9 +743,9 @@ void TAnimModel::AnimationVND(void *pData, double a, double b, double c, double pAdvanced->fCurrent = 0.0; // aktualna ramka pAdvanced->fLast = 0.0; // ostatnia ramka /* - if (0) //jeli wczone sortowanie plikw VMD (troch si przeciga) - if (pAdvanced->SortByBone()) //prba posortowania - {//zapisa posortowany plik, jeli dokonano zmian + if (0) //jeśli włączone sortowanie plików VMD (trochę się przeciąga) + if (pAdvanced->SortByBone()) //próba posortowania + {//zapisać posortowany plik, jeśli dokonano zmian TFileStream *fs=new TFileStream("models\\1.vmd",fmCreate); fs->Write(pData,2198342); //2948728); delete fs; @@ -758,13 +758,13 @@ void TAnimModel::AnimationVND(void *pData, double a, double b, double c, double for (int i = 0; i < pAdvanced->iMovements; ++i) { if (strcmp(pAdvanced->pMovementData[i].cBone, name.c_str())) - { // jeli pozycja w tabelce nie bya wyszukiwana w submodelach + { // jeśli pozycja w tabelce nie była wyszukiwana w submodelach pSub = GetContainer(pAdvanced->pMovementData[i].cBone); // szukanie if (pSub) // znaleziony { - pSub->pMovementData = pAdvanced->pMovementData + i; // gotw do animowania - pSub->AnimSetVMD(0.0); // usuawienie pozycji pocztkowej (powinna by zerowa, - // inaczej bdzie skok) + pSub->pMovementData = pAdvanced->pMovementData + i; // gotów do animowania + pSub->AnimSetVMD(0.0); // usuawienie pozycji początkowej (powinna być zerowa, + // inaczej będzie skok) } name = std::string(pAdvanced->pMovementData[i].cBone); // nowa nazwa do pomijania } @@ -775,7 +775,7 @@ void TAnimModel::AnimationVND(void *pData, double a, double b, double c, double for (i=0;iiMovements;++i) if (AnsiString(pAdvanced->pMovementData[i+1].cBone)!=AnsiString(pAdvanced->pMovementData[i].cBone)) - {//generowane dla ostatniej klatki danej koci + {//generowane dla ostatniej klatki danej kości name=""; for (j=0;j<15;j++) name+=IntToHex((unsigned char)pAdvanced->pMovementData[i].cBone[j],2); @@ -795,7 +795,7 @@ void TAnimModel::AnimationVND(void *pData, double a, double b, double c, double ); idx=i+1; - k=pAdvanced->pMovementData[i+1].iFrame; //pierwsza klatka nastpnego + k=pAdvanced->pMovementData[i+1].iFrame; //pierwsza klatka następnego } else if (pAdvanced->pMovementData[i].iFrame>0) @@ -819,39 +819,39 @@ void TAnimModel::AnimationVND(void *pData, double a, double b, double c, double //--------------------------------------------------------------------------- void TAnimModel::LightSet(int n, float v) -{ // ustawienie wiata (n) na warto (v) +{ // ustawienie światła (n) na wartość (v) if (n >= iMaxNumLights) return; // przekroczony zakres lsLights[n] = TLightState(int(v)); switch (lsLights[n]) - { // interpretacja uamka zalenie od typu + { // interpretacja ułamka zależnie od typu case 0: // ustalenie czasu migotania, t<1s (f>1Hz), np. 0.1 => t=0.1 (f=10Hz) break; - case 1: // ustalenie wypenienia uamkiem, np. 1.25 => zapalony przez 1/4 okresu + case 1: // ustalenie wypełnienia ułamkiem, np. 1.25 => zapalony przez 1/4 okresu break; - case 2: // ustalenie czstotliwoci migotania, f<1Hz (t>1s), np. 2.2 => f=0.2Hz (t=5s) + case 2: // ustalenie częstotliwości migotania, f<1Hz (t>1s), np. 2.2 => f=0.2Hz (t=5s) break; - case 3: // zapalenie wiate zalene od owietlenia scenerii + case 3: // zapalenie świateł zależne od oświetlenia scenerii if (v > 3.0) fDark = v - 3.0; // ustawienie indywidualnego progu zapalania else - fDark = 0.25; // standardowy prg zaplania + fDark = 0.25; // standardowy próg zaplania break; } }; //--------------------------------------------------------------------------- void TAnimModel::AnimUpdate(double dt) -{ // wykonanie zakolejkowanych animacji, nawet gdy modele nie s aktualnie wywietlane +{ // wykonanie zakolejkowanych animacji, nawet gdy modele nie są aktualnie wyświetlane TAnimContainer *p = TAnimModel::acAnimList; while (p) - { // jeli w ogle jest co animowa + { // jeśli w ogóle jest co animować // if ((*p)->fTranslateSpeed==0.0) // if ((*p)->fRotateSpeed==0.0) - // {//jak si naanimowa, to usun z listy - // *p=(*p)->ListRemove(); //zwraca wskanik do kolejnego z listy + // {//jak się naanimował, to usunąć z listy + // *p=(*p)->ListRemove(); //zwraca wskaźnik do kolejnego z listy // } p->UpdateModel(); - p = p->acAnimNext; // na razie bez usuwania z listy, bo gwnie obrotnica na ni wchodzi + p = p->acAnimNext; // na razie bez usuwania z listy, bo głównie obrotnica na nią wchodzi } }; //--------------------------------------------------------------------------- diff --git a/AnimModel.h b/AnimModel.h index 33e9e0b5..8ceebcda 100644 --- a/AnimModel.h +++ b/AnimModel.h @@ -19,60 +19,60 @@ http://mozilla.org/MPL/2.0/. const int iMaxNumLights = 8; -// typy stanu wiate +// typy stanu świateł typedef enum { ls_Off = 0, // zgaszone ls_On = 1, // zapalone - ls_Blink = 2, // migajce - ls_Dark = 3 // Ra: zapalajce si automatycznie, gdy zrobi si ciemno + ls_Blink = 2, // migające + ls_Dark = 3 // Ra: zapalajce się automatycznie, gdy zrobi się ciemno } TLightState; class TAnimVocaloidFrame { // ramka animacji typu Vocaloid Motion Data z programu MikuMikuDance public: - char cBone[15]; // nazwa koci, moe by po japosku + char cBone[15]; // nazwa kości, może być po japońsku int iFrame; // numer ramki float3 f3Vector; // przemieszczenie float4 qAngle; // kwaternion obrotu - char cBezier[64]; // krzywe Bziera do interpolacji dla x,y,z i obrotu + char cBezier[64]; // krzywe Béziera do interpolacji dla x,y,z i obrotu }; class TEvent; class TAnimContainer -{ // opakowanie submodelu, okrelajce animacj egzemplarza - obsugiwane jako lista +{ // opakowanie submodelu, określające animację egzemplarza - obsługiwane jako lista friend class TAnimModel; private: - vector3 vRotateAngles; // dla obrotw Eulera + vector3 vRotateAngles; // dla obrotów Eulera vector3 vDesiredAngles; double fRotateSpeed; vector3 vTranslation; vector3 vTranslateTo; - double fTranslateSpeed; // moe tu da wektor? + double fTranslateSpeed; // może tu dać wektor? float4 qCurrent; // aktualny interpolowany - float4 qStart; // pozycja pocztkowa (0 dla interpolacji) - float4 qDesired; // pozycja kocowa (1 dla interpolacji) + float4 qStart; // pozycja początkowa (0 dla interpolacji) + float4 qDesired; // pozycja końcowa (1 dla interpolacji) float fAngleCurrent; // parametr interpolacyjny: 0=start, 1=docelowy float fAngleSpeed; // zmiana parametru interpolacji w sekundach TSubModel *pSubModel; float4x4 *mAnim; // macierz do animacji kwaternionowych - // dla kinematyki odwrconej uywane s kwaterniony - float fLength; // dugo koci dla IK - int iAnim; // animacja: +1-obrt Eulera, +2-przesuw, +4-obrt kwaternionem, +8-IK - //+0x80000000: animacja z eventem, wykonywana poza wywietlaniem - //+0x100: pierwszy stopie IK - obrci w stron pierwszego potomnego (dziecka) - //+0x200: drugi stopie IK - dostosowa do pozycji potomnego potomnego (wnuka) + // dla kinematyki odwróconej używane są kwaterniony + float fLength; // długość kości dla IK + int iAnim; // animacja: +1-obrót Eulera, +2-przesuw, +4-obrót kwaternionem, +8-IK + //+0x80000000: animacja z eventem, wykonywana poza wyświetlaniem + //+0x100: pierwszy stopień IK - obrócić w stronę pierwszego potomnego (dziecka) + //+0x200: drugi stopień IK - dostosować do pozycji potomnego potomnego (wnuka) union - { // mog by animacje klatkowe rnego typu, wskaniki uywa AnimModel - TAnimVocaloidFrame *pMovementData; // wskanik do klatki + { // mogą być animacje klatkowe różnego typu, wskaźniki używa AnimModel + TAnimVocaloidFrame *pMovementData; // wskaźnik do klatki }; - TEvent *evDone; // ewent wykonywany po zakoczeniu animacji, np. zapr, obrotnicy + TEvent *evDone; // ewent wykonywany po zakończeniu animacji, np. zapór, obrotnicy public: TAnimContainer *pNext; - TAnimContainer *acAnimNext; // lista animacji z eventem, ktre musz by przeliczane rwnie bez - // wywietlania + TAnimContainer *acAnimNext; // lista animacji z eventem, które muszą być przeliczane również bez + // wyświetlania TAnimContainer(); ~TAnimContainer(); bool Init(TSubModel *pNewSubModel); @@ -96,11 +96,11 @@ class TAnimContainer double _fastcall AngleGet() { return vRotateAngles.z; - }; // jednak ostatnia, T3D ma inny ukad + }; // jednak ostatnia, T3D ma inny układ vector3 _fastcall TransGet() { return vector3(-vTranslation.x, vTranslation.z, vTranslation.y); - }; // zmiana, bo T3D ma inny ukad + }; // zmiana, bo T3D ma inny układ void WillBeAnimated() { if (pSubModel) @@ -119,8 +119,8 @@ class TAnimAdvanced TAnimVocaloidFrame *pMovementData; unsigned char *pVocaloidMotionData; // plik animacyjny dla egzemplarza (z eventu) double fFrequency; // przeliczenie czasu rzeczywistego na klatki animacji - double fCurrent; // klatka animacji wywietlona w poprzedniej klatce renderingu - double fLast; // klatka koczca animacj + double fCurrent; // klatka animacji wyświetlona w poprzedniej klatce renderingu + double fLast; // klatka kończąca animację int iMovements; TAnimAdvanced(); ~TAnimAdvanced(); @@ -128,29 +128,29 @@ class TAnimAdvanced }; class TAnimModel -{ // opakowanie modelu, okrelajce stan egzemplarza +{ // opakowanie modelu, określające stan egzemplarza private: - TAnimContainer *pRoot; // pojemniki sterujce, tylko dla aniomowanych submodeli + TAnimContainer *pRoot; // pojemniki sterujące, tylko dla aniomowanych submodeli TModel3d *pModel; double fBlinkTimer; int iNumLights; - TSubModel *LightsOn[iMaxNumLights]; // Ra: te wskaniki powinny by w ramach TModel3d + TSubModel *LightsOn[iMaxNumLights]; // Ra: te wskaźniki powinny być w ramach TModel3d TSubModel *LightsOff[iMaxNumLights]; - vector3 vAngle; // bazowe obroty egzemplarza wzgldem osi - int iTexAlpha; //eby nie sprawdza za kadym razem, dla 4 wymiennych tekstur - std::string asText; // tekst dla wywietlacza znakowego + vector3 vAngle; // bazowe obroty egzemplarza względem osi + int iTexAlpha; //żeby nie sprawdzać za każdym razem, dla 4 wymiennych tekstur + std::string asText; // tekst dla wyświetlacza znakowego TAnimAdvanced *pAdvanced; void Advanced(); TLightState lsLights[iMaxNumLights]; - float fDark; // poziom zapalanie wiata (powinno by chyba powizane z danym wiatem?) - float fOnTime, fOffTime; // byy staymi, teraz mog by zmienne dla kadego egzemplarza + float fDark; // poziom zapalanie światła (powinno być chyba powiązane z danym światłem?) + float fOnTime, fOffTime; // były stałymi, teraz mogą być zmienne dla każdego egzemplarza private: void RaAnimate(); // przeliczenie animacji egzemplarza void RaPrepare(); // ustawienie animacji egzemplarza na wzorcu public: GLuint ReplacableSkinId[5]; // McZapkie-020802: zmienialne skory - static TAnimContainer *acAnimList; // lista animacji z eventem, ktre musz by przeliczane - // rwnie bez wywietlania + static TAnimContainer *acAnimList; // lista animacji z eventem, które muszą być przeliczane + // również bez wyświetlania TAnimModel(); ~TAnimModel(); bool Init(TModel3d *pNewModel); diff --git a/Button.cpp b/Button.cpp index c9995139..77016856 100644 --- a/Button.cpp +++ b/Button.cpp @@ -29,13 +29,13 @@ void TButton::Clear(int i) bOn = false; if (i >= 0) FeedbackBitSet(i); - Update(); // kasowanie bitu Feedback, o ile jaki ustawiony + Update(); // kasowanie bitu Feedback, o ile jakiś ustawiony }; void TButton::Init(std::string const &asName, TModel3d *pModel, bool bNewOn) { if (!pModel) - return; // nie ma w czym szuka + return; // nie ma w czym szukać pModelOn = pModel->GetFromName( (asName + "_on").c_str() ); pModelOff = pModel->GetFromName( (asName + "_off").c_str() ); bOn = bNewOn; @@ -50,8 +50,8 @@ void TButton::Load(cParser &Parser, TModel3d *pModel1, TModel3d *pModel2) Init(token, pModel1, false); if (pModel2) if (!pModelOn && !pModelOff) - Init(token, pModel2, false); // moe w drugim bdzie (jak nie w kabinie, - // to w zewntrznym) + Init(token, pModel2, false); // może w drugim będzie (jak nie w kabinie, + // to w zewnętrznym) } else { @@ -68,7 +68,7 @@ void TButton::Update() pModelOn->iVisible = bOn; if (pModelOff) pModelOff->iVisible = !bOn; - if (iFeedbackBit) // jeeli generuje informacj zwrotn + if (iFeedbackBit) // jeżeli generuje informację zwrotną { if (bOn) // zapalenie Console::BitsSet(iFeedbackBit); diff --git a/Button.h b/Button.h index dc0f5a7d..0b79c19f 100644 --- a/Button.h +++ b/Button.h @@ -15,10 +15,10 @@ http://mozilla.org/MPL/2.0/. #include "parser.h" class TButton -{ // animacja dwustanowa, wcza jeden z dwch submodeli (jednego - // z nich moe nie by) +{ // animacja dwustanowa, włącza jeden z dwóch submodeli (jednego + // z nich może nie być) private: - TSubModel *pModelOn, *pModelOff; // submodel dla stanu zaczonego i wyczonego + TSubModel *pModelOn, *pModelOff; // submodel dla stanu załączonego i wyłączonego bool bOn; bool *bData; int iFeedbackBit; // Ra: bit informacji zwrotnej, do wyprowadzenia na pulpit diff --git a/Camera.cpp b/Camera.cpp index 9bbfd990..4c20b7e5 100644 --- a/Camera.cpp +++ b/Camera.cpp @@ -51,9 +51,9 @@ void TCamera::OnCursorMove(double x, double y) Yaw -= 2 * M_PI; else if (Yaw < -M_PI) Yaw += 2 * M_PI; - if (Type == tp_Follow) // jeeli jazda z pojazdem + if (Type == tp_Follow) // jeżeli jazda z pojazdem { - Fix(Pitch, -M_PI_4, M_PI_4); // ograniczenie kta spogldania w d i w gr + Fix(Pitch, -M_PI_4, M_PI_4); // ograniczenie kąta spoglądania w dół i w górę // Fix(Yaw,-M_PI,M_PI); } } @@ -129,7 +129,7 @@ void TCamera::Update() vector3 Vec = Velocity; Vec.RotateY(Yaw); Pos = Pos + Vec * Timer::GetDeltaRenderTime(); // czas bez pauzy - Velocity = Velocity / 2; // pynne hamowanie ruchu + Velocity = Velocity / 2; // płynne hamowanie ruchu // double tmp= 10*DeltaTime; // Velocity+= -Velocity*10 * Timer::GetDeltaTime();//( tmp<1 ? tmp : 1 ); // Type= tp_Free; @@ -149,10 +149,10 @@ vector3 TCamera::GetDirection() // bool TCamera::GetMatrix(matrix4x4 &Matrix) bool TCamera::SetMatrix() { - glRotated(-Roll * 180.0f / M_PI, 0, 0, 1); // po wyczeniu tego krci si pojazd, a sceneria + glRotated(-Roll * 180.0f / M_PI, 0, 0, 1); // po wyłączeniu tego kręci się pojazd, a sceneria // nie glRotated(-Pitch * 180.0f / M_PI, 1, 0, 0); - glRotated(-Yaw * 180.0f / M_PI, 0, 1, 0); // w zewntrznym widoku: kierunek patrzenia + glRotated(-Yaw * 180.0f / M_PI, 0, 1, 0); // w zewnętrznym widoku: kierunek patrzenia if (Type == tp_Follow) { @@ -174,15 +174,15 @@ bool TCamera::SetMatrix() glTranslated(-Pos.x, -Pos.y, -Pos.z); // nie zmienia kierunku patrzenia } - Global::SetCameraPosition(Pos); // byo +pOffset + Global::SetCameraPosition(Pos); // było +pOffset return true; } void TCamera::SetCabMatrix(vector3 &p) -{ // ustawienie widoku z kamery bez przesunicia robionego przez OpenGL - nie powinno tak trz +{ // ustawienie widoku z kamery bez przesunięcia robionego przez OpenGL - nie powinno tak trząść glRotated(-Roll * 180.0f / M_PI, 0, 0, 1); glRotated(-Pitch * 180.0f / M_PI, 1, 0, 0); - glRotated(-Yaw * 180.0f / M_PI, 0, 1, 0); // w zewntrznym widoku: kierunek patrzenia + glRotated(-Yaw * 180.0f / M_PI, 0, 1, 0); // w zewnętrznym widoku: kierunek patrzenia if (Type == tp_Follow) gluLookAt(Pos.x - p.x, Pos.y - p.y, Pos.z - p.z, LookAt.x - p.x, LookAt.y - p.y, LookAt.z - p.z, vUp.x, vUp.y, vUp.z); // Ra: pOffset is zero @@ -190,16 +190,16 @@ void TCamera::SetCabMatrix(vector3 &p) void TCamera::RaLook() { // zmiana kierunku patrzenia - przelicza Yaw - vector3 where = LookAt - Pos + vector3(0, 3, 0); // troch w gr od szyn + vector3 where = LookAt - Pos + vector3(0, 3, 0); // trochę w górę od szyn if ((where.x != 0.0) || (where.z != 0.0)) - Yaw = atan2(-where.x, -where.z); // kt horyzontalny + Yaw = atan2(-where.x, -where.z); // kąt horyzontalny double l = Length3(where); if (l > 0.0) - Pitch = asin(where.y / l); // kt w pionie + Pitch = asin(where.y / l); // kąt w pionie }; void TCamera::Stop() -{ // wycznie bezwadnego ruchu po powrocie do kabiny +{ // wyłącznie bezwładnego ruchu po powrocie do kabiny Type = tp_Follow; Velocity = vector3(0, 0, 0); }; diff --git a/Camera.h b/Camera.h index cc666323..0d1ab315 100644 --- a/Camera.h +++ b/Camera.h @@ -18,20 +18,20 @@ enum TCameraType { // tryby pracy kamery tp_Follow, // jazda z pojazdem tp_Free, // stoi na scenerii - tp_Satelite // widok z gry (nie uywany) + tp_Satelite // widok z góry (nie używany) }; class TCamera { private: - vector3 pOffset; // nie uywane (zerowe) + vector3 pOffset; // nie używane (zerowe) public: // McZapkie: potrzebuje do kiwania na boki double Pitch; - double Yaw; // w rodku: 0=do przodu; na zewntrz: 0=na poudnie + double Yaw; // w środku: 0=do przodu; na zewnątrz: 0=na południe double Roll; TCameraType Type; - vector3 Pos; // wsprzdne obserwatora - vector3 LookAt; // wsprzdne punktu, na ktry ma patrze + vector3 Pos; // współrzędne obserwatora + vector3 LookAt; // współrzędne punktu, na który ma patrzeć vector3 vUp; vector3 Velocity; vector3 OldVelocity; // lepiej usredniac zeby nie bylo rozbiezne przy malym FPS diff --git a/Classes.h b/Classes.h index 7351a197..91c68acb 100644 --- a/Classes.h +++ b/Classes.h @@ -10,7 +10,7 @@ http://mozilla.org/MPL/2.0/. #ifndef ClassesH #define ClassesH //--------------------------------------------------------------------------- -// Ra: zestaw klas do robienia wskanikw, aby uporzdkowa nagwki +// Ra: zestaw klas do robienia wskaźników, aby uporządkować nagłówki //--------------------------------------------------------------------------- class TTrack; // odcinek trajektorii class TEvent; @@ -19,39 +19,39 @@ class TDynamicObject; // pojazd w scenerii class TGroundNode; // statyczny obiekt scenerii class TAnimModel; // opakowanie egzemplarz modelu class TAnimContainer; // fragment opakowania egzemplarza modelu -class TModel3d; //siatka modelu wsplna dla egzemplarzy -class TSubModel; // fragment modelu (tu do wywietlania terenu) -class TMemCell; // komrka pamici +class TModel3d; //siatka modelu wspólna dla egzemplarzy +class TSubModel; // fragment modelu (tu do wyświetlania terenu) +class TMemCell; // komórka pamięci class cParser; -class TRealSound; // dwik ze wsprzdnymi XYZ -class TTextSound; // dwik ze stenogramem +class TRealSound; // dźwięk ze współrzędnymi XYZ +class TTextSound; // dźwięk ze stenogramem class TEventLauncher; class TTraction; // drut -class TTractionPowerSource; // zasilanie drutw +class TTractionPowerSource; // zasilanie drutów namespace Mtable { -class TTrainParameters; // rozkad jazdy +class TTrainParameters; // rozkład jazdy class TMtableTime; // czas dla danego posterunku }; -class TController; // obiekt sterujcy pocigiem (AI) -class TNames; // obiekt sortujcy nazwy +class TController; // obiekt sterujący pociągiem (AI) +class TNames; // obiekt sortujący nazwy typedef enum -{ // binarne odpowiedniki komend w komrce pamici - cm_Unknown, // cig nierozpoznany (nie jest komend) - cm_Ready, // W4 zezwala na odjazd, ale semafor moe zatrzyma - cm_SetVelocity, // prdko pocigowa zadawana na semaforze - cm_RoadVelocity, // prdko drogowa - cm_SectionVelocity, //ograniczenie prdkoci na odcinku - cm_ShuntVelocity, // prdko manewrowa na semaforze - cm_SetProximityVelocity, // informacja wstpna o ograniczeniu +{ // binarne odpowiedniki komend w komórce pamięci + cm_Unknown, // ciąg nierozpoznany (nie jest komendą) + cm_Ready, // W4 zezwala na odjazd, ale semafor może zatrzymać + cm_SetVelocity, // prędkość pociągowa zadawana na semaforze + cm_RoadVelocity, // prędkość drogowa + cm_SectionVelocity, //ograniczenie prędkości na odcinku + cm_ShuntVelocity, // prędkość manewrowa na semaforze + cm_SetProximityVelocity, // informacja wstępna o ograniczeniu cm_ChangeDirection, cm_PassengerStopPoint, cm_OutsideStation, cm_Shunt, - cm_Command // komenda pobierana z komrki + cm_Command // komenda pobierana z komórki } TCommandType; #endif diff --git a/Console.cpp b/Console.cpp index 3ee5163c..9943c924 100644 --- a/Console.cpp +++ b/Console.cpp @@ -16,47 +16,46 @@ http://mozilla.org/MPL/2.0/. #include "PoKeys55.h" #include "mczapkie/mctools.h" - //--------------------------------------------------------------------------- -// Ra: klasa statyczna gromadz�ca sygna�y steruj�ce oraz informacje zwrotne -// Ra: stan wej�cia zmieniany klawiatur� albo dedykowanym urz�dzeniem -// Ra: stan wyj�cia zmieniany przez symulacj� (mierniki, kontrolki) +// Ra: klasa statyczna gromadząca sygnały sterujące oraz informacje zwrotne +// Ra: stan wejścia zmieniany klawiaturą albo dedykowanym urządzeniem +// Ra: stan wyjścia zmieniany przez symulację (mierniki, kontrolki) /******************************* -Do klawisza klawiatury przypisana jest maska bitowa oraz numer wej�cia. -Naci�ni�cie klawisza powoduje wywo�anie procedury ustawienia bitu o podanej -masce na podanym wej�ciu. Zwonienie klawisza analogicznie wywo�uje zerowanie +Do klawisza klawiatury przypisana jest maska bitowa oraz numer wejścia. +Naciśnięcie klawisza powoduje wywołanie procedury ustawienia bitu o podanej +masce na podanym wejściu. Zwonienie klawisza analogicznie wywołuje zerowanie bitu wg maski. Zasadniczo w masce ustawiony jest jeden bit, ale w razie -potrzeby mo�e by� ich wi�cej. +potrzeby może być ich więcej. -Oddzielne wej�cia s� wprowadzone po to, by mo�na by�o u�ywa� wi�cej ni� 32 -bity do sterowania. Podzia� na wej�cia jest r�wnie� ze wzgl�d�w organizacyjnych, -np. sterowanie �wiat�ami mo�e mie� oddzielny numer wej�cia ni� prze��czanie -radia, poniewa� nie ma potrzeby ich uzale�nia� (tzn. bada� wsp�ln� mask� bitow�). +Oddzielne wejścia są wprowadzone po to, by można było używać więcej niż 32 +bity do sterowania. Podział na wejścia jest również ze względów organizacyjnych, +np. sterowanie światłami może mieć oddzielny numer wejścia niż przełączanie +radia, ponieważ nie ma potrzeby ich uzależniać (tzn. badać wspólną maskę bitową). -Do ka�dego wej�cia podpi�ty jest skrypt binarny, charakterystyczny dla danej -konstrukcji pojazdu. Sprawdza on zale�no�ci (w tym uszkodzenia) za pomoc� -operacji logicznych na maskach bitowych. Do ka�dego wej�cia jest przypisana -jedna, oddzielna maska 32 bit, ale w razie potrzeby istnieje te� mo�liwo�� -korzystania z masek innych wej��. Skrypt mo�e te� wysy�a� maski na inne wej�cia, -ale nale�y unika� rekurencji. +Do każdego wejścia podpięty jest skrypt binarny, charakterystyczny dla danej +konstrukcji pojazdu. Sprawdza on zależności (w tym uszkodzenia) za pomocą +operacji logicznych na maskach bitowych. Do każdego wejścia jest przypisana +jedna, oddzielna maska 32 bit, ale w razie potrzeby istnieje też możliwość +korzystania z masek innych wejść. Skrypt może też wysyłać maski na inne wejścia, +ale należy unikać rekurencji. -Definiowanie wej�� oraz przeznaczenia ich masek jest w gestii konstruktora -skryptu. Ka�dy pojazd mo�e mie� inny schemat wej�� i masek, ale w miar� mo�liwo�ci -nale�y d��y� do unifikacji. Skrypty mog� r�wnie� u�ywa� dodatkowych masek bitowych. -Maski bitowe odpowiadaj� stanom prze��cznik�w, czujnik�w, stycznik�w itd. +Definiowanie wejść oraz przeznaczenia ich masek jest w gestii konstruktora +skryptu. Każdy pojazd może mieć inny schemat wejść i masek, ale w miarę możliwości +należy dążyć do unifikacji. Skrypty mogą również używać dodatkowych masek bitowych. +Maski bitowe odpowiadają stanom przełączników, czujników, styczników itd. -Dzia�anie jest nast�puj�ce: +Działanie jest następujące: - na klawiaturze konsoli naciskany jest przycisk -- naci�ni�cie przycisku zamieniane jest na mask� bitow� oraz numer wej�cia -- wywo�ywany jest skrypt danego wej�cia z ow� mask� -- skrypt sprawdza zale�no�ci i np. modyfikuje w�asno�ci fizyki albo inne maski -- ewentualnie do wyzwalacza czasowego dodana jest maska i numer wej�cia +- naciśnięcie przycisku zamieniane jest na maskę bitową oraz numer wejścia +- wywoływany jest skrypt danego wejścia z ową maską +- skrypt sprawdza zależności i np. modyfikuje własności fizyki albo inne maski +- ewentualnie do wyzwalacza czasowego dodana jest maska i numer wejścia /*******************************/ /* //kod do przetrawienia: -//aby si� nie w��czacz wygaszacz ekranu, co jaki� czas naciska si� wirtualnie ScrollLock +//aby się nie włączacz wygaszacz ekranu, co jakiś czas naciska się wirtualnie ScrollLock [DllImport("user32.dll")] static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo); @@ -110,20 +109,20 @@ void SetLedState(char Code, bool bOn){ //--------------------------------------------------------------------------- -int Console::iBits = 0; // zmienna statyczna - obiekt Console jest jednen wsp�lny +int Console::iBits = 0; // zmienna statyczna - obiekt Console jest jednen wspólny int Console::iMode = 0; int Console::iConfig = 0; TPoKeys55 *Console::PoKeys55[2] = {NULL, NULL}; TLPT *Console::LPT = NULL; MWDComm *Console::MWD = NULL; // maciek001: obiekt dla MWD -int Console::iSwitch[8]; // bistabilne w kabinie, za��czane z [Shift], wy��czane bez -int Console::iButton[8]; // monostabilne w kabinie, za��czane podczas trzymania klawisza +int Console::iSwitch[8]; // bistabilne w kabinie, załączane z [Shift], wyłączane bez +int Console::iButton[8]; // monostabilne w kabinie, załączane podczas trzymania klawisza Console::Console() { PoKeys55[0] = PoKeys55[1] = NULL; for (int i = 0; i < 8; ++i) - { // zerowanie prze��cznik�w + { // zerowanie przełączników iSwitch[i] = 0; // bity 0..127 - bez [Ctrl], 128..255 - z [Ctrl] iButton[i] = 0; // bity 0..127 - bez [Shift], 128..255 - z [Shift] } @@ -143,24 +142,24 @@ void Console::ModeSet(int m, int h) }; int Console::On() -{ // za��czenie konsoli (np. nawi�zanie komunikacji) +{ // załączenie konsoli (np. nawiązanie komunikacji) iSwitch[0] = iSwitch[1] = iSwitch[2] = iSwitch[3] = 0; // bity 0..127 - bez [Ctrl] iSwitch[4] = iSwitch[5] = iSwitch[6] = iSwitch[7] = 0; // bity 128..255 - z [Ctrl] switch (iMode) { case 1: // kontrolki klawiatury case 2: // kontrolki klawiatury - iConfig = 0; // licznik u�ycia Scroll Lock + iConfig = 0; // licznik użycia Scroll Lock break; case 3: // LPT LPT = new TLPT(); // otwarcie inpout32.dll if (LPT ? LPT->Connect(iConfig) : false) - { // wys�a� 0? - BitsUpdate(-1); // aktualizacjia stan�w, bo przy wczytywaniu mog�o by� nieaktywne + { // wysłać 0? + BitsUpdate(-1); // aktualizacjia stanów, bo przy wczytywaniu mogło być nieaktywne WriteLog("Feedback Mode 3: InpOut32.dll OK"); } else - { // po��czenie nie wysz�o, ma by� NULL + { // połączenie nie wyszło, ma być NULL delete LPT; LPT = NULL; } @@ -170,10 +169,10 @@ int Console::On() if (PoKeys55[0] ? PoKeys55[0]->Connect() : false) { WriteLog("Found " + PoKeys55[0]->Version()); - BitsUpdate(-1); // aktualizacjia stan�w, bo przy wczytywaniu mog�o by� nieaktywne + BitsUpdate(-1); // aktualizacjia stanów, bo przy wczytywaniu mogło być nieaktywne } else - { // po��czenie nie wysz�o, ma by� NULL + { // połączenie nie wyszło, ma być NULL delete PoKeys55[0]; PoKeys55[0] = NULL; } @@ -193,12 +192,12 @@ int Console::On() }; void Console::Off() -{ // wy��czenie informacji zwrotnych (reset pulpitu) +{ // wyłączenie informacji zwrotnych (reset pulpitu) BitsClear(-1); if ((iMode == 1) || (iMode == 2)) - if (iConfig & 1) // licznik u�ycia Scroll Lock - { // bez sensu to jest, ale mi si� samo w��cza - SetLedState(VK_SCROLL, true); // przyci�ni�ty + if (iConfig & 1) // licznik użycia Scroll Lock + { // bez sensu to jest, ale mi się samo włącza + SetLedState(VK_SCROLL, true); // przyciśnięty SetLedState(VK_SCROLL, false); // zwolniony } delete PoKeys55[0]; @@ -212,12 +211,12 @@ void Console::Off() }; void Console::BitsSet(int mask, int entry) -{ // ustawienie bit�w o podanej masce (mask) na wej�ciu (entry) - if ((iBits & mask) != mask) // je�eli zmiana +{ // ustawienie bitów o podanej masce (mask) na wejściu (entry) + if ((iBits & mask) != mask) // jeżeli zmiana { int old = iBits; // poprzednie stany iBits |= mask; - BitsUpdate(old ^ iBits); // 1 dla bit�w zmienionych + BitsUpdate(old ^ iBits); // 1 dla bitów zmienionych if (iMode == 4) WriteLog("PoKeys::BitsSet: mask: " + std::to_string(mask) + " iBits: " + std::to_string(iBits)); @@ -225,87 +224,87 @@ void Console::BitsSet(int mask, int entry) }; void Console::BitsClear(int mask, int entry) -{ // zerowanie bit�w o podanej masce (mask) na wej�ciu (entry) - if (iBits & mask) // je�eli zmiana +{ // zerowanie bitów o podanej masce (mask) na wejściu (entry) + if (iBits & mask) // jeżeli zmiana { int old = iBits; // poprzednie stany iBits &= ~mask; - BitsUpdate(old ^ iBits); // 1 dla bit�w zmienionych + BitsUpdate(old ^ iBits); // 1 dla bitów zmienionych } }; void Console::BitsUpdate(int mask) -{ // aktualizacja stanu interfejsu informacji zwrotnej; (mask) - zakres zmienianych bit�w +{ // aktualizacja stanu interfejsu informacji zwrotnej; (mask) - zakres zmienianych bitów switch (iMode) { - case 1: // sterowanie �wiate�kami klawiatury: CA/SHP+opory + case 1: // sterowanie światełkami klawiatury: CA/SHP+opory if (mask & 3) // gdy SHP albo CA SetLedState(VK_CAPITAL, iBits & 3); if (mask & 4) // gdy jazda na oporach - { // Scroll Lock ma jako� dziwnie... zmiana stanu na przeciwny - SetLedState(VK_SCROLL, true); // przyci�ni�ty + { // Scroll Lock ma jakoś dziwnie... zmiana stanu na przeciwny + SetLedState(VK_SCROLL, true); // przyciśnięty SetLedState(VK_SCROLL, false); // zwolniony - ++iConfig; // licznik u�ycia Scroll Lock + ++iConfig; // licznik użycia Scroll Lock } break; - case 2: // sterowanie �wiate�kami klawiatury: CA+SHP + case 2: // sterowanie światełkami klawiatury: CA+SHP if (mask & 2) // gdy CA SetLedState(VK_CAPITAL, iBits & 2); if (mask & 1) // gdy SHP - { // Scroll Lock ma jako� dziwnie... zmiana stanu na przeciwny - SetLedState(VK_SCROLL, true); // przyci�ni�ty + { // Scroll Lock ma jakoś dziwnie... zmiana stanu na przeciwny + SetLedState(VK_SCROLL, true); // przyciśnięty SetLedState(VK_SCROLL, false); // zwolniony - ++iConfig; // licznik u�ycia Scroll Lock + ++iConfig; // licznik użycia Scroll Lock } break; - case 3: // LPT Marcela z modyfikacj� (jazda na oporach zamiast brz�czyka) + case 3: // LPT Marcela z modyfikacją (jazda na oporach zamiast brzęczyka) if (LPT) LPT->Out(iBits); break; - case 4: // PoKeys55 wg Marcela - wersja druga z ko�ca 2012 + case 4: // PoKeys55 wg Marcela - wersja druga z końca 2012 if (PoKeys55[0]) - { // pewnie trzeba b�dzie to dodatkowo buforowa� i oczekiwa� na potwierdzenie + { // pewnie trzeba będzie to dodatkowo buforować i oczekiwać na potwierdzenie if (mask & 0x0001) // b0 gdy SHP PoKeys55[0]->Write(0x40, 23 - 1, (iBits & 0x0001) ? 1 : 0); if (mask & 0x0002) // b1 gdy zmieniony CA PoKeys55[0]->Write(0x40, 24 - 1, (iBits & 0x0002) ? 1 : 0); if (mask & 0x0004) // b2 gdy jazda na oporach PoKeys55[0]->Write(0x40, 32 - 1, (iBits & 0x0004) ? 1 : 0); - if (mask & 0x0008) // b3 Lampka WS (wy��cznika szybkiego) + if (mask & 0x0008) // b3 Lampka WS (wyłącznika szybkiego) PoKeys55[0]->Write(0x40, 25 - 1, (iBits & 0x0008) ? 1 : 0); - if (mask & 0x0010) // b4 Lampka przeka�nika nadmiarowego silnik�w trakcyjnych + if (mask & 0x0010) // b4 Lampka przekaźnika nadmiarowego silników trakcyjnych PoKeys55[0]->Write(0x40, 27 - 1, (iBits & 0x0010) ? 1 : 0); - if (mask & 0x0020) // b5 Lampka stycznik�w liniowych + if (mask & 0x0020) // b5 Lampka styczników liniowych PoKeys55[0]->Write(0x40, 29 - 1, (iBits & 0x0020) ? 1 : 0); - if (mask & 0x0040) // b6 Lampka po�lizgu + if (mask & 0x0040) // b6 Lampka poślizgu PoKeys55[0]->Write(0x40, 30 - 1, (iBits & 0x0040) ? 1 : 0); if (mask & 0x0080) // b7 Lampka "przetwornicy" PoKeys55[0]->Write(0x40, 28 - 1, (iBits & 0x0080) ? 1 : 0); - if (mask & 0x0100) // b8 Kontrolka przeka�nika nadmiarowego spr��arki + if (mask & 0x0100) // b8 Kontrolka przekaźnika nadmiarowego sprężarki PoKeys55[0]->Write(0x40, 33 - 1, (iBits & 0x0100) ? 1 : 0); - if (mask & 0x0200) // b9 Kontrolka sygnalizacji wentylator�w i opor�w + if (mask & 0x0200) // b9 Kontrolka sygnalizacji wentylatorów i oporów PoKeys55[0]->Write(0x40, 26 - 1, (iBits & 0x0200) ? 1 : 0); if (mask & 0x0400) // b10 Kontrolka wysokiego rozruchu PoKeys55[0]->Write(0x40, 31 - 1, (iBits & 0x0400) ? 1 : 0); - if (mask & 0x0800) // b11 Kontrolka ogrzewania poci�gu + if (mask & 0x0800) // b11 Kontrolka ogrzewania pociągu PoKeys55[0]->Write(0x40, 34 - 1, (iBits & 0x0800) ? 1 : 0); - if (mask & 0x1000) // b12 Ci�nienie w cylindrach do odbijania w haslerze + if (mask & 0x1000) // b12 Ciśnienie w cylindrach do odbijania w haslerze PoKeys55[0]->Write(0x40, 52 - 1, (iBits & 0x1000) ? 1 : 0); - if (mask & 0x2000) // b13 Pr�d na silnikach do odbijania w haslerze + if (mask & 0x2000) // b13 Prąd na silnikach do odbijania w haslerze PoKeys55[0]->Write(0x40, 53 - 1, (iBits & 0x2000) ? 1 : 0); - if (mask & 0x4000) // b14 Brz�czyk SHP lub CA + if (mask & 0x4000) // b14 Brzęczyk SHP lub CA PoKeys55[0]->Write(0x40, 16 - 1, (iBits & 0x4000) ? 1 : 0); } break; case 5: // maciek001: MWD lampki i kontrolki /* out3: ogrzewanie sk?adu, opory rozruchowe, poslizg, zaluzjewent, -, -, czuwak, shp - out4: stycz.liniowe, pezekaznikr??nicobwpomoc, nadmiarprzetw, roznicowy obw. g?, - nadmiarsilniki, wylszybki, zanikpr?duprzyje?dzienaoporach, nadmiarsprezarki + out4: stycz.liniowe, pezekaznikróżnicobwpomoc, nadmiarprzetw, roznicowy obw. gł, + nadmiarsilniki, wylszybki, zanikprąduprzyjeździenaoporach, nadmiarsprezarki out5: HASLER */ if (mask & 0x0001) if (iBits & 1) { - MWD->WriteDataBuff[4] |= 1 << 7; // SHP HASLER te� + MWD->WriteDataBuff[4] |= 1 << 7; // SHP HASLER też if (!MWD->bSHPstate) { MWD->bSHPstate = true; @@ -332,12 +331,12 @@ void Console::BitsUpdate(int mask) MWD->WriteDataBuff[4] &= ~(1 << 1); if (mask & 0x0008) if (iBits & 8) - MWD->WriteDataBuff[5] |= 1 << 5; // wy??cznik szybki + MWD->WriteDataBuff[5] |= 1 << 5; // wyłącznik szybki else MWD->WriteDataBuff[5] &= ~(1 << 5); if (mask & 0x0010) if (iBits & 0x10) - MWD->WriteDataBuff[5] |= 1 << 4; // nadmiarowy silnik?w trakcyjnych + MWD->WriteDataBuff[5] |= 1 << 4; // nadmiarowy silników trakcyjnych else MWD->WriteDataBuff[5] &= ~(1 << 4); if (mask & 0x0020) @@ -347,7 +346,7 @@ void Console::BitsUpdate(int mask) MWD->WriteDataBuff[5] &= ~(1 << 0); if (mask & 0x0040) if (iBits & 0x40) - MWD->WriteDataBuff[4] |= 1 << 2; // po?lizg + MWD->WriteDataBuff[4] |= 1 << 2; // poślizg else MWD->WriteDataBuff[4] &= ~(1 << 2); if (mask & 0x0080) @@ -357,7 +356,7 @@ void Console::BitsUpdate(int mask) MWD->WriteDataBuff[5] &= ~(1 << 2); if (mask & 0x0100) if (iBits & 0x100) - MWD->WriteDataBuff[5] |= 1 << 7; // nadmiarowy spr??arki + MWD->WriteDataBuff[5] |= 1 << 7; // nadmiarowy sprężarki else MWD->WriteDataBuff[5] &= ~(1 << 7); if (mask & 0x0200) @@ -372,23 +371,23 @@ void Console::BitsUpdate(int mask) MWD->WriteDataBuff[2] &= ~(1 << 2); if (mask & 0x0800) if (iBits & 0x800) - MWD->WriteDataBuff[4] |= 1 << 0; // ogrzewanie poci?gu + MWD->WriteDataBuff[4] |= 1 << 0; // ogrzewanie pociągu else MWD->WriteDataBuff[4] &= ~(1 << 0); if (mask & 0x1000) if (iBits & 0x1000) - MWD->bHamowanie = true; // hasler: ci?nienie w hamulcach HASLER rysik 2 + MWD->bHamowanie = true; // hasler: ciśnienie w hamulcach HASLER rysik 2 else MWD->bHamowanie = false; if (mask & 0x2000) if (iBits & 0x2000) MWD->WriteDataBuff[6] |= - 1 << 4; // hasler: pr?d "na" silnikach HASLER rysik 3 + 1 << 4; // hasler: prąd "na" silnikach HASLER rysik 3 else MWD->WriteDataBuff[6] &= ~(1 << 4); if (mask & 0x4000) if (iBits & 0x4000) - MWD->WriteDataBuff[6] |= 1 << 7; // brz?czyk SHP/CA + MWD->WriteDataBuff[6] |= 1 << 7; // brzęczyk SHP/CA else MWD->WriteDataBuff[6] &= ~(1 << 7); // if(mask & 0x8000) if(iBits & 0x8000) MWD->WriteDataBuff[1] |= 1<<7; (puste) @@ -398,12 +397,12 @@ void Console::BitsUpdate(int mask) }; bool Console::Pressed(int x) -{ // na razie tak - czyta si� tylko klawiatura +{ // na razie tak - czyta się tylko klawiatura return Global::bActive && (GetKeyState(x) < 0); }; void Console::ValueSet(int x, double y) -{ // ustawienie warto�ci (y) na kanale analogowym (x) +{ // ustawienie wartości (y) na kanale analogowym (x) if (iMode == 4) if (PoKeys55[0]) { @@ -415,8 +414,8 @@ void Console::ValueSet(int x, double y) y = Global::CutValueToRange(0, y, Global::fCalibrateOutMax[x]); if (Global::iCalibrateOutDebugInfo == x) WriteLog(" cutted=" + std::to_string(y), false); - y = y / Global::fCalibrateOutMax[x]; // sprowadzenie do <0,1> je�li podana - // maksymalna warto�� + y = y / Global::fCalibrateOutMax[x]; // sprowadzenie do <0,1> jeśli podana + // maksymalna wartość if (Global::iCalibrateOutDebugInfo == x) WriteLog(" fraction=" + std::to_string(y), false); } @@ -432,20 +431,20 @@ void Console::ValueSet(int x, double y) WriteLog(" calibrated=" + std::to_string(temp)); PoKeys55[0]->PWM(x, temp); } - if (iMode == 5 && MWD) // pwm-y i pr�dko�� + if (iMode == 5 && MWD) // pwm-y i prędkość { unsigned int iliczba; if (x == 0) { iliczba = (unsigned int)floor((y / (Global::fMWDzg[0] * 10) * Global::fMWDzg[1]) + - 0.5); // zbiornik g??wny + 0.5); // zbiornik główny MWD->WriteDataBuff[12] = (unsigned char)(iliczba >> 8); MWD->WriteDataBuff[11] = (unsigned char)iliczba; } else if (x == 1) { iliczba = (unsigned int)floor((y / (Global::fMWDpg[0] * 10) * Global::fMWDpg[1]) + - 0.5); // przew?d g??wny + 0.5); // przewód główny MWD->WriteDataBuff[10] = (unsigned char)(iliczba >> 8); MWD->WriteDataBuff[9] = (unsigned char)iliczba; } @@ -485,24 +484,24 @@ void Console::ValueSet(int x, double y) MWD->WriteDataBuff[19] = (unsigned char)iliczba; } else if (x == 7) - MWD->WriteDataBuff[0] = (unsigned char)floor(y); // pr�dko�� + MWD->WriteDataBuff[0] = (unsigned char)floor(y); // prędkość } }; void Console::Update() -{ // funkcja powinna by� wywo�ywana regularnie, np. raz w ka�dej ramce ekranowej +{ // funkcja powinna być wywoływana regularnie, np. raz w każdej ramce ekranowej if (iMode == 4) if (PoKeys55[0]) if (PoKeys55[0]->Update((Global::iPause & 8) > 0)) - { // wykrycie przestawionych prze��cznik�w? + { // wykrycie przestawionych przełączników? Global::iPause &= ~8; } else - { // b��d komunikacji - zapauzowa� symulacj�? - if (!(Global::iPause & 8)) // je�li jeszcze nie oflagowana + { // błąd komunikacji - zapauzować symulację? + if (!(Global::iPause & 8)) // jeśli jeszcze nie oflagowana Global::iTextMode = VK_F1; // pokazanie czasu/pauzy Global::iPause |= 8; // tak??? - PoKeys55[0]->Connect(); // pr�ba ponownego pod��czenia + PoKeys55[0]->Connect(); // próba ponownego podłączenia } if (iMode == 5) // Obs?uga MWD OK { @@ -511,7 +510,7 @@ void Console::Update() }; float Console::AnalogGet(int x) -{ // pobranie warto�ci analogowej +{ // pobranie wartości analogowej if (iMode == 4) if (PoKeys55[0]) return PoKeys55[0]->fAnalog[x]; @@ -519,7 +518,7 @@ float Console::AnalogGet(int x) }; float Console::AnalogCalibrateGet(int x) -{ // pobranie i kalibracja warto�ci analogowej, je�li nie ma PoKeys zwraca NULL +{ // pobranie i kalibracja wartości analogowej, jeśli nie ma PoKeys zwraca NULL if (iMode == 4 && PoKeys55[0]) { float b = PoKeys55[0]->fAnalog[x]; @@ -551,11 +550,11 @@ float Console::AnalogCalibrateGet(int x) return 0; } } - return -1.0; // odci�cie + return -1.0; // odcięcie }; unsigned char Console::DigitalGet(int x) -{ // pobranie warto�ci cyfrowej +{ // pobranie wartości cyfrowej if (iMode == 4) if (PoKeys55[0]) return PoKeys55[0]->iInputs[x]; @@ -563,35 +562,35 @@ unsigned char Console::DigitalGet(int x) }; void Console::OnKeyDown(int k) -{ // naci�ni�cie klawisza z powoduje wy��czenie, a - if (k & 0x10000) // je�li [Shift] - { // ustawienie bitu w tabeli prze��cznik�w bistabilnych - if (k & 0x20000) // je�li [Ctrl], to zestaw dodatkowy - iSwitch[4 + (char(k) >> 5)] |= 1 << (k & 31); // za��cz bistabliny dodatkowy +{ // naciśnięcie klawisza z powoduje wyłączenie, a + if (k & 0x10000) // jeśli [Shift] + { // ustawienie bitu w tabeli przełączników bistabilnych + if (k & 0x20000) // jeśli [Ctrl], to zestaw dodatkowy + iSwitch[4 + (char(k) >> 5)] |= 1 << (k & 31); // załącz bistabliny dodatkowy else - { // z [Shift] w��czenie bitu bistabilnego i dodatkowego monostabilnego - iSwitch[char(k) >> 5] |= 1 << (k & 31); // za��cz bistabliny podstawowy - iButton[4 + (char(k) >> 5)] |= (1 << (k & 31)); // za��cz monostabilny dodatkowy + { // z [Shift] włączenie bitu bistabilnego i dodatkowego monostabilnego + iSwitch[char(k) >> 5] |= 1 << (k & 31); // załącz bistabliny podstawowy + iButton[4 + (char(k) >> 5)] |= (1 << (k & 31)); // załącz monostabilny dodatkowy } } else - { // zerowanie bitu w tabeli prze��cznik�w bistabilnych - if (k & 0x20000) // je�li [Ctrl], to zestaw dodatkowy - iSwitch[4 + (char(k) >> 5)] &= ~(1 << (k & 31)); // wy��cz bistabilny dodatkowy + { // zerowanie bitu w tabeli przełączników bistabilnych + if (k & 0x20000) // jeśli [Ctrl], to zestaw dodatkowy + iSwitch[4 + (char(k) >> 5)] &= ~(1 << (k & 31)); // wyłącz bistabilny dodatkowy else { - iSwitch[char(k) >> 5] &= ~(1 << (k & 31)); // wy��cz bistabilny podstawowy - iButton[char(k) >> 5] |= 1 << (k & 31); // za��cz monostabilny podstawowy + iSwitch[char(k) >> 5] &= ~(1 << (k & 31)); // wyłącz bistabilny podstawowy + iButton[char(k) >> 5] |= 1 << (k & 31); // załącz monostabilny podstawowy } } }; void Console::OnKeyUp(int k) { // puszczenie klawisza w zasadzie nie ma znaczenia dla iSwitch, ale zeruje iButton if ((k & 0x20000) == 0) // monostabilne tylko bez [Ctrl] - if (k & 0x10000) // je�li [Shift] - iButton[4 + (char(k) >> 5)] &= ~(1 << (k & 31)); // wy��cz monostabilny dodatkowy + if (k & 0x10000) // jeśli [Shift] + iButton[4 + (char(k) >> 5)] &= ~(1 << (k & 31)); // wyłącz monostabilny dodatkowy else - iButton[char(k) >> 5] &= ~(1 << (k & 31)); // wy��cz monostabilny podstawowy + iButton[char(k) >> 5] &= ~(1 << (k & 31)); // wyłącz monostabilny podstawowy }; int Console::KeyDownConvert(int k) { diff --git a/Console.h b/Console.h index af51f56b..440bc63b 100644 --- a/Console.h +++ b/Console.h @@ -10,36 +10,36 @@ http://mozilla.org/MPL/2.0/. #ifndef ConsoleH #define ConsoleH //--------------------------------------------------------------------------- -class TConsoleDevice; // urzdzenie podczalne za pomoc DLL +class TConsoleDevice; // urządzenie podłączalne za pomocą DLL class TPoKeys55; class TLPT; class MWDComm; // maciek001: dodana obsluga portu COM -// klasy konwersji znakw wprowadzanych z klawiatury +// klasy konwersji znaków wprowadzanych z klawiatury class TKeyTrans -{ // przekodowanie kodu nacinicia i zwolnienia klawisza +{ // przekodowanie kodu naciśnięcia i zwolnienia klawisza public: short int iDown, iUp; }; class Console -{ // Ra: klasa statyczna gromadzca sygnay sterujce oraz informacje zwrotne - // Ra: stan wejcia zmieniany klawiatur albo dedykowanym urzdzeniem - // Ra: stan wyjcia zmieniany przez symulacj (mierniki, kontrolki) +{ // Ra: klasa statyczna gromadząca sygnały sterujące oraz informacje zwrotne + // Ra: stan wejścia zmieniany klawiaturą albo dedykowanym urządzeniem + // Ra: stan wyjścia zmieniany przez symulację (mierniki, kontrolki) private: static int iMode; // tryb pracy - static int iConfig; // dodatkowa informacja o sprzcie (np. numer LPT) + static int iConfig; // dodatkowa informacja o sprzęcie (np. numer LPT) static int iBits; // podstawowy zestaw lampek - static TPoKeys55 *PoKeys55[2]; // moe ich by kilka + static TPoKeys55 *PoKeys55[2]; // może ich być kilka static TLPT *LPT; static MWDComm *MWD; // maciek001: na potrzeby MWD static void BitsUpdate(int mask); - // zmienne dla trybu "jednokabinowego", potrzebne do wsppracy z pulpitem (PoKeys) - // uywajc klawiatury, kady pojazd powinien mie wasny stan przecznikw - // bazowym sterowaniem jest wirtualny strumie klawiatury - // przy zmianie kabiny z PoKeys, do kabiny s wysyane stany tych przyciskw - static int iSwitch[8]; // bistabilne w kabinie, zaczane z [Shift], wyczane bez - static int iButton[8]; // monostabilne w kabinie, zaczane podczas trzymania klawisza + // zmienne dla trybu "jednokabinowego", potrzebne do współpracy z pulpitem (PoKeys) + // używając klawiatury, każdy pojazd powinien mieć własny stan przełączników + // bazowym sterowaniem jest wirtualny strumień klawiatury + // przy zmianie kabiny z PoKeys, do kabiny są wysyłane stany tych przycisków + static int iSwitch[8]; // bistabilne w kabinie, załączane z [Shift], wyłączane bez + static int iButton[8]; // monostabilne w kabinie, załączane podczas trzymania klawisza static TKeyTrans ktTable[4 * 256]; // tabela wczesnej konwersji klawiatury public: Console(); diff --git a/Data.h b/Data.h index 2d002e7c..776fc92d 100644 --- a/Data.h +++ b/Data.h @@ -10,7 +10,7 @@ http://mozilla.org/MPL/2.0/. #ifndef DataH #define DataH //--------------------------------------------------------------------------- -// Modu z danymi +// Moduł z danymi //--------------------------------------------------------------------------- struct TDist @@ -18,7 +18,7 @@ struct TDist int x, y; }; const TDist SectorOrder[] = { - // tabela wsprzdnych sektorw, posortowana wg odlegoci + // tabela współrzędnych sektorów, posortowana wg odległości {0, 0}, // 0.00 {1, 0}, // 1.00 {0, 1}, // 1.00 diff --git a/Driver.cpp b/Driver.cpp index 843fc41e..853c7ee9 100644 --- a/Driver.cpp +++ b/Driver.cpp @@ -34,18 +34,18 @@ http://mozilla.org/MPL/2.0/. #define LOGPRESS 0 /* -Modu� obs�uguj�cy sterowanie pojazdami (sk�adami poci�g�w, samochodami). -Ma dzia�a� zar�wno jako AI oraz przy prowadzeniu przez cz�owieka. W tym -drugim przypadku jedynie informuje za pomoc� napis�w o tym, co by zrobi� -w tym pierwszym. Obejmuje zar�wno maszynist� jak i kierownika poci�gu -(dawanie sygna�u do odjazdu). +Moduł obsługujący sterowanie pojazdami (składami pociągów, samochodami). +Ma działać zarówno jako AI oraz przy prowadzeniu przez człowieka. W tym +drugim przypadku jedynie informuje za pomocą napisów o tym, co by zrobił +w tym pierwszym. Obejmuje zarówno maszynistę jak i kierownika pociągu +(dawanie sygnału do odjazdu). -Przeniesiona tutaj zosta�a zawarto�� ai_driver.pas przerobiona na C++. -R�wnie� niekt�re funkcje dotycz�ce sk�ad�w z DynObj.cpp. +Przeniesiona tutaj została zawartość ai_driver.pas przerobiona na C++. +Również niektóre funkcje dotyczące składów z DynObj.cpp. -Teoria jest wtedy kiedy wszystko wiemy, ale nic nie dzia�a. -Praktyka jest wtedy, kiedy wszystko dzia�a, ale nikt nie wie dlaczego. -Tutaj ��czymy teori� z praktyk� - tu nic nie dzia�a i nikt nie wie dlaczego� +Teoria jest wtedy kiedy wszystko wiemy, ale nic nie działa. +Praktyka jest wtedy, kiedy wszystko działa, ale nikt nie wie dlaczego. +Tutaj łączymy teorię z praktyką - tu nic nie działa i nikt nie wie dlaczego… */ @@ -66,7 +66,7 @@ Tutaj ��czymy teori� z praktyk� - tu nic nie dzia�a i nikt nie wie dla // 13. ulepszone procedury sterowania // 14. zglaszanie problemow z dlugim staniem na sygnale S1 // 15. sterowanie EN57 -// 16. zmiana kierunku //Ra: z przesiadk� po ukrotnieniu +// 16. zmiana kierunku //Ra: z przesiadką po ukrotnieniu // 17. otwieranie/zamykanie drzwi // 18. Ra: odczepianie z zahamowaniem i podczepianie // 19. dla Humandriver: tasma szybkosciomierza - zapis do pliku! @@ -79,29 +79,29 @@ Tutaj ��czymy teori� z praktyk� - tu nic nie dzia�a i nikt nie wie dla // 5. raportowanie problemow, usterek nie do rozwiazania // 7. samouczacy sie algorytm hamowania -// sta�e -const double EasyReactionTime = 0.5; //[s] przeb�yski �wiadomo�ci dla zwyk�ej jazdy +// stałe +const double EasyReactionTime = 0.5; //[s] przebłyski świadomości dla zwykłej jazdy const double HardReactionTime = 0.2; const double EasyAcceleration = 0.5; //[m/ss] const double HardAcceleration = 0.9; -const double PrepareTime = 2.0; //[s] przeb�yski �wiadomo�ci przy odpalaniu +const double PrepareTime = 2.0; //[s] przebłyski świadomości przy odpalaniu bool WriteLogFlag = false; string StopReasonTable[] = { // przyczyny zatrzymania ruchu AI - "", // stopNone, //nie ma powodu - powinien jecha� - "Off", // stopSleep, //nie zosta� odpalony, to nie pojedzie - "Semaphore", // stopSem, //semafor zamkni�ty - "Time", // stopTime, //czekanie na godzin� odjazdu - "End of track", // stopEnd, //brak dalszej cz��ci toru - "Change direction", // stopDir, //trzeba stan��, by zmieni� kierunek jazdy + "", // stopNone, //nie ma powodu - powinien jechać + "Off", // stopSleep, //nie został odpalony, to nie pojedzie + "Semaphore", // stopSem, //semafor zamknięty + "Time", // stopTime, //czekanie na godzinę odjazdu + "End of track", // stopEnd, //brak dalszej części toru + "Change direction", // stopDir, //trzeba stanąć, by zmienić kierunek jazdy "Joining", // stopJoin, //zatrzymanie przy (p)odczepianiu "Block", // stopBlock, //przeszkoda na drodze ruchu - "A command", // stopComm, //otrzymano tak� komend� (niewiadomego pochodzenia) - "Out of station", // stopOut, //komenda wyjazdu poza stacj� (raczej nie powinna zatrzymywa�!) + "A command", // stopComm, //otrzymano taką komendę (niewiadomego pochodzenia) + "Out of station", // stopOut, //komenda wyjazdu poza stację (raczej nie powinna zatrzymywać!) "Radiostop", // stopRadio, //komunikat przekazany radiem (Radiostop) - "External", // stopExt, //przes�any z zewn�trz - "Error", // stopError //z powodu b��du w obliczeniu drogi hamowania + "External", // stopExt, //przesłany z zewnątrz + "Error", // stopError //z powodu błędu w obliczeniu drogi hamowania }; //--------------------------------------------------------------------------- @@ -111,207 +111,199 @@ string StopReasonTable[] = { void TSpeedPos::Clear() { iFlags = 0; // brak flag to brak reakcji - fVelNext = -1.0; // pr�dko�� bez ogranicze� - fSectionVelocityDist = 0.0; // brak d�ugo�ci + fVelNext = -1.0; // prędkość bez ograniczeń + fSectionVelocityDist = 0.0; //brak długości fDist = 0.0; vPos = vector3(0, 0, 0); - trTrack = NULL; // brak wska�nika + trTrack = NULL; // brak wskaźnika }; void TSpeedPos::CommandCheck() -{ // sprawdzenie typu komendy w evencie i okre�lenie pr�dko�ci +{ // sprawdzenie typu komendy w evencie i określenie prędkości TCommandType command = evEvent->Command(); double value1 = evEvent->ValueGet(1); double value2 = evEvent->ValueGet(2); switch (command) { case cm_ShuntVelocity: - // pr�dko�� manewrow� zapisa�, najwy�ej AI zignoruje przy analizie tabelki - fVelNext = value1; // powinno by� value2, bo druga okre�la "za"? + // prędkość manewrową zapisać, najwyżej AI zignoruje przy analizie tabelki + fVelNext = value1; // powinno być value2, bo druga określa "za"? iFlags |= spShuntSemaphor; break; case cm_SetVelocity: // w semaforze typu "m" jest ShuntVelocity dla Ms2 i SetVelocity dla S1 - // SetVelocity * 0 -> mo�na jecha�, ale stan�� przed - // SetVelocity 0 20 -> stan�� przed, potem mo�na jecha� 20 (SBL) - // SetVelocity -1 100 -> mo�na jecha�, przy nast�pnym ograniczenie (SBL) - // SetVelocity 40 -1 -> PutValues: jecha� 40 a� do mini�cia (koniec ograniczenia( + // SetVelocity * 0 -> można jechać, ale stanąć przed + // SetVelocity 0 20 -> stanąć przed, potem można jechać 20 (SBL) + // SetVelocity -1 100 -> można jechać, przy następnym ograniczenie (SBL) + // SetVelocity 40 -1 -> PutValues: jechać 40 aż do minięcia (koniec ograniczenia( fVelNext = value1; iFlags &= ~(spShuntSemaphor | spPassengerStopPoint | spStopOnSBL); - iFlags |= spSemaphor; // nie manewrowa, nie przystanek, nie zatrzyma� na SBL, ale semafor - if (value1 == 0.0) // je�li pierwsza zerowa + iFlags |= spSemaphor;// nie manewrowa, nie przystanek, nie zatrzymać na SBL, ale semafor + if (value1 == 0.0) // jeśli pierwsza zerowa if (value2 != 0.0) // a druga nie - { // S1 na SBL, mo�na przejecha� po zatrzymaniu (tu nie mamy pr�dko�ci ani odleg�o�ci) - fVelNext = value2; // normalnie b�dzie zezwolenie na jazd�, aby si� usun�� z tabelki - iFlags |= spStopOnSBL; // flaga, �e ma zatrzyma�; na pewno nie zezwoli na manewry + { // S1 na SBL, można przejechać po zatrzymaniu (tu nie mamy prędkości ani odległości) + fVelNext = value2; // normalnie będzie zezwolenie na jazdę, aby się usunął z tabelki + iFlags |= spStopOnSBL; // flaga, że ma zatrzymać; na pewno nie zezwoli na manewry } break; case cm_SectionVelocity: - // odcinek z ograniczeniem pr�dko�ci + // odcinek z ograniczeniem prędkości fVelNext = value1; - fSectionVelocityDist = value2; + fSectionVelocityDist = value2; iFlags |= spSectionVel; break; case cm_RoadVelocity: - // pr�dko�� drogowa (od tej pory b�dzie jako domy�lna najwy�sza) + // prędkość drogowa (od tej pory będzie jako domyślna najwyższa) fVelNext = value1; iFlags |= spRoadVel; break; case cm_PassengerStopPoint: - // nie ma dost�pu do rozk�adu - // przystanek, najwy�ej AI zignoruje przy analizie tabelki + // nie ma dostępu do rozkładu + // przystanek, najwyżej AI zignoruje przy analizie tabelki if ((iFlags & spPassengerStopPoint) == 0) fVelNext = 0.0; // TrainParams->IsStop()?0.0:-1.0; //na razie tak - iFlags |= - spPassengerStopPoint; // niestety nie da si� w tym miejscu wsp��pracowa� z rozk�adem + iFlags |= spPassengerStopPoint; // niestety nie da się w tym miejscu współpracować z rozkładem break; case cm_SetProximityVelocity: - // musi zosta� gdy� inaczej nie dzia�aj� manewry - fVelNext = -1; + // musi zostać gdyż inaczej nie działają manewry + fVelNext = -1; iFlags |= spProximityVelocity; - // fSectionVelocityDist = value2; + // fSectionVelocityDist = value2; break; case cm_OutsideStation: - // w trybie manewrowym: skanowa� od niej wstecz i stan�� po wyjechaniu za sygnalizator i - // zmieni� kierunek - // w trybie poci�gowym: mo�na przyspieszy� do wskazanej pr�dko�ci (po zjechaniu z rozjazd�w) + // w trybie manewrowym: skanować od niej wstecz i stanąć po wyjechaniu za sygnalizator i + // zmienić kierunek + // w trybie pociągowym: można przyspieszyć do wskazanej prędkości (po zjechaniu z rozjazdów) fVelNext = -1; iFlags |= spOutsideStation; // W5 break; - default: - // inna komenda w evencie skanowanym powoduje zatrzymanie i wys�anie tej komendy + default: + // inna komenda w evencie skanowanym powoduje zatrzymanie i wysłanie tej komendy iFlags &= ~(spShuntSemaphor | spPassengerStopPoint | - spStopOnSBL); // nie manewrowa, nie przystanek, nie zatrzyma� na SBL - fVelNext = 0.0; // jak nieznana komenda w kom�rce sygna�owej, to zatrzymujemy + spStopOnSBL); // nie manewrowa, nie przystanek, nie zatrzymać na SBL + fVelNext = 0.0; // jak nieznana komenda w komórce sygnałowej, to zatrzymujemy } }; bool TSpeedPos::Update(vector3 *p, vector3 *dir, double &len) -{ // przeliczenie odleg�o�ci od punktu (*p), w kierunku (*dir), zaczynaj�c od pojazdu - // dla kolejnych pozycji podawane s� wsp��rz�dne poprzedniego obiektu w (*p) +{ // przeliczenie odległości od punktu (*p), w kierunku (*dir), zaczynając od pojazdu + // dla kolejnych pozycji podawane są współrzędne poprzedniego obiektu w (*p) vector3 v = vPos - *p; // wektor od poprzedniego obiektu (albo pojazdu) do punktu zmiany fDist = - v.Length(); // d�ugo�� wektora to odleg�o�� pomi�dzy czo�em a sygna�em albo pocz�tkiem toru - // v.SafeNormalize(); //normalizacja w celu okre�lenia znaku (nie potrzebna?) + v.Length(); // długość wektora to odległość pomiędzy czołem a sygnałem albo początkiem toru + // v.SafeNormalize(); //normalizacja w celu określenia znaku (nie potrzebna?) if (len == 0.0) - { // je�eli liczymy wzgl�dem pojazdu + { // jeżeli liczymy względem pojazdu double iska = dir ? dir->x * v.x + dir->z * v.z : - fDist; // iloczyn skalarny to rzut na chwilow� prost� ruchu - if (iska < 0.0) // iloczyn skalarny jest ujemny, gdy punkt jest z ty�u - { // je�li co� jest z ty�u, to dok�adna odleg�o�� nie ma ju� wi�kszego znaczenia - fDist = -fDist; // potrzebne do badania wyjechania sk�adem poza ograniczenie - if (iFlags & spElapsed) // 32 ustawione, gdy obiekt ju� zosta� mini�ty - { // je�li mini�ty (musi by� mini�ty r�wnie� przez ko�c�wk� sk�adu) + fDist; // iloczyn skalarny to rzut na chwilową prostą ruchu + if (iska < 0.0) // iloczyn skalarny jest ujemny, gdy punkt jest z tyłu + { // jeśli coś jest z tyłu, to dokładna odległość nie ma już większego znaczenia + fDist = -fDist; // potrzebne do badania wyjechania składem poza ograniczenie + if (iFlags & spElapsed) // 32 ustawione, gdy obiekt już został minięty + { // jeśli minięty (musi być minięty również przez końcówkę składu) } else { - iFlags ^= - spElapsed; // 32-mini�ty - b�dziemy liczy� odleg�o�� wzgl�dem przeciwnego ko�ca - // toru (nadal mo�e by� z przodu i ogranicza�) - if ((iFlags & 0x43) == 3) // tylko je�li (istotny) tor, bo eventy s� punktowe - if (trTrack) // mo�e by� NULL, je�li koniec toru (????) + iFlags ^= spElapsed; // 32-minięty - będziemy liczyć odległość względem przeciwnego końca + // toru (nadal może być z przodu i ograniczać) + if ((iFlags & 0x43) == 3) // tylko jeśli (istotny) tor, bo eventy są punktowe + if (trTrack) // może być NULL, jeśli koniec toru (????) vPos = (iFlags & spReverse) ? trTrack->CurrentSegment()->FastGetPoint_0() : trTrack->CurrentSegment()->FastGetPoint_1(); // drugi koniec istotny } } - else if (fDist < 50.0) // przy du�ym k�cie �uku iloczyn skalarny bardziej zani�y odleg�o�� - // ni� ci�ciwa - fDist = iska; // ale przy ma�ych odleg�o�ciach rzut na chwilow� prost� ruchu da - // dok�adniejsze warto�ci + else if (fDist < 50.0) // przy dużym kącie łuku iloczyn skalarny bardziej zaniży odległość + // niż cięciwa + fDist = iska; // ale przy małych odległościach rzut na chwilową prostą ruchu da + // dokładniejsze wartości } - if (fDist > 0.0) // nie mo�e by� 0.0, a przypadkiem mog�o by si� trafi� i by�o by �le - if ((iFlags & spElapsed) == 0) // 32 ustawione, gdy obiekt ju� zosta� mini�ty - { // je�li obiekt nie zosta� mini�ty, mo�na od niego zlicza� narastaj�co (inaczej mo�e by� + if (fDist > 0.0) // nie może być 0.0, a przypadkiem mogło by się trafić i było by źle + if ((iFlags & spElapsed) == 0) // 32 ustawione, gdy obiekt już został minięty + { // jeśli obiekt nie został minięty, można od niego zliczać narastająco (inaczej może być // problem z wektorem kierunku) - len = fDist = len + fDist; // zliczanie dlugo�ci narastaj�co + len = fDist = len + fDist; // zliczanie dlugości narastająco *p = vPos; // nowy punkt odniesienia *dir = Normalize(v); // nowy wektor kierunku od poprzedniego obiektu do aktualnego } - if (iFlags & spTrack) // je�li tor + if (iFlags & spTrack) // jeśli tor { - if (trTrack) // mo�e by� NULL, je�li koniec toru (???) + if (trTrack) // może być NULL, jeśli koniec toru (???) { - fVelNext = trTrack->VelocityGet(); // aktualizacja pr�dko�ci (mo�e by� zmieniana + fVelNext = trTrack->VelocityGet(); // aktualizacja prędkości (może być zmieniana // eventem) int i; if ((i = iFlags & 0xF0000000) != 0) - { // je�li skrzy�owanie, ograniczy� pr�dko�� przy skr�caniu - if (abs(i) > 0x10000000) //�1 to jazda na wprost, �2 nieby te�, ale z przeci�ciem - // g��wnej drogi - chyba �e jest r�wnorz�dne... - fVelNext = 30.0; // uzale�ni� pr�dko�� od promienia; albo niech b�dzie - // ograniczona w skrzy�owaniu (velocity z ujemn� warto�ci�) - 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=" + - std::to_string(trTrack->iNumDynamics) + - "Dist= " + std::to_string(fDist)); - fVelNext = - 0.0; // to zabroni� wjazdu (chyba �e ten z przodu te� jedzie prosto) - } + { // jeśli skrzyżowanie, ograniczyć prędkość przy skręcaniu + if (abs(i) > 0x10000000) //±1 to jazda na wprost, ±2 nieby też, ale z przecięciem + // głównej drogi - chyba że jest równorzędne... + fVelNext = 30.0; // uzależnić prędkość od promienia; albo niech będzie + // ograniczona w skrzyżowaniu (velocity z ujemną wartością) + 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=" + std::to_string(trTrack->iNumDynamics) + "Dist= " + std::to_string(fDist)); + fVelNext = + 0.0; // to zabronić wjazdu (chyba że ten z przodu też jedzie prosto) + } } - if (iFlags & spSwitch) // je�li odcinek zmienny + if (iFlags & spSwitch) // jeśli odcinek zmienny { if (bool(trTrack->GetSwitchState() & 1) != - bool(iFlags & spSwitchStatus)) // czy stan si� zmieni�? - { // Ra: zak�adam, �e s� tylko 2 mo�liwe stany + bool(iFlags & spSwitchStatus)) // czy stan się zmienił? + { // Ra: zakładam, że są tylko 2 możliwe stany iFlags ^= spSwitchStatus; - // fVelNext=trTrack->VelocityGet(); //nowa pr�dko�� + // fVelNext=trTrack->VelocityGet(); //nowa prędkość if ((iFlags & spElapsed) == 0) - return true; // jeszcze trzeba skanowanie wykona� od tego toru - // problem jest chyba, je�li zwrotnica si� prze�o�y zaraz po zjechaniu z niej - // na Mydelniczce potrafi skanowa� na wprost mimo pojechania na bok - } - // poni�sze nie dotyczy trybu ��czenia? - if ((iFlags & spElapsed) ? - false : - 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=" + - std::to_string(trTrack->iNumDynamics) + - "Dist= " + std::to_string(fDist)); - // fDist -= 30.0; - fVelNext = 0.0; // to niech stanie w zwi�kszonej odleg�o�ci - // else if (fVelNext==0.0) //je�li zosta�a wyzerowana - // fVelNext=trTrack->VelocityGet(); //odczyt pr�dko�ci + return true; // jeszcze trzeba skanowanie wykonać od tego toru + // problem jest chyba, jeśli zwrotnica się przełoży zaraz po zjechaniu z niej + // na Mydelniczce potrafi skanować na wprost mimo pojechania na bok } + // poniższe nie dotyczy trybu łączenia? + if ((iFlags & spElapsed) ? false : + 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=" + std::to_string(trTrack->iNumDynamics) + "Dist= "+std::to_string(fDist)); + //fDist -= 30.0; + fVelNext = 0.0; // to niech stanie w zwiększonej odległości + // else if (fVelNext==0.0) //jeśli została wyzerowana + // fVelNext=trTrack->VelocityGet(); //odczyt prędkości + } } } } - else if (iFlags & spEvent) // je�li event - { // odczyt kom�rki pami�ci najlepiej by by�o zrobi� jako notyfikacj�, czyli zmiana kom�rki - // wywo�a jak�� podan� funkcj� - CommandCheck(); // sprawdzenie typu komendy w evencie i okre�lenie pr�dko�ci + else if (iFlags & spEvent) // jeśli event + { // odczyt komórki pamięci najlepiej by było zrobić jako notyfikację, czyli zmiana komórki + // wywoła jakąś podaną funkcję + CommandCheck(); // sprawdzenie typu komendy w evencie i określenie prędkości } return false; }; std::string TSpeedPos::GetName() { - if (iFlags & spTrack) // je�li tor - return trTrack->NameGet(); - else if (iFlags & spEvent) // je�li event - return evEvent->asName; + if (iFlags & spTrack) // jeśli tor + return trTrack->NameGet(); + else if (iFlags & spEvent) // jeśli event + return evEvent->asName; } std::string TSpeedPos::TableText() -{ // pozycja tabelki pr�dko�ci +{ // pozycja tabelki pr?dko?ci if (iFlags & spEnabled) { // o ile pozycja istotna return "Flags=#" + to_hex_str(iFlags, 8) + ", Dist=" + to_string(fDist, 1, 7) + ", Vel=" + std::to_string(fVelNext) + ", Name=" + GetName(); - // if (iFlags & spTrack) // je�li tor + // if (iFlags & spTrack) // je?li tor // return "Flags=#" + IntToHex(iFlags, 8) + ", Dist=" + FloatToStrF(fDist, ffFixed, 7, 1) // + // ", Vel=" + AnsiString(fVelNext) + ", Track=" + trTrack->NameGet(); - // else if (iFlags & spEvent) // je�li event - // return "Flags=#" + IntToHex(iFlags, 8) + ", Dist=" + FloatToStrF(fDist, ffFixed, 7, 1) - // + + //else if (iFlags & spEvent) // jeśli event + // return "Flags=#" + IntToHex(iFlags, 8) + ", Dist=" + FloatToStrF(fDist, ffFixed, 7, 1) + // ", Vel=" + AnsiString(fVelNext) + ", Event=" + evEvent->asName; } return "Empty"; @@ -319,67 +311,63 @@ std::string TSpeedPos::TableText() bool TSpeedPos::IsProperSemaphor(TOrders order) { // sprawdzenie czy semafor jest zgodny z trybem jazdy - if (order < - 0x40) // Wait_for_orders, Prepare_engine, Change_direction, Connect, Disconnect, Shunt - { - if (iFlags & (spSemaphor | spShuntSemaphor)) - return true; - else if (iFlags & spOutsideStation) - return true; - } - else if (order & Obey_train) - { - if (iFlags & spSemaphor) - return true; - } - return false; // true gdy zatrzymanie, wtedy nie ma po co skanowa� dalej + if (order < 0x40) // Wait_for_orders, Prepare_engine, Change_direction, Connect, Disconnect, Shunt + { + if (iFlags & (spSemaphor | spShuntSemaphor)) + return true; + else if (iFlags & spOutsideStation) + return true; + } + else if (order & Obey_train) + { + if (iFlags & spSemaphor) + return true; + } + return false; // true gdy zatrzymanie, wtedy nie ma po co skanować dalej } bool TSpeedPos::Set(TEvent *event, double dist, TOrders order) -{ // zapami�tanie zdarzenia +{ // zapamiętanie zdarzenia fDist = dist; iFlags = spEnabled | spEvent; // event+istotny evEvent = event; - vPos = event->PositionGet(); // wsp��rz�dne eventu albo kom�rki pami�ci (zrzutowa� na tor?) - CommandCheck(); // sprawdzenie typu komendy w evencie i okre�lenie pr�dko�ci - // zale�nie od trybu sprawdzenie czy jest tutaj gdzie� semafor lub tarcza manewrowa - // je�li wskazuje stop wtedy wystawiamy true jako koniec sprawdzania - // WriteLog("EventSet: Vel=" + AnsiString(fVelNext) + " iFlags=" + AnsiString(iFlags) + " - // order="+AnsiString(order)); - if (order < - 0x40) // Wait_for_orders, Prepare_engine, Change_direction, Connect, Disconnect, Shunt - { - if (iFlags & (spSemaphor | spShuntSemaphor) && fVelNext == 0.0) - return true; - else if (iFlags & spOutsideStation) - return true; - } - else if (order & Obey_train) - { - if (iFlags & spSemaphor && fVelNext == 0.0) - return true; - } - return false; // true gdy zatrzymanie, wtedy nie ma po co skanowa� dalej + vPos = event->PositionGet(); // współrzędne eventu albo komórki pamięci (zrzutować na tor?) + CommandCheck(); // sprawdzenie typu komendy w evencie i określenie prędkości + // zależnie od trybu sprawdzenie czy jest tutaj gdzieś semafor lub tarcza manewrowa + // jeśli wskazuje stop wtedy wystawiamy true jako koniec sprawdzania + // WriteLog("EventSet: Vel=" + AnsiString(fVelNext) + " iFlags=" + AnsiString(iFlags) + " order="+AnsiString(order)); + if (order < 0x40) // Wait_for_orders, Prepare_engine, Change_direction, Connect, Disconnect, Shunt + { + if (iFlags & (spSemaphor | spShuntSemaphor) && fVelNext == 0.0) + return true; + else if (iFlags & spOutsideStation) + return true; + } + else if (order & Obey_train) + { + if (iFlags & spSemaphor && fVelNext == 0.0) + return true; + } + return false; // true gdy zatrzymanie, wtedy nie ma po co skanować dalej }; void TSpeedPos::Set(TTrack *track, double dist, int flag) -{ // zapami�tanie zmiany pr�dko�ci w torze - fDist = dist; // odleg�o�� do pocz�tku toru - trTrack = track; // TODO: (t) mo�e by� NULL i nie odczytamy ko�ca poprzedniego :/ +{ // zapamiętanie zmiany prędkości w torze + fDist = dist; // odległość do początku toru + trTrack = track; // TODO: (t) może być NULL i nie odczytamy końca poprzedniego :/ if (trTrack) { - iFlags = - flag | (trTrack->eType == tt_Normal ? 2 : 10); // zapami�tanie kierunku wraz z typem + iFlags = flag | (trTrack->eType == tt_Normal ? 2 : 10); // zapamiętanie kierunku wraz z typem if (iFlags & spSwitch) if (trTrack->GetSwitchState() & 1) iFlags |= spSwitchStatus; fVelNext = trTrack->VelocityGet(); if (trTrack->iDamageFlag & 128) - fVelNext = 0.0; // je�li uszkodzony, to te� st�j + fVelNext = 0.0; // jeśli uszkodzony, to też stój if (iFlags & spEnd) fVelNext = (trTrack->iCategoryFlag & 1) ? 0.0 : - 20.0; // je�li koniec, to poci�g st�j, a samoch�d zwolnij + 20.0; // jeśli koniec, to pociąg stój, a samochód zwolnij vPos = (bool(iFlags & spReverse) != bool(iFlags & spEnd)) ? trTrack->CurrentSegment()->FastGetPoint_1() : trTrack->CurrentSegment()->FastGetPoint_0(); @@ -394,15 +382,15 @@ void TController::TableClear() { // wyczyszczenie tablicy iFirst = iLast = 0; iTableDirection = 0; // nieznany - for (int i = 0; i < iSpeedTableSize; ++i) // czyszczenie tabeli pr�dko�ci + for (int i = 0; i < iSpeedTableSize; ++i) // czyszczenie tabeli prędkości sSpeedTable[i].Clear(); tLast = NULL; fLastVel = -1; eSignSkip = NULL; // nic nie pomijamy }; -TEvent *TController::CheckTrackEvent(double fDirection, TTrack *Track) -{ // sprawdzanie event�w na podanym torze do podstawowego skanowania +TEvent * TController::CheckTrackEvent(double fDirection, TTrack *Track) +{ // sprawdzanie eventów na podanym torze do podstawowego skanowania TEvent *e = (fDirection > 0) ? Track->evEvent2 : Track->evEvent1; if (!e) return NULL; @@ -413,92 +401,91 @@ TEvent *TController::CheckTrackEvent(double fDirection, TTrack *Track) } bool TController::TableAddNew() -{ // zwi�kszenie u�ytej tabelki o jeden rekord +{ // zwiększenie użytej tabelki o jeden rekord iLast = (iLast + 1) % iSpeedTableSize; - // TODO: jeszcze sprawdzi�, czy si� na iFirst nie na�o�y - // TODO: wstawi� tu wywo�anie odtykacza - teraz jest to w TableTraceRoute() - // TODO: je�li ostatnia pozycja zaj�ta, ustawia� dodatkowe flagi - teraz jest to w + // TODO: jeszcze sprawdzić, czy się na iFirst nie nałoży + // TODO: wstawić tu wywołanie odtykacza - teraz jest to w TableTraceRoute() + // TODO: jeśli ostatnia pozycja zajęta, ustawiać dodatkowe flagi - teraz jest to w // TableTraceRoute() - // TODO: przyda�o by si� te� posortowa� tabelk� wg odleg�o�ci (ale nie w tym miejscu) - return true; // false gdy si� na�o�y + // TODO: przydało by się też posortować tabelkę wg odległości (ale nie w tym miejscu) + return true; // false gdy się nałoży }; bool TController::TableNotFound(TEvent *e) -{ // sprawdzenie, czy nie zosta� ju� dodany do tabelki (np. podw�jne W4 robi problemy) - int j = (iLast + 1) % iSpeedTableSize; // j, aby sprawdzi� te� ostatni� pozycj� +{ // sprawdzenie, czy nie został już dodany do tabelki (np. podwójne W4 robi problemy) + int j = (iLast + 1) % iSpeedTableSize; // j, aby sprawdzić też ostatnią pozycję for (int i = iFirst; i != j; i = (i + 1) % iSpeedTableSize) - if ((sSpeedTable[i].iFlags & (spEnabled | spEvent)) == - (spEnabled | 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 - } - return true; // nie ma, czyli mo�na doda� + if ((sSpeedTable[i].iFlags & (spEnabled | spEvent)) == (spEnabled | + 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 + } + return true; // nie ma, czyli można dodać }; void TController::TableTraceRoute(double fDistance, TDynamicObject *pVehicle) -{ // skanowanie trajektorii na odleg�o�� (fDistance) od (pVehicle) w kierunku przodu sk�adu i - // uzupe�nianie tabelki - // WriteLog("Starting TableTraceRoute"); - if (!iDirection) // kierunek pojazdu z nap�dem - { // je�li kierunek jazdy nie jest okreslony +{ // skanowanie trajektorii na odległość (fDistance) od (pVehicle) w kierunku przodu składu i + // uzupełnianie tabelki + // WriteLog("Starting TableTraceRoute"); + if (!iDirection) // kierunek pojazdu z napędem + { // jeśli kierunek jazdy nie jest okreslony iTableDirection = 0; // czekamy na ustawienie kierunku } TTrack *pTrack; // zaczynamy od ostatniego analizowanego toru - // double fDistChVel=-1; //odleg�o�� do toru ze zmian� pr�dko�ci - double fTrackLength; // d�ugo�� aktualnego toru (kr�tsza dla pierwszego) - double fCurrentDistance; // aktualna przeskanowana d�ugo�� + // double fDistChVel=-1; //odległość do toru ze zmianą prędkości + double fTrackLength; // długość aktualnego toru (krótsza dla pierwszego) + double fCurrentDistance; // aktualna przeskanowana długość TEvent *pEvent; double fLastDir; // kierunek na ostatnim torze if (iTableDirection != iDirection) - { // je�li zmiana kierunku, zaczynamy od toru ze wskazanym pojazdem - pTrack = pVehicle->RaTrackGet(); // odcinek, na kt�rym stoi + { // jeśli zmiana kierunku, zaczynamy od toru ze wskazanym pojazdem + pTrack = pVehicle->RaTrackGet(); // odcinek, na którym stoi fLastDir = pVehicle->DirectionGet() * pVehicle->RaDirectionGet(); // ustalenie kierunku skanowania na torze fCurrentDistance = 0; // na razie nic nie przeskanowano - fTrackLength = pVehicle->RaTranslationGet(); // pozycja na tym torze (odleg�o�� od Point1) - if (fLastDir > 0) // je�li w kierunku Point2 toru + fTrackLength = pVehicle->RaTranslationGet(); // pozycja na tym torze (odległość od Point1) + if (fLastDir > 0) // jeśli w kierunku Point2 toru fTrackLength = - pTrack->Length() - fTrackLength; // przeskanowana zostanie odleg�o�� do Point2 - fLastVel = pTrack->VelocityGet(); // aktualna pr�dko�� + pTrack->Length() - fTrackLength; // przeskanowana zostanie odległość do Point2 + fLastVel = pTrack->VelocityGet(); // aktualna prędkość iTableDirection = - iDirection; // ustalenie w jakim kierunku jest wype�niana tabelka wzgl�dem pojazdu + iDirection; // ustalenie w jakim kierunku jest wypełniana tabelka względem pojazdu iFirst = iLast = 0; - tLast = NULL; //�aden nie sprawdzony + tLast = NULL; //żaden nie sprawdzony } else { // kontynuacja skanowania od ostatnio sprawdzonego toru (w ostatniej pozycji zawsze jest tor) - // WriteLog("TableTraceRoute: check last track"); + // WriteLog("TableTraceRoute: check last track"); if (sSpeedTable[iLast].iFlags & spEndOfTable) // zatkanie - { // je�li zape�ni�a si� tabelka - if ((iLast + 1) % iSpeedTableSize == iFirst) // je�li nadal jest zape�niona - { - TablePurger(); // nic si� nie da zrobi� - return; - } - if ((iLast + 2) % iSpeedTableSize == iFirst) // musi by� jeszcze miejsce wolne na - // ewentualny event, bo tor jeszcze nie - // sprawdzony - { - TablePurger(); - return; // ju� lepiej, ale jeszcze nie tym razem - } - sSpeedTable[iLast].iFlags &= 0xBE; // kontynuowa� pr�by doskanowania + { // jeśli zapełniła się tabelka + if ((iLast + 1) % iSpeedTableSize == iFirst) // jeśli nadal jest zapełniona + { + TablePurger(); // nic się nie da zrobić + return; + } + if ((iLast + 2) % iSpeedTableSize == iFirst) // musi być jeszcze miejsce wolne na + // ewentualny event, bo tor jeszcze nie + // sprawdzony + { + TablePurger(); + return; // już lepiej, ale jeszcze nie tym razem + } + sSpeedTable[iLast].iFlags &= 0xBE; // kontynuować próby doskanowania } - // znaleziono semafor lub tarcz� lub tor z pr�dko�ci� zero - // trzeba sprawdzi� czy to nada� semafor - // WriteLog("TableTraceRoute: "+OwnerName()+" check semaphor... "); + // znaleziono semafor lub tarczę lub tor z prędkością zero + // trzeba sprawdzić czy to nadał semafor + // WriteLog("TableTraceRoute: "+OwnerName()+" check semaphor... "); // if (sSemNext) // WriteLog(sSemNext->TableText()); if (sSemNextStop && sSemNextStop->fVelNext == - 0.0) // je�li jest nast�pny semafor to sprawdzamy czy to on nada� zero + 0.0) // jeśli jest następny semafor to sprawdzamy czy to on nadał zero { - // WriteLog("TableTraceRoute: "+sSemNext->TableText()); - if ((OrderCurrentGet() & Obey_train) && (sSemNextStop->iFlags & spSemaphor)) + // WriteLog("TableTraceRoute: "+sSemNext->TableText()); + if ((OrderCurrentGet() & Obey_train) && (sSemNextStop->iFlags & spSemaphor)) return; else if ((OrderCurrentGet() < 0x40) && (sSemNextStop->iFlags & (spSemaphor | spShuntSemaphor | spOutsideStation))) @@ -506,59 +493,55 @@ void TController::TableTraceRoute(double fDistance, TDynamicObject *pVehicle) } pTrack = sSpeedTable[iLast].trTrack; // ostatnio sprawdzony tor if (!pTrack) - return; // koniec toru, to nie ma co sprawdza� (nie ma prawa tak by�) + return; // koniec toru, to nie ma co sprawdzać (nie ma prawa tak być) fLastDir = sSpeedTable[iLast].iFlags & spReverse ? -1.0 : - 1.0; // flaga ustawiona, gdy Point2 toru jest bli�ej - fCurrentDistance = sSpeedTable[iLast].fDist; // aktualna odleg�o�� do jego Point1 - fTrackLength = sSpeedTable[iLast].iFlags & (spElapsed | spEnd) ? - 0.0 : - pTrack->Length(); // nie dolicza� d�ugo�ci gdy: - // 32-mini�ty pocz�tek, - // 64-jazda do ko�ca toru + 1.0; // flaga ustawiona, gdy Point2 toru jest bliżej + fCurrentDistance = sSpeedTable[iLast].fDist; // aktualna odległość do jego Point1 + fTrackLength = + sSpeedTable[iLast].iFlags & (spElapsed | spEnd) ? 0.0 : pTrack->Length(); // nie doliczać długości gdy: + // 32-minięty początek, + // 64-jazda do końca toru } if (fCurrentDistance < fDistance) - { // je�li w og�le jest po co analizowa� + { // jeśli w ogóle jest po co analizować // WriteLog("TableTraceRoute: checking next tracks"); - --iLast; // jak co� si� znajdzie, zostanie wpisane w t� pozycj�, kt�r� w�a�nie odczytano + --iLast; // jak coś się znajdzie, zostanie wpisane w tę pozycję, którą właśnie odczytano while (fCurrentDistance < fDistance) { - if (pTrack != tLast) // ostatni zapisany w tabelce nie by� jeszcze sprawdzony - { // je�li tor nie by� jeszcze sprawdzany + if (pTrack != tLast) // ostatni zapisany w tabelce nie był jeszcze sprawdzony + { // jeśli tor nie był jeszcze sprawdzany // if (pTrack) // WriteLog("TableTraceRoute: " + OwnerName() + " checking track " + // pTrack->NameGet()); if ((pEvent = CheckTrackEvent(fLastDir, pTrack)) != - NULL) // je�li jest semafor na tym torze - { // trzeba sprawdzi� tabelk�, bo dodawanie drugi raz tego samego przystanku nie + NULL) // jeśli jest semafor na tym torze + { // trzeba sprawdzić tabelkę, bo dodawanie drugi raz tego samego przystanku nie // jest korzystne - if (TableNotFound(pEvent)) // je�li nie ma + if (TableNotFound(pEvent)) // jeśli nie ma if (TableAddNew()) { - if (Global::iWriteLogEnabled & 8) - 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� + 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 (!sSemNext) + sSemNext = &sSpeedTable[iLast]; + if (Global::iWriteLogEnabled & 8) + WriteLog("Signal stop. Next Semaphor ", false); if (sSemNextStop) - { - if (Global::iWriteLogEnabled & 8) - WriteLog(sSemNextStop->GetName()); - } + { + if (Global::iWriteLogEnabled & 8) + WriteLog(sSemNextStop->GetName()); + } else - { - if (Global::iWriteLogEnabled & 8) - WriteLog("none"); - } + { + if (Global::iWriteLogEnabled & 8) + WriteLog("none"); + } } else { @@ -566,36 +549,36 @@ 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 (Global::iWriteLogEnabled & 8) + WriteLog("Signal forward. Next Semaphor ", false); if (sSemNext) - { - if (Global::iWriteLogEnabled & 8) - WriteLog(sSemNext->GetName()); - } + { + if (Global::iWriteLogEnabled & 8) + WriteLog(sSemNext->GetName()); + } else - { - if (Global::iWriteLogEnabled & 8) - WriteLog("none"); - } + { + if (Global::iWriteLogEnabled & 8) + WriteLog("none"); + } } } - } // event dodajemy najpierw, �eby m�c sprawdzi�, czy tor zosta� dodany po - // odczytaniu pr�dko�ci nast�pnego + } // event dodajemy najpierw, żeby móc sprawdzić, czy tor został dodany po + // odczytaniu prędkości następnego if ((pTrack->VelocityGet() == 0.0) // zatrzymanie - || (pTrack->iAction) // je�li tor ma w�asno�ci istotne dla skanowania - || (pTrack->VelocityGet() != fLastVel)) // nast�puje zmiana pr�dko�ci + || (pTrack->iAction) // jeśli tor ma własności istotne dla skanowania + || (pTrack->VelocityGet() != fLastVel)) // następuje zmiana prędkości { // odcinek dodajemy do tabelki, gdy jest istotny dla ruchu if (TableAddNew()) - { // teraz dodatkowo zapami�tanie wybranego segmentu dla skrzy�owania + { // teraz dodatkowo zapamiętanie wybranego segmentu dla skrzyżowania sSpeedTable[iLast].Set( pTrack, fCurrentDistance, fLastDir < 0 ? 5 : - 1); // dodanie odcinka do tabelki z flag� kierunku wej�cia - if (pTrack->eType == tt_Cross) // na skrzy�owaniach trzeba wybra� segment, - // po kt�rym pojedzie pojazd - { // dopiero tutaj jest ustalany kierunek segmentu na skrzy�owaniu + 1); // dodanie odcinka do tabelki z flagą kierunku wejścia + if (pTrack->eType == tt_Cross) // na skrzyżowaniach trzeba wybrać segment, + // po którym pojedzie pojazd + { // dopiero tutaj jest ustalany kierunek segmentu na skrzyżowaniu sSpeedTable[iLast].iFlags |= (pTrack->CrossSegment((fLastDir < 0) ? tLast->iPrevDirection : tLast->iNextDirection, @@ -603,104 +586,103 @@ void TController::TableTraceRoute(double fDistance, TDynamicObject *pVehicle) 15) << 28; // ostatnie 4 bity pola flag sSpeedTable[iLast].iFlags &= - ~spReverse; // usuni�cie flagi kierunku, bo mo�e by� b��dna + ~spReverse; // usunięcie flagi kierunku, bo może być błędna if (sSpeedTable[iLast].iFlags < 0) - sSpeedTable[iLast].iFlags |= spReverse; // ustawienie flagi kierunku - // na podstawie wybranego - // segmentu + sSpeedTable[iLast].iFlags |= + spReverse; // ustawienie flagi kierunku na podstawie wybranego segmentu if (int(fLastDir) * sSpeedTable[iLast].iFlags < 0) fLastDir = -fLastDir; if (AIControllFlag) // dla AI na razie losujemy kierunek na kolejnym - // skrzy�owaniu + // skrzyżowaniu iRouteWanted = 1 + Random(3); } } } - else if ((pTrack->fRadius != 0.0) // odleg�o�� na �uku lepiej aproksymowa� ci�ciwami - || (tLast ? tLast->fRadius != 0.0 : false)) // koniec �uku te� jest istotny - { // albo dla liczenia odleg�o�ci przy pomocy ci�ciw - te usuwa� po przejechaniu + else if ((pTrack->fRadius != 0.0) // odległość na łuku lepiej aproksymować cięciwami + || (tLast ? tLast->fRadius != 0.0 : false)) // koniec łuku też jest istotny + { // albo dla liczenia odległości przy pomocy cięciw - te usuwać po przejechaniu if (TableAddNew()) sSpeedTable[iLast].Set(pTrack, fCurrentDistance, fLastDir < 0 ? 0x85 : 0x81); // dodanie odcinka do tabelki - // 0x85 = spEnabled, spReverse, SpCurve + // 0x85 = spEnabled, spReverse, SpCurve } } fCurrentDistance += - fTrackLength; // doliczenie kolejnego odcinka do przeskanowanej d�ugo�ci - tLast = pTrack; // odhaczenie, �e sprawdzony - // Track->ScannedFlag=true; //do pokazywania przeskanowanych tor�w - fLastVel = pTrack->VelocityGet(); // pr�dko�� na poprzednio sprawdzonym odcinku + fTrackLength; // doliczenie kolejnego odcinka do przeskanowanej długości + tLast = pTrack; // odhaczenie, że sprawdzony + // Track->ScannedFlag=true; //do pokazywania przeskanowanych torów + fLastVel = pTrack->VelocityGet(); // prędkość na poprzednio sprawdzonym odcinku pTrack = pTrack->Neightbour( (pTrack->eType == tt_Cross) ? (sSpeedTable[iLast].iFlags >> 28) : int(fLastDir), - fLastDir); // mo�e by� NULL + fLastDir); // może być NULL /* if (fLastDir>0) - {//je�li szukanie od Point1 w kierunku Point2 - pTrack=pTrack->CurrentNext(); //mo�e by� NULL - if (pTrack) //je�li dalej brakuje toru, to zostajemy na tym samym, z t� sam� - orientacj� + {//jeśli szukanie od Point1 w kierunku Point2 + pTrack=pTrack->CurrentNext(); //może być NULL + if (pTrack) //jeśli dalej brakuje toru, to zostajemy na tym samym, z tą samą + orientacją if (tLast->iNextDirection) - fLastDir=-fLastDir; //mo�na by zami�ta� i zmieni� tylko je�li jest pTrack + fLastDir=-fLastDir; //można by zamiętać i zmienić tylko jeśli jest pTrack } else //if (fDirection<0) - {//je�li szukanie od Point2 w kierunku Point1 - pTrack=pTrack->CurrentPrev(); //mo�e by� NULL - if (pTrack) //je�li dalej brakuje toru, to zostajemy na tym samym, z t� sam� - orientacj� + {//jeśli szukanie od Point2 w kierunku Point1 + pTrack=pTrack->CurrentPrev(); //może być NULL + if (pTrack) //jeśli dalej brakuje toru, to zostajemy na tym samym, z tą samą + orientacją if (!tLast->iPrevDirection) fLastDir=-fLastDir; } */ if (pTrack) - { // je�li kolejny istnieje + { // jeśli kolejny istnieje if (tLast) if (pTrack->VelocityGet() < 0 ? tLast->VelocityGet() > 0 : pTrack->VelocityGet() > tLast->VelocityGet()) - { // je�li kolejny ma wi�ksz� pr�dko�� ni� poprzedni, to zapami�ta� poprzedni + { // jeśli kolejny ma większą prędkość niż poprzedni, to zapamiętać poprzedni // (do czasu wyjechania) if ((sSpeedTable[iLast].iFlags & 3) == 3 ? (sSpeedTable[iLast].trTrack != tLast) : - true) // je�li nie by� dodany do tabelki + true) // jeśli nie był dodany do tabelki if (TableAddNew()) sSpeedTable[iLast].Set( tLast, fCurrentDistance, (fLastDir > 0 ? pTrack->iPrevDirection : pTrack->iNextDirection) ? 1 : - 5); // zapisanie toru z ograniczeniem pr�dko�ci + 5); // zapisanie toru z ograniczeniem prędkości } if (((iLast + 3) % iSpeedTableSize == iFirst) ? true : - ((iLast + 2) % iSpeedTableSize == iFirst)) // czy tabelka si� nie zatka? - { // jest ryzyko nieznalezienia ograniczenia - ograniczy� pr�dko�� do pozwalaj�cej - // na zatrzymanie na ko�cu przeskanowanej drogi - TablePurger(); // usun�� pilnie zb�dne pozycje + ((iLast + 2) % iSpeedTableSize == iFirst)) // czy tabelka się nie zatka? + { // jest ryzyko nieznalezienia ograniczenia - ograniczyć prędkość do pozwalającej + // na zatrzymanie na końcu przeskanowanej drogi + TablePurger(); // usunąć pilnie zbędne pozycje if (((iLast + 3) % iSpeedTableSize == iFirst) ? true : - ((iLast + 2) % iSpeedTableSize == iFirst)) // czy tabelka si� nie zatka? - { // je�li odtykacz nie pom�g� (TODO: zwi�kszy� rozmiar tabelki) + ((iLast + 2) % iSpeedTableSize == iFirst)) // czy tabelka się nie zatka? + { // jeśli odtykacz nie pomógł (TODO: zwiększyć rozmiar tabelki) if (TableAddNew()) sSpeedTable[iLast].Set( pTrack, fCurrentDistance, fLastDir < 0 ? 0x10045 : - 0x10041); // zapisanie toru jako ko�cowego (ogranicza pr�dkos�) - // zapisa� w logu, �e nale�y poprawi� sceneri�? + 0x10041); // zapisanie toru jako końcowego (ogranicza prędkosć) + // zapisać w logu, że należy poprawić scenerię? return; // nie skanujemy dalej, bo nie ma miejsca } } - fTrackLength = pTrack->Length(); // zwi�kszenie skanowanej odleg�o�ci tylko je�li + fTrackLength = pTrack->Length(); // zwiększenie skanowanej odległości tylko jeśli // istnieje dalszy tor } else - { // definitywny koniec skanowania, chyba �e dalej puszczamy samoch�d po gruncie... - if (TableAddNew()) // kolejny, bo si� cofn�li�my o 1 + { // definitywny koniec skanowania, chyba że dalej puszczamy samochód po gruncie... + if (TableAddNew()) // kolejny, bo się cofnęliśmy o 1 sSpeedTable[iLast].Set( tLast, fCurrentDistance, fLastDir < 0 ? 0x45 : 0x41); // zapisanie ostatniego sprawdzonego toru - return; // to ostatnia pozycja, bo NULL nic nie da, a mo�e si� podpi�� obrotnica, - // czy jakie� transportery + return; // to ostatnia pozycja, bo NULL nic nie da, a może się podpiąć obrotnica, + // czy jakieś transportery } } if (TableAddNew()) @@ -710,99 +692,93 @@ void TController::TableTraceRoute(double fDistance, TDynamicObject *pVehicle) }; void TController::TableCheck(double fDistance) -{ // przeliczenie odleg�o�ci w tabelce, ewentualnie doskanowanie (bez analizy pr�dko�ci itp.) +{ // przeliczenie odległości w tabelce, ewentualnie doskanowanie (bez analizy prędkości itp.) if (iTableDirection != iDirection) TableTraceRoute(fDistance, - pVehicles[1]); // jak zmiana kierunku, to skanujemy od ko�ca sk�adu + pVehicles[1]); // jak zmiana kierunku, to skanujemy od końca składu else if (iTableDirection) - { // trzeba sprawdzi�, czy co� si� zmieni�o + { // trzeba sprawdzić, czy coś się zmieniło vector3 dir = pVehicles[0]->VectorFront() * pVehicles[0]->DirectionGet(); // wektor kierunku jazdy vector3 pos = pVehicles[0]->HeadPosition(); // zaczynamy od pozycji pojazdu - // double lastspeed=-1; //pr�dko�� na torze do usuni�cia - double len = 0.0; // odleg�o�� b�dziemy zlicza� narastaj�co + // double lastspeed=-1; //prędkość na torze do usunięcia + double len = 0.0; // odległość będziemy zliczać narastająco for (int i = iFirst; i != iLast; i = (i + 1) % iSpeedTableSize) - { // aktualizacja rekord�w z wyj�tkiem ostatniego - if (sSpeedTable[i].iFlags & spEnabled) // je�li pozycja istotna + { // aktualizacja rekordów z wyjątkiem ostatniego + if (sSpeedTable[i].iFlags & spEnabled) // jeśli pozycja istotna { if (sSpeedTable[i].Update(&pos, &dir, len)) { - 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) - sSemNext = NULL; // przy kasowaniu tabelki zrzucamy tak�e semafor - 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 + 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) + sSemNext = NULL; // przy kasowaniu tabelki zrzucamy także semafor + 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 } - if (sSpeedTable[i].iFlags & spTrack) // je�li odcinek + if (sSpeedTable[i].iFlags & spTrack) // jeśli odcinek { - 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 - // WriteLog( "TableCheck: Track is behind. Delete from table: " + - // sSpeedTable[i].trTrack->NameGet()); - sSpeedTable[i].iFlags &= ~spEnabled; // nie liczy si� + // WriteLog( "TableCheck: Track is behind. Delete from table: " + sSpeedTable[i].trTrack->NameGet()); + sSpeedTable[i].iFlags &= ~spEnabled; // nie liczy się } - else if ((sSpeedTable[i].iFlags & 0xF0000028) == spElapsed) // jest z ty�u - // (najechany) i nie - // jest zwrotnic� - // ani skrzy�owaniem - if (sSpeedTable[i].fVelNext < 0) // a nie ma ograniczenia pr�dko�ci - { - sSpeedTable[i].iFlags = - 0; // to nie ma go po co trzyma� (odtykacz usunie ze �rodka) - // WriteLog("TableCheck: Track without speed. Delete from table: " + - // sSpeedTable[i].trTrack->NameGet()); - } + else if ((sSpeedTable[i].iFlags & 0xF0000028) == + spElapsed) // jest z tyłu (najechany) i nie jest zwrotnicą ani skrzyżowaniem + if (sSpeedTable[i].fVelNext < 0) // a nie ma ograniczenia prędkości + { + sSpeedTable[i].iFlags = + 0; // to nie ma go po co trzymać (odtykacz usunie ze środka) + // 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 { if (sSpeedTable[i].fDist < (sSpeedTable[i].evEvent->Type == tp_PutValues ? -fLength : - 0)) // je�li jest z ty�u + 0)) // jeśli jest z tyłu if ((mvOccupied->CategoryFlag & 1) ? false : sSpeedTable[i].fDist < -fLength) - { // poci�g staje zawsze, a samoch�d tylko je�li nie przejedzie ca�� - // d�ugo�ci� (mo�e by� zaskoczony zmian�) - // WriteLog("TableCheck: Event is behind. Delete from table: " + - // sSpeedTable[i].evEvent->asName); - sSpeedTable[i].iFlags &= ~1; // degradacja pozycji dla samochodu; + { // pociąg staje zawsze, a samochód tylko jeśli nie przejedzie całą + // długością (może być zaskoczony zmianą) + // WriteLog("TableCheck: Event is behind. Delete from table: " + sSpeedTable[i].evEvent->asName); + sSpeedTable[i].iFlags &= ~1; // degradacja pozycji dla samochodu; // semafory usuwane tylko przy sprawdzaniu, - // bo wysy�aj� komendy + // bo wysyłają komendy } } - // if (sSpeedTable[i].fDist<-20.0*fLength) //je�li to co� jest 20 razy dalej ni� - // d�ugo�� sk�adu - //{sSpeedTable[i].iFlags&=~1; //to jest to jakby b��d w scenerii + // if (sSpeedTable[i].fDist<-20.0*fLength) //jeśli to coś jest 20 razy dalej niż + // długość składu + //{sSpeedTable[i].iFlags&=~1; //to jest to jakby błąd w scenerii // //WriteLog("Error: too distant object in scan table"); //} - // if (sSpeedTable[i].fDist>20.0*fLength) //je�li to co� jest 20 razy dalej ni� - // d�ugo�� sk�adu - //{sSpeedTable[i].iFlags&=~1; //to jest to jakby b��d w scenerii + // if (sSpeedTable[i].fDist>20.0*fLength) //jeśli to coś jest 20 razy dalej niż + // długość składu + //{sSpeedTable[i].iFlags&=~1; //to jest to jakby błąd w scenerii // //WriteLog("Error: too distant object in scan table"); //} } - if (i == iFirst) // je�li jest pierwsz� pozycj� tabeli - { // pozbycie si� pocz�tkowej pozycji + if (i == iFirst) // jeśli jest pierwszą pozycją tabeli + { // pozbycie się początkowej pozycji if ((sSpeedTable[i].iFlags & 1) == - 0) // je�li pozycja istotna (po Update() mo�e si� zmieni�) - // if (iFirst!=iLast) //ostatnia musi zosta� - to za�atwia for() + 0) // jeśli pozycja istotna (po Update() może się zmienić) + // if (iFirst!=iLast) //ostatnia musi zostać - to załatwia for() iFirst = (iFirst + 1) % - iSpeedTableSize; // kolejne sprawdzanie b�dzie ju� od nast�pnej pozycji + iSpeedTableSize; // kolejne sprawdzanie będzie już od następnej pozycji } } sSpeedTable[iLast].Update(&pos, &dir, len); // aktualizacja ostatniego @@ -813,45 +789,45 @@ void TController::TableCheck(double fDistance) }; TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fNext, double &fAcc) -{ // ustalenie parametr�w, zwraca typ komendy, je�li sygna� podaje pr�dko�� do jazdy - // fVelDes - pr�dko�� zadana - // fDist - dystans w jakim nale�y rozwa�y� ruch - // fNext - pr�dko�� na ko�cu tego dystansu +{ // ustalenie parametrów, zwraca typ komendy, jeśli sygnał podaje prędkość do jazdy + // fVelDes - prędkość zadana + // fDist - dystans w jakim należy rozważyć ruch + // fNext - prędkość na końcu tego dystansu // fAcc - zalecane przyspieszenie w chwili obecnej - kryterium wyboru dystansu double a; // przyspieszenie - double v; // pr�dko�� + double v; // prędkość double d; // droga - double d_to_next_sem = 10000.0; // ustaiwamy na pewno dalej ni� widzi AI + double d_to_next_sem = 10000.0; //ustaiwamy na pewno dalej niż widzi AI TCommandType go = cm_Unknown; eSignNext = NULL; int i, k = iLast - iFirst + 1; if (k < 0) - k += iSpeedTableSize; // ilo�� pozycji do przeanalizowania + k += iSpeedTableSize; // ilość pozycji do przeanalizowania iDrivigFlags &= ~(moveTrackEnd | moveSwitchFound | moveSemaphorFound | - moveSpeedLimitFound); // te flagi s� ustawiane tutaj, w razie potrzeby + moveSpeedLimitFound); // 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 + { // sprawdzenie rekordów od (iFirst) do (iLast), o ile są istotne + if (sSpeedTable[i].iFlags & spEnabled) // badanie istotności { // o ile dana pozycja tabelki jest istotna if (sSpeedTable[i].iFlags & spPassengerStopPoint) - { // je�li przystanek, trzeba obs�u�y� wg rozk�adu + { // jeśli przystanek, trzeba obsłużyć wg rozkładu if (sSpeedTable[i].evEvent->CommandGet() != asNextStop) - { // je�li nazwa nie jest zgodna - if (sSpeedTable[i].fDist < -fLength) // je�li zosta� przejechany + { // jeśli nazwa nie jest zgodna + if (sSpeedTable[i].fDist < -fLength) // jeśli został przejechany sSpeedTable[i].iFlags = - 0; // to mo�na usun�� (nie mog� by� usuwane w skanowaniu) - continue; // ignorowanie jakby nie by�o tej pozycji + 0; // to można usunąć (nie mogą być usuwane w skanowaniu) + continue; // ignorowanie jakby nie było tej pozycji } else if (iDrivigFlags & - moveStopPoint) // je�li pomijanie W4, to nie sprawdza czasu odjazdu - { // tylko gdy nazwa zatrzymania si� zgadza + moveStopPoint) // jeśli pomijanie W4, to nie sprawdza czasu odjazdu + { // tylko gdy nazwa zatrzymania się zgadza if (!TrainParams->IsStop()) - { // je�li nie ma tu postoju - sSpeedTable[i].fVelNext = -1; // maksymalna pr�dko�� w tym miejscu + { // jeśli nie ma tu postoju + sSpeedTable[i].fVelNext = -1; // maksymalna prędkość w tym miejscu if (sSpeedTable[i].fDist < - 200.0) // przy 160km/h jedzie 44m/s, to da dok�adno�� rz�du 5 sekund - { // zaliczamy posterunek w pewnej odleg�o�ci przed (cho� W4 nie zas�ania -// ju� semafora) + 200.0) // przy 160km/h jedzie 44m/s, to da dokładność rzędu 5 sekund + { // zaliczamy posterunek w pewnej odległości przed (choć W4 nie zasłania +// już semafora) #if LOGSTOPS WriteLog(pVehicle->asName + " as " + TrainParams->TrainName + ": at " + std::to_string(GlobalTime->hh) + ":" + @@ -860,27 +836,28 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN #endif fLastStopExpDist = mvOccupied->DistCounter + 0.250 + 0.001 * fLength; // przy jakim dystansie (stanie - // licznika) ma przesun�� na - // nast�pny post�j - TrainParams->UpdateMTable(GlobalTime->hh, GlobalTime->mm, - asNextStop.substr(19, asNextStop.length())); - TrainParams->StationIndexInc(); // przej�cie do nast�pnej + // licznika) ma przesunąć na + // następny postój + TrainParams->UpdateMTable( + GlobalTime->hh, GlobalTime->mm, + asNextStop.substr(19, asNextStop.length())); + TrainParams->StationIndexInc(); // przejście do następnej asNextStop = TrainParams->NextStop(); // pobranie kolejnego miejsca zatrzymania - // TableClear(); //aby od nowa sprawdzi�o W4 z inn� nazw� ju� - to nie - // jest dobry pomys� - sSpeedTable[i].iFlags = 0; // nie liczy si� ju� - sSpeedTable[i].fVelNext = -1; // jecha� - continue; // nie analizowa� pr�dko�ci + // TableClear(); //aby od nowa sprawdziło W4 z inną nazwą już - to nie + // jest dobry pomysł + sSpeedTable[i].iFlags = 0; // nie liczy się już + sSpeedTable[i].fVelNext = -1; // jechać + continue; // nie analizować prędkości } - } // koniec obs�ugi przelotu na W4 + } // koniec obsługi przelotu na W4 else { // zatrzymanie na W4 - if (!eSignNext) // je�li nie widzi nast�pnego sygna�u - eSignNext = sSpeedTable[i].evEvent; // ustawia dotychczasow� - if (mvOccupied->Vel > 0.3) // je�li jedzie (nie trzeba czeka�, a� si� - // drgania wyt�umi� - drzwi zamykane od 1.0) - sSpeedTable[i].fVelNext = 0; // to b�dzie zatrzymanie + if (!eSignNext) //jeśli nie widzi następnego sygnału + eSignNext = sSpeedTable[i].evEvent; //ustawia dotychczasową + if (mvOccupied->Vel > 0.3) // jeśli jedzie (nie trzeba czekać, aż się + // drgania wytłumią - drzwi zamykane od 1.0) + sSpeedTable[i].fVelNext = 0; // to będzie zatrzymanie // else if // ((iDrivigFlags&moveStopCloser)?sSpeedTable[i].fDist<=fMaxProximityDist*(AIControllFlag?1.0:10.0):true) else if ((iDrivigFlags & moveStopCloser) ? @@ -888,21 +865,21 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN Max0R(sSpeedTable[i].evEvent->ValueGet(2), fMaxProximityDist + fLength) : sSpeedTable[i].fDist < d_to_next_sem) - // Ra 2F1I: odleg�o�� plus d�ugo�� poci�gu musi by� mniejsza od d�ugo�ci - // peronu, chyba �e poci�g jest d�u�szy, to wtedy minimalna - // je�li d�ugo�� peronu ((sSpeedTable[i].evEvent->ValueGet(2)) nie podana, - // przyj�� odleg�o�� fMinProximityDist - { // je�li si� zatrzyma� przy W4, albo sta� w momencie zobaczenia W4 + // Ra 2F1I: odległość plus długość pociągu musi być mniejsza od długości + // peronu, chyba że pociąg jest dłuższy, to wtedy minimalna + // jeśli długość peronu ((sSpeedTable[i].evEvent->ValueGet(2)) nie podana, + // przyjąć odległość fMinProximityDist + { // jeśli się zatrzymał przy W4, albo stał w momencie zobaczenia W4 if (!AIControllFlag) // AI tylko sobie otwiera drzwi - iDrivigFlags &= ~moveStopCloser; // w razie prze��czenia na AI ma - // nie podci�ga� do W4, gdy - // u�ytkownik zatrzyma� za daleko + iDrivigFlags &= ~moveStopCloser; // w razie przełączenia na AI ma + // nie podciągać do W4, gdy + // użytkownik zatrzymał za daleko if ((iDrivigFlags & moveDoorOpened) == 0) - { // drzwi otwiera� jednorazowo - iDrivigFlags |= moveDoorOpened; // nie wykonywa� drugi raz + { // drzwi otwierać jednorazowo + iDrivigFlags |= moveDoorOpened; // nie wykonywać drugi raz if (mvOccupied->DoorOpenCtrl == 1) //(mvOccupied->TrainType==dt_EZT) { // otwieranie drzwi w EZT - if (AIControllFlag) // tylko AI otwiera drzwi EZT, u�ytkownik + if (AIControllFlag) // tylko AI otwiera drzwi EZT, użytkownik // musi samodzielnie if (!mvOccupied->DoorLeftOpened && !mvOccupied->DoorRightOpened) @@ -910,8 +887,8 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN int p2 = int(floor(sSpeedTable[i].evEvent->ValueGet(2))) % 10; // p7=platform side (1:left, 2:right, 3:both) - int lewe = (iDirection > 0) ? 1 : 2; // je�li jedzie do - // ty�u, to drzwi + int lewe = (iDirection > 0) ? 1 : 2; // jeśli jedzie do + // tyłu, to drzwi // otwiera // odwrotnie int prawe = (iDirection > 0) ? 2 : 1; @@ -919,70 +896,70 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN mvOccupied->DoorLeft(true); if (p2 & prawe) mvOccupied->DoorRight(true); - // if (p2&3) //�eby jeszcze poczeka� chwil�, zanim + // if (p2&3) //żeby jeszcze poczekał chwilę, zanim // zamknie - // WaitingSet(10); //10 sekund (wzi�� z rozk�adu????) + // WaitingSet(10); //10 sekund (wziąć z rozkładu????) } } else - { // otwieranie drzwi w sk�adach wagonowych - docelowo wysy�a� - // komend� zezwolenia na otwarcie drzwi + { // otwieranie drzwi w składach wagonowych - docelowo wysyłać + // komendę zezwolenia na otwarcie drzwi int p7, lewe, prawe; // p7=platform side (1:left, 2:right, 3:both) p7 = int(floor(sSpeedTable[i].evEvent->ValueGet(2))) % - 10; // tu b�dzie jeszcze d�ugo�� peronu zaokr�glona do 10m + 10; // tu będzie jeszcze długość peronu zaokrąglona do 10m // (20m bezpieczniej, bo nie modyfikuje bitu 1) - TDynamicObject *p = pVehicles[0]; // pojazd na czole sk�adu + TDynamicObject *p = pVehicles[0]; // pojazd na czole składu while (p) - { // otwieranie drzwi w pojazdach - flaga zezwolenia by�a by + { // otwieranie drzwi w pojazdach - flaga zezwolenia była by // lepsza - lewe = (p->DirectionGet() > 0) ? 1 : 2; // je�li jedzie do - // ty�u, to drzwi + lewe = (p->DirectionGet() > 0) ? 1 : 2; // jeśli jedzie do + // tyłu, to drzwi // otwiera odwrotnie prawe = 3 - lewe; - p->MoverParameters->BatterySwitch(true); // wagony musz� - // mie� bateri� - // za��czon� do + p->MoverParameters->BatterySwitch(true); // wagony muszą + // mieć baterię + // załączoną do // otwarcia // drzwi... if (p7 & lewe) p->MoverParameters->DoorLeft(true); if (p7 & prawe) p->MoverParameters->DoorRight(true); - p = p->Next(); // pojazd pod��czony z ty�u (patrz�c od - // czo�a) + p = p->Next(); // pojazd podłączony z tyłu (patrząc od + // czoła) } - // if (p7&3) //�eby jeszcze poczeka� chwil�, zanim zamknie - // WaitingSet(10); //10 sekund (wzi�� z rozk�adu????) + // if (p7&3) //żeby jeszcze poczekał chwilę, zanim zamknie + // WaitingSet(10); //10 sekund (wziąć z rozkładu????) } if (fStopTime > - -5) // na ko�cu rozk�adu si� ustawia 60s i tu by by�o skr�cenie - WaitingSet(10); // 10 sekund (wzi�� z rozk�adu????) - czekanie - // niezale�ne od sposobu obs�ugi drzwi, bo - // op��nia r�wnie� kierownika + -5) // na końcu rozkładu się ustawia 60s i tu by było skrócenie + WaitingSet(10); // 10 sekund (wziąć z rozkładu????) - czekanie + // niezależne od sposobu obsługi drzwi, bo + // opóźnia również kierownika } if (TrainParams->UpdateMTable( GlobalTime->hh, GlobalTime->mm, - asNextStop.substr(20, asNextStop.length()))) - { // to si� wykona tylko raz po zatrzymaniu na W4 + asNextStop.substr(19, asNextStop.length()))) + { // to się wykona tylko raz po zatrzymaniu na W4 if (TrainParams->CheckTrainLatency() < 0.0) - iDrivigFlags |= moveLate; // odnotowano sp��nienie + iDrivigFlags |= moveLate; // odnotowano spóźnienie else iDrivigFlags &= ~moveLate; // przyjazd o czasie - if (TrainParams->DirectionChange()) // je�li "@" w rozk�adzie, to + if (TrainParams->DirectionChange()) // jeśli "@" w rozkładzie, to // wykonanie dalszych komend { // wykonanie kolejnej komendy, nie dotyczy ostatniej stacji - if (iDrivigFlags & movePushPull) // SN61 ma si� te� nie rusza�, - // chyba �e ma wagony + if (iDrivigFlags & movePushPull) // SN61 ma się też nie ruszać, + // chyba że ma wagony { - iDrivigFlags |= moveStopHere; // EZT ma sta� przy peronie + iDrivigFlags |= moveStopHere; // EZT ma stać przy peronie if (OrderNextGet() != Change_direction) { OrderPush(Change_direction); // zmiana kierunku OrderPush(TrainParams->StationIndex < TrainParams->StationCount ? Obey_train : - Shunt); // to dalej wg rozk�adu + Shunt); // to dalej wg rozkładu } } else // a dla lokomotyw... @@ -990,206 +967,198 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN ~(moveStopPoint | moveStopHere); // pozwolenie na // przejechanie za W4 // przed czasem i nie - // ma sta� - JumpToNextOrder(); // przej�cie do kolejnego rozkazu (zmiana + // ma stać + JumpToNextOrder(); // przejście do kolejnego rozkazu (zmiana // kierunku, odczepianie) - iDrivigFlags &= ~moveStopCloser; // ma nie podje�d�a� pod W4 po + iDrivigFlags &= ~moveStopCloser; // ma nie podjeżdżać pod W4 po // przeciwnej stronie - sSpeedTable[i].iFlags = 0; // ten W4 nie liczy si� ju� zupe�nie - // (nie wy�le SetVelocity) - sSpeedTable[i].fVelNext = -1; // jecha� - continue; // nie analizowa� pr�dko�ci + sSpeedTable[i].iFlags = 0; // ten W4 nie liczy się już zupełnie + // (nie wyśle SetVelocity) + sSpeedTable[i].fVelNext = -1; // jechać + continue; // nie analizować prędkości } } if (OrderCurrentGet() == Shunt) { - OrderNext(Obey_train); // uruchomi� jazd� poci�gow� - CheckVehicles(); // zmieni� �wiat�a + OrderNext(Obey_train); // uruchomić jazdę pociągową + CheckVehicles(); // zmienić światła } if (TrainParams->StationIndex < TrainParams->StationCount) - { // je�li s� dalsze stacje, czekamy do godziny odjazdu - + { // jeśli są dalsze stacje, czekamy do godziny odjazdu + if (TrainParams->IsTimeToGo(GlobalTime->hh, GlobalTime->mm)) - { // z dalsz� akcj� czekamy do godziny odjazdu - /* potencjalny problem z ruszaniem z w4 - if (TrainParams->CheckTrainLatency() < 0) - WaitingSet(20); //Jak sp��niony to czeka 20s - */ - // iDrivigFlags|=moveLate1; //oflagowa�, gdy odjazd ze - // sp��nieniem, b�dzie jecha� forsowniej + { // z dalszą akcją czekamy do godziny odjazdu + /* potencjalny problem z ruszaniem z w4 + if (TrainParams->CheckTrainLatency() < 0) + WaitingSet(20); //Jak spóźniony to czeka 20s + */ + // iDrivigFlags|=moveLate1; //oflagować, gdy odjazd ze + // spóźnieniem, będzie jechał forsowniej fLastStopExpDist = mvOccupied->DistCounter + 0.050 + 0.001 * fLength; // przy jakim dystansie (stanie licznika) - // ma przesun�� na nast�pny post�j - // Controlled-> //zapisa� odleg�o�� do przejechania - TrainParams->StationIndexInc(); // przej�cie do nast�pnej - asNextStop = - TrainParams - ->NextStop(); // pobranie kolejnego miejsca zatrzymania -// TableClear(); //aby od nowa sprawdzi�o W4 z inn� nazw� ju� - to nie jest dobry pomys� + // ma przesunąć na następny postój + // Controlled-> //zapisać odległość do przejechania + TrainParams->StationIndexInc(); // przejście do następnej + asNextStop = TrainParams->NextStop(); // pobranie kolejnego miejsca zatrzymania +// TableClear(); //aby od nowa sprawdziło W4 z inną nazwą już - to nie jest dobry pomysł #if LOGSTOPS WriteLog(pVehicle->asName + " as " + TrainParams->TrainName + ": at " + std::to_string(GlobalTime->hh) + ":" + std::to_string(GlobalTime->mm) + " next " + asNextStop); // informacja #endif - if (int(floor(sSpeedTable[i].evEvent->ValueGet(1))) & 1) - iDrivigFlags |= moveStopHere; // nie podje�d�a� do semafora, - // je�li droga nie jest wolna - else - iDrivigFlags &= ~moveStopHere; // po czasie jed� dalej - iDrivigFlags |= moveStopCloser; // do nast�pnego W4 podjecha� - // blisko (z doci�ganiem) - iDrivigFlags &= ~moveStartHorn; // bez tr�bienia przed odjazdem + if (int(floor(sSpeedTable[i].evEvent->ValueGet(1))) & 1) + iDrivigFlags |= moveStopHere; // nie podjeżdżać do semafora, + // jeśli droga nie jest wolna + else + iDrivigFlags &= ~moveStopHere; //po czasie jedź dalej + iDrivigFlags |= moveStopCloser; // do następnego W4 podjechać + // blisko (z dociąganiem) + iDrivigFlags &= ~moveStartHorn; // bez trąbienia przed odjazdem sSpeedTable[i].iFlags = - 0; // nie liczy si� ju� zupe�nie (nie wy�le SetVelocity) - sSpeedTable[i].fVelNext = -1; // mo�na jecha� za W4 - if (go == cm_Unknown) // je�li nie by�o komendy wcze�niej - go = cm_Ready; // got�w do odjazdu z W4 (semafor mo�e - // zatrzyma�) - if (tsGuardSignal) // je�li mamy g�os kierownika, to odegra� + 0; // nie liczy się już zupełnie (nie wyśle SetVelocity) + sSpeedTable[i].fVelNext = -1; // można jechać za W4 + if (go == cm_Unknown) // jeśli nie było komendy wcześniej + go = cm_Ready; // gotów do odjazdu z W4 (semafor może + // zatrzymać) + if (tsGuardSignal) // jeśli mamy głos kierownika, to odegrać iDrivigFlags |= moveGuardSignal; - continue; // nie analizowa� pr�dko�ci + continue; // nie analizować prędkości } // koniec startu z zatrzymania - } // koniec obs�ugi pocz�tkowych stacji + } // koniec obsługi początkowych stacji else - { // je�li dojechali�my do ko�ca rozk�adu + { // jeśli dojechaliśmy do końca rozkładu #if LOGSTOPS WriteLog(pVehicle->asName + " as " + TrainParams->TrainName + ": at " + std::to_string(GlobalTime->hh) + ":" + std::to_string(GlobalTime->mm) + " end of route."); // informacja #endif - asNextStop = TrainParams->NextStop(); // informacja o ko�cu trasy - TrainParams->NewName("none"); // czyszczenie nieaktualnego rozk�adu - // TableClear(); //aby od nowa sprawdzi�o W4 z inn� nazw� ju� - to - // nie jest dobry pomys� + asNextStop = TrainParams->NextStop(); // informacja o końcu trasy + TrainParams->NewName("none"); // czyszczenie nieaktualnego rozkładu + // TableClear(); //aby od nowa sprawdziło W4 z inną nazwą już - to + // nie jest dobry pomysł iDrivigFlags &= ~(moveStopCloser | - moveStopPoint); // ma nie podje�d�a� pod W4 i ma je pomija� + moveStopPoint); // ma nie podjeżdżać pod W4 i ma je pomijać sSpeedTable[i].iFlags = - 0; // W4 nie liczy si� ju� (nie wy�le SetVelocity) - sSpeedTable[i].fVelNext = -1; // mo�na jecha� za W4 - fLastStopExpDist = -1.0f; // nie ma rozk�adu, nie ma usuwania stacji - WaitingSet(60); // tak ze 2 minuty, a� wszyscy wysi�d� + 0; // W4 nie liczy się już (nie wyśle SetVelocity) + sSpeedTable[i].fVelNext = -1; // można jechać za W4 + fLastStopExpDist = -1.0f; // nie ma rozkładu, nie ma usuwania stacji + WaitingSet(60); // tak ze 2 minuty, aż wszyscy wysiądą JumpToNextOrder(); // wykonanie kolejnego rozkazu (Change_direction // albo Shunt) - iDrivigFlags |= moveStopHere | moveStartHorn; // ma si� nie rusza� - // a� do momentu - // podania sygna�u - continue; // nie analizowa� pr�dko�ci - } // koniec obs�ugi ostatniej stacji + iDrivigFlags |= moveStopHere | moveStartHorn; // ma się nie ruszać + // aż do momentu + // podania sygnału + continue; // nie analizować prędkości + } // koniec obsługi ostatniej stacji } // if (MoverParameters->Vel==0.0) - } // koniec obs�ugi zatrzymania na W4 - } // koniec warunku pomijania W4 podczas zmiany czo�a + } // koniec obsługi zatrzymania na W4 + } // koniec warunku pomijania W4 podczas zmiany czoła else - { // skoro pomijanie, to jecha� i ignorowa� W4 - sSpeedTable[i].iFlags = 0; // W4 nie liczy si� ju� (nie zatrzymuje jazdy) + { // skoro pomijanie, to jechać i ignorować W4 + sSpeedTable[i].iFlags = 0; // W4 nie liczy się już (nie zatrzymuje jazdy) sSpeedTable[i].fVelNext = -1; - continue; // nie analizowa� pr�dko�ci + continue; // nie analizować prędkości } - } // koniec obs�ugi W4 - v = sSpeedTable[i].fVelNext; // odczyt pr�dko�ci do zmiennej pomocniczej + } // koniec obsługi W4 + v = sSpeedTable[i].fVelNext; // odczyt prędkości do zmiennej pomocniczej if (sSpeedTable[i].iFlags & - spSwitch) // zwrotnice s� usuwane z tabelki dopiero po zjechaniu z nich + spSwitch) // zwrotnice są usuwane z tabelki dopiero po zjechaniu z nich iDrivigFlags |= moveSwitchFound; // rozjazd z przodu/pod ogranicza np. sens skanowania wstecz - else if (sSpeedTable[i].iFlags & spEvent) // W4 mo�e si� deaktywowa� - { // je�eli event, mo�e by� potrzeba wys�ania komendy, aby ruszy� - // sprawdzanie event�w pasywnych mini�tych + else if (sSpeedTable[i].iFlags & spEvent) // W4 może się deaktywować + { // jeżeli event, może być potrzeba wysłania komendy, aby ruszył + // 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 (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 + 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 } if (sSpeedTable[i].fDist > 0.0 && sSpeedTable[i].IsProperSemaphor(OrderCurrentGet())) { if (!sSemNext) { - sSemNext = &sSpeedTable[i]; // je�li jest mieni�ty poprzedni - // 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()); + sSemNext = &sSpeedTable[i]; // jeśli jest mienięty poprzedni + // 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 && sSpeedTable[i].fVelNext == 0)) sSemNextStop = &sSpeedTable[i]; - } + } if (sSpeedTable[i].iFlags & spOutsideStation) - { // je�li W5, to reakcja zale�na od trybu jazdy + { // jeśli W5, to reakcja zależna od trybu jazdy if (OrderCurrentGet() & Obey_train) - { // w trybie poci�gowym: mo�na przyspieszy� do wskazanej pr�dko�ci (po - // zjechaniu z rozjazd�w) - v = -1.0; // ignorowa�? - // TODO trzeba zmieni� przypisywanie VelSignal na VelSignalLast - if (sSpeedTable[i].fDist < 0.0) // je�li wska�nik zosta� mini�ty + { // w trybie pociągowym: można przyspieszyć do wskazanej prędkości (po + // zjechaniu z rozjazdów) + v = -1.0; // ignorować? +//TODO trzeba zmienić przypisywanie VelSignal na VelSignalLast + if (sSpeedTable[i].fDist < 0.0) // jeśli wskaźnik został minięty { - VelSignalLast = v; // ustawienie pr�dko�ci na -1 - // iStationStart=TrainParams->StationIndex; //zaktualizowa� - // wy�wietlanie rozk�adu + VelSignalLast = v; //ustawienie prędkości na -1 + // iStationStart=TrainParams->StationIndex; //zaktualizować + // wyświetlanie rozkładu } - else if (!(iDrivigFlags & moveSwitchFound)) // je�li rozjazdy ju� mini�te - VelSignalLast = v; //!!! to te� koniec ograniczenia + else if (!(iDrivigFlags & moveSwitchFound)) // jeśli rozjazdy już minięte + VelSignalLast = v; //!!! to też koniec ograniczenia } else - { // w trybie manewrowym: skanowa� od niego wstecz, stan�� po wyjechaniu za - // sygnalizator i zmieni� kierunek - v = 0.0; // zmiana kierunku mo�e by� podanym sygna�em, ale wypada�o by - // zmieni� �wiat�o wcze�niej - if (!(iDrivigFlags & moveSwitchFound)) // je�li nie ma rozjazdu + { // w trybie manewrowym: skanować od niego wstecz, stanąć po wyjechaniu za + // sygnalizator i zmienić kierunek + v = 0.0; // zmiana kierunku może być podanym sygnałem, ale wypadało by + // zmienić światło wcześniej + if (!(iDrivigFlags & moveSwitchFound)) // jeśli nie ma rozjazdu iDrivigFlags |= moveTrackEnd; // to dalsza jazda trwale ograniczona (W5, // koniec toru) } } else if (sSpeedTable[i].iFlags & spStopOnSBL) - { // je�li S1 na SBL - if (mvOccupied->Vel < 2.0) // stan�� nie musi, ale zwolni� przynajmniej - if (sSpeedTable[i].fDist < fMaxProximityDist) // jest w maksymalnym zasi�gu + { // jeśli S1 na SBL + if (mvOccupied->Vel < 2.0) // stanąć nie musi, ale zwolnić przynajmniej + if (sSpeedTable[i].fDist < fMaxProximityDist) // jest w maksymalnym zasięgu { eSignSkip = sSpeedTable[i] - .evEvent; // to mo�na go pomin�� (wzi�� drug� pr�dkos�) - iDrivigFlags |= moveVisibility; // jazda na widoczno�� - skanowa� - // mo�liwo�� kolizji i nie podje�d�a� + .evEvent; // to można go pominąć (wziąć drugą prędkosć) + iDrivigFlags |= moveVisibility; // jazda na widoczność - skanować + // możliwość kolizji i nie podjeżdżać // zbyt blisko - // usun�� flag� po podjechaniu blisko semafora zezwalaj�cego na jazd� - // ostro�nie interpretowa� sygna�y - semafor mo�e zezwala� na jazd� - // poci�gu z przodu! + // usunąć flagę po podjechaniu blisko semafora zezwalającego na jazdę + // ostrożnie interpretować sygnały - semafor może zezwalać na jazdę + // pociągu z przodu! } - if (eSignSkip != sSpeedTable[i].evEvent) // je�li ten SBL nie jest do pomini�cia - // TODO sprawdzi� do kt�rej zmiennej jest przypisywane v i zmieni� to tutaj - v = sSpeedTable[i].evEvent->ValueGet(1); // to ma 0 odczytywa� + if (eSignSkip != sSpeedTable[i].evEvent) // jeśli ten SBL nie jest do pominięcia + // TODO sprawdzić do której zmiennej jest przypisywane v i zmienić to tutaj + v = sSpeedTable[i].evEvent->ValueGet(1); // to ma 0 odczytywać } else if (sSpeedTable[i].IsProperSemaphor(OrderCurrentGet())) { // 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 - d_to_next_sem = Min0R(sSpeedTable[i].fDist, d_to_next_sem); - } - if (sSpeedTable[i].fDist <= d_to_next_sem) - { - VelSignalNext = sSpeedTable[i].fVelNext; - } + 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 + d_to_next_sem = Min0R(sSpeedTable[i].fDist, d_to_next_sem); + } + if (sSpeedTable[i].fDist <= d_to_next_sem) + { + VelSignalNext = sSpeedTable[i].fVelNext; + } } else if (sSpeedTable[i].iFlags & spRoadVel) { // to W6 @@ -1198,296 +1167,276 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN } else if (sSpeedTable[i].iFlags & spSectionVel) { // to W27 - if (sSpeedTable[i].fDist < 0) // teraz trzeba sprawdzi� inne warunki + if (sSpeedTable[i].fDist < 0) // teraz trzeba sprawdzić inne warunki { 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 + 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 } else if (sSpeedTable[i].fSectionVelocityDist < 0.0) - { // ograniczenie obowi�zuj�ce do nast�pnego - if (sSpeedTable[i].fVelNext == - Global::Min0RSpeed(sSpeedTable[i].fVelNext, VelLimitLast) && + { // ograniczenie obowiązujące do następnego + if (sSpeedTable[i].fVelNext == Global::Min0RSpeed(sSpeedTable[i].fVelNext, VelLimitLast) && sSpeedTable[i].fVelNext != VelLimitLast) - { // je�li ograniczenie jest mniejsze ni� obecne to obowi�zuje od zaraz + { // jeśli ograniczenie jest mniejsze niż obecne to obowiązuje od zaraz VelLimitLast = sSpeedTable[i].fVelNext; } else if (sSpeedTable[i].fDist < -fLength) - { // je�li wi�ksze to musi wyjecha� za poprzednie + { // 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� + 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ć } } else - { // je�li wi�ksze to ograniczenie ma swoj� d�ugo�� - if (sSpeedTable[i].fVelNext == - Global::Min0RSpeed(sSpeedTable[i].fVelNext, VelLimitLast) && + { // jeśli większe to ograniczenie ma swoją długość + if (sSpeedTable[i].fVelNext == Global::Min0RSpeed(sSpeedTable[i].fVelNext, VelLimitLast) && sSpeedTable[i].fVelNext != VelLimitLast) - { // je�li ograniczenie jest mniejsze ni� obecne to obowi�zuje od zaraz + { // jeśli ograniczenie jest mniejsze niż obecne to obowiązuje od zaraz VelLimitLast = sSpeedTable[i].fVelNext; } - else if (sSpeedTable[i].fDist < -fLength && - sSpeedTable[i].fVelNext != VelLimitLast) - { // je�li wi�ksze to musi wyjecha� za poprzednie + else if (sSpeedTable[i].fDist < -fLength && sSpeedTable[i].fVelNext != VelLimitLast) + { // jeśli większe to musi wyjechać za poprzednie VelLimitLast = sSpeedTable[i].fVelNext; } - else if (sSpeedTable[i].fDist < - -fLength - sSpeedTable[i].fSectionVelocityDist) + 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� + 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ć } } } } - // sprawdzenie event�w pasywnych przed nami + //sprawdzenie eventów pasywnych przed nami if ((mvOccupied->CategoryFlag & 1) ? sSpeedTable[i].fDist > pVehicles[0]->fTrackBlock - 20.0 : - false) // jak sygna� jest dalej ni� zawalidroga - v = 0.0; // to mo�e by� podany dla tamtego: jecha� tak, jakby tam stop by� + false) // jak sygnał jest dalej niż zawalidroga + v = 0.0; // to może być podany dla tamtego: jechać tak, jakby tam stop był else - { // zawalidrogi nie ma (albo pojazd jest samochodem), sprawdzi� sygna� - if (sSpeedTable[i].iFlags & - spShuntSemaphor) // je�li Tm - w zasadzie to sprawdzi� - // komend�! - { // je�li podana pr�dko�� manewrowa + { // zawalidrogi nie ma (albo pojazd jest samochodem), sprawdzić sygnał + if (sSpeedTable[i].iFlags & spShuntSemaphor) // jeśli Tm - w zasadzie to sprawdzić + // komendę! + { // jeśli podana prędkość manewrowa if ((OrderCurrentGet() & Obey_train) ? v == 0.0 : false) - { // je�li tryb poci�gowy a tarcze ma ShuntVelocity 0 0 - v = -1; // ignorowa�, chyba �e pr�dko�� stanie si� niezerowa + { // jeśli tryb pociągowy a tarcze ma ShuntVelocity 0 0 + v = -1; // ignorować, chyba że prędkość stanie się niezerowa if (sSpeedTable[i].iFlags & spElapsed) // a jak przejechana - sSpeedTable[i].iFlags = 0; // to mo�na usun��, bo podstawowy automat + sSpeedTable[i].iFlags = 0; // to można usunąć, bo podstawowy automat // usuwa tylko niezerowe } - else if (go == cm_Unknown) // je�li jeszcze nie ma komendy - if (v != 0.0) // komenda jest tylko gdy ma jecha�, bo stoi na podstawie + else if (go == cm_Unknown) // jeśli jeszcze nie ma komendy + if (v != 0.0) // komenda jest tylko gdy ma jechać, bo stoi na podstawie // tabelki - { // je�li nie by�o komendy wcze�niej - pierwsza si� liczy - ustawianie + { // jeśli nie było komendy wcześniej - pierwsza się liczy - ustawianie // VelSignal - go = cm_ShuntVelocity; // w trybie poci�gowym tylko je�li w��cza + go = cm_ShuntVelocity; // w trybie pociągowym tylko jeśli włącza // tryb manewrowy (v!=0.0) - // Ra 2014-06: (VelSignal) nie mo�e by� tu ustawiane, bo Tm mo�e by� + // Ra 2014-06: (VelSignal) nie może być tu ustawiane, bo Tm może być // daleko - // VelSignal=v; //nie do ko�ca tak, to jest druga pr�dko�� + // VelSignal=v; //nie do końca tak, to jest druga prędkość if (VelSignal == 0.0) - VelSignal = v; // aby stoj�cy ruszy� - if (sSpeedTable[i].fDist < 0.0) // je�li przejechany + VelSignal = v; // aby stojący ruszył + if (sSpeedTable[i].fDist < 0.0) // jeśli przejechany { - VelSignal = v; //!!! ustawienie, gdy przejechany jest lepsze ni� + VelSignal = v; //!!! ustawienie, gdy przejechany jest lepsze niż // wcale, ale to jeszcze nie to sSpeedTable[i].iFlags = - 0; // to mo�na usun�� (nie mog� by� usuwane w skanowaniu) + 0; // to można usunąć (nie mogą być usuwane w skanowaniu) } } } - else if (!(sSpeedTable[i].iFlags & - spSectionVel)) // je�li jaki� event pasywny ale nie ograniczenie - if (go == - cm_Unknown) // je�li nie by�o komendy wcze�niej - pierwsza si� liczy - // - ustawianie VelSignal - if (v < 0.0 ? true : - v >= 1.0) // bo warto�� 0.1 s�u�y do hamowania tylko + else if (!(sSpeedTable[i].iFlags & spSectionVel)) //jeśli jakiś event pasywny ale nie ograniczenie + if (go == cm_Unknown) // jeśli nie było komendy wcześniej - pierwsza się liczy + // - ustawianie VelSignal + if (v < 0.0 ? true : v >= 1.0) // bo wartość 0.1 służy do hamowania tylko + { + go = cm_SetVelocity; // może odjechać + // Ra 2014-06: (VelSignal) nie może być tu ustawiane, bo semafor może + // być daleko + // VelSignal=v; //nie do końca tak, to jest druga prędkość; -1 nie + // wpisywać... + if (VelSignal == 0.0) + VelSignal = -1.0; // aby stojący ruszył + if (sSpeedTable[i].fDist < 0.0) // jeśli przejechany { - go = cm_SetVelocity; // mo�e odjecha� - // Ra 2014-06: (VelSignal) nie mo�e by� tu ustawiane, bo semafor - // mo�e - // by� daleko - // VelSignal=v; //nie do ko�ca tak, to jest druga pr�dko��; -1 nie - // wpisywa�... - if (VelSignal == 0.0) - VelSignal = -1.0; // aby stoj�cy ruszy� - if (sSpeedTable[i].fDist < 0.0) // je�li przejechany - { - 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 & spEvent) // je�li event - if ((sSpeedTable[i].evEvent != eSignSkip) ? - true : - (sSpeedTable[i].fVelNext != - 0.0)) // ale inny ni� ten, - // na kt�rym mini�to - // S1, chyba �e si� - // ju� zmieni�o - iDrivigFlags &= - ~moveVisibility; // sygna� zezwalaj�cy na - // jazd� wy��cza jazd� na - // widoczno�� (S1 na SBL) - - // usun�� je�li nie jest ograniczeniem pr�dko�ci - sSpeedTable[i].iFlags = - 0; // to mo�na usun�� (nie mog� by� usuwane w skanowaniu) - } + 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 & spEvent) // jeśli event + if ((sSpeedTable[i].evEvent != eSignSkip) ? + true : + (sSpeedTable[i].fVelNext != 0.0)) // ale inny niż ten, + // na którym minięto + // S1, chyba że się + // już zmieniło + iDrivigFlags &= ~moveVisibility; // sygnał zezwalający na + // jazdę wyłącza jazdę na + // widoczność (S1 na SBL) + + // usunąć jeśli nie jest ograniczeniem prędkości + sSpeedTable[i].iFlags = + 0; // to można usunąć (nie mogą być usuwane w skanowaniu) } - else if (sSpeedTable[i].evEvent->StopCommand()) - { // je�li pr�dko�� jest zerowa, a kom�rka zawiera komend� - eSignNext = sSpeedTable[i].evEvent; // dla informacji - if (iDrivigFlags & - moveStopHere) // je�li ma sta�, dostaje komend� od razu - go = cm_Command; // komenda z kom�rki, do wykonania po - // zatrzymaniu - else if (sSpeedTable[i].fDist <= - 20.0) // je�li ma doci�gn��, to niech - // doci�ga (moveStopCloser - // dotyczy doci�gania do W4, nie - // semafora) - go = cm_Command; // komenda z kom�rki, do wykonania po - // zatrzymaniu - } - } // je�li nie ma zawalidrogi - } // je�li event + } + else if (sSpeedTable[i].evEvent->StopCommand()) + { // jeśli prędkość jest zerowa, a komórka zawiera komendę + eSignNext = sSpeedTable[i].evEvent; // dla informacji + if (iDrivigFlags & + moveStopHere) // jeśli ma stać, dostaje komendę od razu + go = cm_Command; // komenda z komórki, do wykonania po zatrzymaniu + else if (sSpeedTable[i].fDist <= 20.0) // jeśli ma dociągnąć, to niech + // dociąga (moveStopCloser + // dotyczy dociągania do W4, nie + // semafora) + go = cm_Command; // komenda z komórki, do wykonania po zatrzymaniu + } + } // jeśli nie ma zawalidrogi + } // jeśli event if (v >= 0.0) - { // pozycje z pr�dko�ci� -1 mo�na spokojnie pomija� - d = sSpeedTable[i].fDist; + { // pozycje z prędkością -1 można spokojnie pomijać + d = sSpeedTable[i].fDist; if ((sSpeedTable[i].iFlags & spElapsed) ? false : - d > 0.0) // sygna� lub ograniczenie z przodu (+32=przejechane) - { // 2014-02: je�li stoi, a ma do przejechania kawa�ek, to niech jedzie + d > 0.0) // sygnał lub ograniczenie z przodu (+32=przejechane) + { // 2014-02: jeśli stoi, a ma do przejechania kawałek, to niech jedzie if ((mvOccupied->Vel == 0.0) ? ((sSpeedTable[i].iFlags & (spEnabled | spEvent | spPassengerStopPoint)) == (spEnabled | spEvent | spPassengerStopPoint)) && (d > fMaxProximityDist) : false) - a = (iDrivigFlags & moveStopCloser) ? fAcc : 0.0; // ma podjecha� bli�ej - + a = (iDrivigFlags & moveStopCloser) ? fAcc : 0.0; // ma podjechać bliżej - // czy na pewno w tym // miejscu taki warunek? else { a = (v * v - mvOccupied->Vel * mvOccupied->Vel) / - (25.92 * d); // przyspieszenie: ujemne, gdy trzeba hamowa� - if (d < fMinProximityDist) // jak jest ju� blisko + (25.92 * d); // przyspieszenie: ujemne, gdy trzeba hamować + if (d < fMinProximityDist) // jak jest już blisko if (v < fVelDes) - fVelDes = v; // ograniczenie aktualnej pr�dko�ci + fVelDes = v; // ograniczenie aktualnej prędkości } } - else if (sSpeedTable[i].iFlags & spTrack) // je�li tor - { // tor ogranicza pr�dko��, dop�ki ca�y sk�ad nie przejedzie, - // d=fLength+d; //zamiana na d�ugo�� liczon� do przodu - if (v >= 1.0) // EU06 si� zawiesza�o po dojechaniu na koniec toru postojowego + else if (sSpeedTable[i].iFlags & spTrack) // jeśli tor + { // tor ogranicza prędkość, dopóki cały skład nie przejedzie, + // d=fLength+d; //zamiana na długość liczoną do przodu + if (v >= 1.0) // EU06 się zawieszało po dojechaniu na koniec toru postojowego if (d < -fLength) - continue; // zap�tlenie, je�li ju� wyjecha� za ten odcinek + continue; // zapętlenie, jeśli już wyjechał za ten odcinek if (v < fVelDes) fVelDes = - v; // ograniczenie aktualnej pr�dko�ci a� do wyjechania za ograniczenie - // if (v==0.0) fAcc=-0.9; //hamowanie je�li stop + v; // ograniczenie aktualnej prędkości aż do wyjechania za ograniczenie + // if (v==0.0) fAcc=-0.9; //hamowanie jeśli stop continue; // i tyle wystarczy } - else // event trzyma tylko je�li VelNext=0, nawet po przejechaniu (nie powinno - // dotyczy� samochod�w?) + else // event trzyma tylko jeśli VelNext=0, nawet po przejechaniu (nie powinno + // dotyczyć samochodów?) a = (v == 0.0 ? -1.0 : fAcc); // ruszanie albo hamowanie if (a < fAcc && v == Min0R(v, fNext)) - { // mniejsze przyspieszenie to mniejsza mo�liwo�� rozp�dzenia si� albo konieczno�� + { // mniejsze przyspieszenie to mniejsza możliwość rozpędzenia się albo konieczność // hamowania - // je�li droga wolna, to mo�e by� a>1.0 i si� tu nie za�apuje + // jeśli droga wolna, to może być a>1.0 i się tu nie załapuje // if (mvOccupied->Vel>10.0) - fAcc = a; // zalecane przyspieszenie (nie musi by� uwzgl�dniane przez AI) - fNext = v; // istotna jest pr�dko�� na ko�cu tego odcinka - fDist = d; // dlugo�� odcinka + fAcc = a; // zalecane przyspieszenie (nie musi być uwzględniane przez AI) + fNext = v; // istotna jest prędkość na końcu tego odcinka + fDist = d; // dlugość odcinka } else if ((fAcc > 0) && (v > 0) && (v <= fNext)) - { // je�li nie ma wskaza� do hamowania, mo�na poda� drog� i pr�dko�� na jej ko�cu - fNext = v; // istotna jest pr�dko�� na ko�cu tego odcinka - fDist = d; // dlugo�� odcinka (kolejne pozycje mog� wyd�u�a� drog�, je�li - // pr�dko�� jest sta�a) + { // jeśli nie ma wskazań do hamowania, można podać drogę i prędkość na jej końcu + fNext = v; // istotna jest prędkość na końcu tego odcinka + fDist = d; // dlugość odcinka (kolejne pozycje mogą wydłużać drogę, jeśli + // prędkość jest stała) } } // if (v>=0.0) if (fNext >= 0.0) - { // je�li ograniczenie - if ((sSpeedTable[i].iFlags & (spEnabled | spEvent)) == - (spEnabled | spEvent)) // tylko sygna� przypisujemy - if (!eSignNext) // je�li jeszcze nic nie zapisane tam + { // jeśli ograniczenie + if ((sSpeedTable[i].iFlags & (spEnabled | spEvent)) == + (spEnabled | spEvent)) // tylko sygnał przypisujemy + if (!eSignNext) // jeśli jeszcze nic nie zapisane tam eSignNext = sSpeedTable[i].evEvent; // dla informacji if (fNext == 0.0) - break; // nie ma sensu analizowa� tabelki dalej + break; // nie ma sensu analizować tabelki dalej } } // 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 (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 (VelSignalLast >= 0.0) // analiza spisanych z tabelki ogranicze� i nadpisanie aktualnego - fVelDes = Min0R(fVelDes, VelSignalLast); - if (VelLimitLast >= 0.0) - fVelDes = Min0R(fVelDes, VelLimitLast); - if (VelRoad >= 0.0) - fVelDes = Min0R(fVelDes, VelRoad); - // nastepnego semafora albo zwrotnicy to uznajemy, �e mijamy W5 - FirstSemaphorDist = d_to_next_sem; // przepisanie znalezionej wartosci do zmiennej + if (VelSignalLast >= 0.0) //analiza spisanych z tabelki ograniczeń i nadpisanie aktualnego + fVelDes = Min0R(fVelDes, VelSignalLast); + if (VelLimitLast >= 0.0) + fVelDes = Min0R(fVelDes, VelLimitLast); + if (VelRoad >= 0.0) + fVelDes = Min0R(fVelDes, VelRoad); + // nastepnego semafora albo zwrotnicy to uznajemy, że mijamy W5 + FirstSemaphorDist = d_to_next_sem; // przepisanie znalezionej wartosci do zmiennej return go; }; 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 tabelki."); - int i, j, k = iLast - iFirst; // mo�e by� 15 albo 16 pozycji, ostatniej nie ma co sprawdza� +{ // 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 tabelki."); + int i, j, k = iLast - iFirst; // może być 15 albo 16 pozycji, ostatniej nie ma co sprawdzać if (k < 0) - k += iSpeedTableSize; // ilo�� pozycji do przeanalizowania + k += iSpeedTableSize; // ilość pozycji do przeanalizowania 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) ? (sSpeedTable[i].fVelNext < 0) && ((sSpeedTable[i].iFlags & 0xAB) == 0xA3) : true) - { // je�li jest to mini�ty (0x20) tor (0x03) do liczenia ci�ciw (0x80), a nie zwrotnica + { // jeśli jest to minięty (0x20) tor (0x03) do liczenia cięciw (0x80), a nie zwrotnica // (0x08) - for (; k > 0; --k, i = (i + 1) % iSpeedTableSize) - { - sSpeedTable[i] = sSpeedTable[(i + 1) % iSpeedTableSize]; // skopiowanie - if (&sSpeedTable[(i + 1) % iSpeedTableSize] == sSemNext) - sSemNext = &sSpeedTable[i]; // przeniesienie znacznika o semaforze - 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 + for (; k > 0; --k, i = (i + 1) % iSpeedTableSize) + { + sSpeedTable[i] = sSpeedTable[(i + 1) % iSpeedTableSize]; // skopiowanie + if (&sSpeedTable[(i + 1) % iSpeedTableSize] == sSemNext) + sSemNext = &sSpeedTable[i]; // przeniesienie znacznika o semaforze + 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; } } - // je�li powy�sze odtykane nie pomo�e, mo�na usun�� co� wi�cej, albo powi�kszy� tabelk� - TSpeedPos *t = new TSpeedPos[iSpeedTableSize + 16]; // zwi�kszenie + // jeśli powyższe odtykane nie pomoże, można usunąć coś więcej, albo powiększyć tabelkę + TSpeedPos *t = new TSpeedPos[iSpeedTableSize + 16]; // zwiększenie k = iLast - iFirst + 1; // tym razem wszystkie if (k < 0) - k += iSpeedTableSize; // ilo�� pozycji do przeanalizowania + k += iSpeedTableSize; // ilość pozycji do przeanalizowania for (j = -1, i = iFirst; k > 0; --k) - { // przepisywanie rekord�w iFirst..iLast na 0..k + { // przepisywanie rekordów iFirst..iLast na 0..k t[++j] = sSpeedTable[i]; if (&sSpeedTable[i] == sSemNext) sSemNext = &t[j]; // przeniesienie znacznika o semaforze if (&sSpeedTable[i] == sSemNextStop) sSemNextStop = &t[j]; // przeniesienie znacznika o semaforze - i = (i + 1) % iSpeedTableSize; // kolejna pozycja mog� by� zawini�ta + i = (i + 1) % iSpeedTableSize; // kolejna pozycja mogą być zawinięta } - iFirst = 0; // teraz b�dzie od zera + iFirst = 0; // teraz będzie od zera iLast = j; // ostatnia - delete[] sSpeedTable; // to ju� nie potrzebne + delete[] sSpeedTable; // to już nie potrzebne sSpeedTable = t; // bo jest nowe iSpeedTableSize += 16; - if (Global::iWriteLogEnabled & 8) - WriteLog("Tabelka powi�kszona do " + std::to_string(iSpeedTableSize) + " pozycji"); + if (Global::iWriteLogEnabled & 8) + WriteLog("Tabelka powiększona do "+std::to_string(iSpeedTableSize)+" pozycji"); }; //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- TController::TController(bool AI, TDynamicObject *NewControll, bool InitPsyche, - bool primary // czy ma aktywnie prowadzi�? + bool primary // czy ma aktywnie prowadzić? ) { iEngineActive = 0; @@ -1495,27 +1444,27 @@ TController::TController(bool AI, TDynamicObject *NewControll, bool InitPsyche, ElapsedTime = 0.0; // inicjalizacja zmiennych Psyche = InitPsyche; - VelDesired = 0.0; // pr�dkos� pocz�tkowa + VelDesired = 0.0; // prędkosć początkowa VelforDriver = -1; LastReactionTime = 0.0; HelpMeFlag = false; - // fProximityDist=1; //nie u�ywane + // fProximityDist=1; //nie używane ActualProximityDist = 1; - FirstSemaphorDist = 10000.0; + FirstSemaphorDist = 10000.0; vCommandLocation.x = 0; vCommandLocation.y = 0; vCommandLocation.z = 0; - VelSignal = 0.0; // normalnie na pocz�tku ma sta�, no chyba �e jedzie - VelLimit = -1.0; // brak ograniczenia pr�dko�ci + VelSignal = 0.0; // normalnie na początku ma stać, no chyba że jedzie + VelLimit = -1.0; // brak ograniczenia prędkości VelNext = 120.0; VelLimitLast = -1.0; // ostatnie ograniczenie bez ograniczenia - VelSignalLast = -1.0; // ostatni semafor te� bez ograniczenia - VelRoad = -1.0; // pr�dko�� drogowa bez ograniczenia + VelSignalLast = -1.0; // ostatni semafor też bez ograniczenia + VelRoad = -1.0; // prędkość drogowa bez ograniczenia AIControllFlag = AI; pVehicle = NewControll; - ControllingSet(); // utworzenie po��czenia do sterowanego pojazdu + ControllingSet(); // utworzenie połączenia do sterowanego pojazdu pVehicles[0] = pVehicle->GetFirstDynamic(0); // pierwszy w kierunku jazdy (Np. Pc1) - pVehicles[1] = pVehicle->GetFirstDynamic(1); // ostatni w kierunku jazdy (ko�c�wki) + pVehicles[1] = pVehicle->GetFirstDynamic(1); // ostatni w kierunku jazdy (końcówki) /* switch (mvOccupied->CabNo) { @@ -1525,20 +1474,20 @@ TController::TController(bool AI, TDynamicObject *NewControll, bool InitPsyche, } */ iDirection = 0; - iDirectionOrder = mvOccupied->CabNo; // 1=do przodu (w kierunku sprz�gu 0) + iDirectionOrder = mvOccupied->CabNo; // 1=do przodu (w kierunku sprzęgu 0) VehicleName = mvOccupied->Name; // TrainParams=NewTrainParams; // if (TrainParams) // asNextStop=TrainParams->NextStop(); // else - TrainParams = new TTrainParameters("none"); // rozk�ad jazdy + TrainParams = new TTrainParameters("none"); // rozkład jazdy // OrderCommand=""; // OrderValue=0; OrdersClear(); MaxVelFlag = false; - MinVelFlag = false; // Ra: to nie jest u�ywane + MinVelFlag = false; // Ra: to nie jest używane iDriverFailCount = 0; - Need_TryAgain = false; // true, je�li druga pozycja w elektryku nie za�apa�a + Need_TryAgain = false; // true, jeśli druga pozycja w elektryku nie załapała Need_BrakeRelease = true; deltalog = 0.05; // 1.0; @@ -1571,74 +1520,74 @@ TController::TController(bool AI, TDynamicObject *NewControll, bool InitPsyche, */ // VelMargin=2; //Controlling->Vmax*0.015; - fWarningDuration = 0.0; // nic do wytr�bienia - WaitingExpireTime = 31.0; // tyle ma czeka�, zanim si� ruszy + fWarningDuration = 0.0; // nic do wytrąbienia + WaitingExpireTime = 31.0; // tyle ma czekać, zanim się ruszy WaitingTime = 0.0; - fMinProximityDist = 30.0; // stawanie mi�dzy 30 a 60 m przed przeszkod� + fMinProximityDist = 30.0; // stawanie między 30 a 60 m przed przeszkodą fMaxProximityDist = 50.0; - iVehicleCount = -2; // warto�� neutralna + iVehicleCount = -2; // wartość neutralna // Prepare2press=false; //bez dociskania - eStopReason = stopSleep; // na pocz�tku �pi + eStopReason = stopSleep; // na początku śpi fLength = 0.0; fMass = 0.0; //[kg] - eSignNext = NULL; // sygna� zmieniaj�cy pr�dko��, do pokazania na [F2] - sSemNext = NULL; // pierwszy semafor w przebiegu - sSemNextStop = NULL; // pierwszy semafor z sygna�em st�j - fShuntVelocity = 40; // domy�lna pr�dko�� manewrowa - fStopTime = 0.0; // czas postoju przed dalsz� jazd� (np. na przystanku) - iDrivigFlags = moveStopPoint; // podjed� do W4 mo�liwie blisko - iDrivigFlags |= moveStopHere; // nie podje�d�aj do semafora, je�li droga nie jest wolna - iDrivigFlags |= moveStartHorn; // podaj sygna� po podaniu wolnej drogi + eSignNext = NULL; // sygnał zmieniający prędkość, do pokazania na [F2] + sSemNext = NULL; // pierwszy semafor w przebiegu + sSemNextStop = NULL; // pierwszy semafor z sygnałem stój + fShuntVelocity = 40; // domyślna prędkość manewrowa + fStopTime = 0.0; // czas postoju przed dalszą jazdą (np. na przystanku) + iDrivigFlags = moveStopPoint; // podjedź do W4 możliwie blisko + iDrivigFlags |= moveStopHere; // nie podjeżdżaj do semafora, jeśli droga nie jest wolna + iDrivigFlags |= moveStartHorn; // podaj sygnał po podaniu wolnej drogi if (primary) - iDrivigFlags |= movePrimary; // aktywnie prowadz�ce pojazd + iDrivigFlags |= movePrimary; // aktywnie prowadzące pojazd Ready = false; if (mvOccupied->CategoryFlag & 2) { // samochody: na podst. http://www.prawko-kwartnik.info/hamowanie.html - // fDriverBraking=0.0065; //mno�one przez (v^2+40*v) [km/h] daje prawie drog� hamowania [m] - fDriverBraking = 0.03; // co� nie hamuj� te samochody zbyt dobrze - fDriverDist = 5.0; // 5m - zachowywany odst�p przed kolizj� - fVelPlus = 10.0; // dopuszczalne przekroczenie pr�dko�ci na ograniczeniu bez hamowania - fVelMinus = 2.0; // margines pr�dko�ci powoduj�cy za��czenie nap�du + // fDriverBraking=0.0065; //mnożone przez (v^2+40*v) [km/h] daje prawie drogę hamowania [m] + fDriverBraking = 0.03; // coś nie hamują te samochody zbyt dobrze + fDriverDist = 5.0; // 5m - zachowywany odstęp przed kolizją + fVelPlus = 10.0; // dopuszczalne przekroczenie prędkości na ograniczeniu bez hamowania + fVelMinus = 2.0; // margines prędkości powodujący załączenie napędu } else - { // poci�gi i statki - fDriverBraking = 0.06; // mno�one przez (v^2+40*v) [km/h] daje prawie drog� hamowania [m] - fDriverDist = 50.0; // 50m - zachowywany odst�p przed kolizj� - fVelPlus = 5.0; // dopuszczalne przekroczenie pr�dko�ci na ograniczeniu bez hamowania - fVelMinus = 5.0; // margines pr�dko�ci powoduj�cy za��czenie nap�du + { // pociągi i statki + fDriverBraking = 0.06; // mnożone przez (v^2+40*v) [km/h] daje prawie drogę hamowania [m] + fDriverDist = 50.0; // 50m - zachowywany odstęp przed kolizją + fVelPlus = 5.0; // dopuszczalne przekroczenie prędkości na ograniczeniu bez hamowania + fVelMinus = 5.0; // margines prędkości powodujący załączenie napędu } - SetDriverPsyche(); // na ko�cu, bo wymaga ustawienia zmiennych + SetDriverPsyche(); // na końcu, bo wymaga ustawienia zmiennych AccDesired = AccPreferred; - fVelMax = -1; // ustalenie pr�dko�ci dla sk�adu - fBrakeTime = 0.0; // po jakim czasie przekr�ci� hamulec + fVelMax = -1; // ustalenie prędkości dla składu + fBrakeTime = 0.0; // po jakim czasie przekręcić hamulec iVehicles = 0; // na wszelki wypadek iSpeedTableSize = 16; sSpeedTable = new TSpeedPos[iSpeedTableSize]; TableClear(); - iRadioChannel = 1; // numer aktualnego kana�u radiowego + iRadioChannel = 1; // numer aktualnego kanału radiowego fActionTime = 0.0; eAction = actSleep; tsGuardSignal = NULL; // komunikat od kierownika iGuardRadio = 0; // nie przez radio iStationStart = 0; // nic? - // fAccThreshold mo�e podlega� uczeniu si� - hamowanie powinno by� rejestrowane, a potem + // fAccThreshold może podlegać uczeniu się - hamowanie powinno być rejestrowane, a potem // analizowane fAccThreshold = - (mvOccupied->TrainType & dt_EZT) ? -0.6 : -0.2; // pr�g op��nienia dla zadzia�ania hamulca + (mvOccupied->TrainType & dt_EZT) ? -0.6 : -0.2; // próg opóźnienia dla zadziałania hamulca fLastStopExpDist = -1.0f; - iRouteWanted = 3; // powiedzmy, �e ma jecha� prosto (1=w lewo) - iCoupler = 0; // sprz�g; niezerowy gdy ma by� pod��czanie; samo pod��czanie w trybie Connect - // (wcze�niej mo�e by� np. Prepare_engine) - fOverhead1 = 3000.0; // informacja o napi�ciu w sieci trakcyjnej (0=brak drutu, zatrzymaj!) - fOverhead2 = -1.0; // informacja o sposobie jazdy (-1=normalnie, 0=bez pr�du, >0=z opuszczonym i - // ograniczeniem pr�dko�ci) - iOverheadZero = 0; // suma bitowa jezdy bezpr�dowej, bity ustawiane przez pojazdy z + iRouteWanted = 3; // powiedzmy, że ma jechać prosto (1=w lewo) + iCoupler = 0; // sprzęg; niezerowy gdy ma być podłączanie; samo podłączanie w trybie Connect + // (wcześniej może być np. Prepare_engine) + fOverhead1 = 3000.0; // informacja o napięciu w sieci trakcyjnej (0=brak drutu, zatrzymaj!) + fOverhead2 = -1.0; // informacja o sposobie jazdy (-1=normalnie, 0=bez prądu, >0=z opuszczonym i + // ograniczeniem prędkości) + iOverheadZero = 0; // suma bitowa jezdy bezprądowej, bity ustawiane przez pojazdy z // podniesionymi pantografami - iOverheadDown = 0; // suma bitowa opuszczenia pantograf�w, bity ustawiane przez pojazdy z + iOverheadDown = 0; // suma bitowa opuszczenia pantografów, bity ustawiane przez pojazdy z // podniesionymi pantografami - fAccDesiredAv = 0.0; // u�rednione przyspieszenie z kolejnych przeb�ysk�w �wiadomo�ci, �eby - // ograniczy� migotanie - fVoltage = 0.0; // u�rednione napi�cie sieci: przy spadku poni�ej warto�ci minimalnej op��ni� + fAccDesiredAv = 0.0; // uśrednione przyspieszenie z kolejnych przebłysków świadomości, żeby + // ograniczyć migotanie + fVoltage = 0.0; // uśrednione napięcie sieci: przy spadku poniżej wartości minimalnej opóźnić // rozruch o losowy czas }; @@ -1666,7 +1615,7 @@ TController::~TController() std::string TController::Order2Str(TOrders Order) { // zamiana kodu rozkazu na opis if (Order & Change_direction) - return "Change_direction"; // mo�e by� na�o�ona na inn� i wtedy ma priorytet + return "Change_direction"; // może być nałożona na inną i wtedy ma priorytet if (Order == Wait_for_orders) return "Wait_for_orders"; if (Order == Prepare_engine) @@ -1683,7 +1632,7 @@ std::string TController::Order2Str(TOrders Order) return "Release_engine"; if (Order == Jump_to_first_order) return "Jump_to_first_order"; - /* Ra: wersja ze switch nie dzia�a prawid�owo (czemu?) + /* Ra: wersja ze switch nie działa prawidłowo (czemu?) switch (Order) { Wait_for_orders: return "Wait_for_orders"; @@ -1699,14 +1648,14 @@ std::string TController::Order2Str(TOrders Order) } std::string TController::OrderCurrent() -{ // pobranie aktualnego rozkazu celem wy�wietlenia +{ // pobranie aktualnego rozkazu celem wyświetlenia return std::to_string(OrderPos) + ". " + Order2Str(OrderList[OrderPos]); }; void TController::OrdersClear() -{ // czyszczenie tabeli rozkaz�w na starcie albo po doj�ciu do ko�ca +{ // czyszczenie tabeli rozkazów na starcie albo po dojściu do końca OrderPos = 0; - OrderTop = 1; // szczyt stosu rozkaz�w + OrderTop = 1; // szczyt stosu rozkazów for (int b = 0; b < maxorders; b++) OrderList[b] = Wait_for_orders; #if LOGORDERS @@ -1715,16 +1664,16 @@ void TController::OrdersClear() }; void TController::Activation() -{ // umieszczenie obsady w odpowiednim cz�onie, wykonywane wy��cznie gdy steruje AI - iDirection = iDirectionOrder; // kierunek (wzgl�dem sprz�g�w pojazdu z AI) w�a�nie zosta� +{ // umieszczenie obsady w odpowiednim członie, wykonywane wyłącznie gdy steruje AI + iDirection = iDirectionOrder; // kierunek (względem sprzęgów pojazdu z AI) właśnie został // ustalony (zmieniony) if (iDirection) - { // je�li jest ustalony kierunek + { // jeśli jest ustalony kierunek TDynamicObject *old = pVehicle, *d = pVehicle; // w tym siedzi AI - TController *drugi; // jakby by�y dwa, to zamieni� miejscami, a nie robi� wycieku pami�ci + TController *drugi; // jakby były dwa, to zamienić miejscami, a nie robić wycieku pamięci // poprzez nadpisanie int brake = mvOccupied->LocalBrakePos; - while (mvControlling->MainCtrlPos) // samo zap�tlenie DecSpeed() nie wystarcza :/ + while (mvControlling->MainCtrlPos) // samo zapętlenie DecSpeed() nie wystarcza :/ DecSpeed(true); // wymuszenie zerowania nastawnika jazdy while (mvOccupied->ActiveDir < 0) mvOccupied->DirectionForward(); // kierunek na 0 @@ -1734,112 +1683,112 @@ void TController::Activation() ctrain_controll)) { mvControlling->MainSwitch( - false); // dezaktywacja czuwaka, je�li przej�cie do innego cz�onu - mvOccupied->DecLocalBrakeLevel(10); // zwolnienie hamulca w opuszczanym poje�dzie - // mvOccupied->BrakeLevelSet((mvOccupied->BrakeHandle==FVel6)?4:-2); //odci�cie na + false); // dezaktywacja czuwaka, jeśli przejście do innego członu + mvOccupied->DecLocalBrakeLevel(10); // zwolnienie hamulca w opuszczanym pojeździe + // mvOccupied->BrakeLevelSet((mvOccupied->BrakeHandle==FVel6)?4:-2); //odcięcie na // zaworze maszynisty, FVel6 po drugiej stronie nie luzuje mvOccupied->BrakeLevelSet( - mvOccupied->Handle->GetPos(bh_NP)); // odci�cie na zaworze maszynisty + mvOccupied->Handle->GetPos(bh_NP)); // odcięcie na zaworze maszynisty } - mvOccupied->ActiveCab = mvOccupied->CabNo; // u�ytkownik moze zmieni� ActiveCab wychodz�c + mvOccupied->ActiveCab = mvOccupied->CabNo; // użytkownik moze zmienić ActiveCab wychodząc mvOccupied->CabDeactivisation(); // tak jest w Train.cpp - // przej�cie AI na drug� stron� EN57, ET41 itp. + // przejście AI na drugą stronę EN57, ET41 itp. while (TestFlag(d->MoverParameters->Couplers[iDirection < 0 ? 1 : 0].CouplingFlag, ctrain_controll)) - { // je�li pojazd z przodu jest ukrotniony, to przechodzimy do niego + { // jeśli pojazd z przodu jest ukrotniony, to przechodzimy do niego d = iDirection * d->DirectionGet() < 0 ? d->Next() : - d->Prev(); // przechodzimy do nast�pnego cz�onu + d->Prev(); // przechodzimy do następnego członu if (d) { - drugi = d->Mechanik; // zapami�tanie tego, co ewentualnie tam siedzi, �eby w razie - // dw�ch zamieni� miejscami + drugi = d->Mechanik; // zapamiętanie tego, co ewentualnie tam siedzi, żeby w razie + // dwóch zamienić miejscami d->Mechanik = this; // na razie bilokacja d->MoverParameters->SetInternalCommand( - "", 0, 0); // usuni�cie ewentualnie zalegaj�cej komendy (Change_direction?) - if (d->DirectionGet() != pVehicle->DirectionGet()) // je�li s� przeciwne do siebie - iDirection = -iDirection; // to b�dziemy jecha� w drug� stron� wzgl�dem + "", 0, 0); // usunięcie ewentualnie zalegającej komendy (Change_direction?) + if (d->DirectionGet() != pVehicle->DirectionGet()) // jeśli są przeciwne do siebie + iDirection = -iDirection; // to będziemy jechać w drugą stronę względem // zasiedzianego pojazdu - pVehicle->Mechanik = drugi; // wsadzamy tego, co ewentualnie by� (podw�jna trakcja) - pVehicle->MoverParameters->CabNo = 0; // wy��czanie kabin po drodze - pVehicle->MoverParameters->ActiveCab = 0; // i zaznaczenie, �e nie ma tam nikogo - pVehicle = d; // a mechu ma nowy pojazd (no, cz�on) + pVehicle->Mechanik = drugi; // wsadzamy tego, co ewentualnie był (podwójna trakcja) + pVehicle->MoverParameters->CabNo = 0; // wyłączanie kabin po drodze + pVehicle->MoverParameters->ActiveCab = 0; // i zaznaczenie, że nie ma tam nikogo + pVehicle = d; // a mechu ma nowy pojazd (no, człon) } else - break; // jak koniec sk�adu, to mechanik dalej nie idzie + break; // jak koniec składu, to mechanik dalej nie idzie } if (pVehicle != old) - { // je�li zmieniony zosta� pojazd prowadzony - Global::pWorld->CabChange(old, pVehicle); // ewentualna zmiana kabiny u�ytkownikowi - ControllingSet(); // utworzenie po��czenia do sterowanego pojazdu (mo�e si� zmieni�) - + { // jeśli zmieniony został pojazd prowadzony + Global::pWorld->CabChange(old, pVehicle); // ewentualna zmiana kabiny użytkownikowi + ControllingSet(); // utworzenie połączenia do sterowanego pojazdu (może się zmienić) - // silnikowy dla EZT } if (mvControlling->EngineType == - DieselEngine) // dla 2Ls150 - przed ustawieniem kierunku - mo�na zmieni� tryb pracy + DieselEngine) // dla 2Ls150 - przed ustawieniem kierunku - można zmienić tryb pracy if (mvControlling->ShuntModeAllow) mvControlling->CurrentSwitch( (OrderList[OrderPos] & Shunt) || - (fMass > 224000.0)); // do tego na wzniesieniu mo�e nie da� rady na liniowym - // Ra: to prze��czanie poni�ej jest tu bez sensu + (fMass > 224000.0)); // do tego na wzniesieniu może nie dać rady na liniowym + // Ra: to przełączanie poniżej jest tu bez sensu mvOccupied->ActiveCab = - iDirection; // aktywacja kabiny w prowadzonym poje�dzie (silnikowy mo�e by� odwrotnie?) + iDirection; // aktywacja kabiny w prowadzonym pojeżdzie (silnikowy może być odwrotnie?) // mvOccupied->CabNo=iDirection; - // mvOccupied->ActiveDir=0; //�eby sam ustawi� kierunek - mvOccupied->CabActivisation(); // uruchomienie kabin w cz�onach + // mvOccupied->ActiveDir=0; //żeby sam ustawił kierunek + mvOccupied->CabActivisation(); // uruchomienie kabin w członach DirectionForward(true); // nawrotnik do przodu - if (brake) // hamowanie tylko je�li by� wcze�niej zahamowany (bo mo�liwe, �e jedzie!) - mvOccupied->IncLocalBrakeLevel(brake); // zahamuj jak wcze�niej - CheckVehicles(); // sprawdzenie sk�adu, AI zapali �wiat�a - TableClear(); // resetowanie tabelki skanowania tor�w + if (brake) // hamowanie tylko jeśli był wcześniej zahamowany (bo możliwe, że jedzie!) + mvOccupied->IncLocalBrakeLevel(brake); // zahamuj jak wcześniej + CheckVehicles(); // sprawdzenie składu, AI zapali światła + TableClear(); // resetowanie tabelki skanowania torów } }; void TController::AutoRewident() -{ // autorewident: nastawianie hamulc�w w sk�adzie - int r = 0, g = 0, p = 0; // ilo�ci wagon�w poszczeg�lnych typ�w - TDynamicObject *d = pVehicles[0]; // pojazd na czele sk�adu - // 1. Zebranie informacji o sk�adzie poci�gu � przej�cie wzd�u� sk�adu i odczyt parametr�w: - // � ilo�� wagon�w -> s� zliczane, wszystkich pojazd�w jest (iVehicles) - // � d�ugo�� (jako suma) -> jest w (fLength) - // � masa (jako suma) -> jest w (fMass) +{ // autorewident: nastawianie hamulców w składzie + int r = 0, g = 0, p = 0; // ilości wagonów poszczególnych typów + TDynamicObject *d = pVehicles[0]; // pojazd na czele składu + // 1. Zebranie informacji o składzie pociągu — przejście wzdłuż składu i odczyt parametrów: + // · ilość wagonów -> są zliczane, wszystkich pojazdów jest (iVehicles) + // · długość (jako suma) -> jest w (fLength) + // · masa (jako suma) -> jest w (fMass) while (d) - { // klasyfikacja pojazd�w wg BrakeDelays i mocy (licznik) + { // klasyfikacja pojazdów wg BrakeDelays i mocy (licznik) if (d->MoverParameters->Power < - 1) // - lokomotywa - Power>1 - ale mo�e by� nieczynna na ko�cu... + 1) // - lokomotywa - Power>1 - ale może być nieczynna na końcu... if (TestFlag(d->MoverParameters->BrakeDelays, bdelay_R)) ++r; // - wagon pospieszny - jest R else if (TestFlag(d->MoverParameters->BrakeDelays, bdelay_G)) ++g; // - wagon towarowy - jest G (nie ma R) else ++p; // - wagon osobowy - reszta (bez G i bez R) - d = d->Next(); // kolejny pojazd, pod��czony od ty�u (licz�c od czo�a) + d = d->Next(); // kolejny pojazd, podłączony od tyłu (licząc od czoła) } - // 2. Okre�lenie typu poci�gu i nastawy: - int ustaw; //+16 dla pasa�erskiego + // 2. Określenie typu pociągu i nastawy: + int ustaw; //+16 dla pasażerskiego if (r + g + p == 0) - ustaw = 16 + bdelay_R; // lokomotywa luzem (mo�e by� wielocz�onowa) + ustaw = 16 + bdelay_R; // lokomotywa luzem (może być wieloczłonowa) else - { // je�li s� wagony + { // jeśli są wagony ustaw = (g < min(4, r + p) ? 16 : 0); - if (ustaw) // je�li towarowe < Min(4, pospieszne+osobowe) - { // to sk�ad pasa�erski - nastawianie pasa�erskiego + if (ustaw) // jeśli towarowe < Min(4, pospieszne+osobowe) + { // to skład pasażerski - nastawianie pasażerskiego ustaw += (g && (r < g + p)) ? bdelay_P : bdelay_R; - // je�eli towarowe>0 oraz pospiesze<=towarowe+osobowe to P (0) + // jeżeli towarowe>0 oraz pospiesze<=towarowe+osobowe to P (0) // inaczej R (2) } else { // inaczej towarowy - nastawianie towarowego if ((fLength < 300.0) && (fMass < 600000.0)) //[kg] - ustaw |= bdelay_P; // je�eli d�ugo��<300 oraz masa<600 to P (0) + ustaw |= bdelay_P; // jeżeli długość<300 oraz masa<600 to P (0) else if ((fLength < 500.0) && (fMass < 1300000.0)) - ustaw |= bdelay_R; // je�eli d�ugo��<500 oraz masa<1300 to GP (2) + ustaw |= bdelay_R; // jeżeli długość<500 oraz masa<1300 to GP (2) else ustaw |= bdelay_G; // inaczej G (1) } - // zasadniczo na sieci PKP kilka lat temu na P/GP je�dzi�y tylko kontenerowce o - // rozk�adowej 90 km/h. Pozosta�e je�dzi�y 70 km/h i by�y nastawione na G. + // zasadniczo na sieci PKP kilka lat temu na P/GP jeździły tylko kontenerowce o + // rozkładowej 90 km/h. Pozostałe jeździły 70 km/h i były nastawione na G. } - d = pVehicles[0]; // pojazd na czele sk�adu - p = 0; // b�dziemy tu liczy� wagony od lokomotywy dla nastawy GP + d = pVehicles[0]; // pojazd na czele składu + p = 0; // będziemy tu liczyć wagony od lokomotywy dla nastawy GP while (d) { // 3. Nastawianie switch (ustaw) @@ -1848,206 +1797,204 @@ void TController::AutoRewident() d->MoverParameters->BrakeDelaySwitch(d->MoverParameters->Power > 1 ? bdelay_G : bdelay_P); break; - case bdelay_G: // towarowy G - wszystko na G, je�li nie ma to P (powinno si� wy��czy� + case bdelay_G: // towarowy G - wszystko na G, jeśli nie ma to P (powinno się wyłączyć // hamulec) d->MoverParameters->BrakeDelaySwitch( TestFlag(d->MoverParameters->BrakeDelays, bdelay_G) ? bdelay_G : bdelay_P); break; - case bdelay_R: // towarowy GP - lokomotywa oraz 5 pierwszych pojazd�w przy niej na G, reszta + case bdelay_R: // towarowy GP - lokomotywa oraz 5 pierwszych pojazdów przy niej na G, reszta // na P if (d->MoverParameters->Power > 1) { d->MoverParameters->BrakeDelaySwitch(bdelay_G); - p = 0; // a jak b�dzie druga w �rodku? + p = 0; // a jak będzie druga w środku? } else d->MoverParameters->BrakeDelaySwitch(++p <= 5 ? bdelay_G : bdelay_P); break; - case 16 + bdelay_R: // pasa�erski R - na R, je�li nie ma to P + case 16 + bdelay_R: // pasażerski R - na R, jeśli nie ma to P d->MoverParameters->BrakeDelaySwitch( TestFlag(d->MoverParameters->BrakeDelays, bdelay_R) ? bdelay_R : bdelay_P); break; - case 16 + bdelay_P: // pasa�erski P - wszystko na P + case 16 + bdelay_P: // pasażerski P - wszystko na P d->MoverParameters->BrakeDelaySwitch(bdelay_P); break; } - d = d->Next(); // kolejny pojazd, pod��czony od ty�u (licz�c od czo�a) + d = d->Next(); // kolejny pojazd, podłączony od tyłu (licząc od czoła) } }; bool TController::CheckVehicles(TOrders user) -{ // sprawdzenie stanu posiadanych pojazd�w w sk�adzie i zapalenie �wiate� - TDynamicObject *p; // roboczy wska�nik na pojazd - iVehicles = 0; // ilo�� pojazd�w w sk�adzie - int d = mvOccupied->DirAbsolute; // kt�ry sprz�g jest z przodu - if (!d) // je�li nie ma ustalonego kierunku +{ // sprawdzenie stanu posiadanych pojazdów w składzie i zapalenie świateł + TDynamicObject *p; // roboczy wskaźnik na pojazd + iVehicles = 0; // ilość pojazdów w składzie + int d = mvOccupied->DirAbsolute; // który sprzęg jest z przodu + if (!d) // jeśli nie ma ustalonego kierunku d = mvOccupied->CabNo; // to jedziemy wg aktualnej kabiny - iDirection = d; // ustalenie kierunku jazdy (powinno zrobi� PrepareEngine?) - d = d >= 0 ? 0 : 1; // kierunek szukania czo�a (numer sprz�gu) - pVehicles[0] = p = pVehicle->FirstFind(d); // pojazd na czele sk�adu - // liczenie pojazd�w w sk�adzie i ustalenie parametr�w - int dir = d = 1 - d; // a dalej b�dziemy zlicza� od czo�a do ty�u - fLength = 0.0; // d�ugo�� sk�adu do badania wyjechania za ograniczenie - fMass = 0.0; // ca�kowita masa do liczenia stycznej sk�adowej grawitacji - fVelMax = -1; // ustalenie pr�dko�ci dla sk�adu - bool main = true; // czy jest g��wnym steruj�cym - iDrivigFlags |= moveOerlikons; // zak�adamy, �e s� same Oerlikony - // Ra 2014-09: ustawi� moveMultiControl, je�li wszystkie s� w ukrotnieniu (i skrajne maj� - // kabin�?) + iDirection = d; // ustalenie kierunku jazdy (powinno zrobić PrepareEngine?) + d = d >= 0 ? 0 : 1; // kierunek szukania czoła (numer sprzęgu) + pVehicles[0] = p = pVehicle->FirstFind(d); // pojazd na czele składu + // liczenie pojazdów w składzie i ustalenie parametrów + int dir = d = 1 - d; // a dalej będziemy zliczać od czoła do tyłu + fLength = 0.0; // długość składu do badania wyjechania za ograniczenie + fMass = 0.0; // całkowita masa do liczenia stycznej składowej grawitacji + fVelMax = -1; // ustalenie prędkości dla składu + bool main = true; // czy jest głównym sterującym + iDrivigFlags |= moveOerlikons; // zakładamy, że są same Oerlikony + // Ra 2014-09: ustawić moveMultiControl, jeśli wszystkie są w ukrotnieniu (i skrajne mają + // kabinę?) while (p) - { // sprawdzanie, czy jest g��wnym steruj�cym, �eby nie by�o konfliktu - if (p->Mechanik) // je�li ma obsad� - if (p->Mechanik != this) // ale chodzi o inny pojazd, ni� aktualnie sprawdzaj�cy + { // sprawdzanie, czy jest głównym sterującym, żeby nie było konfliktu + if (p->Mechanik) // jeśli ma obsadę + if (p->Mechanik != this) // ale chodzi o inny pojazd, niż aktualnie sprawdzający if (p->Mechanik->iDrivigFlags & movePrimary) // a tamten ma priorytet if ((iDrivigFlags & movePrimary) && (mvOccupied->DirAbsolute) && - (mvOccupied->BrakeCtrlPos >= -1)) // je�li rz�dzi i ma kierunek + (mvOccupied->BrakeCtrlPos >= -1)) // jeśli rządzi i ma kierunek p->Mechanik->iDrivigFlags &= ~movePrimary; // dezaktywuje tamtego else - main = false; // nici z rz�dzenia - ++iVehicles; // jest jeden pojazd wi�cej - pVehicles[1] = p; // zapami�tanie ostatniego - fLength += p->MoverParameters->Dim.L; // dodanie d�ugo�ci pojazdu - fMass += p->MoverParameters->TotalMass; // dodanie masy ��cznie z �adunkiem + main = false; // nici z rządzenia + ++iVehicles; // jest jeden pojazd więcej + pVehicles[1] = p; // zapamiętanie ostatniego + fLength += p->MoverParameters->Dim.L; // dodanie długości pojazdu + fMass += p->MoverParameters->TotalMass; // dodanie masy łącznie z ładunkiem if (fVelMax < 0 ? true : p->MoverParameters->Vmax < fVelMax) - fVelMax = p->MoverParameters->Vmax; // ustalenie maksymalnej pr�dko�ci dla sk�adu + fVelMax = p->MoverParameters->Vmax; // ustalenie maksymalnej prędkości dla składu /* //youBy: bez przesady, to jest proteza, napelniac mozna, a nawet trzeba, ale z umiarem! - //uwzgl�dni� jeszcze wy��czenie hamulca + //uwzględnić jeszcze wyłączenie hamulca if ((p->MoverParameters->BrakeSystem!=Pneumatic)&&(p->MoverParameters->BrakeSystem!=ElectroPneumatic)) iDrivigFlags&=~moveOerlikons; //no jednak nie else if (p->MoverParameters->BrakeSubsystem!=Oerlikon) - iDrivigFlags&=~moveOerlikons; //wtedy te� nie */ - p = p->Neightbour(dir); // pojazd pod��czony od wskazanej strony + iDrivigFlags&=~moveOerlikons; //wtedy też nie */ + p = p->Neightbour(dir); // pojazd podłączony od wskazanej strony } if (main) - iDrivigFlags |= movePrimary; // nie znaleziono innego, mo�na si� porz�dzi� - /* //tabelka z list� pojazd�w jest na razie nie potrzebna + iDrivigFlags |= movePrimary; // nie znaleziono innego, można się porządzić + /* //tabelka z listą pojazdów jest na razie nie potrzebna delete[] pVehicles; pVehicles=new TDynamicObject*[iVehicles]; */ - ControllingSet(); // ustalenie cz�onu do sterowania (mo�e by� inny ni� zasiedziany) + ControllingSet(); // ustalenie członu do sterowania (może być inny niż zasiedziany) int pantmask = 1; if (iDrivigFlags & movePrimary) - { // je�li jest aktywnie prowadz�cym pojazd, mo�e zrobi� w�asny porz�dek + { // jeśli jest aktywnie prowadzącym pojazd, może zrobić własny porządek p = pVehicles[0]; while (p) { if (TrainParams) if (p->asDestination == "none") - p->DestinationSet(TrainParams->Relation2, - TrainParams->TrainName); // relacja docelowa, je�li nie by�o - if (AIControllFlag) // je�li prowadzi komputer - p->RaLightsSet(0, 0); // gasimy �wiat�a + p->DestinationSet(TrainParams->Relation2, TrainParams->TrainName); // relacja docelowa, jeśli nie było + if (AIControllFlag) // jeśli prowadzi komputer + p->RaLightsSet(0, 0); // gasimy światła if (p->MoverParameters->EnginePowerSource.SourceType == CurrentCollector) - { // je�li pojazd posiada pantograf, to przydzielamy mu mask�, kt�r� b�dzie informowa� o - // je�dzie bezpr�dowej + { // jeśli pojazd posiada pantograf, to przydzielamy mu maskę, którą będzie informował o + // jeździe bezprądowej p->iOverheadMask = pantmask; - pantmask << 1; // przesuni�cie bit�w, max. 32 pojazdy z pantografami w sk�adzie + pantmask << 1; // przesunięcie bitów, max. 32 pojazdy z pantografami w składzie } - d = p->DirectionSet(d ? 1 : -1); // zwraca po�o�enie nast�pnego (1=zgodny,0=odwr�cony - - // wzgl�dem czo�a sk�adu) - p->fScanDist = 300.0; // odleg�o�� skanowania w poszukiwaniu innych pojazd�w + d = p->DirectionSet(d ? 1 : -1); // zwraca położenie następnego (1=zgodny,0=odwrócony - + // względem czoła składu) + p->fScanDist = 300.0; // odległość skanowania w poszukiwaniu innych pojazdów p->ctOwner = this; // dominator oznacza swoje terytorium - p = p->Next(); // pojazd pod��czony od ty�u (licz�c od czo�a) + p = p->Next(); // pojazd podłączony od tyłu (licząc od czoła) } if (AIControllFlag) - { // je�li prowadzi komputer - if (OrderCurrentGet() == Obey_train) // je�li jazda poci�gowa + { // jeśli prowadzi komputer + if (OrderCurrentGet() == Obey_train) // jeśli jazda pociągowa { - Lights(1 + 4 + 16, 2 + 32 + 64); //�wiat�a poci�gowe (Pc1) i ko�c�wki (Pc5) + Lights(1 + 4 + 16, 2 + 32 + 64); //światła pociągowe (Pc1) i końcówki (Pc5) #if LOGPRESS == 0 - AutoRewident(); // nastawianie hamulca do jazdy poci�gowej + AutoRewident(); // nastawianie hamulca do jazdy pociągowej #endif } else if (OrderCurrentGet() & (Shunt | Connect)) { - Lights(16, - (pVehicles[1]->MoverParameters->CabNo) ? - 1 : - 0); //�wiat�a manewrowe (Tb1) na poje�dzie z nap�dem - if (OrderCurrentGet() & Connect) // je�li ��czenie, skanowa� dalej + Lights(16, (pVehicles[1]->MoverParameters->CabNo) ? + 1 : + 0); //światła manewrowe (Tb1) na pojeździe z napędem + if (OrderCurrentGet() & Connect) // jeśli łączenie, skanować dalej pVehicles[0]->fScanDist = - 5000.0; // odleg�o�� skanowania w poszukiwaniu innych pojazd�w + 5000.0; // odległość skanowania w poszukiwaniu innych pojazdów } else if (OrderCurrentGet() == Disconnect) if (mvOccupied->ActiveDir > 0) // jak ma kierunek do przodu - Lights(16, 0); //�wiat�a manewrowe (Tb1) tylko z przodu, aby nie pozostawi� - // odczepionego ze �wiat�em + Lights(16, 0); //światła manewrowe (Tb1) tylko z przodu, aby nie pozostawić + // odczepionego ze światłem else // jak dociska - Lights(0, 16); //�wiat�a manewrowe (Tb1) tylko z przodu, aby nie pozostawi� - // odczepionego ze �wiat�em + Lights(0, 16); //światła manewrowe (Tb1) tylko z przodu, aby nie pozostawić + // odczepionego ze światłem } - else // Ra 2014-02: lepiej tu ni� w p�tli obs�uguj�cej komendy, bo tam si� zmieni informacja - // o sk�adzie - switch (user) // gdy cz�owiek i gdy nast�pi�o po��cznie albo roz��czenie + else // Ra 2014-02: lepiej tu niż w pętli obsługującej komendy, bo tam się zmieni informacja + // o składzie + switch (user) // gdy człowiek i gdy nastąpiło połącznie albo rozłączenie { case Change_direction: while (OrderCurrentGet() & (Change_direction)) - JumpToNextOrder(); // zmian� kierunku te� mo�na ola�, ale zmieni� kierunek + JumpToNextOrder(); // zmianę kierunku też można olać, ale zmienić kierunek // skanowania! break; case Connect: while (OrderCurrentGet() & (Change_direction)) - JumpToNextOrder(); // zmian� kierunku te� mo�na ola�, ale zmieni� kierunek + JumpToNextOrder(); // zmianę kierunku też można olać, ale zmienić kierunek // skanowania! if (OrderCurrentGet() & (Connect)) - { // je�li mia�o by� ��czenie, zak�adamy, �e jest dobrze (sprawdzi�?) + { // jeśli miało być łączenie, zakładamy, że jest dobrze (sprawdzić?) iCoupler = 0; // koniec z doczepianiem - iDrivigFlags &= ~moveConnect; // zdj�cie flagi doczepiania - JumpToNextOrder(); // wykonanie nast�pnej komendy + iDrivigFlags &= ~moveConnect; // zdjęcie flagi doczepiania + JumpToNextOrder(); // wykonanie następnej komendy if (OrderCurrentGet() & (Change_direction)) - JumpToNextOrder(); // zmian� kierunku te� mo�na ola�, ale zmieni� kierunek + JumpToNextOrder(); // zmianę kierunku też można olać, ale zmienić kierunek // skanowania! } break; case Disconnect: while (OrderCurrentGet() & (Change_direction)) - JumpToNextOrder(); // zmian� kierunku te� mo�na ola�, ale zmieni� kierunek + JumpToNextOrder(); // zmianę kierunku też można olać, ale zmienić kierunek // skanowania! if (OrderCurrentGet() & (Disconnect)) - { // wypada�o by sprawdzi�, czy odczepiono wagony w odpowiednim miejscu + { // wypadało by sprawdzić, czy odczepiono wagony w odpowiednim miejscu // (iVehicleCount) - JumpToNextOrder(); // wykonanie nast�pnej komendy + JumpToNextOrder(); // wykonanie następnej komendy if (OrderCurrentGet() & (Change_direction)) - JumpToNextOrder(); // zmian� kierunku te� mo�na ola�, ale zmieni� kierunek + JumpToNextOrder(); // zmianę kierunku też można olać, ale zmienić kierunek // skanowania! } } - // Ra 2014-09: tymczasowo prymitywne ustawienie warunku pod k�tem SN61 + // Ra 2014-09: tymczasowo prymitywne ustawienie warunku pod kątem SN61 if ((mvOccupied->TrainType == dt_EZT) || (iVehicles == 1)) - iDrivigFlags |= movePushPull; // zmiana czo�a przez zmian� kabiny + iDrivigFlags |= movePushPull; // zmiana czoła przez zmianę kabiny else - iDrivigFlags &= ~movePushPull; // zmiana czo�a przez manewry + iDrivigFlags &= ~movePushPull; // zmiana czoła przez manewry } // blok wykonywany, gdy aktywnie prowadzi return true; } void TController::Lights(int head, int rear) -{ // zapalenie �wiate� w sk��dzie +{ // zapalenie świateł w skłądzie pVehicles[0]->RaLightsSet(head, -1); // zapalenie przednich w pierwszym - pVehicles[1]->RaLightsSet(-1, rear); // zapalenie ko�c�wek w ostatnim + pVehicles[1]->RaLightsSet(-1, rear); // zapalenie końcówek w ostatnim } void TController::DirectionInitial() -{ // ustawienie kierunku po wczytaniu trainset (mo�e jecha� na wstecznym - mvOccupied->CabActivisation(); // za��czenie rozrz�du (wirtualne kabiny) +{ // ustawienie kierunku po wczytaniu trainset (może jechać na wstecznym + mvOccupied->CabActivisation(); // załączenie rozrządu (wirtualne kabiny) if (mvOccupied->Vel > 0.0) - { // je�li na starcie jedzie + { // jeśli na starcie jedzie iDirection = iDirectionOrder = - (mvOccupied->V > 0 ? 1 : -1); // pocz�tkowa pr�dko�� wymusza kierunek jazdy + (mvOccupied->V > 0 ? 1 : -1); // początkowa prędkość wymusza kierunek jazdy DirectionForward(mvOccupied->V * mvOccupied->CabNo >= 0.0); // a dalej ustawienie nawrotnika } - CheckVehicles(); // sprawdzenie �wiate� oraz skrajnych pojazd�w do skanowania + CheckVehicles(); // sprawdzenie świateł oraz skrajnych pojazdów do skanowania }; int TController::OrderDirectionChange(int newdir, TMoverParameters *Vehicle) -{ // zmiana kierunku jazdy, niezale�nie od kabiny +{ // zmiana kierunku jazdy, niezależnie od kabiny int testd = newdir; if (Vehicle->Vel < 0.5) - { // je�li prawie stoi, mo�na zmieni� kierunek, musi by� wykonane dwukrotnie, bo za pierwszym + { // jeśli prawie stoi, można zmienić kierunek, musi być wykonane dwukrotnie, bo za pierwszym // razem daje na zero switch (newdir * Vehicle->CabNo) - { // DirectionBackward() i DirectionForward() to zmiany wzgl�dem kabiny + { // DirectionBackward() i DirectionForward() to zmiany względem kabiny case -1: // if (!Vehicle->DirectionBackward()) testd=0; break; DirectionForward(false); break; @@ -2056,84 +2003,84 @@ int TController::OrderDirectionChange(int newdir, TMoverParameters *Vehicle) break; } if (testd == 0) - VelforDriver = -1; // kierunek zosta� zmieniony na ��dany, mo�na jecha� + VelforDriver = -1; // kierunek został zmieniony na żądany, można jechać } - else // je�li jedzie - VelforDriver = 0; // ma si� zatrzyma� w celu zmiany kierunku + else // jeśli jedzie + VelforDriver = 0; // ma się zatrzymać w celu zmiany kierunku if ((Vehicle->ActiveDir == 0) && (VelforDriver < Vehicle->Vel)) // Ra: to jest chyba bez sensu IncBrake(); // niech hamuje if (Vehicle->ActiveDir == testd * Vehicle->CabNo) - VelforDriver = -1; // mo�na jecha�, bo kierunek jest zgodny z ��danym + VelforDriver = -1; // można jechać, bo kierunek jest zgodny z żądanym if (Vehicle->TrainType == dt_EZT) if (Vehicle->ActiveDir > 0) - // if () //tylko je�li jazda poci�gowa (tego nie wiemy w momencie odpalania silnika) + // if () //tylko jeśli jazda pociągowa (tego nie wiemy w momencie odpalania silnika) Vehicle->DirectionForward(); // Ra: z przekazaniem do silnikowego - return (int)VelforDriver; // zwraca pr�dko�� mechanika + return (int)VelforDriver; // zwraca prędkość mechanika } void TController::WaitingSet(double Seconds) { // ustawienie odczekania po zatrzymaniu (ustawienie w trakcie jazdy zatrzyma) - fStopTime = -Seconds; // ujemna warto�� oznacza oczekiwanie (potem >=0.0) + fStopTime = -Seconds; // ujemna wartość oznacza oczekiwanie (potem >=0.0) } void TController::SetVelocity(double NewVel, double NewVelNext, TStopReason r) -{ // ustawienie nowej pr�dko�ci - WaitingTime = -WaitingExpireTime; // przypisujemy -WaitingExpireTime, a potem por�wnujemy z +{ // ustawienie nowej prędkości + WaitingTime = -WaitingExpireTime; // przypisujemy -WaitingExpireTime, a potem porównujemy z // zerem - MaxVelFlag = false; // Ra: to nie jest u�ywane - MinVelFlag = false; // Ra: to nie jest u�ywane - /* nie u�ywane - if ((NewVel>NewVelNext) //je�li oczekiwana wi�ksza ni� nast�pna - || (NewVelVel)) //albo aktualna jest mniejsza ni� aktualna - fProximityDist=-800.0; //droga hamowania do zmiany pr�dko�ci + MaxVelFlag = false; // Ra: to nie jest używane + MinVelFlag = false; // Ra: to nie jest używane + /* nie używane + if ((NewVel>NewVelNext) //jeśli oczekiwana większa niż następna + || (NewVelVel)) //albo aktualna jest mniejsza niż aktualna + fProximityDist=-800.0; //droga hamowania do zmiany prędkości else - fProximityDist=-300.0; //Ra: ujemne warto�ci s� ignorowane + fProximityDist=-300.0; //Ra: ujemne wartości są ignorowane */ - if (NewVel == 0.0) // je�li ma stan�� + if (NewVel == 0.0) // jeśli ma stanąć { - if (r != stopNone) // a jest pow�d podany - eStopReason = r; // to zapami�ta� nowy pow�d + if (r != stopNone) // a jest powód podany + eStopReason = r; // to zapamiętać nowy powód } else { - eStopReason = stopNone; // podana pr�dko��, to nie ma powod�w do stania - // to ca�e poni�ej to warunki zatr�bienia przed ruszeniem + eStopReason = stopNone; // podana prędkość, to nie ma powodów do stania + // to całe poniżej to warunki zatrąbienia przed ruszeniem if (OrderList[OrderPos] ? OrderList[OrderPos] & (Obey_train | Shunt | Connect | Prepare_engine) : - true) // je�li jedzie w dowolnym trybie + true) // jeśli jedzie w dowolnym trybie if ((mvOccupied->Vel < - 1.0)) // jesli stoi (na razie, bo chyba powinien te�, gdy hamuje przed semaforem) - if (iDrivigFlags & moveStartHorn) // jezeli tr�bienie w��czone - if (!(iDrivigFlags & (moveStartHornDone | moveConnect))) // je�li nie zatr�bione + 1.0)) // jesli stoi (na razie, bo chyba powinien też, gdy hamuje przed semaforem) + if (iDrivigFlags & moveStartHorn) // jezeli trąbienie włączone + if (!(iDrivigFlags & (moveStartHornDone | moveConnect))) // jeśli nie zatrąbione // i nie jest to moment - // pod��czania sk�adu - if (mvOccupied->CategoryFlag & 1) // tylko poci�gi tr�bi� (unimogi tylko na - // torach, wi�c trzeba raczej sprawdza� + // podłączania składu + if (mvOccupied->CategoryFlag & 1) // tylko pociągi trąbią (unimogi tylko na + // torach, więc trzeba raczej sprawdzać // tor) - if ((NewVel >= 1.0) || (NewVel < 0.0)) // o ile pr�dko�� jest znacz�ca - { // fWarningDuration=0.3; //czas tr�bienia - // if (AIControllFlag) //jak siedzi krasnoludek, to w��czy tr�bienie - // mvOccupied->WarningSignal=pVehicle->iHornWarning; //wysoko�� tonu + if ((NewVel >= 1.0) || (NewVel < 0.0)) // o ile prędkość jest znacząca + { // fWarningDuration=0.3; //czas trąbienia + // if (AIControllFlag) //jak siedzi krasnoludek, to włączy trąbienie + // mvOccupied->WarningSignal=pVehicle->iHornWarning; //wysokość tonu // (2=wysoki) - // iDrivigFlags|=moveStartHornDone; //nie tr�bi� a� do ruszenia - iDrivigFlags |= moveStartHornNow; // zatr�b po odhamowaniu + // iDrivigFlags|=moveStartHornDone; //nie trąbić aż do ruszenia + iDrivigFlags |= moveStartHornNow; // zatrąb po odhamowaniu } } - VelSignal = NewVel; // pr�dko�� zezwolona na aktualnym odcinku - VelNext = NewVelNext; // pr�dko�� przy nast�pnym obiekcie + VelSignal = NewVel; // prędkość zezwolona na aktualnym odcinku + VelNext = NewVelNext; // prędkość przy następnym obiekcie } -/* //funkcja do niczego nie potrzebna (ew. do przesuni�cia pojazdu o odleg�o�� NewDist) +/* //funkcja do niczego nie potrzebna (ew. do przesunięcia pojazdu o odległość NewDist) bool TController::SetProximityVelocity(double NewDist,double NewVelNext) -{//informacja o pr�dko�ci w pewnej odleg�o�ci +{//informacja o prędkości w pewnej odległości #if 0 if (NewVelNext==0.0) - WaitingTime=0.0; //nie trzeba ju� czeka� + WaitingTime=0.0; //nie trzeba już czekać //if ((NewVelNext>=0)&&((VelNext>=0)&&(NewVelNextCategoryFlag & 2) { - WaitingExpireTime = 1; // tyle ma czeka� samoch�d, zanim si� ruszy + WaitingExpireTime = 1; // tyle ma czekać samochód, zanim się ruszy AccPreferred = 3.0; //[m/ss] agresywny } else { - WaitingExpireTime = 61; // tyle ma czeka�, zanim si� ruszy + WaitingExpireTime = 61; // tyle ma czekać, zanim się ruszy AccPreferred = HardAcceleration; // agresywny } } @@ -2164,12 +2111,12 @@ void TController::SetDriverPsyche() ReactionTime = EasyReactionTime; // spokojny if (mvOccupied->CategoryFlag & 2) { - WaitingExpireTime = 3; // tyle ma czeka� samoch�d, zanim si� ruszy + WaitingExpireTime = 3; // tyle ma czekać samochód, zanim się ruszy AccPreferred = 2.0; //[m/ss] } else { - WaitingExpireTime = 65; // tyle ma czeka�, zanim si� ruszy + WaitingExpireTime = 65; // tyle ma czekać, zanim się ruszy AccPreferred = EasyAcceleration; } } @@ -2181,41 +2128,41 @@ void TController::SetDriverPsyche() ReactionTime = 0.5 * ReactionTime; /* if (mvOccupied->Vel>0.1) //o ile jedziemy - {//sprawdzenie jazdy na widoczno�� + {//sprawdzenie jazdy na widoczność TCoupling - *c=pVehicles[0]->MoverParameters->Couplers+(pVehicles[0]->DirectionGet()>0?0:1); //sprz�g - z przodu sk�adu - if (c->Connected) //a mamy co� z przodu - if (c->CouplingFlag==0) //je�li to co� jest pod��czone sprz�giem wirtualnym - {//wyliczanie optymalnego przyspieszenia do jazdy na widoczno�� (Ra: na pewno tutaj?) - double k=c->Connected->Vel; //pr�dko�� pojazdu z przodu (zak�adaj�c, �e jedzie w t� - sam� stron�!!!) - if (k<=mvOccupied->Vel) //por�wnanie modu��w pr�dko�ci [km/h] - {if (pVehicles[0]->fTrackBlockMoverParameters->Couplers+(pVehicles[0]->DirectionGet()>0?0:1); //sprzęg + z przodu składu + if (c->Connected) //a mamy coś z przodu + if (c->CouplingFlag==0) //jeśli to coś jest podłączone sprzęgiem wirtualnym + {//wyliczanie optymalnego przyspieszenia do jazdy na widoczność (Ra: na pewno tutaj?) + double k=c->Connected->Vel; //prędkość pojazdu z przodu (zakładając, że jedzie w tę + samą stronę!!!) + if (k<=mvOccupied->Vel) //porównanie modułów prędkości [km/h] + {if (pVehicles[0]->fTrackBlockfTrackBlock-0.5*fabs(mvOccupied->V)-fMaxProximityDist); - //bezpieczna odleg�o�� za poprzednim + //bezpieczna odległość za poprzednim //a=(v2*v2-v1*v1)/(25.92*(d-0.5*v1)) - //(v2*v2-v1*v1)/2 to r��nica energii kinetycznych na jednostk� masy - //je�li v2=50km/h,v1=60km/h,d=200m => k=(192.9-277.8)/(25.92*(200-0.5*16.7)=-0.0171 + //(v2*v2-v1*v1)/2 to różnica energii kinetycznych na jednostkę masy + //jeśli v2=50km/h,v1=60km/h,d=200m => k=(192.9-277.8)/(25.92*(200-0.5*16.7)=-0.0171 [m/s^2] - //je�li v2=50km/h,v1=60km/h,d=100m => k=(192.9-277.8)/(25.92*(100-0.5*16.7)=-0.0357 + //jeśli v2=50km/h,v1=60km/h,d=100m => k=(192.9-277.8)/(25.92*(100-0.5*16.7)=-0.0357 [m/s^2] - //je�li v2=50km/h,v1=60km/h,d=50m => k=(192.9-277.8)/(25.92*( 50-0.5*16.7)=-0.0786 + //jeśli v2=50km/h,v1=60km/h,d=50m => k=(192.9-277.8)/(25.92*( 50-0.5*16.7)=-0.0786 [m/s^2] - //je�li v2=50km/h,v1=60km/h,d=25m => k=(192.9-277.8)/(25.92*( 25-0.5*16.7)=-0.1967 + //jeśli v2=50km/h,v1=60km/h,d=25m => k=(192.9-277.8)/(25.92*( 25-0.5*16.7)=-0.1967 [m/s^2] - if (d>0) //bo jak ujemne, to zacznie przyspiesza�, aby si� zderzy� + if (d>0) //bo jak ujemne, to zacznie przyspieszać, aby się zderzyć k=(k*k-mvOccupied->Vel*mvOccupied->Vel)/(25.92*d); //energia kinetyczna dzielona - przez mas� i drog� daje przyspieszenie + przez masę i drogę daje przyspieszenie else - k=0.0; //mo�e lepiej nie przyspiesza� -AccPreferred; //hamowanie + k=0.0; //może lepiej nie przyspieszać -AccPreferred; //hamowanie //WriteLog(pVehicle->asName+" "+AnsiString(k)); } - if (dEnginePowerSource.SourceType == CurrentCollector) /*||(mvOccupied->TrainType==dt_EZT)*/)) { if (mvControlling - ->GetTrainsetVoltage()) // sprawdzanie, czy zasilanie jest mo�e w innym cz�onie + ->GetTrainsetVoltage()) // sprawdzanie, czy zasilanie jest może w innym członie { voltfront = true; voltrear = true; @@ -2264,26 +2214,26 @@ bool TController::PrepareEngine() else // if EnginePowerSource.SourceType<>CurrentCollector) if (mvOccupied->TrainType != dt_EZT) - voltfront = true; // Ra 2014-06: to jest wirtualny pr�d dla spalinowych??? - if (AIControllFlag) // je�li prowadzi komputer - { // cz��� wykonawcza dla sterowania przez komputer + voltfront = true; // Ra 2014-06: to jest wirtualny prąd dla spalinowych??? + if (AIControllFlag) // jeśli prowadzi komputer + { // część wykonawcza dla sterowania przez komputer mvOccupied->BatterySwitch(true); if (mvControlling->EnginePowerSource.SourceType == CurrentCollector) - { // je�li silnikowy jest pantografuj�cym + { // jeśli silnikowy jest pantografującym if (mvControlling->PantPress > 4.3) - { // je�eli jest wystarczaj�ce ci�nienie w pantografach + { // jeżeli jest wystarczające ciśnienie w pantografach if ((!mvControlling->bPantKurek3) || (mvControlling->PantPress <= - mvControlling->ScndPipePress)) // kurek prze��czony albo g��wna ju� pompuje - mvControlling->PantCompFlag = false; // spr��ark� pantograf�w mo�na ju� wy��czy� + mvControlling->ScndPipePress)) // kurek przełączony albo główna już pompuje + mvControlling->PantCompFlag = false; // sprężarkę pantografów można już wyłączyć mvControlling->PantFront(true); mvControlling->PantRear(true); } - else if (mvControlling->PantPress < 4.2) //�eby nie za��cza� zaraz po przekroczeniu 4.0 - { // za��czenie ma�ej spr��arki + else if (mvControlling->PantPress < 4.2) //żeby nie załączał zaraz po przekroczeniu 4.0 + { // załączenie małej sprężarki mvControlling->bPantKurek3 = - false; // od��czenie zbiornika g��wnego, bo z nim nie da rady napompowa� - mvControlling->PantCompFlag = true; // za��czenie spr��arki pantograf�w + false; // odłączenie zbiornika głównego, bo z nim nie da rady napompować + mvControlling->PantCompFlag = true; // załączenie sprężarki pantografów } } // if (mvOccupied->TrainType==dt_EZT) @@ -2292,39 +2242,39 @@ bool TController::PrepareEngine() // mvControlling->PantRear(true); //} // if (mvControlling->EngineType==DieselElectric) - // mvControlling->Battery=true; //Ra: to musi by� tak? + // mvControlling->Battery=true; //Ra: to musi być tak? } if (mvControlling->PantFrontVolt || mvControlling->PantRearVolt || voltfront || voltrear) - { // najpierw ustalamy kierunek, je�li nie zosta� ustalony - if (!iDirection) // je�li nie ma ustalonego kierunku + { // najpierw ustalamy kierunek, jeśli nie został ustalony + if (!iDirection) // jeśli nie ma ustalonego kierunku if (mvOccupied->V == 0) { // ustalenie kierunku, gdy stoi iDirection = mvOccupied->CabNo; // wg wybranej kabiny - if (!iDirection) // je�li nie ma ustalonego kierunku + if (!iDirection) // jeśli nie ma ustalonego kierunku if ((mvControlling->PantFrontVolt != 0.0) || (mvControlling->PantRearVolt != 0.0) || voltfront || voltrear) { if (mvOccupied->Couplers[1].CouplingFlag == - ctrain_virtual) // je�li z ty�u nie ma nic - iDirection = -1; // jazda w kierunku sprz�gu 1 + ctrain_virtual) // jeśli z tyłu nie ma nic + iDirection = -1; // jazda w kierunku sprzęgu 1 if (mvOccupied->Couplers[0].CouplingFlag == - ctrain_virtual) // je�li z przodu nie ma nic - iDirection = 1; // jazda w kierunku sprz�gu 0 + ctrain_virtual) // jeśli z przodu nie ma nic + iDirection = 1; // jazda w kierunku sprzęgu 0 } } else // ustalenie kierunku, gdy jedzie if ((mvControlling->PantFrontVolt != 0.0) || (mvControlling->PantRearVolt != 0.0) || voltfront || voltrear) - if (mvOccupied->V < 0) // jedzie do ty�u - iDirection = -1; // jazda w kierunku sprz�gu 1 - else // jak nie do ty�u, to do przodu - iDirection = 1; // jazda w kierunku sprz�gu 0 - if (AIControllFlag) // je�li prowadzi komputer - { // cz��� wykonawcza dla sterowania przez komputer + if (mvOccupied->V < 0) // jedzie do tyłu + iDirection = -1; // jazda w kierunku sprzęgu 1 + else // jak nie do tyłu, to do przodu + iDirection = 1; // jazda w kierunku sprzęgu 0 + if (AIControllFlag) // jeśli prowadzi komputer + { // część wykonawcza dla sterowania przez komputer if (mvControlling->ConvOvldFlag) - { // wywali� bezpiecznik nadmiarowy przetwornicy + { // wywalił bezpiecznik nadmiarowy przetwornicy while (DecSpeed(true)) - ; // zerowanie nap�du + ; // zerowanie napędu mvControlling->ConvOvldFlag = false; // reset nadmiarowego } else if (!mvControlling->Mains) @@ -2335,27 +2285,27 @@ bool TController::PrepareEngine() // OK:=IncMainCtrl(1); // end; while (DecSpeed(true)) - ; // zerowanie nap�du + ; // zerowanie napędu OK = mvControlling->MainSwitch(true); if (mvControlling->EngineType == DieselEngine) - { // Ra 2014-06: dla SN61 trzeba wrzuci� pierwsz� pozycj� - nie wiem, czy tutaj... - // kiedy� dzia�a�o... + { // Ra 2014-06: dla SN61 trzeba wrzucić pierwszą pozycję - nie wiem, czy tutaj... + // kiedyś działało... if (!mvControlling->MainCtrlPos) { if (mvControlling->RList[0].R == - 0.0) // gdy na pozycji 0 dawka paliwa jest zerowa, to zga�nie - mvControlling->IncMainCtrl(1); // dlatego trzeba zwi�kszy� pozycj� - if (!mvControlling->ScndCtrlPos) // je�li bieg nie zosta� ustawiony - if (!mvControlling->MotorParam[0].AutoSwitch) // gdy biegi r�czne + 0.0) // gdy na pozycji 0 dawka paliwa jest zerowa, to zgaśnie + mvControlling->IncMainCtrl(1); // dlatego trzeba zwiększyć pozycję + if (!mvControlling->ScndCtrlPos) // jeśli bieg nie został ustawiony + if (!mvControlling->MotorParam[0].AutoSwitch) // gdy biegi ręczne if (mvControlling->MotorParam[0].mIsat == 0.0) // bl,mIsat,fi,mfi mvControlling->IncScndCtrl(1); // pierwszy bieg } } } else - { // Ra: iDirection okre�la, w kt�r� stron� jedzie sk�ad wzgl�dem sprz�g�w pojazdu z AI + { // Ra: iDirection określa, w którą stronę jedzie skład względem sprzęgów pojazdu z AI OK = (OrderDirectionChange(iDirection, mvOccupied) == -1); - // w EN57 spr��arka w ra jest zasilana z silnikowego + // w EN57 sprężarka w ra jest zasilana z silnikowego mvControlling->CompressorSwitch(true); mvControlling->ConverterSwitch(true); mvControlling->CompressorSwitch(true); @@ -2369,7 +2319,7 @@ bool TController::PrepareEngine() OK = OK && (mvOccupied->ActiveDir != 0) && (mvControlling->CompressorAllow); if (OK) { - if (eStopReason == stopSleep) // je�li dotychczas spa� + if (eStopReason == stopSleep) // jeśli dotychczas spał eStopReason == stopNone; // teraz nie ma powodu do stania iEngineActive = 1; return true; @@ -2382,12 +2332,12 @@ bool TController::PrepareEngine() }; bool TController::ReleaseEngine() -{ // wy��czanie silnika (test wy��czenia, a cz��� wykonawcza tylko je�li steruje komputer) +{ // wyłączanie silnika (test wyłączenia, a część wykonawcza tylko jeśli steruje komputer) bool OK = false; LastReactionTime = 0.0; ReactionTime = PrepareTime; if (AIControllFlag) - { // je�li steruje komputer + { // jeśli steruje komputer if (mvOccupied->DoorOpenCtrl == 1) { // zamykanie drzwi if (mvOccupied->DoorLeftOpened) @@ -2411,13 +2361,13 @@ bool TController::ReleaseEngine() OK = true; } else if (mvOccupied->ActiveDir == 0) - OK = mvControlling->Mains; // tylko to testujemy dla pojazdu cz�owieka + OK = mvControlling->Mains; // tylko to testujemy dla pojazdu człowieka if (AIControllFlag) - if (!mvOccupied->DecBrakeLevel()) // tu moze zmienia� na -2, ale to bez znaczenia + if (!mvOccupied->DecBrakeLevel()) // tu moze zmieniać na -2, ale to bez znaczenia if (!mvOccupied->IncLocalBrakeLevel(1)) { while (DecSpeed(true)) - ; // zerowanie nastawnik�w + ; // zerowanie nastawników while (mvOccupied->ActiveDir > 0) mvOccupied->DirectionBackward(); while (mvOccupied->ActiveDir < 0) @@ -2425,32 +2375,32 @@ bool TController::ReleaseEngine() } OK = OK && (mvOccupied->Vel < 0.01); if (OK) - { // je�li si� zatrzyma� + { // jeśli się zatrzymał iEngineActive = 0; - eStopReason = stopSleep; // stoimy z powodu wy��czenia - eAction = actSleep; //�pi (wygaszony) + eStopReason = stopSleep; // stoimy z powodu wyłączenia + eAction = actSleep; //śpi (wygaszony) if (AIControllFlag) { - Lights(0, 0); // gasimy �wiat�a + Lights(0, 0); // gasimy światła mvOccupied->BatterySwitch(false); } - OrderNext(Wait_for_orders); //�eby nie pr�bowa� co� robi� dalej + OrderNext(Wait_for_orders); //żeby nie próbował coś robić dalej TableClear(); // zapominamy ograniczenia - iDrivigFlags &= ~moveActive; // ma nie skanowa� sygna��w i nie reagowa� na komendy + iDrivigFlags &= ~moveActive; // ma nie skanować sygnałów i nie reagować na komendy } return OK; } bool TController::IncBrake() -{ // zwi�kszenie hamowania +{ // zwiększenie hamowania bool OK = false; switch (mvOccupied->BrakeSystem) { case Individual: - if (mvOccupied->LocalBrake == ManualBrake) - OK = mvOccupied->IncManualBrakeLevel(1 + floor(0.5 + fabs(AccDesired))); - else - OK = mvOccupied->IncLocalBrakeLevel(1 + floor(0.5 + fabs(AccDesired))); + if (mvOccupied->LocalBrake == ManualBrake) + OK = mvOccupied->IncManualBrakeLevel(1 + floor(0.5 + fabs(AccDesired))); + else + OK = mvOccupied->IncLocalBrakeLevel(1 + floor(0.5 + fabs(AccDesired))); break; case Pneumatic: if ((mvOccupied->Couplers[0].Connected == NULL) && @@ -2493,15 +2443,15 @@ bool TController::IncBrake() mvOccupied->BrakeReleaser(0); break; case ElectroPneumatic: - if (mvOccupied->EngineType == ElectricInductionMotor) - { - OK = mvOccupied->IncLocalBrakeLevel(1); - } - else if (mvOccupied->fBrakeCtrlPos != mvOccupied->Handle->GetPos(bh_EPB)) + if (mvOccupied->EngineType == ElectricInductionMotor) + { + OK = mvOccupied->IncLocalBrakeLevel(1); + } + else if (mvOccupied->fBrakeCtrlPos != mvOccupied->Handle->GetPos(bh_EPB)) { mvOccupied->BrakeLevelSet(mvOccupied->Handle->GetPos(bh_EPB)); if (mvOccupied->Handle->GetPos(bh_EPR) - mvOccupied->Handle->GetPos(bh_EPN) < 0.1) - mvOccupied->SwitchEPBrake(1); // to nie chce dzia�a� + mvOccupied->SwitchEPBrake(1); // to nie chce działać OK = true; } else @@ -2518,15 +2468,15 @@ bool TController::IncBrake() } bool TController::DecBrake() -{ // zmniejszenie si�y hamowania +{ // zmniejszenie siły hamowania bool OK = false; switch (mvOccupied->BrakeSystem) { case Individual: - if (mvOccupied->LocalBrake == ManualBrake) - OK = mvOccupied->DecManualBrakeLevel(1 + floor(0.5 + fabs(AccDesired))); - else - OK = mvOccupied->DecLocalBrakeLevel(1 + floor(0.5 + fabs(AccDesired))); + if (mvOccupied->LocalBrake == ManualBrake) + OK = mvOccupied->DecManualBrakeLevel(1 + floor(0.5 + fabs(AccDesired))); + else + OK = mvOccupied->DecLocalBrakeLevel(1 + floor(0.5 + fabs(AccDesired))); break; case Pneumatic: if (mvOccupied->BrakeCtrlPos > 0) @@ -2537,11 +2487,11 @@ bool TController::DecBrake() Need_BrakeRelease = true; break; case ElectroPneumatic: - if (mvOccupied->EngineType == ElectricInductionMotor) - { - OK = mvOccupied->DecLocalBrakeLevel(1); - } - else if (mvOccupied->fBrakeCtrlPos != mvOccupied->Handle->GetPos(bh_EPR)) + if (mvOccupied->EngineType == ElectricInductionMotor) + { + OK = mvOccupied->DecLocalBrakeLevel(1); + } + else if (mvOccupied->fBrakeCtrlPos != mvOccupied->Handle->GetPos(bh_EPR)) { mvOccupied->BrakeLevelSet(mvOccupied->Handle->GetPos(bh_EPR)); if (mvOccupied->Handle->GetPos(bh_EPR) - mvOccupied->Handle->GetPos(bh_EPN) < 0.1) @@ -2558,80 +2508,80 @@ bool TController::DecBrake() }; bool TController::IncSpeed() -{ // zwi�kszenie pr�dko�ci; zwraca false, je�li dalej si� nie da zwi�ksza� - if (tsGuardSignal) // je�li jest d�wi�k kierownika - if (tsGuardSignal->GetStatus() & DSBSTATUS_PLAYING) // je�li gada, to nie jedziemy +{ // zwiększenie prędkości; zwraca false, jeśli dalej się nie da zwiększać + if (tsGuardSignal) // jeśli jest dźwięk kierownika + if (tsGuardSignal->GetStatus() & DSBSTATUS_PLAYING) // jeśli gada, to nie jedziemy return false; bool OK = true; if (iDrivigFlags & moveDoorOpened) Doors(false); // zamykanie drzwi - tutaj wykonuje tylko AI (zmienia fActionTime) - if (fActionTime < 0.0) // gdy jest nakaz poczeka� z jazd�, to nie rusza� + if (fActionTime < 0.0) // gdy jest nakaz poczekać z jazdą, to nie ruszać return false; if (mvControlling->SlippingWheels) - return false; // jak po�lizg, to nie przyspieszamy + return false; // jak poślizg, to nie przyspieszamy switch (mvOccupied->EngineType) { case None: // McZapkie-041003: wagon sterowniczy - if (mvControlling->MainCtrlPosNo > 0) // je�li ma czym kr�ci� + if (mvControlling->MainCtrlPosNo > 0) // jeśli ma czym kręcić iDrivigFlags |= moveIncSpeed; // ustawienie flagi jazdy return false; case ElectricSeriesMotor: - if (mvControlling->EnginePowerSource.SourceType == CurrentCollector) // je�li pantografuj�cy + if (mvControlling->EnginePowerSource.SourceType == CurrentCollector) // jeśli pantografujący { - if (fOverhead2 >= 0.0) // a jazda bezpr�dowa ustawiana eventami (albo opuszczenie) + if (fOverhead2 >= 0.0) // a jazda bezprądowa ustawiana eventami (albo opuszczenie) return false; // to nici z ruszania - if (iOverheadZero) // jazda bezpr�dowa z poziomu toru ustawia bity + if (iOverheadZero) // jazda bezprądowa z poziomu toru ustawia bity return false; // to nici z ruszania } if (!mvControlling->FuseFlag) //&&mvControlling->StLinFlag) //yBARC if ((mvControlling->MainCtrlPos == 0) || - (mvControlling->StLinFlag)) // youBy poleci� doda� 2012-09-08 v367 - // na pozycji 0 przejdzie, a na pozosta�ych b�dzie czeka�, a� si� za��cz� liniowe - // (zga�nie DelayCtrlFlag) + (mvControlling->StLinFlag)) // youBy polecił dodać 2012-09-08 v367 + // na pozycji 0 przejdzie, a na pozostałych będzie czekać, aż się załączą liniowe + // (zgaśnie DelayCtrlFlag) if (Ready || (iDrivigFlags & movePress)) if (fabs(mvControlling->Im) < (fReady < 0.4 ? mvControlling->Imin : mvControlling->IminLo)) - { // Ra: wywala� nadmiarowy, bo Im mo�e by� ujemne; jak nie odhamowany, to nie - // przesadza� z pr�dem + { // Ra: wywalał nadmiarowy, bo Im może być ujemne; jak nie odhamowany, to nie + // przesadzać z prądem if ((mvOccupied->Vel <= 30) || (mvControlling->Imax > mvControlling->ImaxLo) || (fVoltage + fVoltage < mvControlling->EnginePowerSource.CollectorParameters.MinV + mvControlling->EnginePowerSource.CollectorParameters.MaxV)) { // bocznik na szeregowej przy ciezkich bruttach albo przy wysokim rozruchu - // pod g�r� albo przy niskim napi�ciu + // pod górę albo przy niskim napięciu if (mvControlling->MainCtrlPos ? mvControlling->RList[mvControlling->MainCtrlPos].R > 0.0 : true) // oporowa { OK = (mvControlling->DelayCtrlFlag ? true : - mvControlling->IncMainCtrl(1)); // kr�cimy nastawnik jazdy + mvControlling->IncMainCtrl(1)); // kręcimy nastawnik jazdy if ((OK) && (mvControlling->MainCtrlPos == - 1)) // czekaj na 1 pozycji, zanim si� nie w��cz� liniowe + 1)) // czekaj na 1 pozycji, zanim się nie włączą liniowe iDrivigFlags |= moveIncSpeed; else - iDrivigFlags &= ~moveIncSpeed; // usuni�cie flagi czekania + iDrivigFlags &= ~moveIncSpeed; // usunięcie flagi czekania } - else // je�li bezoporowa (z wyj�tekiem 0) - OK = false; // to da� bocznik + else // jeśli bezoporowa (z wyjątekiem 0) + OK = false; // to dać bocznik } else - { // przekroczone 30km/h, mo�na wej�� na jazd� r�wnoleg�� - if (mvControlling->ScndCtrlPos) // je�li ustawiony bocznik + { // przekroczone 30km/h, można wejść na jazdę równoległą + if (mvControlling->ScndCtrlPos) // jeśli ustawiony bocznik if (mvControlling->MainCtrlPos < mvControlling->MainCtrlPosNo - 1) // a nie jest ostatnia pozycja mvControlling->DecScndCtrl(2); // to bocznik na zero po chamsku - // (kto� mia� to poprawi�...) + // (ktoś miał to poprawić...) OK = mvControlling->IncMainCtrl(1); } if ((mvControlling->MainCtrlPos > 2) && - (mvControlling->Im == 0)) // brak pr�du na dalszych pozycjach - Need_TryAgain = true; // nie za��czona lokomotywa albo wywali� + (mvControlling->Im == 0)) // brak prądu na dalszych pozycjach + Need_TryAgain = true; // nie załączona lokomotywa albo wywalił // nadmiarowy - else if (!OK) // nie da si� wrzuci� kolejnej pozycji - OK = mvControlling->IncScndCtrl(1); // to da� bocznik + else if (!OK) // nie da się wrzucić kolejnej pozycji + OK = mvControlling->IncScndCtrl(1); // to dać bocznik } mvControlling->AutoRelayCheck(); // sprawdzenie logiki sterowania break; @@ -2645,15 +2595,15 @@ bool TController::IncSpeed() OK = mvControlling->IncScndCtrl(1); } break; - case ElectricInductionMotor: - if (!mvControlling->FuseFlag) - if (Ready || (iDrivigFlags & movePress) || - (mvOccupied->ShuntMode)) //{(BrakePress<=0.01*MaxBrakePress)} - { - OK = mvControlling->IncMainCtrl(1); - } - break; - case WheelsDriven: + case ElectricInductionMotor: + if (!mvControlling->FuseFlag) + if (Ready || (iDrivigFlags & movePress) || (mvOccupied->ShuntMode)) //{(BrakePress<=0.01*MaxBrakePress)} + { + OK = mvControlling->IncMainCtrl(1); + } + break; + break; + case WheelsDriven: if (!mvControlling->CabNo) mvControlling->CabActivisation(); if (sin(mvControlling->eAngle) > 0) @@ -2663,7 +2613,7 @@ bool TController::IncSpeed() break; case DieselEngine: if (mvControlling->ShuntModeAllow) - { // dla 2Ls150 mo�na zmieni� tryb pracy, je�li jest w liniowym i nie daje rady (wymaga + { // dla 2Ls150 można zmienić tryb pracy, jeśli jest w liniowym i nie daje rady (wymaga // zerowania kierunku) // mvControlling->ShuntMode=(OrderList[OrderPos]&Shunt)||(fMass>224000.0); } @@ -2684,12 +2634,12 @@ bool TController::IncSpeed() } bool TController::DecSpeed(bool force) -{ // zmniejszenie pr�dko�ci (ale nie hamowanie) - bool OK = false; // domy�lnie false, aby wysz�o z p�tli while +{ // zmniejszenie prędkości (ale nie hamowanie) + bool OK = false; // domyślnie false, aby wyszło z pętli while switch (mvOccupied->EngineType) { case None: // McZapkie-041003: wagon sterowniczy - iDrivigFlags &= ~moveIncSpeed; // usuni�cie flagi jazdy + iDrivigFlags &= ~moveIncSpeed; // usunięcie flagi jazdy if (force) // przy aktywacji kabiny jest potrzeba natychmiastowego wyzerowania if (mvControlling->MainCtrlPosNo > 0) // McZapkie-041003: wagon sterowniczy, np. EZT mvControlling->DecMainCtrl(1 + (mvControlling->MainCtrlPos > 2 ? 1 : 0)); @@ -2703,8 +2653,8 @@ bool TController::DecSpeed(bool force) break; case Dumb: case DieselElectric: - case ElectricInductionMotor: - OK = mvControlling->DecScndCtrl(2); + case ElectricInductionMotor: + OK = mvControlling->DecScndCtrl(2); if (!OK) OK = mvControlling->DecMainCtrl(2 + (mvControlling->MainCtrlPos / 2)); break; @@ -2734,41 +2684,41 @@ bool TController::DecSpeed(bool force) }; void TController::SpeedSet() -{ // Ra: regulacja pr�dko�ci, wykonywana w ka�dym przeb�ysku �wiadomo�ci AI - // ma dokr�ca� do bezoporowych i zdejmowa� pozycje w przypadku przekroczenia pr�du +{ // Ra: regulacja prędkości, wykonywana w każdym przebłysku świadomości AI + // ma dokręcać do bezoporowych i zdejmować pozycje w przypadku przekroczenia prądu switch (mvOccupied->EngineType) { case None: // McZapkie-041003: wagon sterowniczy if (fActionTime >= -1.0) - mvOccupied->DepartureSignal = false; // troch� niech pobuczy, zanim pojedzie + mvOccupied->DepartureSignal = false; // trochę niech pobuczy, zanim pojedzie if (mvControlling->MainCtrlPosNo > 0) - { // je�li ma czym kr�ci� + { // jeśli ma czym kręcić // TODO: sprawdzanie innego czlonu //if (!FuseFlagCheck()) if ((AccDesired < fAccGravity - 0.05) || - (mvOccupied->Vel > VelDesired)) // je�li nie ma przyspiesza� + (mvOccupied->Vel > VelDesired)) // jeśli nie ma przyspieszać mvControlling->DecMainCtrl(2); // na zero else if (fActionTime >= 0.0) - { // jak ju� mo�na co� porusza�, przetok roz��cza� od razu + { // jak już można coś poruszać, przetok rozłączać od razu if (iDrivigFlags & moveIncSpeed) - { // jak ma jecha� + { // jak ma jechać if (fReady < 0.4) // 0.05*Controlling->MaxBrakePress) { // jak jest odhamowany if (mvOccupied->ActiveDir > 0) - mvOccupied->DirectionForward(); //�eby EN57 jecha�y na drugiej nastawie + mvOccupied->DirectionForward(); //żeby EN57 jechały na drugiej nastawie { if (mvControlling->MainCtrlPos && !mvControlling - ->StLinFlag) // jak niby jedzie, ale ma roz��czone liniowe + ->StLinFlag) // jak niby jedzie, ale ma rozłączone liniowe mvControlling->DecMainCtrl( - 2); // to na zero i czeka� na przewalenie ku�akowego + 2); // to na zero i czekać na przewalenie kułakowego else switch (mvControlling->MainCtrlPos) - { // ruch nastawnika uzale�niony jest od aktualnie ustawionej + { // ruch nastawnika uzależniony jest od aktualnie ustawionej // pozycji case 0: - if (mvControlling->MainCtrlActualPos) // je�li ku�akowy nie jest + if (mvControlling->MainCtrlActualPos) // jeśli kułakowy nie jest // wyzerowany - break; // to czeka� na wyzerowanie + break; // to czekać na wyzerowanie mvControlling->IncMainCtrl(1); // przetok; bez "break", bo nie // ma czekania na 1. pozycji case 1: @@ -2776,7 +2726,7 @@ void TController::SpeedSet() mvControlling->IncMainCtrl(1); // szeregowa case 2: if (VelDesired >= 50) - mvControlling->IncMainCtrl(1); // r�wnoleg�a + mvControlling->IncMainCtrl(1); // równoległa case 3: if (VelDesired >= 80) mvControlling->IncMainCtrl(1); // bocznik 1 @@ -2787,9 +2737,9 @@ void TController::SpeedSet() if (VelDesired >= 100) mvControlling->IncMainCtrl(1); // bocznik 3 } - if (mvControlling->MainCtrlPos) // jak za��czy� pozycj� + if (mvControlling->MainCtrlPos) // jak załączył pozycję { - fActionTime = -5.0; // niech troch� potrzyma + fActionTime = -5.0; // niech trochę potrzyma mvControlling->AutoRelayCheck(); // sprawdzenie logiki sterowania } } @@ -2799,7 +2749,7 @@ void TController::SpeedSet() { while (mvControlling->MainCtrlPos) mvControlling->DecMainCtrl(1); // na zero - fActionTime = -5.0; // niech troch� potrzyma + fActionTime = -5.0; // niech trochę potrzyma mvControlling->AutoRelayCheck(); // sprawdzenie logiki sterowania } } @@ -2807,152 +2757,152 @@ void TController::SpeedSet() break; case ElectricSeriesMotor: if ((!mvControlling->StLinFlag) && (!mvControlling->DelayCtrlFlag) && - (!(iDrivigFlags & moveIncSpeed))) // styczniki liniowe roz��czone yBARC - // if (iDrivigFlags&moveIncSpeed) {} //je�li czeka na za��czenie liniowych + (!iDrivigFlags & moveIncSpeed)) // styczniki liniowe rozłączone yBARC + // if (iDrivigFlags&moveIncSpeed) {} //jeśli czeka na załączenie liniowych // else while (DecSpeed()) - ; // zerowanie nap�du - else if (Ready || (iDrivigFlags & movePress)) // o ile mo�e jecha� - if (fAccGravity < -0.10) // i jedzie pod g�r� wi�ksz� ni� 10 promil - { // procedura wje�d�ania na ekstremalne wzniesienia + ; // zerowanie napędu + else if (Ready || (iDrivigFlags & movePress)) // o ile może jechać + if (fAccGravity < -0.10) // i jedzie pod górę większą niż 10 promil + { // procedura wjeżdżania na ekstremalne wzniesienia if (fabs(mvControlling->Im) > - 0.85 * mvControlling->Imax) // a pr�d jest wi�kszy ni� 85% nadmiarowego + 0.85 * mvControlling->Imax) // a prąd jest większy niż 85% nadmiarowego // if (mvControlling->Imin*mvControlling->Voltage/(fMass*fAccGravity)<-2.8) //a - // na niskim si� za szybko nie pojedzie + // na niskim się za szybko nie pojedzie if (mvControlling->Imax * mvControlling->Voltage / (fMass * fAccGravity) < - -2.8) // a na niskim si� za szybko nie pojedzie - { // w��czenie wysokiego rozruchu; + -2.8) // a na niskim się za szybko nie pojedzie + { // włączenie wysokiego rozruchu; // (I*U)[A*V=W=kg*m*m/sss]/(m[kg]*a[m/ss])=v[m/s]; 2.8m/ss=10km/h if (mvControlling->RList[mvControlling->MainCtrlPos].Bn > 1) - { // je�li jedzie na r�wnoleg�ym, to zbijamy do szeregowego, aby w��czy� + { // jeśli jedzie na równoległym, to zbijamy do szeregowego, aby włączyć // wysoki rozruch - if (mvControlling->ScndCtrlPos > 0) // je�eli jest bocznik + if (mvControlling->ScndCtrlPos > 0) // jeżeli jest bocznik mvControlling->DecScndCtrl( - 2); // wy��czy� bocznik, bo mo�e blokowa� skr�cenie NJ - do // skr�canie do bezoporowej na szeregowym - mvControlling->DecMainCtrl(1); // kr�cimy nastawnik jazdy o 1 wstecz + 2); // wyłączyć bocznik, bo może blokować skręcenie NJ + do // skręcanie do bezoporowej na szeregowym + mvControlling->DecMainCtrl(1); // kręcimy nastawnik jazdy o 1 wstecz while (mvControlling->MainCtrlPos ? mvControlling->RList[mvControlling->MainCtrlPos].Bn > 1 : - false); // oporowa zap�tla + false); // oporowa zapętla } - if (mvControlling->Imax < mvControlling->ImaxHi) // je�li da si� na wysokim + if (mvControlling->Imax < mvControlling->ImaxHi) // jeśli da się na wysokim mvControlling->CurrentSwitch( - true); // rozruch wysoki (za to mo�e si� �lizga�) + true); // rozruch wysoki (za to może się ślizgać) if (ReactionTime > 0.1) - ReactionTime = 0.1; // orientuj si� szybciej + ReactionTime = 0.1; // orientuj się szybciej } // if (Im>Imin) - if (fabs(mvControlling->Im) > 0.75 * mvControlling->ImaxHi) // je�li pr�d jest du�y - mvControlling->SandDoseOn(); // piaskujemy tory, coby si� nie �lizga� + if (fabs(mvControlling->Im) > 0.75 * mvControlling->ImaxHi) // jeśli prąd jest duży + mvControlling->SandDoseOn(); // piaskujemy tory, coby się nie ślizgać if ((fabs(mvControlling->Im) > 0.96 * mvControlling->Imax) || - mvControlling->SlippingWheels) // je�li pr�d jest du�y (mo�na 690 na 750) - if (mvControlling->ScndCtrlPos > 0) // je�eli jest bocznik - mvControlling->DecScndCtrl(2); // zmniejszy� bocznik + mvControlling->SlippingWheels) // jeśli prąd jest duży (można 690 na 750) + if (mvControlling->ScndCtrlPos > 0) // jeżeli jest bocznik + mvControlling->DecScndCtrl(2); // zmniejszyć bocznik else - mvControlling->DecMainCtrl(1); // kr�cimy nastawnik jazdy o 1 wstecz + mvControlling->DecMainCtrl(1); // kręcimy nastawnik jazdy o 1 wstecz } - else // gdy nie jedzie ambitnie pod g�r� + else // gdy nie jedzie ambitnie pod górę { // sprawdzenie, czy rozruch wysoki jest potrzebny if (mvControlling->Imax > mvControlling->ImaxLo) - if (mvOccupied->Vel >= 30.0) // jak si� rozp�dzi� - if (fAccGravity > -0.02) // a i pochylenie mnijsze ni� 2� - mvControlling->CurrentSwitch(false); // rozruch wysoki wy��cz - // dokr�canie do bezoporowej, bo IncSpeed() mo�e nie by� wywo�ywane + if (mvOccupied->Vel >= 30.0) // jak się rozpędził + if (fAccGravity > -0.02) // a i pochylenie mnijsze niż 2‰ + mvControlling->CurrentSwitch(false); // rozruch wysoki wyłącz + // dokręcanie do bezoporowej, bo IncSpeed() może nie być wywoływane // if (mvOccupied->Vel-0.1) //nie ma hamowa� + // if (AccDesired>-0.1) //nie ma hamować // if (Controlling->RList[MainCtrlPos].R>0.0) - // if (Im<1.3*Imin) //lekkie przekroczenie miimalnego pr�du jest dopuszczalne - // IncMainCtrl(1); //zwieksz nastawnik skoro mo�esz - tak aby si� ustawic na + // if (Im<1.3*Imin) //lekkie przekroczenie miimalnego prądu jest dopuszczalne + // IncMainCtrl(1); //zwieksz nastawnik skoro możesz - tak aby się ustawic na // bezoporowej } break; case Dumb: case DieselElectric: - case ElectricInductionMotor: - break; + case ElectricInductionMotor: + break; // WheelsDriven : // begin // OK:=False; // end; case DieselEngine: - // Ra 2014-06: "automatyczna" skrzynia bieg�w... - if (!mvControlling->MotorParam[mvControlling->ScndCtrlPos].AutoSwitch) // gdy biegi r�czne + // Ra 2014-06: "automatyczna" skrzynia biegów... + if (!mvControlling->MotorParam[mvControlling->ScndCtrlPos].AutoSwitch) // gdy biegi ręczne if ((mvControlling->ShuntMode ? mvControlling->AnPos : 1.0) * mvControlling->Vel > 0.6 * mvControlling->MotorParam[mvControlling->ScndCtrlPos].mfi) - // if (mvControlling->enrot>0.95*mvControlling->dizel_nMmax) //youBy: je�li obroty > - // 0,95 nmax, wrzu� wy�szy bieg - Ra: to nie dzia�a - { // jak pr�dko�� wi�ksza ni� 0.6 maksymalnej na danym biegu, wrzuci� wy�szy + // if (mvControlling->enrot>0.95*mvControlling->dizel_nMmax) //youBy: jeśli obroty > + // 0,95 nmax, wrzuć wyższy bieg - Ra: to nie działa + { // jak prędkość większa niż 0.6 maksymalnej na danym biegu, wrzucić wyższy mvControlling->DecMainCtrl(2); if (mvControlling->IncScndCtrl(1)) if (mvControlling->MotorParam[mvControlling->ScndCtrlPos].mIsat == - 0.0) // je�li bieg ja�owy + 0.0) // jeśli bieg jałowy mvControlling->IncScndCtrl(1); // to kolejny } else if ((mvControlling->ShuntMode ? mvControlling->AnPos : 1.0) * mvControlling->Vel < mvControlling->MotorParam[mvControlling->ScndCtrlPos].fi) - { // jak pr�dko�� mniejsza ni� minimalna na danym biegu, wrzuci� ni�szy + { // jak prędkość mniejsza niż minimalna na danym biegu, wrzucić niższy mvControlling->DecMainCtrl(2); mvControlling->DecScndCtrl(1); if (mvControlling->MotorParam[mvControlling->ScndCtrlPos].mIsat == - 0.0) // je�li bieg ja�owy - if (mvControlling->ScndCtrlPos) // a jeszcze zera nie osi�gni�to - mvControlling->DecScndCtrl(1); // to kolejny wcze�niejszy + 0.0) // jeśli bieg jałowy + if (mvControlling->ScndCtrlPos) // a jeszcze zera nie osiągnięto + mvControlling->DecScndCtrl(1); // to kolejny wcześniejszy else - mvControlling->IncScndCtrl(1); // a jak zesz�o na zero, to powr�t + mvControlling->IncScndCtrl(1); // a jak zeszło na zero, to powrót } break; } }; void TController::Doors(bool what) -{ // otwieranie/zamykanie drzwi w sk�adzie albo (tylko AI) EZT +{ // otwieranie/zamykanie drzwi w składzie albo (tylko AI) EZT if (what) { // otwarcie } else { // zamykanie if (mvOccupied->DoorOpenCtrl == 1) - { // je�li drzwi sterowane z kabiny + { // jeśli drzwi sterowane z kabiny if (AIControllFlag) if (mvOccupied->DoorLeftOpened || mvOccupied->DoorRightOpened) { // AI zamyka drzwi przed odjazdem if (mvOccupied->DoorClosureWarning) - mvOccupied->DepartureSignal = true; // za��cenie bzyczka + mvOccupied->DepartureSignal = true; // załącenie bzyczka mvOccupied->DoorLeft(false); // zamykanie drzwi mvOccupied->DoorRight(false); - // Ra: trzeba by ustawi� jaki� czas oczekiwania na zamkni�cie si� drzwi - fActionTime = -1.5 - 0.1 * Random(10); // czekanie sekund�, mo�e troch� d�u�ej - iDrivigFlags &= ~moveDoorOpened; // nie wykonywa� drugi raz + // Ra: trzeba by ustawić jakiś czas oczekiwania na zamknięcie się drzwi + fActionTime = -1.5 - 0.1 * Random(10); // czekanie sekundę, może trochę dłużej + iDrivigFlags &= ~moveDoorOpened; // nie wykonywać drugi raz } } else - { // je�li nie, to zamykanie w sk�adzie wagonowym - TDynamicObject *p = pVehicles[0]; // pojazd na czole sk�adu + { // jeśli nie, to zamykanie w składzie wagonowym + TDynamicObject *p = pVehicles[0]; // pojazd na czole składu while (p) - { // zamykanie drzwi w pojazdach - flaga zezwolenia by�a by lepsza - p->MoverParameters->DoorLeft(false); // w lokomotywie mo�na by nie zamyka�... + { // zamykanie drzwi w pojazdach - flaga zezwolenia była by lepsza + p->MoverParameters->DoorLeft(false); // w lokomotywie można by nie zamykać... p->MoverParameters->DoorRight(false); - p = p->Next(); // pojazd pod��czony z ty�u (patrz�c od czo�a) + p = p->Next(); // pojazd podłączony z tyłu (patrząc od czoła) } - // WaitingSet(5); //10 sekund tu to za d�ugo, op��nia odjazd o p�� minuty - fActionTime = -1.5 - 0.1 * Random(10); // czekanie sekund�, mo�e troch� d�u�ej - iDrivigFlags &= ~moveDoorOpened; // zosta�y zamkni�te - nie wykonywa� drugi raz + // WaitingSet(5); //10 sekund tu to za długo, opóźnia odjazd o pół minuty + fActionTime = -1.5 - 0.1 * Random(10); // czekanie sekundę, może trochę dłużej + iDrivigFlags &= ~moveDoorOpened; // zostały zamknięte - nie wykonywać drugi raz } } }; void TController::RecognizeCommand() -{ // odczytuje i wykonuje komend� przekazan� lokomotywie +{ // odczytuje i wykonuje komendę przekazaną lokomotywie TCommand *c = &mvOccupied->CommandIn; PutCommand(c->Command, c->Value1, c->Value2, c->Location, stopComm); - c->Command = ""; // usuni�cie obs�u�onej komendy + c->Command = ""; // usunięcie obsłużonej komendy } void TController::PutCommand(std::string NewCommand, double NewValue1, double NewValue2, const TLocation &NewLocation, TStopReason reason) -{ // wys�anie komendy przez event PutValues, jak pojazd ma obsad�, to wysy�a tutaj, a nie do pojazdu - // bezpo�rednio +{ // wysłanie komendy przez event PutValues, jak pojazd ma obsadę, to wysyła tutaj, a nie do pojazdu + // bezpośrednio vector3 sl; - sl.x = -NewLocation.X; // zamiana na wsp��rz�dne scenerii + sl.x = -NewLocation.X; // zamiana na współrzędne scenerii sl.z = NewLocation.Y; sl.y = NewLocation.Z; if (!PutCommand(NewCommand, NewValue1, NewValue2, &sl, reason)) @@ -2963,44 +2913,44 @@ bool TController::PutCommand(std::string NewCommand, double NewValue1, double Ne const vector3 *NewLocation, TStopReason reason) { // analiza komendy if (NewCommand == "CabSignal") - { // SHP wyzwalane jest przez cz�on z obsad�, ale obs�ugiwane przez silnikowy - // nie jest to najlepiej zrobione, ale bez symulacji obwod�w lepiej nie b�dzie - // Ra 2014-04: jednak przenios�em do rozrz�dczego + { // SHP wyzwalane jest przez człon z obsadą, ale obsługiwane przez silnikowy + // nie jest to najlepiej zrobione, ale bez symulacji obwodów lepiej nie będzie + // Ra 2014-04: jednak przeniosłem do rozrządczego mvOccupied->PutCommand(NewCommand, NewValue1, NewValue2, mvOccupied->Loc); mvOccupied->RunInternalCommand(); // rozpoznaj komende bo lokomotywa jej nie rozpoznaje - return true; // za�atwione + return true; // załatwione } if (NewCommand == "Overhead") { // informacja o stanie sieci trakcyjnej fOverhead1 = - NewValue1; // informacja o napi�ciu w sieci trakcyjnej (0=brak drutu, zatrzymaj!) - fOverhead2 = NewValue2; // informacja o sposobie jazdy (-1=normalnie, 0=bez pr�du, >0=z - // opuszczonym i ograniczeniem pr�dko�ci) - return true; // za�atwione + NewValue1; // informacja o napięciu w sieci trakcyjnej (0=brak drutu, zatrzymaj!) + fOverhead2 = NewValue2; // informacja o sposobie jazdy (-1=normalnie, 0=bez prądu, >0=z + // opuszczonym i ograniczeniem prędkości) + return true; // załatwione } - else if (NewCommand == "Emergency_brake") // wymuszenie zatrzymania, niezale�nie kto prowadzi - { // Ra: no nadal nie jest zbyt pi�knie + else if (NewCommand == "Emergency_brake") // wymuszenie zatrzymania, niezależnie kto prowadzi + { // Ra: no nadal nie jest zbyt pięknie SetVelocity(0, 0, reason); mvOccupied->PutCommand("Emergency_brake", 1.0, 1.0, mvOccupied->Loc); - return true; // za�atwione + return true; // załatwione } else if (NewCommand.compare(0, 10, "Timetable:") == 0) - { // przypisanie nowego rozk�adu jazdy, r�wnie� prowadzonemu przez u�ytkownika - NewCommand = NewCommand.erase(0, 10); // zostanie nazwa pliku z rozk�adem + { // przypisanie nowego rozkładu jazdy, również prowadzonemu przez użytkownika + NewCommand.erase(0, 10); // zostanie nazwa pliku z rozkładem #if LOGSTOPS WriteLog("New timetable for " + pVehicle->asName + ": " + NewCommand); // informacja #endif if (!TrainParams) - TrainParams = new TTrainParameters(NewCommand); // rozk�ad jazdy + TrainParams = new TTrainParameters(NewCommand); // rozkład jazdy else - TrainParams->NewName(NewCommand); // czy�ci tabelk� przystank�w + TrainParams->NewName(NewCommand); // czyści tabelkę przystanków delete tsGuardSignal; tsGuardSignal = NULL; // wywalenie kierownika if (NewCommand != "none") { if (!TrainParams->LoadTTfile( std::string(Global::asCurrentSceneryPath.c_str()), floor(NewValue2 + 0.5), - NewValue1)) // pierwszy parametr to przesuni�cie rozk�adu w czasie + NewValue1)) // pierwszy parametr to przesunięcie rozkładu w czasie { if (ConversionError == -8) ErrorLog("Missed timetable: " + NewCommand); @@ -3013,13 +2963,13 @@ bool TController::PutCommand(std::string NewCommand, double NewValue1, double Ne { // inicjacja pierwszego przystanku i pobranie jego nazwy TrainParams->UpdateMTable(GlobalTime->hh, GlobalTime->mm, TrainParams->NextStationName); - TrainParams->StationIndexInc(); // przej�cie do nast�pnej + TrainParams->StationIndexInc(); // przejście do następnej iStationStart = TrainParams->StationIndex; asNextStop = TrainParams->NextStop(); - iDrivigFlags |= movePrimary; // skoro dosta� rozk�ad, to jest teraz g��wnym + iDrivigFlags |= movePrimary; // skoro dostał rozkład, to jest teraz głównym NewCommand = Global::asCurrentSceneryPath + NewCommand + ".wav"; // na razie jeden if (FileExists(NewCommand)) - { // wczytanie d�wi�ku odjazdu podawanego bezpo�renido + { // wczytanie dźwięku odjazdu podawanego bezpośrenido tsGuardSignal = new TTextSound(NewCommand.c_str(), 30, pVehicle->GetPosition().x, pVehicle->GetPosition().y, pVehicle->GetPosition().z, false); @@ -3029,50 +2979,50 @@ bool TController::PutCommand(std::string NewCommand, double NewValue1, double Ne else { NewCommand = NewCommand.insert(NewCommand.find_last_of("."), - "radio"); // wstawienie przed kropk� + "radio"); // wstawienie przed kropkč if (FileExists(NewCommand)) - { // wczytanie d�wi�ku odjazdu w wersji radiowej (s�ycha� tylko w kabinie) + { // wczytanie dźwięku odjazdu w wersji radiowej (słychać tylko w kabinie) tsGuardSignal = new TTextSound( NewCommand.c_str(), -1, pVehicle->GetPosition().x, pVehicle->GetPosition().y, pVehicle->GetPosition().z, false); iGuardRadio = iRadioChannel; } } - NewCommand = TrainParams->Relation2; // relacja docelowa z rozk�adu + NewCommand = TrainParams->Relation2; // relacja docelowa z rozkładu } - // jeszcze poustawia� tekstury na wy�wietlaczach + // jeszcze poustawiać tekstury na wyświetlaczach TDynamicObject *p = pVehicles[0]; while (p) { p->DestinationSet(NewCommand, TrainParams->TrainName); // relacja docelowa - p = p->Next(); // pojazd pod��czony od ty�u (licz�c od czo�a) + p = p->Next(); // pojazd podłączony od tyłu (licząc od czoła) } } - if (NewLocation) // je�li podane wsp��rz�dne eventu/kom�rki ustawiaj�cej rozk�ad (trainset + if (NewLocation) // jeśli podane współrzędne eventu/komórki ustawiającej rozkład (trainset // nie podaje) { - vector3 v = *NewLocation - pVehicle->GetPosition(); // wektor do punktu steruj�cego - vector3 d = pVehicle->VectorFront(); // wektor wskazuj�cy prz�d + vector3 v = *NewLocation - pVehicle->GetPosition(); // wektor do punktu sterującego + vector3 d = pVehicle->VectorFront(); // wektor wskazujący przód iDirectionOrder = ((v.x * d.x + v.z * d.z) * NewValue1 > 0) ? 1 : - -1; // do przodu, gdy iloczyn skalarny i pr�dko�� dodatnie + -1; // do przodu, gdy iloczyn skalarny i prędkość dodatnie /* - if (NewValue1!=0.0) //je�li ma jecha� - if (iDirectionOrder==0) //a kierunek nie by� okre�lony (normalnie okre�lany przez + if (NewValue1!=0.0) //jeśli ma jechać + if (iDirectionOrder==0) //a kierunek nie był określony (normalnie określany przez reardriver/headdriver) - iDirectionOrder=NewValue1>0?1:-1; //ustalenie kierunku jazdy wzgl�dem sprz�g�w + iDirectionOrder=NewValue1>0?1:-1; //ustalenie kierunku jazdy względem sprzęgów else - if (NewValue1<0) //dla ujemnej pr�dko�ci - iDirectionOrder=-iDirectionOrder; //ma jecha� w drug� stron� + if (NewValue1<0) //dla ujemnej prędkości + iDirectionOrder=-iDirectionOrder; //ma jechać w drugą stronę */ - if (AIControllFlag) // je�li prowadzi komputer - Activation(); // umieszczenie obs�ugi we w�a�ciwym cz�onie, ustawienie nawrotnika w - // prz�d + if (AIControllFlag) // jeśli prowadzi komputer + Activation(); // umieszczenie obsługi we właściwym członie, ustawienie nawrotnika w + // przód } /* else if (!iDirectionOrder) - {//je�li nie ma kierunku, trzeba ustali� + {//jeśli nie ma kierunku, trzeba ustalić if (mvOccupied->V!=0.0) iDirectionOrder=mvOccupied->V>0?1:-1; else @@ -3080,21 +3030,21 @@ bool TController::PutCommand(std::string NewCommand, double NewValue1, double Ne if (!iDirectionOrder) iDirectionOrder=1; } */ - // je�li wysy�ane z Trainset, to wszystko jest ju� odpowiednio ustawione - // if (!NewLocation) //je�li wysy�ane z Trainset - // if (mvOccupied->CabNo*mvOccupied->V*NewValue1<0) //je�li zadana pr�dko�� niezgodna z + // jeśli wysyłane z Trainset, to wszystko jest już odpowiednio ustawione + // if (!NewLocation) //jeśli wysyłane z Trainset + // if (mvOccupied->CabNo*mvOccupied->V*NewValue1<0) //jeśli zadana prędkość niezgodna z // aktualnym kierunkiem jazdy - // DirectionForward(false); //jedziemy do ty�u (nawrotnik do ty�u) - // CheckVehicles(); //sprawdzenie sk�adu, AI zapali �wiat�a - TableClear(); // wyczyszczenie tabelki pr�dko�ci, bo na nowo trzeba okre�li� kierunek i - // sprawdzi� przystanki + // DirectionForward(false); //jedziemy do tyłu (nawrotnik do tyłu) + // CheckVehicles(); //sprawdzenie składu, AI zapali światła + TableClear(); // wyczyszczenie tabelki prędkości, bo na nowo trzeba określić kierunek i + // sprawdzić przystanki OrdersInit( - fabs(NewValue1)); // ustalenie tabelki komend wg rozk�adu oraz pr�dko�ci pocz�tkowej + fabs(NewValue1)); // ustalenie tabelki komend wg rozkładu oraz prędkości początkowej // if (NewValue1!=0.0) if (!AIControllFlag) DirectionForward(NewValue1>0.0); //ustawienie - // nawrotnika u�ytkownikowi (propaguje si� do cz�on�w) + // nawrotnika użytkownikowi (propaguje się do członów) // if (NewValue1>0) // TrainNumber=floor(NewValue1); //i co potem ??? - return true; // za�atwione + return true; // załatwione } if (NewCommand == "SetVelocity") { @@ -3103,17 +3053,17 @@ bool TController::PutCommand(std::string NewCommand, double NewValue1, double Ne if ((NewValue1 != 0.0) && (OrderList[OrderPos] != Obey_train)) { // o ile jazda if (!iEngineActive) - OrderNext(Prepare_engine); // trzeba odpali� silnik najpierw, �wiat�a ustawi + OrderNext(Prepare_engine); // trzeba odpalić silnik najpierw, światła ustawi // JumpToNextOrder() - // if (OrderList[OrderPos]!=Obey_train) //je�li nie poci�gowa - OrderNext(Obey_train); // to uruchomi� jazd� poci�gow� (od razu albo po odpaleniu + // if (OrderList[OrderPos]!=Obey_train) //jeśli nie pociągowa + OrderNext(Obey_train); // to uruchomić jazdę pociągową (od razu albo po odpaleniu // silnika - OrderCheck(); // je�li jazda poci�gowa teraz, to wykona� niezb�dne operacje + OrderCheck(); // jeśli jazda pociągowa teraz, to wykonać niezbędne operacje } - if (NewValue1 != 0.0) // je�li jecha� - iDrivigFlags &= ~moveStopHere; // podje�anie do semafor�w zezwolone + if (NewValue1 != 0.0) // jeśli jechać + iDrivigFlags &= ~moveStopHere; // podjeżanie do semaforów zezwolone else - iDrivigFlags |= moveStopHere; // sta� do momentu podania komendy jazdy + iDrivigFlags |= moveStopHere; // stać do momentu podania komendy jazdy SetVelocity(NewValue1, NewValue2, reason); // bylo: nic nie rob bo SetVelocity zewnetrznie // jest wywolywane przez dynobj.cpp } @@ -3126,148 +3076,148 @@ bool TController::PutCommand(std::string NewCommand, double NewValue1, double Ne */ } else if (NewCommand == "ShuntVelocity") - { // uruchomienie jazdy manewrowej b�d� zmiana pr�dko�ci + { // uruchomienie jazdy manewrowej bądź zmiana prędkości if (NewLocation) vCommandLocation = *NewLocation; // if (OrderList[OrderPos]=Obey_train) and (NewValue1<>0)) if (!iEngineActive) - OrderNext(Prepare_engine); // trzeba odpali� silnik najpierw + OrderNext(Prepare_engine); // trzeba odpalić silnik najpierw OrderNext(Shunt); // zamieniamy w aktualnej pozycji, albo dodajey za odpaleniem silnika if (NewValue1 != 0.0) { - // if (iVehicleCount>=0) WriteLog("Skasowano ilos� wagon�w w ShuntVelocity!"); - iVehicleCount = -2; // warto�� neutralna - CheckVehicles(); // zabra� to do OrderCheck() + // if (iVehicleCount>=0) WriteLog("Skasowano ilosć wagonów w ShuntVelocity!"); + iVehicleCount = -2; // wartość neutralna + CheckVehicles(); // zabrać to do OrderCheck() } - // dla pr�dko�ci ujemnej przestawi� nawrotnik do ty�u? ale -1=brak ograniczenia !!!! + // dla prędkości ujemnej przestawić nawrotnik do tyłu? ale -1=brak ograniczenia !!!! // if (iDrivigFlags&movePress) WriteLog("Skasowano docisk w ShuntVelocity!"); iDrivigFlags &= ~movePress; // bez dociskania SetVelocity(NewValue1, NewValue2, reason); if (NewValue1 != 0.0) - iDrivigFlags &= ~moveStopHere; // podje�anie do semafor�w zezwolone + iDrivigFlags &= ~moveStopHere; // podjeżanie do semaforów zezwolone else - iDrivigFlags |= moveStopHere; // ma sta� w miejscu - if (fabs(NewValue1) > 2.0) // o ile warto�� jest sensowna (-1 nie jest konkretn� warto�ci�) - fShuntVelocity = fabs(NewValue1); // zapami�tanie obowi�zuj�cej pr�dko�ci dla manewr�w + iDrivigFlags |= moveStopHere; // ma stać w miejscu + if (fabs(NewValue1) > 2.0) // o ile wartość jest sensowna (-1 nie jest konkretną wartością) + fShuntVelocity = fabs(NewValue1); // zapamiętanie obowiązującej prędkości dla manewrów } else if (NewCommand == "Wait_for_orders") - { // oczekiwanie; NewValue1 - czas oczekiwania, -1 = na inn� komend� + { // oczekiwanie; NewValue1 - czas oczekiwania, -1 = na inną komendę if (NewValue1 > 0.0 ? NewValue1 > fStopTime : false) - fStopTime = NewValue1; // Ra: w��czenie czekania bez zmiany komendy + fStopTime = NewValue1; // Ra: włączenie czekania bez zmiany komendy else - OrderList[OrderPos] = Wait_for_orders; // czekanie na komend� (albo da� OrderPos=0) + OrderList[OrderPos] = Wait_for_orders; // czekanie na komendę (albo dać OrderPos=0) } else if (NewCommand == "Prepare_engine") - { // w��czenie albo wy��czenie silnika (w szerokim sensie) - OrdersClear(); // czyszczenie tabelki rozkaz�w, aby nic dalej nie robi� + { // włączenie albo wyłączenie silnika (w szerokim sensie) + OrdersClear(); // czyszczenie tabelki rozkazów, aby nic dalej nie robił if (NewValue1 == 0.0) - OrderNext(Release_engine); // wy��czy� silnik (przygotowa� pojazd do jazdy) + OrderNext(Release_engine); // wyłączyć silnik (przygotować pojazd do jazdy) else if (NewValue1 > 0.0) - OrderNext(Prepare_engine); // odpali� silnik (wy��czy� wszystko, co si� da) - // po za��czeniu przejdzie do kolejnej komendy, po wy��czeniu na Wait_for_orders + OrderNext(Prepare_engine); // odpalić silnik (wyłączyć wszystko, co się da) + // po załączeniu przejdzie do kolejnej komendy, po wyłączeniu na Wait_for_orders } else if (NewCommand == "Change_direction") { - TOrders o = OrderList[OrderPos]; // co robi� przed zmian� kierunku + TOrders o = OrderList[OrderPos]; // co robił przed zmianą kierunku if (!iEngineActive) - OrderNext(Prepare_engine); // trzeba odpali� silnik najpierw + OrderNext(Prepare_engine); // trzeba odpalić silnik najpierw if (NewValue1 == 0.0) - iDirectionOrder = -iDirection; // zmiana na przeciwny ni� obecny - else if (NewLocation) // je�li podane wsp��rz�dne eventu/kom�rki ustawiaj�cej rozk�ad + iDirectionOrder = -iDirection; // zmiana na przeciwny niż obecny + else if (NewLocation) // jeśli podane współrzędne eventu/komórki ustawiającej rozkład // (trainset nie podaje) { - vector3 v = *NewLocation - pVehicle->GetPosition(); // wektor do punktu steruj�cego - vector3 d = pVehicle->VectorFront(); // wektor wskazuj�cy prz�d + vector3 v = *NewLocation - pVehicle->GetPosition(); // wektor do punktu sterującego + vector3 d = pVehicle->VectorFront(); // wektor wskazujący przód iDirectionOrder = ((v.x * d.x + v.z * d.z) * NewValue1 > 0) ? 1 : - -1; // do przodu, gdy iloczyn skalarny i pr�dko�� dodatnie + -1; // do przodu, gdy iloczyn skalarny i prędkość dodatnie // iDirectionOrder=1; else if (NewValue1<0.0) iDirectionOrder=-1; } if (iDirectionOrder != iDirection) OrderNext(Change_direction); // zadanie komendy do wykonania - if (o >= Shunt) // je�li jazda manewrowa albo poci�gowa - OrderNext(o); // to samo robi� po zmianie - else if (!o) // je�li wcze�niej by�o czekanie + if (o >= Shunt) // jeśli jazda manewrowa albo pociągowa + OrderNext(o); // to samo robić po zmianie + else if (!o) // jeśli wcześniej było czekanie OrderNext(Shunt); // to dalej jazda manewrowa - if (mvOccupied->Vel >= 1.0) // je�li jedzie - iDrivigFlags &= ~moveStartHorn; // to bez tr�bienia po ruszeniu z zatrzymania - // Change_direction wykona si� samo i nast�pnie przejdzie do kolejnej komendy + if (mvOccupied->Vel >= 1.0) // jeśli jedzie + iDrivigFlags &= ~moveStartHorn; // to bez trąbienia po ruszeniu z zatrzymania + // Change_direction wykona się samo i następnie przejdzie do kolejnej komendy } else if (NewCommand == "Obey_train") { if (!iEngineActive) - OrderNext(Prepare_engine); // trzeba odpali� silnik najpierw + OrderNext(Prepare_engine); // trzeba odpalić silnik najpierw OrderNext(Obey_train); // if (NewValue1>0) TrainNumber=floor(NewValue1); //i co potem ??? - OrderCheck(); // je�li jazda poci�gowa teraz, to wykona� niezb�dne operacje + OrderCheck(); // jeśli jazda pociągowa teraz, to wykonać niezbędne operacje } else if (NewCommand == "Shunt") - { // NewValue1 - ilo�� wagon�w (-1=wszystkie); NewValue2: 0=odczep, 1..63=do��cz, -1=bez zmian - //-3,-y - pod��czy� do ca�ego stoj�cego sk�adu (sprz�giem y>=1), zmieni� kierunek i czeka� w - // trybie poci�gowym - //-2,-y - pod��czy� do ca�ego stoj�cego sk�adu (sprz�giem y>=1), zmieni� kierunek i czeka� - //-2, y - pod��czy� do ca�ego stoj�cego sk�adu (sprz�giem y>=1) i czeka� - //-1,-y - pod��czy� do ca�ego stoj�cego sk�adu (sprz�giem y>=1) i jecha� w powrotn� stron� - //-1, y - pod��czy� do ca�ego stoj�cego sk�adu (sprz�giem y>=1) i jecha� dalej - //-1, 0 - tryb manewrowy bez zmian (odczepianie z pozostawieniem wagon�w nie ma sensu) + { // NewValue1 - ilość wagonów (-1=wszystkie); NewValue2: 0=odczep, 1..63=dołącz, -1=bez zmian + //-3,-y - podłączyć do całego stojącego składu (sprzęgiem y>=1), zmienić kierunek i czekać w + // trybie pociągowym + //-2,-y - podłączyć do całego stojącego składu (sprzęgiem y>=1), zmienić kierunek i czekać + //-2, y - podłączyć do całego stojącego składu (sprzęgiem y>=1) i czekać + //-1,-y - podłączyć do całego stojącego składu (sprzęgiem y>=1) i jechać w powrotną stronę + //-1, y - podłączyć do całego stojącego składu (sprzęgiem y>=1) i jechać dalej + //-1, 0 - tryb manewrowy bez zmian (odczepianie z pozostawieniem wagonów nie ma sensu) // 0, 0 - odczepienie lokomotywy - // 1,-y - pod��czy� si� do sk�adu (sprz�giem y>=1), a nast�pnie odczepi� i zabra� (x) - // wagon�w + // 1,-y - podłączyć się do składu (sprzęgiem y>=1), a następnie odczepić i zabrać (x) + // wagonów // 1, 0 - odczepienie lokomotywy z jednym wagonem - iDrivigFlags &= ~moveStopHere; // podje�anie do semafor�w zezwolone + iDrivigFlags &= ~moveStopHere; // podjeżanie do semaforów zezwolone if (!iEngineActive) - OrderNext(Prepare_engine); // trzeba odpali� silnik najpierw - if (NewValue2 != 0) // je�li podany jest sprz�g + OrderNext(Prepare_engine); // trzeba odpalić silnik najpierw + if (NewValue2 != 0) // jeśli podany jest sprzęg { - iCoupler = floor(fabs(NewValue2)); // jakim sprz�giem - OrderNext(Connect); // najpierw po��cz pojazdy - if (NewValue1 >= 0.0) // je�li ilo�� wagon�w inna ni� wszystkie - { // to po podpi�ciu nale�y si� odczepi� - iDirectionOrder = -iDirection; // zmiana na ci�gni�cie - OrderPush(Change_direction); // najpierw zmie� kierunek, bo odczepiamy z ty�u - OrderPush(Disconnect); // a odczep ju� po zmianie kierunku + iCoupler = floor(fabs(NewValue2)); // jakim sprzęgiem + OrderNext(Connect); // najpierw połącz pojazdy + if (NewValue1 >= 0.0) // jeśli ilość wagonów inna niż wszystkie + { // to po podpięciu należy się odczepić + iDirectionOrder = -iDirection; // zmiana na ciągnięcie + OrderPush(Change_direction); // najpierw zmień kierunek, bo odczepiamy z tyłu + OrderPush(Disconnect); // a odczep już po zmianie kierunku } - else if (NewValue2 < 0.0) // je�li wszystkie, a sprz�g ujemny, to tylko zmiana kierunku + else if (NewValue2 < 0.0) // jeśli wszystkie, a sprzęg ujemny, to tylko zmiana kierunku // po podczepieniu { // np. Shunt -1 -3 - iDirectionOrder = -iDirection; // jak si� podczepi, to jazda w przeciwn� stron� + iDirectionOrder = -iDirection; // jak się podczepi, to jazda w przeciwną stronę OrderNext(Change_direction); } WaitingTime = - 0.0; // nie ma co dalej czeka�, mo�na zatr�bi� i jecha�, chyba �e ju� jedzie + 0.0; // nie ma co dalej czekać, można zatrąbić i jechać, chyba że już jedzie } - else // if (NewValue2==0.0) //zerowy sprz�g - if (NewValue1 >= 0.0) // je�li ilo�� wagon�w inna ni� wszystkie - { // b�dzie odczepianie, ale je�li wagony s� z przodu, to trzeba najpierw zmieni� kierunek + else // if (NewValue2==0.0) //zerowy sprzęg + if (NewValue1 >= 0.0) // jeśli ilość wagonów inna niż wszystkie + { // będzie odczepianie, ale jeśli wagony są z przodu, to trzeba najpierw zmienić kierunek if ((mvOccupied->Couplers[mvOccupied->DirAbsolute > 0 ? 1 : 0].CouplingFlag == - 0) ? // z ty�u nic + 0) ? // z tyłu nic (mvOccupied->Couplers[mvOccupied->DirAbsolute > 0 ? 0 : 1].CouplingFlag > 0) : - false) // a z przodu sk�ad + false) // a z przodu skład { - iDirectionOrder = -iDirection; // zmiana na ci�gni�cie - OrderNext(Change_direction); // najpierw zmie� kierunek (zast�pi Disconnect) - OrderPush(Disconnect); // a odczep ju� po zmianie kierunku + iDirectionOrder = -iDirection; // zmiana na ciągnięcie + OrderNext(Change_direction); // najpierw zmień kierunek (zastąpi Disconnect) + OrderPush(Disconnect); // a odczep już po zmianie kierunku } else if (mvOccupied->Couplers[mvOccupied->DirAbsolute > 0 ? 1 : 0].CouplingFlag > - 0) // z ty�u co� - OrderNext(Disconnect); // jak ci�gnie, to tylko odczep (NewValue1) wagon�w + 0) // z tyłu coś + OrderNext(Disconnect); // jak ciągnie, to tylko odczep (NewValue1) wagonów WaitingTime = - 0.0; // nie ma co dalej czeka�, mo�na zatr�bi� i jecha�, chyba �e ju� jedzie + 0.0; // nie ma co dalej czekać, można zatrąbić i jechać, chyba że już jedzie } if (NewValue1 == -1.0) { - iDrivigFlags &= ~moveStopHere; // ma jecha� - WaitingTime = 0.0; // nie ma co dalej czeka�, mo�na zatr�bi� i jecha� + iDrivigFlags &= ~moveStopHere; // ma jechać + WaitingTime = 0.0; // nie ma co dalej czekać, można zatrąbić i jechać } - if (NewValue1 < -1.5) // je�li -2/-3, czyli czekanie z ruszeniem na sygna� - iDrivigFlags |= moveStopHere; // nie podje�d�a� do semafora, je�li droga nie jest wolna + if (NewValue1 < -1.5) // jeśli -2/-3, czyli czekanie z ruszeniem na sygnał + iDrivigFlags |= moveStopHere; // nie podjeżdżać do semafora, jeśli droga nie jest wolna // (nie dotyczy Connect) - if (NewValue1 < -2.5) // je�li - OrderNext(Obey_train); // to potem jazda poci�gowa + if (NewValue1 < -2.5) // jeśli + OrderNext(Obey_train); // to potem jazda pociągowa else OrderNext(Shunt); // to potem manewruj dalej - CheckVehicles(); // sprawdzi� �wiat�a - // if ((iVehicleCount>=0)&&(NewValue1<0)) WriteLog("Skasowano ilos� wagon�w w Shunt!"); + CheckVehicles(); // sprawdzić światła + // if ((iVehicleCount>=0)&&(NewValue1<0)) WriteLog("Skasowano ilosć wagonów w Shunt!"); if (NewValue1 != iVehicleCount) iVehicleCount = floor(NewValue1); // i co potem ? - trzeba zaprogramowac odczepianie /* @@ -3288,7 +3238,7 @@ bool TController::PutCommand(std::string NewCommand, double NewValue1, double Ne { OrderPos = floor(NewValue1); if (!OrderPos) - OrderPos = 1; // zgodno�� wstecz: dopiero pierwsza uruchamia + OrderPos = 1; // zgodność wstecz: dopiero pierwsza uruchamia #if LOGORDERS WriteLog("--> Jump_to_order"); OrdersDump(); @@ -3304,47 +3254,47 @@ bool TController::PutCommand(std::string NewCommand, double NewValue1, double Ne } */ } - /* //ta komenda jest teraz skanowana, wi�c wysy�anie jej eventem nie ma sensu + /* //ta komenda jest teraz skanowana, więc wysyłanie jej eventem nie ma sensu else if (NewCommand=="OutsideStation") //wskaznik W5 { if (OrderList[OrderPos]==Obey_train) SetVelocity(NewValue1,NewValue2,stopOut); //koniec stacji - predkosc szlakowa else //manewry - zawracaj { - iDirectionOrder=-iDirection; //zmiana na przeciwny ni� obecny + iDirectionOrder=-iDirection; //zmiana na przeciwny niż obecny OrderNext(Change_direction); //zmiana kierunku OrderNext(Shunt); //a dalej manewry - iDrivigFlags&=~moveStartHorn; //bez tr�bienia po zatrzymaniu + iDrivigFlags&=~moveStartHorn; //bez trąbienia po zatrzymaniu } } */ else if (NewCommand == "Warning_signal") { - if (AIControllFlag) // poni�sza komenda nie jest wykonywana przez u�ytkownika + if (AIControllFlag) // poniższa komenda nie jest wykonywana przez użytkownika if (NewValue1 > 0) { - fWarningDuration = NewValue1; // czas tr�bienia - mvOccupied->WarningSignal = (NewValue2 > 1) ? 2 : 1; // wysoko�� tonu + fWarningDuration = NewValue1; // czas trąbienia + mvOccupied->WarningSignal = (NewValue2 > 1) ? 2 : 1; // wysokość tonu } } else if (NewCommand == "Radio_channel") - { // wyb�r kana�u radiowego (kt�rego powinien u�ywa� AI, r�czny maszynista musi go ustawi� sam) - if (NewValue1 >= 0) // warto�ci ujemne s� zarezerwowane, -1 = nie zmienia� kana�u + { // wybór kanału radiowego (którego powinien używać AI, ręczny maszynista musi go ustawić sam) + if (NewValue1 >= 0) // wartości ujemne są zarezerwowane, -1 = nie zmieniać kanału { iRadioChannel = NewValue1; if (iGuardRadio) - iGuardRadio = iRadioChannel; // kierownikowi te� zmieni� + iGuardRadio = iRadioChannel; // kierownikowi też zmienić } - // NewValue2 mo�e zawiera� dodatkowo oczekiwany kod odpowiedzi, np. dla W29 "nawi�za� - // ��czno�� radiow� z dy�urnym ruchu odcinkowym" + // NewValue2 może zawierać dodatkowo oczekiwany kod odpowiedzi, np. dla W29 "nawiązać + // łączność radiową z dyżurnym ruchu odcinkowym" } else - return false; // nierozpoznana - wys�a� bezpo�rednio do pojazdu - return true; // komenda zosta�a przetworzona + return false; // nierozpoznana - wysłać bezpośrednio do pojazdu + return true; // komenda została przetworzona }; void TController::PhysicsLog() -{ // zapis logu - na razie tylko wypisanie parametr�w +{ // zapis logu - na razie tylko wypisanie parametrów if (LogFile.is_open()) { #if LOGPRESS == 0 @@ -3376,113 +3326,113 @@ void TController::PhysicsLog() }; bool TController::UpdateSituation(double dt) -{ // uruchamia� przynajmniej raz na sekund� +{ // uruchamiać przynajmniej raz na sekundę if ((iDrivigFlags & movePrimary) == 0) return true; // pasywny nic nie robi double AbsAccS; - // double VelReduced; //o ile km/h mo�e przekroczy� dozwolon� pr�dko�� bez hamowania + // double VelReduced; //o ile km/h może przekroczyć dozwoloną prędkość bez hamowania bool UpdateOK = false; if (AIControllFlag) { // yb: zeby EP nie musial sie bawic z ciesnieniem w PG // if (mvOccupied->BrakeSystem==ElectroPneumatic) - // mvOccupied->PipePress=0.5; //yB: w SPKS s� poprawnie zrobione pozycje + // mvOccupied->PipePress=0.5; //yB: w SPKS są poprawnie zrobione pozycje if (mvControlling->SlippingWheels) { mvControlling->SandDoseOn(); // piasku! - // Controlling->SlippingWheels=false; //a to tu nie ma sensu, flaga u�ywana w dalszej - // cz��ci + // Controlling->SlippingWheels=false; //a to tu nie ma sensu, flaga używana w dalszej + // części } } - // ABu-160305 testowanie gotowo�ci do jazdy - // Ra: przeniesione z DynObj, sk�ad u�ytkownika te� jest testowany, �eby mu przekaza�, �e ma - // odhamowa� - Ready = true; // wst�pnie gotowy - fReady = 0.0; // za�o�enie, �e odhamowany - fAccGravity = 0.0; // przyspieszenie wynikaj�ce z pochylenia - double dy; // sk�adowa styczna grawitacji, w przedziale <0,1> - TDynamicObject *p = pVehicles[0]; // pojazd na czole sk�adu + // ABu-160305 testowanie gotowości do jazdy + // Ra: przeniesione z DynObj, skład użytkownika też jest testowany, żeby mu przekazać, że ma + // odhamować + Ready = true; // wstępnie gotowy + fReady = 0.0; // założenie, że odhamowany + fAccGravity = 0.0; // przyspieszenie wynikające z pochylenia + double dy; // składowa styczna grawitacji, w przedziale <0,1> + TDynamicObject *p = pVehicles[0]; // pojazd na czole składu while (p) - { // sprawdzenie odhamowania wszystkich po��czonych pojazd�w - if (Ready) // bo jak co� nie odhamowane, to dalej nie ma co sprawdza� + { // sprawdzenie odhamowania wszystkich połączonych pojazdów + if (Ready) // bo jak coś nie odhamowane, to dalej nie ma co sprawdzać // if (p->MoverParameters->BrakePress>=0.03*p->MoverParameters->MaxBrakePress) - if (p->MoverParameters->BrakePress >= 0.4) // wg UIC okre�lone sztywno na 0.04 + if (p->MoverParameters->BrakePress >= 0.4) // wg UIC określone sztywno na 0.04 { Ready = false; // nie gotowy - // Ra: odlu�nianie prze�adowanych lokomotyw, ci�gni�tych na zimno - prowizorka... - if (AIControllFlag) // sk�ad jak dot�d by� wyluzowany + // Ra: odluźnianie przeładowanych lokomotyw, ciągniętych na zimno - prowizorka... + if (AIControllFlag) // skład jak dotąd był wyluzowany { if (mvOccupied->BrakeCtrlPos == 0) // jest pozycja jazdy if ((p->MoverParameters->PipePress - 5.0) > - -0.1) // je�li ci�nienie jak dla jazdy + -0.1) // jeśli ciśnienie jak dla jazdy if (p->MoverParameters->Hamulec->GetCRP() > - p->MoverParameters->PipePress + 0.12) // za du�o w zbiorniku + p->MoverParameters->PipePress + 0.12) // za dużo w zbiorniku p->MoverParameters->BrakeReleaser(1); // indywidualne luzowanko - if (p->MoverParameters->Power > 0.01) // je�li ma silnik + if (p->MoverParameters->Power > 0.01) // jeśli ma silnik if (p->MoverParameters->FuseFlag) // wywalony nadmiarowy Need_TryAgain = true; // reset jak przy wywaleniu nadmiarowego } } if (fReady < p->MoverParameters->BrakePress) fReady = p->MoverParameters->BrakePress; // szukanie najbardziej zahamowanego - if ((dy = p->VectorFront().y) != 0.0) // istotne tylko dla pojazd�w na pochyleniu + if ((dy = p->VectorFront().y) != 0.0) // istotne tylko dla pojazdów na pochyleniu fAccGravity -= p->DirectionGet() * p->MoverParameters->TotalMassxg * - dy; // ci��ar razy sk�adowa styczna grawitacji - p = p->Next(); // pojazd pod��czony z ty�u (patrz�c od czo�a) + dy; // ciężar razy składowa styczna grawitacji + p = p->Next(); // pojazd podłączony z tyłu (patrząc od czoła) } if (iDirection) fAccGravity /= iDirection * - fMass; // si�� generuj� pojazdy na pochyleniu ale dzia�a ona ca�o�� sk�adu, wi�c a=F/m - if (!Ready) // v367: je�li wg powy�szych warunk�w sk�ad nie jest odhamowany - if (fAccGravity < -0.05) // je�li ma pod g�r� na tyle, by si� stoczy� - // if (mvOccupied->BrakePress<0.08) //to wystarczy, �e zadzia�aj� liniowe (nie ma ich + fMass; // siłę generują pojazdy na pochyleniu ale działa ona całość składu, więc a=F/m + if (!Ready) // v367: jeśli wg powyższych warunków skład nie jest odhamowany + if (fAccGravity < -0.05) // jeśli ma pod górę na tyle, by się stoczyć + // if (mvOccupied->BrakePress<0.08) //to wystarczy, że zadziałają liniowe (nie ma ich // jeszcze!!!) if (fReady < 0.8) // delikatniejszy warunek, obejmuje wszystkie wagony - Ready = true; //�eby uzna� za odhamowany + Ready = true; //żeby uznać za odhamowany HelpMeFlag = false; // Winger 020304 if (AIControllFlag) { if (mvControlling->EnginePowerSource.SourceType == CurrentCollector) { - if (mvOccupied->ScndPipePress > 4.3) // gdy g��wna spr��arka bezpiecznie nabije - // ci�nienie + if (mvOccupied->ScndPipePress > 4.3) // gdy główna sprężarka bezpiecznie nabije + // ciśnienie mvControlling->bPantKurek3 = - true; // to mo�na przestawi� kurek na zasilanie pantograf�w z g��wnej pneumatyki + true; // to można przestawić kurek na zasilanie pantografów z głównej pneumatyki fVoltage = 0.5 * (fVoltage + - fabs(mvControlling->RunningTraction.TractionVoltage)); // u�rednione napi�cie + fabs(mvControlling->RunningTraction.TractionVoltage)); // uśrednione napięcie // sieci: przy spadku - // poni�ej warto�ci - // minimalnej op��ni� + // poniżej wartości + // minimalnej opóźnić // rozruch o losowy // czas if (fVoltage < mvControlling->EnginePowerSource.CollectorParameters - .MinV) // gdy roz��czenie WS z powodu niskiego napi�cia - if (fActionTime >= 0) // je�li czas oczekiwania nie zosta� ustawiony + .MinV) // gdy rozłączenie WS z powodu niskiego napięcia + if (fActionTime >= 0) // jeśli czas oczekiwania nie został ustawiony fActionTime = - -2 - Random(10); // losowy czas oczekiwania przed ponownym za��czeniem jazdy + -2 - Random(10); // losowy czas oczekiwania przed ponownym załączeniem jazdy } if (mvOccupied->Vel > 0.0) - { // je�eli jedzie - if (iDrivigFlags & moveDoorOpened) // je�li drzwi otwarte - if (mvOccupied->Vel > 1.0) // nie zamyka� drzwi przy drganiach, bo zatrzymanie na W4 - // akceptuje niewielkie pr�dko�ci + { // jeżeli jedzie + if (iDrivigFlags & moveDoorOpened) // jeśli drzwi otwarte + if (mvOccupied->Vel > 1.0) // nie zamykać drzwi przy drganiach, bo zatrzymanie na W4 + // akceptuje niewielkie prędkości Doors(false); - // przy prowadzeniu samochodu trzeba ka�d� o� odsuwa� oddzielnie, inaczej kicha wychodzi - if (mvOccupied->CategoryFlag & 2) // je�li samoch�d - // if (fabs(mvOccupied->OffsetTrackH)Dim.W) //Ra: szeroko�� drogi tu - // powinna by�? + // przy prowadzeniu samochodu trzeba każdą oś odsuwać oddzielnie, inaczej kicha wychodzi + if (mvOccupied->CategoryFlag & 2) // jeśli samochód + // if (fabs(mvOccupied->OffsetTrackH)Dim.W) //Ra: szerokość drogi tu + // powinna być? if (!mvOccupied->ChangeOffsetH(-0.01 * mvOccupied->Vel * dt)) // ruch w poprzek // drogi mvOccupied->ChangeOffsetH(0.01 * mvOccupied->Vel * - dt); // Ra: co to mia�o by�, to nie wiem + dt); // Ra: co to miało być, to nie wiem if (mvControlling->EnginePowerSource.SourceType == CurrentCollector) { if ((fOverhead2 >= 0.0) || iOverheadZero) - { // je�li jazda bezpr�dowa albo z opuszczonym pantografem + { // jeśli jazda bezprądowa albo z opuszczonym pantografem while (DecSpeed(true)) - ; // zerowanie nap�du + ; // zerowanie napędu } if ((fOverhead2 > 0.0) || iOverheadDown) { // jazda z opuszczonymi pantografami @@ -3490,50 +3440,50 @@ bool TController::UpdateSituation(double dt) mvControlling->PantRear(false); } else - { // je�li nie trzeba opuszcza� pantograf�w - if (iDirection >= 0) // jak jedzie w kierunku sprz�gu 0 + { // jeśli nie trzeba opuszczać pantografów + if (iDirection >= 0) // jak jedzie w kierunku sprzęgu 0 mvControlling->PantRear(true); // jazda na tylnym else mvControlling->PantFront(true); } - if (mvOccupied->Vel > 10) // opuszczenie przedniego po rozp�dzeniu si� + if (mvOccupied->Vel > 10) // opuszczenie przedniego po rozpędzeniu się { if (mvControlling->EnginePowerSource.CollectorParameters.CollectorsNo > - 1) // o ile jest wi�cej ni� jeden - if (iDirection >= 0) // jak jedzie w kierunku sprz�gu 0 - { // poczeka� na podniesienie tylnego + 1) // o ile jest więcej niż jeden + if (iDirection >= 0) // jak jedzie w kierunku sprzęgu 0 + { // poczekać na podniesienie tylnego if (mvControlling->PantRearVolt != - 0.0) // czy jest napi�cie zasilaj�ce na tylnym? - mvControlling->PantFront(false); // opuszcza od sprz�gu 0 + 0.0) // czy jest napięcie zasilające na tylnym? + mvControlling->PantFront(false); // opuszcza od sprzęgu 0 } else - { // poczeka� na podniesienie przedniego + { // poczekać na podniesienie przedniego if (mvControlling->PantFrontVolt != - 0.0) // czy jest napi�cie zasilaj�ce na przednim? - mvControlling->PantRear(false); // opuszcza od sprz�gu 1 + 0.0) // czy jest napięcie zasilające na przednim? + mvControlling->PantRear(false); // opuszcza od sprzęgu 1 } } } } - if (iDrivigFlags & moveStartHornNow) // czy ma zatr�bi� przed ruszeniem? - if (Ready) // got�w do jazdy - if (iEngineActive) // jeszcze si� odpali� musi - if (fStopTime >= 0) // i nie musi czeka� - { // uruchomienie tr�bienia - fWarningDuration = 0.3; // czas tr�bienia - // if (AIControllFlag) //jak siedzi krasnoludek, to w��czy tr�bienie + if (iDrivigFlags & moveStartHornNow) // czy ma zatrąbić przed ruszeniem? + if (Ready) // gotów do jazdy + if (iEngineActive) // jeszcze się odpalić musi + if (fStopTime >= 0) // i nie musi czekać + { // uruchomienie trąbienia + fWarningDuration = 0.3; // czas trąbienia + // if (AIControllFlag) //jak siedzi krasnoludek, to włączy trąbienie mvOccupied->WarningSignal = - pVehicle->iHornWarning; // wysoko�� tonu (2=wysoki) - iDrivigFlags |= moveStartHornDone; // nie tr�bi� a� do ruszenia - iDrivigFlags &= ~moveStartHornNow; // tr�bienie zosta�o zorganizowane + pVehicle->iHornWarning; // wysokość tonu (2=wysoki) + iDrivigFlags |= moveStartHornDone; // nie trąbić aż do ruszenia + iDrivigFlags &= ~moveStartHornNow; // trąbienie zostało zorganizowane } } ElapsedTime += dt; WaitingTime += dt; fBrakeTime -= - dt; // wpisana warto�� jest zmniejszana do 0, gdy ujemna nale�y zmieni� nastaw� hamulca - fStopTime += dt; // zliczanie czasu postoju, nie ruszy dop�ki ujemne - fActionTime += dt; // czas u�ywany przy regulacji pr�dko�ci i zamykaniu drzwi + dt; // wpisana wartość jest zmniejszana do 0, gdy ujemna należy zmienić nastawę hamulca + fStopTime += dt; // zliczanie czasu postoju, nie ruszy dopóki ujemne + fActionTime += dt; // czas używany przy regulacji prędkości i zamykaniu drzwi if (WriteLogFlag) { if (LastUpdatedTime > deltalog) @@ -3548,56 +3498,56 @@ bool TController::UpdateSituation(double dt) else LastUpdatedTime = LastUpdatedTime + dt; } - // Ra: skanowanie r�wnie� dla prowadzonego r�cznie, aby podpowiedzie� pr�dko�� + // Ra: skanowanie również dla prowadzonego ręcznie, aby podpowiedzieć prędkość if ((LastReactionTime > Min0R(ReactionTime, 2.0))) { - // Ra: nie wiem czemu ReactionTime potrafi dosta� 12 sekund, to jest przegi�cie, bo prze�yna - // ST�J - // yB: ot�� jest to jedna trzecia czasu nape�niania na towarowym; mo�e si� przyda� przy - // wdra�aniu hamowania, �eby nie rusza�o kranem jak g�upie - // Ra: ale nie mo�e si� budzi� co p�� minuty, bo prze�yna semafory + // Ra: nie wiem czemu ReactionTime potrafi dostać 12 sekund, to jest przegięcie, bo przeżyna + // STÓJ + // yB: otóż jest to jedna trzecia czasu napełniania na towarowym; może się przydać przy + // wdrażaniu hamowania, żeby nie ruszało kranem jak głupie + // Ra: ale nie może się budzić co pół minuty, bo przeżyna semafory // Ra: trzeba by tak: - // 1. Ustali� istotn� odleg�o�� zainteresowania (np. 3�droga hamowania z V.max). + // 1. Ustalić istotną odległość zainteresowania (np. 3×droga hamowania z V.max). fBrakeDist = fDriverBraking * mvOccupied->Vel * - (40.0 + mvOccupied->Vel); // przybli�ona droga hamowania + (40.0 + mvOccupied->Vel); // przybliżona droga hamowania // dla hamowania -0.2 [m/ss] droga wynosi 0.389*Vel*Vel [km/h], czyli 600m dla 40km/h, 3.8km // dla 100km/h i 9.8km dla 160km/h // dla hamowania -0.4 [m/ss] droga wynosi 0.096*Vel*Vel [km/h], czyli 150m dla 40km/h, 1.0km // dla 100km/h i 2.5km dla 160km/h - // og�lnie droga hamowania przy sta�ym op��nieniu to Vel*Vel/(3.6*3.6*a) [m] - // fBrakeDist powinno by� wyznaczane dla danego sk�adu za pomoc� sieci neuronowych, w - // zale�no�ci od pr�dko�ci i si�y (ci�nienia) hamowania - // nast�pnie w drug� stron�, z drogi hamowania i chwilowej pr�dko�ci powinno by� wyznaczane - // zalecane ci�nienie + // ogólnie droga hamowania przy stałym opóźnieniu to Vel*Vel/(3.6*3.6*a) [m] + // fBrakeDist powinno być wyznaczane dla danego składu za pomocą sieci neuronowych, w + // zależności od prędkości i siły (ciśnienia) hamowania + // następnie w drugą stronę, z drogi hamowania i chwilowej prędkości powinno być wyznaczane + // zalecane ciśnienie if (fMass > 1000000.0) - fBrakeDist *= 2.0; // korekta dla ci��kich, bo prze�ynaj� - da to co�? + fBrakeDist *= 2.0; // korekta dla ciężkich, bo przeżynają - da to coś? if (mvOccupied->BrakeDelayFlag == bdelay_G) fBrakeDist = fBrakeDist + 2 * mvOccupied->Vel; // dla nastawienia G - // koniecznie nale�y wyd�u�y� drog� na czas reakcji + // koniecznie należy wydłużyć drogę na czas reakcji // double scanmax=(mvOccupied->Vel>0.0)?3*fDriverDist+fBrakeDist:10.0*fDriverDist; double scanmax = (mvOccupied->Vel > 5.0) ? 400 + fBrakeDist : - 30.0 * fDriverDist; // 1500m dla stoj�cych poci�g�w; Ra 2015-01: przy - // double scanmax = Max0R(400 + fBrakeDist, 1500); - // d�u�szej drodze skanowania AI je�dzi spokojniej - // 2. Sprawdzi�, czy tabelka pokrywa za�o�ony odcinek (nie musi, je�li jest STOP). - // 3. Sprawdzi�, czy trajektoria ruchu przechodzi przez zwrotnice - je�li tak, to sprawdzi�, - // czy stan si� nie zmieni�. - // 4. Ewentualnie uzupe�ni� tabelk� informacjami o sygna�ach i ograniczeniach, je�li si� - // "zu�y�a". - TableCheck(scanmax); // wype�nianie tabelki i aktualizacja odleg�o�ci - // 5. Sprawdzi� stany sygnalizacji zapisanej w tabelce, wyznaczy� pr�dko�ci. - // 6. Z tabelki wyznaczy� krytyczn� odleg�o�� i pr�dko�� (najmniejsze przyspieszenie). - // 7. Je�li jest inny pojazd z przodu, ewentualnie skorygowa� odleg�o�� i pr�dko��. - // 8. Ustali� cz�stotliwo�� �wiadomo�ci AI (zatrzymanie precyzyjne - cz��ciej, brak atrakcji + 30.0 * fDriverDist; // 1500m dla stojących pociągów; Ra 2015-01: przy + //double scanmax = Max0R(400 + fBrakeDist, 1500); + // dłuższej drodze skanowania AI jeździ spokojniej + // 2. Sprawdzić, czy tabelka pokrywa założony odcinek (nie musi, jeśli jest STOP). + // 3. Sprawdzić, czy trajektoria ruchu przechodzi przez zwrotnice - jeśli tak, to sprawdzić, + // czy stan się nie zmienił. + // 4. Ewentualnie uzupełnić tabelkę informacjami o sygnałach i ograniczeniach, jeśli się + // "zużyła". + TableCheck(scanmax); // wypełnianie tabelki i aktualizacja odległości + // 5. Sprawdzić stany sygnalizacji zapisanej w tabelce, wyznaczyć prędkości. + // 6. Z tabelki wyznaczyć krytyczną odległość i prędkość (najmniejsze przyspieszenie). + // 7. Jeśli jest inny pojazd z przodu, ewentualnie skorygować odległość i prędkość. + // 8. Ustalić częstotliwość świadomości AI (zatrzymanie precyzyjne - częściej, brak atrakcji // - rzadziej). if (AIControllFlag) { // tu bedzie logika sterowania if (mvOccupied->CommandIn.Command != "") if (!mvOccupied->RunInternalCommand()) // rozpoznaj komende bo lokomotywa jej nie // rozpoznaje - RecognizeCommand(); // samo czyta komend� wstawion� do pojazdu? - if (mvOccupied->SecuritySystem.Status > 1) // jak zadzia�a�o CA/SHP + RecognizeCommand(); // samo czyta komendę wstawioną do pojazdu? + if (mvOccupied->SecuritySystem.Status > 1) // jak zadziałało CA/SHP if (!mvOccupied->SecuritySystemReset()) // to skasuj // if // ((TestFlag(mvOccupied->SecuritySystem.Status,s_ebrake))&&(mvOccupied->BrakeCtrlPos==0)&&(AccDesired>0.0)) @@ -3605,25 +3555,25 @@ bool TController::UpdateSituation(double dt) TestFlag(mvOccupied->SecuritySystem.Status, s_CAebrake)) && (mvOccupied->BrakeCtrlPos == 0) && (AccDesired > 0.0)) mvOccupied->BrakeLevelSet( - 0); //!!! hm, mo�e po prostu normalnie sterowa� hamulcem? + 0); //!!! hm, może po prostu normalnie sterować hamulcem? } switch (OrderList[OrderPos]) - { // ustalenie pr�dko�ci przy doczepianiu i odczepianiu, dystans�w w pozosta�ych przypadkach - case Connect: // pod��czanie do sk�adu + { // ustalenie prędkości przy doczepianiu i odczepianiu, dystansów w pozostałych przypadkach + case Connect: // podłączanie do składu if (iDrivigFlags & moveConnect) - { // je�li stan�� ju� blisko, unikaj�c zderzenia i mo�na pr�bowa� pod��czy� + { // jeśli stanął już blisko, unikając zderzenia i można próbować podłączyć fMinProximityDist = -0.01; - fMaxProximityDist = 0.0; //[m] dojecha� maksymalnie - fVelPlus = 0.5; // dopuszczalne przekroczenie pr�dko�ci na ograniczeniu bez + fMaxProximityDist = 0.0; //[m] dojechać maksymalnie + fVelPlus = 0.5; // dopuszczalne przekroczenie prędkości na ograniczeniu bez // hamowania - fVelMinus = 0.5; // margines pr�dko�ci powoduj�cy za��czenie nap�du + fVelMinus = 0.5; // margines prędkości powodujący załączenie napędu if (AIControllFlag) - { // to robi tylko AI, wersj� dla cz�owieka trzeba dopiero zrobi� - // sprz�gi sprawdzamy w pierwszej kolejno�ci, bo jak po��czony, to koniec - bool ok; // true gdy si� pod��czy (uzyskany sprz�g b�dzie zgodny z ��danym) - if (pVehicles[0]->DirectionGet() > 0) // je�li sprz�g 0 - { // sprz�g 0 - pr�ba podczepienia - if (pVehicles[0]->MoverParameters->Couplers[0].Connected) // je�li jest co� + { // to robi tylko AI, wersję dla człowieka trzeba dopiero zrobić + // sprzęgi sprawdzamy w pierwszej kolejności, bo jak połączony, to koniec + bool ok; // true gdy się podłączy (uzyskany sprzęg będzie zgodny z żądanym) + if (pVehicles[0]->DirectionGet() > 0) // jeśli sprzęg 0 + { // sprzęg 0 - próba podczepienia + if (pVehicles[0]->MoverParameters->Couplers[0].Connected) // jeśli jest coś // wykryte (a // chyba jest, // nie?) @@ -3637,11 +3587,11 @@ bool TController::UpdateSituation(double dt) // WriteLog("CoupleDist[0]="+AnsiString(pVehicles[0]->MoverParameters->Couplers[0].CoupleDist)+", // Connected[0]="+AnsiString(pVehicles[0]->MoverParameters->Couplers[0].CouplingFlag)); ok = (pVehicles[0]->MoverParameters->Couplers[0].CouplingFlag == - iCoupler); // uda�o si�? (mog�o cz��ciowo) + iCoupler); // udało się? (mogło częściowo) } - else // if (pVehicles[0]->MoverParameters->DirAbsolute<0) //je�li sprz�g 1 - { // sprz�g 1 - pr�ba podczepienia - if (pVehicles[0]->MoverParameters->Couplers[1].Connected) // je�li jest co� + else // if (pVehicles[0]->MoverParameters->DirAbsolute<0) //jeśli sprzęg 1 + { // sprzęg 1 - próba podczepienia + if (pVehicles[0]->MoverParameters->Couplers[1].Connected) // jeśli jest coś // wykryte (a // chyba jest, // nie?) @@ -3655,238 +3605,238 @@ bool TController::UpdateSituation(double dt) // WriteLog("CoupleDist[1]="+AnsiString(Controlling->Couplers[1].CoupleDist)+", // Connected[0]="+AnsiString(Controlling->Couplers[1].CouplingFlag)); ok = (pVehicles[0]->MoverParameters->Couplers[1].CouplingFlag == - iCoupler); // uda�o si�? (mog�o cz��ciowo) + iCoupler); // udało się? (mogło częściowo) } if (ok) - { // je�eli zosta� pod��czony - iCoupler = 0; // dalsza jazda manewrowa ju� bez ��czenia - iDrivigFlags &= ~moveConnect; // zdj�cie flagi doczepiania - SetVelocity(0, 0, stopJoin); // wy��czy� przyspieszanie - CheckVehicles(); // sprawdzi� �wiat�a nowego sk�adu - JumpToNextOrder(); // wykonanie nast�pnej komendy + { // jeżeli został podłączony + iCoupler = 0; // dalsza jazda manewrowa już bez łączenia + iDrivigFlags &= ~moveConnect; // zdjęcie flagi doczepiania + SetVelocity(0, 0, stopJoin); // wyłączyć przyspieszanie + CheckVehicles(); // sprawdzić światła nowego składu + JumpToNextOrder(); // wykonanie następnej komendy } else - SetVelocity(2.0, 0.0); // jazda w ustawionym kierunku z pr�dko�ci� 2 (18s) - } // if (AIControllFlag) //koniec zblokowania, bo by�a zmienna lokalna - /* //Ra 2014-02: lepiej tam, bo jak tam si� od�wie�y sk�ad, to tu pVehicles[0] - b�dzie czym� innym + SetVelocity(2.0, 0.0); // jazda w ustawionym kierunku z prędkością 2 (18s) + } // if (AIControllFlag) //koniec zblokowania, bo była zmienna lokalna + /* //Ra 2014-02: lepiej tam, bo jak tam się odźwieży skład, to tu pVehicles[0] + będzie czymś innym else - {//je�li cz�owiek ma pod��czy�, to czekamy na zmian� stanu sprz�g�w na ko�cach - dotychczasowego sk�adu - bool ok; //true gdy si� pod��czy (uzyskany sprz�g b�dzie zgodny z ��danym) - if (pVehicles[0]->DirectionGet()>0) //je�li sprz�g 0 + {//jeśli człowiek ma podłączyć, to czekamy na zmianę stanu sprzęgów na końcach + dotychczasowego składu + bool ok; //true gdy się podłączy (uzyskany sprzęg będzie zgodny z żądanym) + if (pVehicles[0]->DirectionGet()>0) //jeśli sprzęg 0 ok=(pVehicles[0]->MoverParameters->Couplers[0].CouplingFlag>0); - //==iCoupler); //uda�o si�? (mog�o cz��ciowo) - else //if (pVehicles[0]->MoverParameters->DirAbsolute<0) //je�li sprz�g 1 + //==iCoupler); //udało się? (mogło częściowo) + else //if (pVehicles[0]->MoverParameters->DirAbsolute<0) //jeśli sprzęg 1 ok=(pVehicles[0]->MoverParameters->Couplers[1].CouplingFlag>0); - //==iCoupler); //uda�o si�? (mog�o cz��ciowo) + //==iCoupler); //udało się? (mogło częściowo) if (ok) - {//je�eli zosta� pod��czony - iDrivigFlags&=~moveConnect; //zdj�cie flagi doczepiania - JumpToNextOrder(); //wykonanie nast�pnej komendy + {//jeżeli został podłączony + iDrivigFlags&=~moveConnect; //zdjęcie flagi doczepiania + JumpToNextOrder(); //wykonanie następnej komendy } } */ } else - { // jak daleko, to jazda jak dla Shunt na kolizj� + { // jak daleko, to jazda jak dla Shunt na kolizję fMinProximityDist = 0.0; - fMaxProximityDist = 5.0; //[m] w takim przedziale odleg�o�ci powinien stan�� - fVelPlus = 2.0; // dopuszczalne przekroczenie pr�dko�ci na ograniczeniu bez + fMaxProximityDist = 5.0; //[m] w takim przedziale odległości powinien stanąć + fVelPlus = 2.0; // dopuszczalne przekroczenie prędkości na ograniczeniu bez // hamowania - fVelMinus = 1.0; // margines pr�dko�ci powoduj�cy za��czenie nap�du + fVelMinus = 1.0; // margines prędkości powodujący załączenie napędu // VelReduced=5; //[km/h] - // if (mvOccupied->Vel<0.5) //je�li ju� prawie stan�� + // if (mvOccupied->Vel<0.5) //jeśli już prawie stanął if (pVehicles[0]->fTrackBlock <= 20.0) // przy zderzeniu fTrackBlock nie jest miarodajne iDrivigFlags |= - moveConnect; // pocz�tek podczepiania, z wy��czeniem sprawdzania fTrackBlock + moveConnect; // początek podczepiania, z wyłączeniem sprawdzania fTrackBlock } break; case Disconnect: // 20.07.03 - manewrowanie wagonami fMinProximityDist = 1.0; fMaxProximityDist = 10.0; //[m] - fVelPlus = 1.0; // dopuszczalne przekroczenie pr�dko�ci na ograniczeniu bez hamowania - fVelMinus = 0.5; // margines pr�dko�ci powoduj�cy za��czenie nap�du + fVelPlus = 1.0; // dopuszczalne przekroczenie prędkości na ograniczeniu bez hamowania + fVelMinus = 0.5; // margines prędkości powodujący załączenie napędu if (AIControllFlag) { - if (iVehicleCount >= 0) // je�li by�a podana ilo�� wagon�w + if (iVehicleCount >= 0) // jeśli była podana ilość wagonów { - if (iDrivigFlags & movePress) // je�li dociskanie w celu odczepienia + if (iDrivigFlags & movePress) // jeśli dociskanie w celu odczepienia { // 3. faza odczepiania. - SetVelocity(2, 0); // jazda w ustawionym kierunku z pr�dko�ci� 2 + SetVelocity(2, 0); // jazda w ustawionym kierunku z prędkością 2 if ((mvControlling->MainCtrlPos > 0) || - (mvOccupied->BrakeSystem == ElectroPneumatic)) // je�li jazda + (mvOccupied->BrakeSystem == ElectroPneumatic)) // jeśli jazda { // WriteLog("Odczepianie w kierunku // "+AnsiString(mvOccupied->DirAbsolute)); TDynamicObject *p = pVehicle; // pojazd do odczepienia, w (pVehicle) siedzi AI - int d; // numer sprz�gu, kt�ry sprawdzamy albo odczepiamy - int n = iVehicleCount; // ile wagon�w ma zosta� + int d; // numer sprzęgu, który sprawdzamy albo odczepiamy + int n = iVehicleCount; // ile wagonów ma zostać do { // szukanie pojazdu do odczepienia d = p->DirectionGet() > 0 ? 0 : - 1; // numer sprz�gu od strony czo�a sk�adu + 1; // numer sprzęgu od strony czoła składu // if (p->MoverParameters->Couplers[d].CouplerType==Articulated) - // //je�li sprz�g typu w�zek (za ma�o) + // //jeśli sprzęg typu wózek (za mało) if (p->MoverParameters->Couplers[d].CouplingFlag & - ctrain_depot) // je�eli sprz�g zablokowany + ctrain_depot) // jeżeli sprzęg zablokowany // if (p->GetTrack()->) //a nie stoi na torze warsztatowym - // (ustali� po czym pozna� taki tor) - ++n; // to liczymy cz�ony jako jeden + // (ustalić po czym poznać taki tor) + ++n; // to liczymy człony jako jeden p->MoverParameters->BrakeReleaser( - 1); // wyluzuj pojazd, aby da�o si� dopycha� + 1); // wyluzuj pojazd, aby dało się dopychać p->MoverParameters->BrakeLevelSet( - 0); // hamulec na zero, aby nie hamowa� + 0); // hamulec na zero, aby nie hamował if (n) - { // je�li jeszcze nie koniec - p = p->Prev(); // kolejny w stron� czo�a sk�adu (licz�c od - // ty�u), bo dociskamy + { // jeśli jeszcze nie koniec + p = p->Prev(); // kolejny w stronę czoła składu (licząc od + // tyłu), bo dociskamy if (!p) iVehicleCount = -2, - n = 0; // nie ma co dalej sprawdza�, doczepianie zako�czone + n = 0; // nie ma co dalej sprawdzać, doczepianie zakończone } } while (n--); if (p ? p->MoverParameters->Couplers[d].CouplingFlag == 0 : true) - iVehicleCount = -2; // odczepiono, co by�o do odczepienia - else if (!p->Dettach(d)) // zwraca mask� bitow� po��czenia; usuwa - // w�asno�� pojazd�w - { // tylko je�li odepnie + iVehicleCount = -2; // odczepiono, co było do odczepienia + else if (!p->Dettach(d)) // zwraca maskę bitową połączenia; usuwa + // własność pojazdów + { // tylko jeśli odepnie // WriteLog("Odczepiony od strony "); iVehicleCount = -2; - } // a jak nie, to dociska� dalej + } // a jak nie, to dociskać dalej } - if (iVehicleCount >= 0) // zmieni si� po odczepieniu + if (iVehicleCount >= 0) // zmieni się po odczepieniu if (!mvOccupied->DecLocalBrakeLevel(1)) - { // doci�nij sklad + { // dociśnij sklad // WriteLog("Dociskanie"); - // mvOccupied->BrakeReleaser(); //wyluzuj lokomotyw� - // Ready=true; //zamiast sprawdzenia odhamowania ca�ego sk�adu + // mvOccupied->BrakeReleaser(); //wyluzuj lokomotywę + // Ready=true; //zamiast sprawdzenia odhamowania całego składu IncSpeed(); // dla (Ready)==false nie ruszy } } if ((mvOccupied->Vel == 0.0) && !(iDrivigFlags & movePress)) - { // 2. faza odczepiania: zmie� kierunek na przeciwny i doci�nij - // za rad� yB ustawiamy pozycj� 3 kranu (ruszanie kranem w innych miejscach - // powino zosta� wy��czone) - // WriteLog("Zahamowanie sk�adu"); + { // 2. faza odczepiania: zmień kierunek na przeciwny i dociśnij + // za radą yB ustawiamy pozycję 3 kranu (ruszanie kranem w innych miejscach + // powino zostać wyłączone) + // WriteLog("Zahamowanie składu"); // while ((mvOccupied->BrakeCtrlPos>3)&&mvOccupied->DecBrakeLevel()); // while ((mvOccupied->BrakeCtrlPos<3)&&mvOccupied->IncBrakeLevel()); mvOccupied->BrakeLevelSet(mvOccupied->BrakeSystem == ElectroPneumatic ? 1 : 3); double p = mvOccupied->BrakePressureActual - .PipePressureVal; // tu mo�e by� 0 albo -1 nawet + .PipePressureVal; // tu może być 0 albo -1 nawet if (p < 3.9) - p = 3.9; // TODO: zabezpieczenie przed dziwnymi CHK do czasu wyja�nienia + p = 3.9; // TODO: zabezpieczenie przed dziwnymi CHK do czasu wyjaśnienia // sensu 0 oraz -1 w tym miejscu if (mvOccupied->BrakeSystem == ElectroPneumatic ? mvOccupied->BrakePress > 2 : mvOccupied->PipePress < p + 0.1) - { // je�li w miar� zosta� zahamowany (ci�nienie mniejsze ni� podane na + { // jeśli w miarę został zahamowany (ciśnienie mniejsze niż podane na // pozycji 3, zwyle 0.37) if (mvOccupied->BrakeSystem == ElectroPneumatic) - mvOccupied->BrakeLevelSet(0); // wy��czenie EP, gdy wystarczy (mo�e - // nie by� potrzebne, bo na pocz�tku + mvOccupied->BrakeLevelSet(0); // wyłączenie EP, gdy wystarczy (może + // nie być potrzebne, bo na początku // jest) // WriteLog("Luzowanie lokomotywy i zmiana kierunku"); - mvOccupied->BrakeReleaser(1); // wyluzuj lokomotyw�; a ST45? + mvOccupied->BrakeReleaser(1); // wyluzuj lokomotywę; a ST45? mvOccupied->DecLocalBrakeLevel(10); // zwolnienie hamulca - iDrivigFlags |= movePress; // nast�pnie b�dzie dociskanie + iDrivigFlags |= movePress; // następnie będzie dociskanie DirectionForward(mvOccupied->ActiveDir < 0); // zmiana kierunku jazdy na przeciwny (dociskanie) - CheckVehicles(); // od razu zmieni� �wiat�a (zgasi�) - bez tego si� nie + CheckVehicles(); // od razu zmienić światła (zgasić) - bez tego się nie // odczepi - fStopTime = 0.0; // nie ma na co czeka� z odczepianiem + fStopTime = 0.0; // nie ma na co czekać z odczepianiem } } } // odczepiania - else // to poni�ej je�li ilo�� wagon�w ujemna + else // to poniżej jeśli ilość wagonów ujemna if (iDrivigFlags & movePress) - { // 4. faza odczepiania: zwolnij i zmie� kierunek - SetVelocity(0, 0, stopJoin); // wy��czy� przyspieszanie - if (!DecSpeed()) // je�li ju� bardziej wy��czy� si� nie da + { // 4. faza odczepiania: zwolnij i zmień kierunek + SetVelocity(0, 0, stopJoin); // wyłączyć przyspieszanie + if (!DecSpeed()) // jeśli już bardziej wyłączyć się nie da { // ponowna zmiana kierunku // WriteLog("Ponowna zmiana kierunku"); DirectionForward(mvOccupied->ActiveDir < - 0); // zmiana kierunku jazdy na w�a�ciwy + 0); // zmiana kierunku jazdy na właściwy iDrivigFlags &= ~movePress; // koniec dociskania - JumpToNextOrder(); // zmieni �wiat�a + JumpToNextOrder(); // zmieni światła TableClear(); // skanowanie od nowa - iDrivigFlags &= ~moveStartHorn; // bez tr�bienia przed ruszeniem - SetVelocity(fShuntVelocity, fShuntVelocity); // ustawienie pr�dko�ci jazdy + iDrivigFlags &= ~moveStartHorn; // bez trąbienia przed ruszeniem + SetVelocity(fShuntVelocity, fShuntVelocity); // ustawienie prędkości jazdy } } } break; case Shunt: - // na jak� odleglo�� i z jak� predko�ci� ma podjecha� + // na jaką odleglość i z jaką predkością ma podjechać fMinProximityDist = 2.0; fMaxProximityDist = 4.0; //[m] - fVelPlus = 2.0; // dopuszczalne przekroczenie pr�dko�ci na ograniczeniu bez hamowania - fVelMinus = 3.0; // margines pr�dko�ci powoduj�cy za��czenie nap�du + fVelPlus = 2.0; // dopuszczalne przekroczenie prędkości na ograniczeniu bez hamowania + fVelMinus = 3.0; // margines prędkości powodujący załączenie napędu if (fVelMinus > 0.1 * fShuntVelocity) fVelMinus = 0.1 * - fShuntVelocity; // by�y problemy z jazd� np. 3km/h podczas �adowania wagon�w + fShuntVelocity; // były problemy z jazdą np. 3km/h podczas ładowania wagonów break; case Obey_train: // na jaka odleglosc i z jaka predkoscia ma podjechac do przeszkody - if (mvOccupied->CategoryFlag & 1) // je�li poci�g + if (mvOccupied->CategoryFlag & 1) // jeśli pociąg { fMinProximityDist = 10.0; fMaxProximityDist = (mvOccupied->Vel > 0.0) ? 20.0 : - 50.0; //[m] jak stanie za daleko, to niech nie doci�ga paru metr�w + 50.0; //[m] jak stanie za daleko, to niech nie dociąga paru metrów if (iDrivigFlags & moveLate) { - fVelMinus = 1.0; // je�li sp��niony, to gna + fVelMinus = 1.0; // jeśli spóźniony, to gna fVelPlus = - 5.0; // dopuszczalne przekroczenie pr�dko�ci na ograniczeniu bez hamowania + 5.0; // dopuszczalne przekroczenie prędkości na ograniczeniu bez hamowania } else - { // gdy nie musi si� spr��a� + { // gdy nie musi się sprężać fVelMinus = - int(0.05 * VelDesired); // margines pr�dko�ci powoduj�cy za��czenie nap�du + int(0.05 * VelDesired); // margines prędkości powodujący załączenie napędu if (fVelMinus > 5.0) fVelMinus = 5.0; else if (fVelMinus < 1.0) - fVelMinus = 1.0; //�eby nie rusza� przy 0.1 + fVelMinus = 1.0; //żeby nie ruszał przy 0.1 fVelPlus = int( 0.5 + - 0.05 * VelDesired); // normalnie dopuszczalne przekroczenie to 5% pr�dko�ci + 0.05 * VelDesired); // normalnie dopuszczalne przekroczenie to 5% prędkości if (fVelPlus > 5.0) - fVelPlus = 5.0; // ale nie wi�cej ni� 5km/h + fVelPlus = 5.0; // ale nie więcej niż 5km/h } } - else // samochod (sokista te�) + else // samochod (sokista też) { fMinProximityDist = 7.0; fMaxProximityDist = 10.0; //[m] fVelPlus = - 10.0; // dopuszczalne przekroczenie pr�dko�ci na ograniczeniu bez hamowania - fVelMinus = 2.0; // margines pr�dko�ci powoduj�cy za��czenie nap�du + 10.0; // dopuszczalne przekroczenie prędkości na ograniczeniu bez hamowania + fVelMinus = 2.0; // margines prędkości powodujący załączenie napędu } // VelReduced=4; //[km/h] break; default: fMinProximityDist = 0.01; fMaxProximityDist = 2.0; //[m] - fVelPlus = 2.0; // dopuszczalne przekroczenie pr�dko�ci na ograniczeniu bez hamowania - fVelMinus = 5.0; // margines pr�dko�ci powoduj�cy za��czenie nap�du + fVelPlus = 2.0; // dopuszczalne przekroczenie prędkości na ograniczeniu bez hamowania + fVelMinus = 5.0; // margines prędkości powodujący załączenie napędu } // switch switch (OrderList[OrderPos]) { // co robi maszynista case Prepare_engine: // odpala silnik // if (AIControllFlag) - if (PrepareEngine()) // dla u�ytkownika tylko sprawdza, czy uruchomi� + if (PrepareEngine()) // dla użytkownika tylko sprawdza, czy uruchomił { // gotowy do drogi? SetDriverPsyche(); - // OrderList[OrderPos]:=Shunt; //Ra: to nie mo�e tak by�, bo scenerie robi� + // OrderList[OrderPos]:=Shunt; //Ra: to nie może tak być, bo scenerie robią // Jump_to_first_order i przechodzi w manewrowy - JumpToNextOrder(); // w nast�pnym jest Shunt albo Obey_train, moze te� by� + JumpToNextOrder(); // w następnym jest Shunt albo Obey_train, moze też być // Change_direction, Connect albo Disconnect // if OrderList[OrderPos]<>Wait_for_Orders) // if BrakeSystem=Pneumatic) //napelnianie uderzeniowe na wstepie @@ -3909,23 +3859,23 @@ bool TController::UpdateSituation(double dt) OrdersDump(); #endif break; - case Wait_for_orders: // je�li czeka, te� ma skanowa�, �eby odpali� si� od semafora + case Wait_for_orders: // jeśli czeka, też ma skanować, żeby odpalić się od semafora /* if ((mvOccupied->ActiveDir!=0)) - {//je�li jest wybrany kierunek jazdy, mo�na ustali� pr�dko�� jazdy - VelDesired=fVelMax; //wst�pnie pr�dko�� maksymalna dla pojazdu(-�w), b�dzie nast�pnie + {//jeśli jest wybrany kierunek jazdy, można ustalić prędkość jazdy + VelDesired=fVelMax; //wstępnie prędkość maksymalna dla pojazdu(-ów), będzie następnie ograniczana SetDriverPsyche(); //ustawia AccPreferred (potrzebne tu?) - //Ra: odczyt (ActualProximityDist), (VelNext) i (AccPreferred) z tabelki pr�dkosci - AccDesired=AccPreferred; //AccPreferred wynika z osobowo�ci mechanika - VelNext=VelDesired; //maksymalna pr�dko�� wynikaj�ca z innych czynnik�w ni� + //Ra: odczyt (ActualProximityDist), (VelNext) i (AccPreferred) z tabelki prędkosci + AccDesired=AccPreferred; //AccPreferred wynika z osobowości mechanika + VelNext=VelDesired; //maksymalna prędkość wynikająca z innych czynników niż trajektoria ruchu - ActualProximityDist=scanmax; //funkcja Update() mo�e pozostawi� warto�ci bez zmian - //hm, kiedy� semafory wysy�a�y SetVelocity albo ShuntVelocity i ustaw�y tak VelSignal - - a teraz jak to zrobi�? + ActualProximityDist=scanmax; //funkcja Update() może pozostawić wartości bez zmian + //hm, kiedyś semafory wysyłały SetVelocity albo ShuntVelocity i ustawły tak VelSignal + - a teraz jak to zrobić? TCommandType comm=TableUpdate(mvOccupied->Vel,VelDesired,ActualProximityDist,VelNext,AccDesired); - //szukanie optymalnych warto�ci + //szukanie optymalnych wartości } */ // break; @@ -3933,19 +3883,18 @@ bool TController::UpdateSituation(double dt) case Obey_train: case Connect: case Disconnect: - case Change_direction: // tryby wymagaj�ce jazdy - case Change_direction | Shunt: // zmiana kierunku podczas manewr�w - case Change_direction | Connect: // zmiana kierunku podczas pod��czania + case Change_direction: // tryby wymagające jazdy + case Change_direction | Shunt: // zmiana kierunku podczas manewrów + case Change_direction | Connect: // zmiana kierunku podczas podłączania if (OrderList[OrderPos] != Obey_train) // spokojne manewry { - VelSignal = - Global::Min0RSpeed(VelSignal, 40); // je�li manewry, to ograniczamy pr�dko�� + VelSignal = Global::Min0RSpeed(VelSignal, 40); // jeśli manewry, to ograniczamy prędkość if (AIControllFlag) - { // to poni�ej tylko dla AI - if (iVehicleCount >= 0) // je�li jest co odczepi� + { // to poniżej tylko dla AI + if (iVehicleCount >= 0) // jeśli jest co odczepić if (!(iDrivigFlags & movePress)) if (mvOccupied->Vel > 0.0) - if (!iCoupler) // je�li nie ma wcze�niej potrzeby podczepienia + if (!iCoupler) // jeśli nie ma wcześniej potrzeby podczepienia { SetVelocity(0, 0, stopJoin); // 1. faza odczepiania: zatrzymanie // WriteLog("Zatrzymanie w celu odczepienia"); @@ -3953,16 +3902,16 @@ bool TController::UpdateSituation(double dt) } } else - SetDriverPsyche(); // Ra: by�o w PrepareEngine(), potrzebne tu? - // no albo przypisujemy -WaitingExpireTime, albo por�wnujemy z WaitingExpireTime + SetDriverPsyche(); // Ra: było w PrepareEngine(), potrzebne tu? + // no albo przypisujemy -WaitingExpireTime, albo porównujemy z WaitingExpireTime // if // ((VelSignal==0.0)&&(WaitingTime>WaitingExpireTime)&&(mvOccupied->RunningTrack.Velmax!=0.0)) if (OrderList[OrderPos] & - (Shunt | Obey_train | Connect)) // odjecha� sam mo�e tylko je�li jest w trybie jazdy + (Shunt | Obey_train | Connect)) // odjechać sam może tylko jeśli jest w trybie jazdy { // automatyczne ruszanie po odstaniu albo spod SBL if ((VelSignal == 0.0) && (WaitingTime > 0.0) && (mvOccupied->RunningTrack.Velmax != 0.0)) - { // je�li stoi, a up�yn�� czas oczekiwania i tor ma niezerow� pr�dko�� + { // jeśli stoi, a upłynął czas oczekiwania i tor ma niezerową prędkość /* if (WriteLogFlag) { @@ -3978,40 +3927,40 @@ bool TController::UpdateSituation(double dt) WaitingTime = -WaitingExpireTime; // zakaz ruszania z miejsca bez otrzymania // wolnej drogi else if (mvOccupied->CategoryFlag & 1) - { // je�li poci�g + { // jeśli pociąg if (AIControllFlag) { PrepareEngine(); // zmieni ustawiony kierunek - SetVelocity(20, 20); // jak si� nasta�, to niech jedzie 20km/h + SetVelocity(20, 20); // jak się nastał, to niech jedzie 20km/h WaitingTime = 0.0; - fWarningDuration = 1.5; // a zatr�bi� troch� + fWarningDuration = 1.5; // a zatrąbić trochę mvOccupied->WarningSignal = 1; } else - SetVelocity(20, 20); // u�ytkownikowi zezwalamy jecha� + SetVelocity(20, 20); // użytkownikowi zezwalamy jechać } else - { // samoch�d ma sta�, a� dostanie odjazd, chyba �e stoi przez kolizj� + { // samochód ma stać, aż dostanie odjazd, chyba że stoi przez kolizję if (eStopReason == stopBlock) if (pVehicles[0]->fTrackBlock > fDriverDist) if (AIControllFlag) { PrepareEngine(); // zmieni ustawiony kierunek - SetVelocity(-1, -1); // jak si� nasta�, to niech jedzie + SetVelocity(-1, -1); // jak się nastał, to niech jedzie WaitingTime = 0.0; } else SetVelocity(-1, - -1); // u�ytkownikowi pozwalamy jecha� (samochodem?) + -1); // użytkownikowi pozwalamy jechać (samochodem?) } } else if ((VelSignal == 0.0) && (VelNext > 0.0) && (mvOccupied->Vel < 1.0)) - if (iCoupler ? true : (iDrivigFlags & moveStopHere) == 0) // Ra: tu jest co� nie + if (iCoupler ? true : (iDrivigFlags & moveStopHere) == 0) // Ra: tu jest coś nie // tak, bo bez tego - // warunku rusza�o w + // warunku ruszało w // manewrowym !!!! SetVelocity(VelNext, VelNext, stopSem); // omijanie SBL - } // koniec samoistnego odje�d�ania + } // koniec samoistnego odjeżdżania if (AIControllFlag) if ((HelpMeFlag) || (mvControlling->DamageFlag > 0)) { @@ -4029,23 +3978,23 @@ bool TController::UpdateSituation(double dt) } if (AIControllFlag) if (OrderList[OrderPos] & - Change_direction) // mo�e by� zmieszane z jeszcze jak�� komend� + Change_direction) // może być zmieszane z jeszcze jakąś komendą { // sprobuj zmienic kierunek - SetVelocity(0, 0, stopDir); // najpierw trzeba si� zatrzyma� + SetVelocity(0, 0, stopDir); // najpierw trzeba się zatrzymać if (mvOccupied->Vel < 0.1) - { // je�li si� zatrzyma�, to zmieniamy kierunek jazdy, a nawet kabin�/cz�on - Activation(); // ustawienie zadanego wcze�niej kierunku i ewentualne + { // jeśli się zatrzymał, to zmieniamy kierunek jazdy, a nawet kabinę/człon + Activation(); // ustawienie zadanego wcześniej kierunku i ewentualne // przemieszczenie AI PrepareEngine(); - JumpToNextOrder(); // nast�pnie robimy, co jest do zrobienia (Shunt albo + JumpToNextOrder(); // następnie robimy, co jest do zrobienia (Shunt albo // Obey_train) - if (OrderList[OrderPos] & (Shunt | Connect)) // je�li dalej mamy manewry - if ((iDrivigFlags & moveStopHere) == 0) // o ile nie sta� w miejscu - { // jecha� od razu w przeciwn� stron� i nie tr�bi� z tego tytu�u - iDrivigFlags &= ~moveStartHorn; // bez tr�bienia przed ruszeniem + if (OrderList[OrderPos] & (Shunt | Connect)) // jeśli dalej mamy manewry + if ((iDrivigFlags & moveStopHere) == 0) // o ile nie stać w miejscu + { // jechać od razu w przeciwną stronę i nie trąbić z tego tytułu + iDrivigFlags &= ~moveStartHorn; // bez trąbienia przed ruszeniem SetVelocity(fShuntVelocity, fShuntVelocity); // to od razu jedziemy } - // iDrivigFlags|=moveStartHorn; //a p��niej ju� mo�na tr�bi� + // iDrivigFlags|=moveStartHorn; //a później już można trąbić /* if (WriteLogFlag) { @@ -4059,103 +4008,100 @@ bool TController::UpdateSituation(double dt) // VelSignal:=0.0; //na wszelki wypadek niech zahamuje } // Change_direction (tylko dla AI) // ustalanie zadanej predkosci - if (AIControllFlag) // je�li prowadzi AI - if (!iEngineActive) // je�li silnik nie odpalony, to pr�bowa� naprawi� + if (AIControllFlag) // jeśli prowadzi AI + if (!iEngineActive) // jeśli silnik nie odpalony, to próbować naprawić if (OrderList[OrderPos] & (Change_direction | Connect | Disconnect | Shunt | - Obey_train)) // je�li co� ma robi� + Obey_train)) // jeśli coś ma robić PrepareEngine(); // to niech odpala do skutku - if (iDrivigFlags & moveActive) // je�li mo�e skanowa� sygna�y i reagowa� na komendy - { // je�li jest wybrany kierunek jazdy, mo�na ustali� pr�dko�� jazdy - // Ra: tu by jeszcze trzeba by�o wstawi� uzale�nienie (VelDesired) od odleg�o�ci od + if (iDrivigFlags & moveActive) // jeśli może skanować sygnały i reagować na komendy + { // jeśli jest wybrany kierunek jazdy, można ustalić prędkość jazdy + // Ra: tu by jeszcze trzeba było wstawić uzależnienie (VelDesired) od odległości od // przeszkody - // no chyba �eby to uwzgldni� ju� w (ActualProximityDist) - VelDesired = fVelMax; // wst�pnie pr�dko�� maksymalna dla pojazdu(-�w), b�dzie - // nast�pnie ograniczana - if (TrainParams) // je�li ma rozk�ad - if (TrainParams->TTVmax > 0.0) // i ograniczenie w rozk�adzie - VelDesired = Global::Min0RSpeed( - VelDesired, - TrainParams->TTVmax); // to nie przekracza� rozkladowej + // no chyba żeby to uwzgldnić już w (ActualProximityDist) + VelDesired = fVelMax; // wstępnie prędkość maksymalna dla pojazdu(-ów), będzie + // następnie ograniczana + if (TrainParams) // jeśli ma rozkład + if (TrainParams->TTVmax > 0.0) // i ograniczenie w rozkładzie + VelDesired = Global::Min0RSpeed(VelDesired, + TrainParams->TTVmax); // to nie przekraczać rozkladowej SetDriverPsyche(); // ustawia AccPreferred (potrzebne tu?) - // Ra: odczyt (ActualProximityDist), (VelNext) i (AccPreferred) z tabelki pr�dkosci - AccDesired = AccPreferred; // AccPreferred wynika z osobowo�ci mechanika - VelNext = VelDesired; // maksymalna pr�dko�� wynikaj�ca z innych czynnik�w ni� + // Ra: odczyt (ActualProximityDist), (VelNext) i (AccPreferred) z tabelki prędkosci + AccDesired = AccPreferred; // AccPreferred wynika z osobowości mechanika + VelNext = VelDesired; // maksymalna prędkość wynikająca z innych czynników niż // trajektoria ruchu - ActualProximityDist = scanmax; // funkcja Update() mo�e pozostawi� warto�ci bez + ActualProximityDist = scanmax; // funkcja Update() może pozostawić wartości bez // zmian - // hm, kiedy� semafory wysy�a�y SetVelocity albo ShuntVelocity i ustaw�y tak - // VelSignal - a teraz jak to zrobi�? + // hm, kiedyś semafory wysyłały SetVelocity albo ShuntVelocity i ustawły tak + // VelSignal - a teraz jak to zrobić? TCommandType comm = TableUpdate(VelDesired, ActualProximityDist, VelNext, - AccDesired); // szukanie optymalnych warto�ci - // if (VelSignal!=VelDesired) //je�eli pr�dko�� zalecana jest inna (ale tryb te� - // mo�e by� inny) + AccDesired); // szukanie optymalnych wartości + // if (VelSignal!=VelDesired) //jeżeli prędkość zalecana jest inna (ale tryb też + // może być inny) switch (comm) - { // ustawienie VelSignal - troch� proteza = do przemy�lenia - case cm_Ready: // W4 zezwoli� na jazd� + { // ustawienie VelSignal - trochę proteza = do przemyślenia + case cm_Ready: // W4 zezwolił na jazdę TableCheck( - scanmax); // ewentualne doskanowanie trasy za W4, kt�ry zezwoli� na jazd� + scanmax); // ewentualne doskanowanie trasy za W4, który zezwolił na jazdę TableUpdate(VelDesired, ActualProximityDist, VelNext, AccDesired); // aktualizacja po skanowaniu - // if (comm!=cm_SetVelocity) //je�li dalej jest kolejny W4, to ma zwr�ci� + // if (comm!=cm_SetVelocity) //jeśli dalej jest kolejny W4, to ma zwrócić // cm_SetVelocity if (VelNext == 0.0) - break; // ale jak co� z przodu zamyka, to ma sta� + break; // ale jak coś z przodu zamyka, to ma stać if (iDrivigFlags & moveStopCloser) - VelSignal = -1.0; // niech jedzie, jak W4 pu�ci�o - nie, ma czeka� na - // sygna� z sygnalizatora! - case cm_SetVelocity: // od wersji 357 semafor nie budzi wy��czonej lokomotywy + VelSignal = -1.0; // niech jedzie, jak W4 puściło - nie, ma czekać na + // sygnał z sygnalizatora! + case cm_SetVelocity: // od wersji 357 semafor nie budzi wyłączonej lokomotywy if (!(OrderList[OrderPos] & ~(Obey_train | Shunt))) // jedzie w dowolnym trybie albo Wait_for_orders if (fabs(VelSignal) >= - 1.0) // 0.1 nie wysy�a si� do samochodow, bo potem nie rusz� + 1.0) // 0.1 nie wysyła się do samochodow, bo potem nie ruszą PutCommand("SetVelocity", VelSignal, VelNext, NULL); // komenda robi dodatkowe operacje break; - case cm_ShuntVelocity: // od wersji 357 Tm nie budzi wy��czonej lokomotywy + case cm_ShuntVelocity: // od wersji 357 Tm nie budzi wyłączonej lokomotywy if (!(OrderList[OrderPos] & ~(Obey_train | Shunt))) // jedzie w dowolnym trybie albo Wait_for_orders PutCommand("ShuntVelocity", VelSignal, VelNext, NULL); - else if (iCoupler) // je�li jedzie w celu po��czenia + else if (iCoupler) // jeśli jedzie w celu połączenia SetVelocity(VelSignal, VelNext); break; - case cm_Command: // komenda z kom�rki + case cm_Command: // komenda z komórki if (!(OrderList[OrderPos] & ~(Obey_train | Shunt))) // jedzie w dowolnym trybie albo Wait_for_orders if (mvOccupied->Vel < 0.1) // dopiero jak stanie - // iDrivigFlags|=moveStopHere moveStopCloser) //chyba �e stan�� za daleko + // iDrivigFlags|=moveStopHere moveStopCloser) //chyba że stanął za daleko // (SU46 w WK staje za daleko) { PutCommand(eSignNext->CommandGet(), eSignNext->ValueGet(1), eSignNext->ValueGet(2), NULL); - eSignNext->StopCommandSent(); // si� wykona�o ju� + eSignNext->StopCommandSent(); // się wykonało już } break; } if (VelNext == 0.0) if (!(OrderList[OrderPos] & ~(Shunt | Connect))) // jedzie w Shunt albo Connect, albo Wait_for_orders - { // je�eli wolnej drogi nie ma, a jest w trybie manewrowym albo oczekiwania + { // jeżeli wolnej drogi nie ma, a jest w trybie manewrowym albo oczekiwania // if // ((OrderList[OrderPos]&Connect)?pVehicles[0]->fTrackBlock>ActualProximityDist:true) - // //pomiar odleg�o�ci nie dzia�a dobrze? - // w trybie Connect skanowa� do ty�u tylko je�li przed kolejnym sygna�em nie - // ma taboru do pod��czenia - // Ra 2F1H: z tym (fTrackBlock) to nie jest najlepszy pomys�, bo lepiej by - // by�o por�wna� z odleg�o�ci� od sygnalizatora z przodu - if ((OrderList[OrderPos] & Connect) ? - (pVehicles[0]->fTrackBlock > 2000 || - pVehicles[0]->fTrackBlock > FirstSemaphorDist) : - true) - if ((comm = BackwardScan()) != cm_Unknown) // je�li w drug� mo�na jecha� - { // nale�y sprawdza� odleg�o�� od znalezionego sygnalizatora, - // aby w przypadku pr�dko�ci 0.1 wyci�gn�� najpierw sk�ad za + // //pomiar odległości nie działa dobrze? + // w trybie Connect skanować do tyłu tylko jeśli przed kolejnym sygnałem nie + // ma taboru do podłączenia + // Ra 2F1H: z tym (fTrackBlock) to nie jest najlepszy pomysł, bo lepiej by + // było porównać z odległością od sygnalizatora z przodu + if ((OrderList[OrderPos] & Connect) ? (pVehicles[0]->fTrackBlock > 2000 || pVehicles[0]->fTrackBlock > FirstSemaphorDist) : + true) + if ((comm = BackwardScan()) != cm_Unknown) // jeśli w drugą można jechać + { // należy sprawdzać odległość od znalezionego sygnalizatora, + // aby w przypadku prędkości 0.1 wyciągnąć najpierw skład za // sygnalizator - // i dopiero wtedy zmieni� kierunek jazdy, oczekuj�c podania - // pr�dko�ci >0.5 - if (comm == cm_Command) // je�li komenda Shunt + // i dopiero wtedy zmienić kierunek jazdy, oczekując podania + // prędkości >0.5 + if (comm == cm_Command) // jeśli komenda Shunt iDrivigFlags |= - moveStopHere; // to j� odbierz bez przemieszczania si� (np. - // odczep wagony po dopchni�ciu do ko�ca toru) + moveStopHere; // to ją odbierz bez przemieszczania się (np. + // odczep wagony po dopchnięciu do końca toru) iDirectionOrder = -iDirection; // zmiana kierunku jazdy OrderList[OrderPos] = TOrders(OrderList[OrderPos] | Change_direction); // zmiana kierunku @@ -4163,108 +4109,108 @@ bool TController::UpdateSituation(double dt) // kolejnych komend } } - double vel = mvOccupied->Vel; // pr�dko�� w kierunku jazdy + double vel = mvOccupied->Vel; // prędkość w kierunku jazdy if (iDirection * mvOccupied->V < 0) - vel = -vel; // ujemna, gdy jedzie w przeciwn� stron�, ni� powinien + vel = -vel; // ujemna, gdy jedzie w przeciwną stronę, niż powinien if (VelDesired < 0.0) - VelDesired = fVelMax; // bo VelDesired<0 oznacza pr�dko�� maksymaln� - // Ra: jazda na widoczno�� - if (pVehicles[0]->fTrackBlock < 1000.0) // przy 300m sta� z zapami�tan� kolizj� - { // Ra 2F3F: przy je�dzie poci�gowej nie powinien doje�d�a� do poprzedzaj�cego - // sk�adu + VelDesired = fVelMax; // bo VelDesired<0 oznacza prędkość maksymalną + // Ra: jazda na widoczność + if (pVehicles[0]->fTrackBlock < 1000.0) // przy 300m stał z zapamiętaną kolizją + { // Ra 2F3F: przy jeździe pociągowej nie powinien dojeżdżać do poprzedzającego + // składu if ((mvOccupied->CategoryFlag & 1) ? ((OrderCurrentGet() & (Connect | Obey_train)) == Obey_train) : - false) // je�li jeste�my poci�giem a jazda poci�gowa i nie �ci�ganie ze + false) // jeśli jesteśmy pociągiem a jazda pociągowa i nie ściąganie ze // szlaku { pVehicles[0]->ABuScanObjects(pVehicles[0]->DirectionGet(), - 1000.0); // skanowanie sprawdzaj�ce - // Ra 2F3F: i jest problem, jak droga za semaforem kieruje na jaki� pojazd + 1000.0); // skanowanie sprawdzające + // Ra 2F3F: i jest problem, jak droga za semaforem kieruje na jakiś pojazd // (np. w Skwarkach na ET22) - if (pVehicles[0]->fTrackBlock < 1000.0) // i je�li nadal co� jest - if (VelNext != 0.0) // a nast�pny sygna� zezwala na jazd� + if (pVehicles[0]->fTrackBlock < 1000.0) // i jeśli nadal coś jest + if (VelNext != 0.0) // a następny sygnał zezwala na jazdę if (pVehicles[0]->fTrackBlock < - ActualProximityDist) // i jest bli�ej (tu by trzeba by�o wstawi� - // odleg�o�� do semafora, z pomini�ciem SBL + ActualProximityDist) // i jest bliżej (tu by trzeba było wstawić + // odległość do semafora, z pominięciem SBL VelDesired = 0.0; // to stoimy } else pVehicles[0]->ABuScanObjects(pVehicles[0]->DirectionGet(), - 300.0); // skanowanie sprawdzaj�ce + 300.0); // skanowanie sprawdzające } - // if (mvOccupied->Vel>=0.1) //o ile jedziemy; jak stoimy to te� trzeba jako� - // zatrzymywa� - if ((iDrivigFlags & moveConnect) == 0) // przy ko�c�wce pod��czania nie hamowa� - { // sprawdzenie jazdy na widoczno�� + // if (mvOccupied->Vel>=0.1) //o ile jedziemy; jak stoimy to też trzeba jakoś + // zatrzymywać + if ((iDrivigFlags & moveConnect) == 0) // przy końcówce podłączania nie hamować + { // sprawdzenie jazdy na widoczność TCoupling *c = pVehicles[0]->MoverParameters->Couplers + - (pVehicles[0]->DirectionGet() > 0 ? 0 : 1); // sprz�g z przodu sk�adu - if (c->Connected) // a mamy co� z przodu + (pVehicles[0]->DirectionGet() > 0 ? 0 : 1); // sprzęg z przodu składu + if (c->Connected) // a mamy coś z przodu if (c->CouplingFlag == - 0) // je�li to co� jest pod��czone sprz�giem wirtualnym - { // wyliczanie optymalnego przyspieszenia do jazdy na widoczno�� - double k = c->Connected->Vel; // pr�dko�� pojazdu z przodu (zak�adaj�c, - // �e jedzie w t� sam� stron�!!!) - if (k < vel + 10) // por�wnanie modu��w pr�dko�ci [km/h] - { // zatroszczy� si� trzeba, je�li tamten nie jedzie znacz�co szybciej + 0) // jeśli to coś jest podłączone sprzęgiem wirtualnym + { // wyliczanie optymalnego przyspieszenia do jazdy na widoczność + double k = c->Connected->Vel; // prędkość pojazdu z przodu (zakładając, + // że jedzie w tę samą stronę!!!) + if (k < vel + 10) // porównanie modułów prędkości [km/h] + { // zatroszczyć się trzeba, jeśli tamten nie jedzie znacząco szybciej double d = pVehicles[0]->fTrackBlock - 0.5 * vel - - fMaxProximityDist; // odleg�o�� bezpieczna zale�y od pr�dko�ci - if (d < 0) // je�li odleg�o�� jest zbyt ma�a + fMaxProximityDist; // odległość bezpieczna zależy od prędkości + if (d < 0) // jeśli odległość jest zbyt mała { // AccPreferred=-0.9; //hamowanie maksymalne, bo jest za blisko - if (k < 10.0) // k - pr�dko�� tego z przodu - { // je�li tamten porusza si� z niewielk� pr�dko�ci� albo stoi + if (k < 10.0) // k - prędkość tego z przodu + { // jeśli tamten porusza się z niewielką prędkością albo stoi if (OrderCurrentGet() & Connect) - { // je�li spinanie, to jecha� dalej + { // jeśli spinanie, to jechać dalej AccPreferred = 0.2; // nie hamuj - VelNext = VelDesired = 2.0; // i pakuj si� na tamtego + VelNext = VelDesired = 2.0; // i pakuj się na tamtego } - else // a normalnie to hamowa� + else // a normalnie to hamować { AccPreferred = -1.0; // to hamuj maksymalnie - VelNext = VelDesired = 0.0; // i nie pakuj si� na + VelNext = VelDesired = 0.0; // i nie pakuj się na // tamtego } } - else // je�li oba jad�, to przyhamuj lekko i ogranicz pr�dko�� + else // jeśli oba jadą, to przyhamuj lekko i ogranicz prędkość { if (k < vel) // jak tamten jedzie wolniej if (d < fBrakeDist) // a jest w drodze hamowania { if (AccPreferred > fAccThreshold) AccPreferred = - fAccThreshold; // to przyhamuj troszk� - VelNext = VelDesired = int(k); // to chyba ju� sobie - // dohamuje wed�ug + fAccThreshold; // to przyhamuj troszkę + VelNext = VelDesired = int(k); // to chyba już sobie + // dohamuje według // uznania } } - ReactionTime = 0.1; // orientuj si�, bo jest goraco + ReactionTime = 0.1; // orientuj się, bo jest goraco } else - { // je�li odleg�o�� jest wi�ksza, ustali� maksymalne mo�liwe + { // jeśli odległość jest większa, ustalić maksymalne możliwe // przyspieszenie (hamowanie) k = (k * k - vel * vel) / (25.92 * d); // energia kinetyczna - // dzielona przez mas� i - // drog� daje + // dzielona przez masę i + // drogę daje // przyspieszenie if (k > 0.0) - k *= 1.5; // jed� szybciej, je�li mo�esz + k *= 1.5; // jedź szybciej, jeśli możesz // double ak=(c->Connected->V>0?1.0:-1.0)*c->Connected->AccS; // //przyspieszenie tamtego if (d < fBrakeDist) // a jest w drodze hamowania if (k < AccPreferred) - { // je�li nie ma innych powod�w do wolniejszej jazdy + { // jeśli nie ma innych powodów do wolniejszej jazdy AccPreferred = k; if (VelNext > c->Connected->Vel) { VelNext = c->Connected - ->Vel; // ograniczenie do pr�dko�ci tamtego + ->Vel; // ograniczenie do prędkości tamtego ActualProximityDist = - d; // i odleg�o�� od tamtego jest istotniejsza + d; // i odległość od tamtego jest istotniejsza } - ReactionTime = 0.2; // zwi�ksz czujno�� + ReactionTime = 0.2; // zwiększ czujność } #if LOGVELOCITY WriteLog("Collision: AccPreferred=" + AnsiString(k)); @@ -4273,31 +4219,29 @@ bool TController::UpdateSituation(double dt) } } } - // sprawdzamy mo�liwe ograniczenia pr�dko�ci + // sprawdzamy możliwe ograniczenia prędkości if (OrderCurrentGet() & (Shunt | Obey_train)) // w Connect nie, bo moveStopHere - // odnosi si� do stanu po po��czeniu - if (iDrivigFlags & moveStopHere) // je�li ma czeka� na woln� drog� + // odnosi się do stanu po połączeniu + if (iDrivigFlags & moveStopHere) // jeśli ma czekać na wolną drogę if (vel == 0.0) // a stoi if (VelNext == 0.0) // a wyjazdu nie ma - VelDesired = 0.0; // to ma sta� - if (fStopTime < 0) // czas postoju przed dalsz� jazd� (np. na przystanku) - VelDesired = 0.0; // jak ma czeka�, to nie ma jazdy + VelDesired = 0.0; // to ma stać + if (fStopTime < 0) // czas postoju przed dalszą jazdą (np. na przystanku) + 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) // je�li sk�ad by� zatrzymany na pocz�tku i teraz ju� mo�e jecha� + // VelDesired=fVelMax; //ile fabryka dala (Ra: uwzględione wagony) + else if (VelSignal >= 0) // jeśli skład był zatrzymany na początku i teraz już może jechać VelDesired = Global::Min0RSpeed(VelDesired, VelSignal); - - if (mvOccupied->RunningTrack.Velmax >= - 0) // ograniczenie pr�dko�ci z trajektorii ruchu - VelDesired = Global::Min0RSpeed( - VelDesired, - mvOccupied->RunningTrack.Velmax); // uwaga na ograniczenia szlakowej! - if (VelforDriver >= 0) // tu jest zero przy zmianie kierunku jazdy + + if (mvOccupied->RunningTrack.Velmax >= + 0) // ograniczenie prędkości z trajektorii ruchu VelDesired = - Global::Min0RSpeed(VelDesired, VelforDriver); // Ra: tu mo�e by� 40, je�li - // mechanik nie ma znajomo�ci - // szlaaku, albo kierowca je�dzi + Global::Min0RSpeed(VelDesired, + mvOccupied->RunningTrack.Velmax); // uwaga na ograniczenia szlakowej! + if (VelforDriver >= 0) // tu jest zero przy zmianie kierunku jazdy + VelDesired = Global::Min0RSpeed(VelDesired, VelforDriver); // Ra: tu może być 40, jeśli + // mechanik nie ma znajomości + // szlaaku, albo kierowca jeździ // 70 if (TrainParams) if (TrainParams->CheckTrainLatency() < 5.0) @@ -4305,56 +4249,55 @@ bool TController::UpdateSituation(double dt) VelDesired = Global::Min0RSpeed( VelDesired, TrainParams - ->TTVmax); // jesli nie spozniony to nie przekracza� rozkladowej + ->TTVmax); // jesli nie spozniony to nie przekraczać rozkladowej if (VelDesired > 0.0) - if ((sSemNext && sSemNext->fVelNext != 0.0) || - (iDrivigFlags & moveStopHere) == 0) - { // je�li mo�na jecha�, to odpali� d�wi�k kierownika oraz zamkn�� drzwi w - // sk�adzie, je�li nie mamy czeka� na sygna� te� trzeba odpali� - + if ((sSemNext && sSemNext->fVelNext != 0.0) || (iDrivigFlags & moveStopHere)==0) + { // jeśli można jechać, to odpalić dźwięk kierownika oraz zamknąć drzwi w + // składzie, jeśli nie mamy czekać na sygnał też trzeba odpalić + if (iDrivigFlags & moveGuardSignal) - { // komunikat od kierownika tu, bo musi by� wolna droga i odczekany czas + { // komunikat od kierownika tu, bo musi być wolna droga i odczekany czas // stania - iDrivigFlags &= ~moveGuardSignal; // tylko raz nada� + iDrivigFlags &= ~moveGuardSignal; // tylko raz nadać tsGuardSignal->Stop(); - // w zasadzie to powinien mie� flag�, czy jest d�wi�kiem radiowym, czy - // bezpo�rednim - // albo trzeba zrobi� dwa d�wi�ki, jeden bezpo�redni, s�yszalny w - // pobli�u, a drugi radiowy, s�yszalny w innych lokomotywach - // na razie zak�adam, �e to nie jest d�wi�k radiowy, bo trzeba by zrobi� - // obs�ug� kana��w radiowych itd. - if (!iGuardRadio) // je�li nie przez radio + // w zasadzie to powinien mieć flagę, czy jest dźwiękiem radiowym, czy + // bezpośrednim + // albo trzeba zrobić dwa dźwięki, jeden bezpośredni, słyszalny w + // pobliżu, a drugi radiowy, słyszalny w innych lokomotywach + // na razie zakładam, że to nie jest dźwięk radiowy, bo trzeba by zrobić + // obsługę kanałów radiowych itd. + if (!iGuardRadio) // jeśli nie przez radio tsGuardSignal->Play( 1.0, 0, !FreeFlyModeFlag, - pVehicle->GetPosition()); // dla true jest g�o�niej + pVehicle->GetPosition()); // dla true jest głośniej else - // if (iGuardRadio==iRadioChannel) //zgodno�� kana�u - // if (!FreeFlyModeFlag) //obserwator musi by� w �rodku pojazdu - // (albo mo�e mie� radio przeno�ne) - kierownik m�g�by powtarza� + // if (iGuardRadio==iRadioChannel) //zgodność kanału + // if (!FreeFlyModeFlag) //obserwator musi być w środku pojazdu + // (albo może mieć radio przenośne) - kierownik mógłby powtarzać // przy braku reakcji if (SquareMagnitude(pVehicle->GetPosition() - Global::pCameraPosition) < - 2000 * 2000) // w odleg�o�ci mniejszej ni� 2km + 2000 * 2000) // w odległości mniejszej niż 2km tsGuardSignal->Play( 1.0, 0, true, - pVehicle->GetPosition()); // d�wi�k niby przez radio + pVehicle->GetPosition()); // dźwięk niby przez radio } - if (iDrivigFlags & moveDoorOpened) // je�li drzwi otwarte + if (iDrivigFlags & moveDoorOpened) // jeśli drzwi otwarte if (!mvOccupied - ->DoorOpenCtrl) // je�li drzwi niesterowane przez maszynist� + ->DoorOpenCtrl) // jeśli drzwi niesterowane przez maszynistę Doors(false); // a EZT zamknie dopiero po odegraniu komunikatu // kierownika } if (mvOccupied->V == 0.0) - AbsAccS = fAccGravity; // Ra 2014-03: jesli sk�ad stoi, to dzia�a na niego - // sk�adowa styczna grawitacji + AbsAccS = fAccGravity; // Ra 2014-03: jesli skład stoi, to działa na niego + // składowa styczna grawitacji else AbsAccS = iDirection * mvOccupied->AccS; // przyspieszenie chwilowe, liczone -// jako r��nica skierowanej pr�dko�ci w +// jako różnica skierowanej prędkości w // czasie -// if (mvOccupied->V<0.0) AbsAccS=-AbsAccS; //Ra 2014-03: to trzeba przemy�le� -// if (vel<0) //je�eli si� stacza w ty�; 2014-03: to jest bez sensu, bo vel>=0 -// AbsAccS=-AbsAccS; //to przyspieszenie te� dzia�a wtedy w nieodpowiedni� stron� +// if (mvOccupied->V<0.0) AbsAccS=-AbsAccS; //Ra 2014-03: to trzeba przemyśleć +// if (vel<0) //jeżeli się stacza w tył; 2014-03: to jest bez sensu, bo vel>=0 +// AbsAccS=-AbsAccS; //to przyspieszenie też działa wtedy w nieodpowiednią stronę // AbsAccS+=fAccGravity; //wypadkowe przyspieszenie (czy to ma sens?) #if LOGVELOCITY // WriteLog("VelDesired="+AnsiString(VelDesired)+", @@ -4363,99 +4306,99 @@ bool TController::UpdateSituation(double dt) ", AccGrav=" + AnsiString(fAccGravity)); #endif // ustalanie zadanego przyspieszenia - //(ActualProximityDist) - odleg�o�� do miejsca zmniejszenia pr�dko�ci - //(AccPreferred) - wynika z psychyki oraz uwzgl�nia ju� ewentualne zderzenie z - // pojazdem z przodu, ujemne gdy nale�y hamowa� - //(AccDesired) - uwzgl�dnia sygna�y na drodze ruchu, ujemne gdy nale�y hamowa� - //(fAccGravity) - chwilowe przspieszenie grawitacyjne, ujemne dzia�a przeciwnie do + //(ActualProximityDist) - odległość do miejsca zmniejszenia prędkości + //(AccPreferred) - wynika z psychyki oraz uwzglęnia już ewentualne zderzenie z + // pojazdem z przodu, ujemne gdy należy hamować + //(AccDesired) - uwzględnia sygnały na drodze ruchu, ujemne gdy należy hamować + //(fAccGravity) - chwilowe przspieszenie grawitacyjne, ujemne działa przeciwnie do // zadanego kierunku jazdy - //(AbsAccS) - chwilowe przyspieszenie pojazu (uwzgl�dnia grawitacj�), ujemne dzia�a + //(AbsAccS) - chwilowe przyspieszenie pojazu (uwzględnia grawitację), ujemne działa // przeciwnie do zadanego kierunku jazdy - //(AccDesired) por�wnujemy z (fAccGravity) albo (AbsAccS) + //(AccDesired) porównujemy z (fAccGravity) albo (AbsAccS) // if ((VelNext>=0.0)&&(ActualProximityDist>=0)&&(mvOccupied->Vel>=VelNext)) //gdy // zbliza sie i jest za szybko do NOWEGO if ((VelNext >= 0.0) && (ActualProximityDist <= scanmax) && (vel >= VelNext)) - { // gdy zbli�a si� i jest za szybki do nowej pr�dko�ci, albo stoi na zatrzymaniu + { // gdy zbliża się i jest za szybki do nowej prędkości, albo stoi na zatrzymaniu if (vel > 0.0) - { // je�li jedzie + { // jeśli jedzie if ((vel < VelNext) ? (ActualProximityDist > fMaxProximityDist * (1 + 0.1 * vel)) : false) // dojedz do semafora/przeszkody - { // je�li jedzie wolniej ni� mo�na i jest wystarczaj�co daleko, to mo�na - // przyspieszy� - if (AccPreferred > 0.0) // je�li nie ma zawalidrogi + { // jeśli jedzie wolniej niż można i jest wystarczająco daleko, to można + // przyspieszyć + if (AccPreferred > 0.0) // jeśli nie ma zawalidrogi AccDesired = AccPreferred; // VelDesired:=Min0R(VelDesired,VelReduced+VelNext); } else if (ActualProximityDist > fMinProximityDist) - { // jedzie szybciej, ni� trzeba na ko�cu ActualProximityDist, ale jeszcze + { // jedzie szybciej, niż trzeba na końcu ActualProximityDist, ale jeszcze // jest daleko if (vel < - VelNext + 40.0) // dwustopniowe hamowanie - niski przy ma�ej r��nicy - { // je�li jedzie wolniej ni� VelNext+35km/h //Ra: 40, �eby nie - // kombinowa� na zwrotnicach + VelNext + 40.0) // dwustopniowe hamowanie - niski przy małej różnicy + { // jeśli jedzie wolniej niż VelNext+35km/h //Ra: 40, żeby nie + // kombinował na zwrotnicach if (VelNext == 0.0) - { // je�li ma si� zatrzyma�, musi by� to robione precyzyjnie i + { // jeśli ma się zatrzymać, musi być to robione precyzyjnie i // skutecznie if (ActualProximityDist < - fMaxProximityDist) // jak min�� ju� maksymalny dystans - { // po prostu hamuj (niski stopie�) //ma stan��, a jest w - // drodze hamowania albo ma jecha� - AccDesired = fAccThreshold; // hamowanie tak, aby stan�� + fMaxProximityDist) // jak minął już maksymalny dystans + { // po prostu hamuj (niski stopień) //ma stanąć, a jest w + // drodze hamowania albo ma jechać + AccDesired = fAccThreshold; // hamowanie tak, aby stanąć VelDesired = 0.0; // Min0R(VelDesired,VelNext); } else if (ActualProximityDist > fBrakeDist) - { // je�li ma stan��, a mie�ci si� w drodze hamowania - if (vel < 10.0) // je�li pr�dko�� jest �atwa do zatrzymania - { // tu jest troch� problem, bo do punktu zatrzymania dobija + { // jeśli ma stanąć, a mieści się w drodze hamowania + if (vel < 10.0) // jeśli prędkość jest łatwa do zatrzymania + { // tu jest trochę problem, bo do punktu zatrzymania dobija // na raty // AccDesired=AccDesired<0.0?0.0:0.1*AccPreferred; - AccDesired = AccPreferred; // proteza troch�; jak tu + AccDesired = AccPreferred; // proteza trochę; jak tu // wychodzi 0.05, to loki - // maj� problem utrzyma� + // mają problem utrzymać // takie przyspieszenie } else if (vel <= 30.0) // trzymaj 30 km/h AccDesired = Min0R(0.5 * AccDesired, AccPreferred); // jak jest tu 0.5, to - // samochody si� - // dobijaj� do siebie + // samochody się + // dobijają do siebie else AccDesired = 0.0; } else // 25.92 (=3.6*3.6*2) - przelicznik z km/h na m/s if (vel < - VelNext + fVelPlus) // je�li niewielkie przekroczenie + VelNext + fVelPlus) // jeśli niewielkie przekroczenie // AccDesired=0.0; - AccDesired = Min0R(0.0, AccPreferred); // proteza troch�: to + AccDesired = Min0R(0.0, AccPreferred); // proteza trochę: to // niech nie hamuje, - // chyba �e co� z + // chyba że coś z // przodu else AccDesired = -(vel * vel) / (25.92 * (ActualProximityDist + 0.1)); //-fMinProximityDist));//-0.1; - ////mniejsze op��nienie przy - // ma�ej r��nicy - ReactionTime = 0.1; // i orientuj si� szybciej, jak masz stan�� + ////mniejsze opóźnienie przy + // małej różnicy + ReactionTime = 0.1; // i orientuj się szybciej, jak masz stanąć } - else if (vel < VelNext + fVelPlus) // je�li niewielkie - // przekroczenie, ale ma jecha� + else if (vel < VelNext + fVelPlus) // jeśli niewielkie + // przekroczenie, ale ma jechać AccDesired = - Min0R(0.0, AccPreferred); // to olej (zacznij luzowa�) + Min0R(0.0, AccPreferred); // to olej (zacznij luzować) else - { // je�li wi�ksze przekroczenie ni� fVelPlus [km/h], ale ma jecha� - // Ra 2F1I: jak by�o (VelNext+fVelPlus) tu, to hamowa� zbyt - // p��no przed 40, a potem zbyt mocno i zwalnia� do 30 + { // jeśli większe przekroczenie niż fVelPlus [km/h], ale ma jechać + // Ra 2F1I: jak było (VelNext+fVelPlus) tu, to hamował zbyt + // późno przed 40, a potem zbyt mocno i zwalniał do 30 AccDesired = (VelNext * VelNext - vel * vel) / (25.92 * ActualProximityDist + - 0.1); // mniejsze op��nienie przy ma�ej r��nicy + 0.1); // mniejsze opóźnienie przy małej różnicy if (ActualProximityDist < fMaxProximityDist) - ReactionTime = 0.1; // i orientuj si� szybciej, je�li w + ReactionTime = 0.1; // i orientuj się szybciej, jeśli w // krytycznym przedziale } } - else // przy du�ej r��nicy wysoki stopie� (1,25 potrzebnego opoznienia) + else // przy dużej różnicy wysoki stopień (1,25 potrzebnego opoznienia) AccDesired = (VelNext * VelNext - vel * vel) / (20.73 * ActualProximityDist + 0.1); // najpierw hamuje mocniej, potem zluzuje @@ -4469,34 +4412,34 @@ bool TController::UpdateSituation(double dt) // hamulcow } else - { // jest bli�ej ni� fMinProximityDist + { // jest bliżej niż fMinProximityDist VelDesired = Min0R(VelDesired, VelNext); // utrzymuj predkosc bo juz blisko if (vel < - VelNext + fVelPlus) // je�li niewielkie przekroczenie, ale ma jecha� - AccDesired = Min0R(0.0, AccPreferred); // to olej (zacznij luzowa�) - ReactionTime = 0.1; // i orientuj si� szybciej + VelNext + fVelPlus) // jeśli niewielkie przekroczenie, ale ma jechać + AccDesired = Min0R(0.0, AccPreferred); // to olej (zacznij luzować) + ReactionTime = 0.1; // i orientuj się szybciej } } else // zatrzymany (vel==0.0) // if (iDrivigFlags&moveStopHere) //to nie dotyczy podczepiania // if ((VelNext>0.0)||(ActualProximityDist>fMaxProximityDist*1.2)) if (VelNext > 0.0) - AccDesired = AccPreferred; // mo�na jecha� - else // je�li daleko jecha� nie mo�na - if (ActualProximityDist > - fMaxProximityDist) // ale ma kawa�ek do sygnalizatora - { // if ((iDrivigFlags&moveStopHere)?false:AccPreferred>0) - if (AccPreferred > 0) - AccDesired = AccPreferred; // dociagnij do semafora; - else - VelDesired = 0.0; //,AccDesired=-fabs(fAccGravity); //stoj (hamuj z si�� - // r�wn� sk�adowej stycznej grawitacji) - } - else - VelDesired = 0.0; // VelNext=0 i stoi bli�ej ni� fMaxProximityDist + AccDesired = AccPreferred; // można jechać + else // jeśli daleko jechać nie można + if (ActualProximityDist > + fMaxProximityDist) // ale ma kawałek do sygnalizatora + { // if ((iDrivigFlags&moveStopHere)?false:AccPreferred>0) + if (AccPreferred > 0) + AccDesired = AccPreferred; // dociagnij do semafora; + else + VelDesired = 0.0; //,AccDesired=-fabs(fAccGravity); //stoj (hamuj z siłą + // równą składowej stycznej grawitacji) + } + else + VelDesired = 0.0; // VelNext=0 i stoi bliżej niż fMaxProximityDist } - else // gdy jedzie wolniej ni� potrzeba, albo nie ma przeszk�d na drodze + else // gdy jedzie wolniej niż potrzeba, albo nie ma przeszkód na drodze AccDesired = (VelDesired != 0.0 ? AccPreferred : -0.01); // normalna jazda // koniec predkosci nastepnej if ((VelDesired >= 0.0) && @@ -4509,42 +4452,42 @@ bool TController::UpdateSituation(double dt) AccDesired = 0.0; } else - AccDesired = fAccThreshold; // hamuj tak �rednio + AccDesired = fAccThreshold; // hamuj tak średnio // koniec predkosci aktualnej if (fAccThreshold > -0.3) // bez sensu, ale dla towarowych korzystnie - { // Ra 2014-03: to nie uwzgl�dnia odleg�o�ci i zaczyna hamowa�, jak tylko zobaczy + { // Ra 2014-03: to nie uwzględnia odległości i zaczyna hamować, jak tylko zobaczy // W4 if ((AccDesired > 0.0) && - (VelNext >= 0.0)) // wybieg b�d� lekkie hamowanie, warunki byly zamienione + (VelNext >= 0.0)) // wybieg bądź lekkie hamowanie, warunki byly zamienione if (vel > VelNext + 100.0) // lepiej zaczac hamowac AccDesired = fAccThreshold; else if (vel > VelNext + 70.0) - AccDesired = 0.0; // nie spiesz si�, bo b�dzie hamowanie + AccDesired = 0.0; // nie spiesz się, bo będzie hamowanie // koniec wybiegu i hamowania } if (AIControllFlag) - { // cz��� wykonawcza tylko dla AI, dla cz�owieka jedynie napisy + { // część wykonawcza tylko dla AI, dla człowieka jedynie napisy if (mvControlling->ConvOvldFlag || - !mvControlling->Mains) // WS mo�e wywali� z powodu b��du w drutach - { // wywali� bezpiecznik nadmiarowy przetwornicy - // while (DecSpeed()); //zerowanie nap�du + !mvControlling->Mains) // WS może wywalić z powodu błędu w drutach + { // wywalił bezpiecznik nadmiarowy przetwornicy + // while (DecSpeed()); //zerowanie napędu // Controlling->ConvOvldFlag=false; //reset nadmiarowego - PrepareEngine(); // pr�ba ponownego za��czenia + PrepareEngine(); // próba ponownego załączenia } - // w��czanie bezpiecznika + // włączanie bezpiecznika if ((mvControlling->EngineType == ElectricSeriesMotor) || (mvControlling->TrainType & dt_EZT) || (mvControlling->EngineType == DieselElectric)) if (mvControlling->FuseFlag || Need_TryAgain) { Need_TryAgain = - false; // true, je�li druga pozycja w elektryku nie za�apa�a - // if (!Controlling->DecScndCtrl(1)) //kr�cenie po ma�u + false; // true, jeśli druga pozycja w elektryku nie załapała + // if (!Controlling->DecScndCtrl(1)) //kręcenie po mału // if (!Controlling->DecMainCtrl(1)) //nastawnik jazdy na 0 mvControlling->DecScndCtrl(2); // nastawnik bocznikowania na 0 mvControlling->DecMainCtrl(2); // nastawnik jazdy na 0 mvControlling->MainSwitch( - true); // Ra: doda�em, bo EN57 stawa�y po wywaleniu + true); // Ra: dodałem, bo EN57 stawały po wywaleniu if (!mvControlling->FuseOn()) HelpMeFlag = true; else @@ -4556,7 +4499,7 @@ bool TController::UpdateSituation(double dt) SetDriverPsyche(); } } - if (mvOccupied->BrakeSystem == Pneumatic) // nape�nianie uderzeniowe + if (mvOccupied->BrakeSystem == Pneumatic) // napełnianie uderzeniowe if (mvOccupied->BrakeHandle == FV4a) { if (mvOccupied->BrakeCtrlPos == -2) @@ -4575,14 +4518,14 @@ bool TController::UpdateSituation(double dt) (fReady > 0.35)) //{((Volume/BrakeVVolume/10)<0.485)}) { if (iDrivigFlags & - moveOerlikons) // a reszta sk�adu jest na to gotowa - mvOccupied->BrakeLevelSet(-1); // nape�nianie w Oerlikonie + moveOerlikons) // a reszta składu jest na to gotowa + mvOccupied->BrakeLevelSet(-1); // napełnianie w Oerlikonie } else if (Need_BrakeRelease) { Need_BrakeRelease = false; mvOccupied->BrakeReleaser(1); - // DecBrakeLevel(); //z tym by jeszcze mia�o jaki� sens + // DecBrakeLevel(); //z tym by jeszcze miało jakiś sens } // if // ((mvOccupied->BrakeCtrlPos<0)&&(mvOccupied->BrakePress<0.3))//{(CntrlPipePress-(Volume/BrakeVVolume/10)<0.01)}) @@ -4597,94 +4540,94 @@ bool TController::UpdateSituation(double dt) WriteLog("Dist=" + FloatToStrF(ActualProximityDist, ffFixed, 7, 1) + ", VelDesired=" + FloatToStrF(VelDesired, ffFixed, 7, 1) + ", AccDesired=" + FloatToStrF(AccDesired, ffFixed, 7, 3) + - ", VelSignal=" + AnsiString(VelSignal) + - ", VelNext=" + AnsiString(VelNext)); + ", VelSignal=" + AnsiString(VelSignal) + ", VelNext=" + + AnsiString(VelNext)); #endif if (AccDesired > 0.1) - if (vel < 10.0) // Ra 2F1H: je�li pr�dko�� jest ma�a, a mo�na przyspiesza�, - // to nie ogranicza� przyspieszenia do 0.5m/ss - AccDesired = 0.9; // przy ma�ych pr�dko�ciach mo�e by� trudno utrzyma� - // ma�e przyspieszenie - // Ra 2F1I: wy��czy� kiedy� to u�rednianie i przeanalizowa� skanowanie, czemu + if (vel < 10.0) // Ra 2F1H: jeśli prędkość jest mała, a można przyspieszać, + // to nie ograniczać przyspieszenia do 0.5m/ss + AccDesired = 0.9; // przy małych prędkościach może być trudno utrzymać + // małe przyspieszenie + // Ra 2F1I: wyłączyć kiedyś to uśrednianie i przeanalizować skanowanie, czemu // migocze - if (AccDesired > -0.15) // hamowania lepeiej nie u�rednia� + if (AccDesired > -0.15) // hamowania lepeiej nie uśredniać AccDesired = fAccDesiredAv = 0.2 * AccDesired + - 0.8 * fAccDesiredAv; // u�rednione, �eby ograniczy� migotanie + 0.8 * fAccDesiredAv; // uśrednione, żeby ograniczyć migotanie if (VelDesired == 0.0) if (AccDesired >= -0.01) - AccDesired = -0.01; // Ra 2F1J: jeszcze jedna prowizoryczna �atka + AccDesired = -0.01; // Ra 2F1J: jeszcze jedna prowizoryczna łatka if (AccDesired >= 0.0) if (iDrivigFlags & movePress) - mvOccupied->BrakeReleaser(1); // wyluzuj lokomotyw� - mo�e by� wi�cej! + mvOccupied->BrakeReleaser(1); // wyluzuj lokomotywę - może być więcej! else if (OrderList[OrderPos] != - Disconnect) // przy od��czaniu nie zwalniamy tu hamulca + Disconnect) // przy odłączaniu nie zwalniamy tu hamulca if ((AccDesired > 0.0) || (fAccGravity * fAccGravity < 0.001)) // luzuj tylko na plaskim lub przy ruszaniu { while (DecBrake()) - ; // je�li przyspieszamy, to nie hamujemy + ; // jeśli przyspieszamy, to nie hamujemy if (mvOccupied->BrakePress > 0.4) mvOccupied->BrakeReleaser( - 1); // wyluzuj lokomotyw�, to szybciej ruszymy + 1); // wyluzuj lokomotywę, to szybciej ruszymy } - // margines dla pr�dko�ci jest doliczany tylko je�li oczekiwana pr�dko�� jest - // wi�ksza od 5km/h + // margines dla prędkości jest doliczany tylko jeśli oczekiwana prędkość jest + // większa od 5km/h if (!(iDrivigFlags & movePress)) - { // je�li nie dociskanie + { // jeśli nie dociskanie if (AccDesired < -0.1) while (DecSpeed()) - ; // je�li hamujemy, to nie przyspieszamy + ; // jeśli hamujemy, to nie przyspieszamy else if (((fAccGravity < -0.01) ? AccDesired < 0.0 : AbsAccS > AccDesired) || - (vel > VelDesired)) // jak za bardzo przyspiesza albo pr�dko�� + (vel > VelDesired)) // jak za bardzo przyspiesza albo prędkość // przekroczona - DecSpeed(); // pojedyncze cofni�cie pozycji, bo na zero to przesada + DecSpeed(); // pojedyncze cofnięcie pozycji, bo na zero to przesada } - // yB: usuni�te r��ne dziwne warunki, oddzielamy cz��� zadaj�c� od wykonawczej + // yB: usunięte różne dziwne warunki, oddzielamy część zadającą od wykonawczej // zwiekszanie predkosci - // Ra 2F1H: jest konflikt histerezy pomi�dzy nastawion� pozycj� a uzyskiwanym + // Ra 2F1H: jest konflikt histerezy pomiędzy nastawioną pozycją a uzyskiwanym // przyspieszeniem - utrzymanie pozycji powoduje przekroczenie przyspieszenia if (AbsAccS < - AccDesired) // je�li przyspieszenie pojazdu jest mniejsze ni� ��dane oraz - if (vel < VelDesired - fVelMinus) // je�li pr�dko�� w kierunku czo�a jest + AccDesired) // jeśli przyspieszenie pojazdu jest mniejsze niż żądane oraz + if (vel < VelDesired - fVelMinus) // jeśli prędkość w kierunku czoła jest // mniejsza od dozwolonej o margines if ((ActualProximityDist > fMaxProximityDist) ? true : (vel < VelNext)) - IncSpeed(); // to mo�na przyspieszy� + IncSpeed(); // to można przyspieszyć // if ((AbsAccS0) and // (EngineType=ElectricSeriesMotor) // and (RList[MainCtrlPos].R>0.0) and (not DelayCtrlFlag)) // if (ImTrainType & - dt_EZT) // w�a�ciwie, to warunek powinien by� na dzia�aj�cy EP + dt_EZT) // właściwie, to warunek powinien być na działający EP { // Ra: to dobrze hamuje EP w EZT - if ((AccDesired <= fAccThreshold) ? // je�li hamowa� - u g�ry ustawia si� + if ((AccDesired <= fAccThreshold) ? // jeśli hamować - u góry ustawia się // hamowanie na fAccThreshold ((AbsAccS > AccDesired) || (mvOccupied->BrakeCtrlPos < 0)) : - false) // hamowa� bardziej, gdy aktualne op��nienie hamowania - // mniejsze ni� (AccDesired) + false) // hamować bardziej, gdy aktualne opóźnienie hamowania + // mniejsze niż (AccDesired) IncBrake(); else if (OrderList[OrderPos] != - Disconnect) // przy od��czaniu nie zwalniamy tu hamulca + Disconnect) // przy odłączaniu nie zwalniamy tu hamulca if (AbsAccS < AccDesired - - 0.05) // je�li op��nienie wi�ksze od wymaganego (z histerez�) - { // luzowanie, gdy za du�o + 0.05) // jeśli opóźnienie większe od wymaganego (z histerezą) + { // luzowanie, gdy za dużo if (mvOccupied->BrakeCtrlPos >= 0) - DecBrake(); // tutaj zmniejsza�o o 1 przy odczepianiu + DecBrake(); // tutaj zmniejszało o 1 przy odczepianiu } else if (mvOccupied->Handle->TimeEP) { @@ -4700,20 +4643,19 @@ bool TController::UpdateSituation(double dt) // else if (mvOccupied->BrakeCtrlPos>0) DecBrake(); } else - { // a stara wersja w miar� dobrze dzia�a na sk�ady wagonowe + { // a stara wersja w miarę dobrze działa na składy wagonowe // if (mvOccupied->Handle->Time) // mvOccupied->BrakeLevelSet(mvOccupied->Handle->GetPos(bh_MB)); // //najwyzej sobie przestawi if (((fAccGravity < -0.05) && (vel < 0)) || ((AccDesired < fAccGravity - 0.1) && (AbsAccS > - AccDesired + 0.05))) // u g�ry ustawia si� hamowanie na fAccThreshold + AccDesired + 0.05))) // u góry ustawia się hamowanie na fAccThreshold // if not MinVelFlag) - if (fBrakeTime < 0 ? true : - (AccDesired < fAccGravity - 0.3) || - (mvOccupied->BrakeCtrlPos <= 0)) - if (!IncBrake()) // je�li up�yn�� czas reakcji hamulca, chyba �e - // nag�e albo luzowa� + if (fBrakeTime < 0 ? true : (AccDesired < fAccGravity - 0.3) || + (mvOccupied->BrakeCtrlPos <= 0)) + if (!IncBrake()) // jeśli upłynął czas reakcji hamulca, chyba że + // nagłe albo luzował MinVelFlag = true; else { @@ -4724,35 +4666,35 @@ bool TController::UpdateSituation(double dt) (mvOccupied ->BrakeDelay[2 + 2 * mvOccupied->BrakeDelayFlag] - 3); - // Ra: ten czas nale�y zmniejszy�, je�li czas dojazdu do + // Ra: ten czas należy zmniejszyć, jeśli czas dojazdu do // zatrzymania jest mniejszy - fBrakeTime *= 0.5; // Ra: tymczasowo, bo prze�yna S1 + fBrakeTime *= 0.5; // Ra: tymczasowo, bo przeżyna S1 } if ((AccDesired < fAccGravity - 0.05) && (AbsAccS < AccDesired - 0.2)) // if ((AccDesired<0.0)&&(AbsAccSBrakeDelay[1 + 2 * mvOccupied->BrakeDelayFlag]) / 3.0; - fBrakeTime *= 0.5; // Ra: tymczasowo, bo prze�yna S1 + fBrakeTime *= 0.5; // Ra: tymczasowo, bo przeżyna S1 } } // Mietek-end1 - SpeedSet(); // ci�gla regulacja pr�dko�ci + SpeedSet(); // ciągla regulacja prędkości #if LOGVELOCITY - WriteLog("BrakePos=" + AnsiString(mvOccupied->BrakeCtrlPos) + - ", MainCtrl=" + AnsiString(mvControlling->MainCtrlPos)); + WriteLog("BrakePos=" + AnsiString(mvOccupied->BrakeCtrlPos) + ", MainCtrl=" + + AnsiString(mvControlling->MainCtrlPos)); #endif - /* //Ra: mamy teraz wska�nik na cz�on silnikowy, gorzej jak s� dwa w + /* //Ra: mamy teraz wskażnik na człon silnikowy, gorzej jak są dwa w ukrotnieniu... //zapobieganie poslizgowi w czlonie silnikowym; Ra: Couplers[1] powinno - by� + być if (Controlling->Couplers[0].Connected!=NULL) if (TestFlag(Controlling->Couplers[0].CouplingFlag,ctrain_controll)) if (Controlling->Couplers[0].Connected->SlippingWheels) @@ -4770,12 +4712,12 @@ bool TController::UpdateSituation(double dt) if (!mvControlling->DecScndCtrl(2)) // bocznik na zero mvControlling->DecMainCtrl(1); if (mvOccupied->BrakeCtrlPos == - mvOccupied->BrakeCtrlPosNo) // je�li ostatnia pozycja hamowania + mvOccupied->BrakeCtrlPosNo) // jeśli ostatnia pozycja hamowania mvOccupied->DecBrakeLevel(); // to cofnij hamulec else mvControlling->AntiSlippingButton(); ++iDriverFailCount; - mvControlling->SlippingWheels = false; // flaga ju� wykorzystana + mvControlling->SlippingWheels = false; // flaga już wykorzystana } if (iDriverFailCount > maxdriverfails) { @@ -4785,28 +4727,28 @@ bool TController::UpdateSituation(double dt) } } // if (AIControllFlag) else - { // tu mozna da� komunikaty tekstowe albo s�owne: przyspiesz, hamuj (lekko, - // �rednio, mocno) + { // tu mozna dać komunikaty tekstowe albo słowne: przyspiesz, hamuj (lekko, + // średnio, mocno) } - } // kierunek r��ny od zera + } // kierunek różny od zera else - { // tutaj, gdy pojazd jest wy��czony - if (!AIControllFlag) // je�li sterowanie jest w gestii u�ytkownika - if (mvOccupied->Battery) // czy u�ytkownik za��czy� bateri�? - if (mvOccupied->ActiveDir) // czy ustawi� kierunek - { // je�li tak, to uruchomienie skanowania - CheckVehicles(); // sprawdzi� sk�ad + { // tutaj, gdy pojazd jest wyłączony + if (!AIControllFlag) // jeśli sterowanie jest w gestii użytkownika + if (mvOccupied->Battery) // czy użytkownik załączył baterię? + if (mvOccupied->ActiveDir) // czy ustawił kierunek + { // jeśli tak, to uruchomienie skanowania + CheckVehicles(); // sprawdzić skład TableClear(); // resetowanie tabelki skanowania PrepareEngine(); // uruchomienie } } if (AIControllFlag) - { // odhamowywanie sk�adu po zatrzymaniu i zabezpieczanie lokomotywy + { // odhamowywanie składu po zatrzymaniu i zabezpieczanie lokomotywy if ((OrderList[OrderPos] & (Disconnect | Connect)) == - 0) // przy (p)od��czaniu nie zwalniamy tu hamulca + 0) // przy (p)odłączaniu nie zwalniamy tu hamulca if ((mvOccupied->V == 0.0) && ((VelDesired == 0.0) || (AccDesired == 0.0))) if ((mvOccupied->BrakeCtrlPos < 1) || !mvOccupied->DecBrakeLevel()) - mvOccupied->IncLocalBrakeLevel(1); // dodatkowy na pozycj� 1 + mvOccupied->IncLocalBrakeLevel(1); // dodatkowy na pozycję 1 } break; // rzeczy robione przy jezdzie } // switch (OrderList[OrderPos]) @@ -4819,43 +4761,43 @@ bool TController::UpdateSituation(double dt) if ((fLastStopExpDist > 0.0) && (mvOccupied->DistCounter > fLastStopExpDist)) { - iStationStart = TrainParams->StationIndex; // zaktualizowa� wy�wietlanie rozk�adu - fLastStopExpDist = -1.0f; // usun�� licznik + iStationStart = TrainParams->StationIndex; // zaktualizować wyświetlanie rozkładu + fLastStopExpDist = -1.0f; // usunąć licznik } if (AIControllFlag) { - if (fWarningDuration > 0.0) // je�li pozosta�o co� do wytr�bienia - { // tr�bienie trwa nadal + if (fWarningDuration > 0.0) // jeśli pozostało coś do wytrąbienia + { // trąbienie trwa nadal fWarningDuration = fWarningDuration - dt; if (fWarningDuration < 0.05) - mvOccupied->WarningSignal = 0; // a tu si� ko�czy + mvOccupied->WarningSignal = 0; // a tu się kończy if (ReactionTime > fWarningDuration) ReactionTime = - fWarningDuration; // wcze�niejszy przeb�ysk �wiadomo�ci, by zako�czy� tr�bienie + fWarningDuration; // wcześniejszy przebłysk świadomości, by zakończyć trąbienie } if (mvOccupied->Vel >= - 3.0) // jesli jedzie, mo�na odblokowa� tr�bienie, bo si� wtedy nie w��czy + 3.0) // jesli jedzie, można odblokować trąbienie, bo się wtedy nie włączy { - iDrivigFlags &= ~moveStartHornDone; // zatr�bi dopiero jak nast�pnym razem stanie - iDrivigFlags |= moveStartHorn; // i tr�bi� przed nast�pnym ruszeniem + iDrivigFlags &= ~moveStartHornDone; // zatrąbi dopiero jak następnym razem stanie + iDrivigFlags |= moveStartHorn; // i trąbić przed następnym ruszeniem } return UpdateOK; } else // if (AIControllFlag) - return false; // AI nie obs�uguje + return false; // AI nie obsługuje } void TController::JumpToNextOrder() -{ // wykonanie kolejnej komendy z tablicy rozkaz�w +{ // wykonanie kolejnej komendy z tablicy rozkazów if (OrderList[OrderPos] != Wait_for_orders) { - if (OrderList[OrderPos] & Change_direction) // je�li zmiana kierunku - if (OrderList[OrderPos] != Change_direction) // ale na�o�ona na co� + if (OrderList[OrderPos] & Change_direction) // jeśli zmiana kierunku + if (OrderList[OrderPos] != Change_direction) // ale nałożona na coś { OrderList[OrderPos] = TOrders(OrderList[OrderPos] & - ~Change_direction); // usuni�cie zmiany kierunku z innej komendy + ~Change_direction); // usunięcie zmiany kierunku z innej komendy OrderCheck(); return; } @@ -4867,7 +4809,7 @@ void TController::JumpToNextOrder() OrderCheck(); #if LOGORDERS WriteLog("--> JumpToNextOrder"); - OrdersDump(); // normalnie nie ma po co tego wypisywa� + OrdersDump(); // normalnie nie ma po co tego wypisywać #endif }; @@ -4879,76 +4821,76 @@ void TController::JumpToFirstOrder() OrderCheck(); #if LOGORDERS WriteLog("--> JumpToFirstOrder"); - OrdersDump(); // normalnie nie ma po co tego wypisywa� + OrdersDump(); // normalnie nie ma po co tego wypisywać #endif }; void TController::OrderCheck() -{ // reakcja na zmian� rozkazu +{ // reakcja na zmianę rozkazu if (OrderList[OrderPos] & (Shunt | Connect | Obey_train)) - CheckVehicles(); // sprawdzi� �wiat�a - if (OrderList[OrderPos] & Change_direction) // mo�e by� na�o�ona na inn� i wtedy ma priorytet - iDirectionOrder = -iDirection; // trzeba zmieni� jawnie, bo si� nie domy�li + CheckVehicles(); // sprawdzić światła + if (OrderList[OrderPos] & Change_direction) // może być nałożona na inną i wtedy ma priorytet + iDirectionOrder = -iDirection; // trzeba zmienić jawnie, bo się nie domyśli else if (OrderList[OrderPos] == Obey_train) - iDrivigFlags |= moveStopPoint; // W4 s� widziane + iDrivigFlags |= moveStopPoint; // W4 są widziane else if (OrderList[OrderPos] == Disconnect) iVehicleCount = iVehicleCount < 0 ? 0 : iVehicleCount; // odczepianie lokomotywy else if (OrderList[OrderPos] == Connect) - iDrivigFlags &= ~moveStopPoint; // podczas jazdy na po��czenie nie zwraca� uwagi na W4 + iDrivigFlags &= ~moveStopPoint; // podczas jazdy na połączenie nie zwracać uwagi na W4 else if (OrderList[OrderPos] == Wait_for_orders) - OrdersClear(); // czyszczenie rozkaz�w i przeskok do zerowej pozycji + OrdersClear(); // czyszczenie rozkazów i przeskok do zerowej pozycji } void TController::OrderNext(TOrders NewOrder) -{ // ustawienie rozkazu do wykonania jako nast�pny +{ // ustawienie rozkazu do wykonania jako następny if (OrderList[OrderPos] == NewOrder) - return; // je�li robi to, co trzeba, to koniec + return; // jeśli robi to, co trzeba, to koniec if (!OrderPos) OrderPos = 1; // na pozycji zerowej pozostaje czekanie - OrderTop = OrderPos; // ale mo�e jest czym� zaj�ty na razie - if (NewOrder >= Shunt) // je�li ma jecha� - { // ale mo�e by� zaj�ty chwilowymi operacjami - while (OrderList[OrderTop] ? OrderList[OrderTop] < Shunt : false) // je�li co� robi + OrderTop = OrderPos; // ale może jest czymś zajęty na razie + if (NewOrder >= Shunt) // jeśli ma jechać + { // ale może być zajęty chwilowymi operacjami + while (OrderList[OrderTop] ? OrderList[OrderTop] < Shunt : false) // jeśli coś robi ++OrderTop; // pomijamy wszystkie tymczasowe prace } else - { // je�li ma ustawion� jazd�, to wy��czamy na rzecz operacji + { // jeśli ma ustawioną jazdę, to wyłączamy na rzecz operacji while (OrderList[OrderTop] ? (OrderList[OrderTop] < Shunt) && (OrderList[OrderTop] != NewOrder) : - false) // je�li co� robi + false) // jeśli coś robi ++OrderTop; // pomijamy wszystkie tymczasowe prace } - OrderList[OrderTop++] = NewOrder; // dodanie rozkazu jako nast�pnego + OrderList[OrderTop++] = NewOrder; // dodanie rozkazu jako następnego #if LOGORDERS WriteLog("--> OrderNext"); - OrdersDump(); // normalnie nie ma po co tego wypisywa� + OrdersDump(); // normalnie nie ma po co tego wypisywać #endif } void TController::OrderPush(TOrders NewOrder) { // zapisanie na stosie kolejnego rozkazu do wykonania - if (OrderPos == OrderTop) // je�li mia�by by� zapis na aktalnej pozycji + if (OrderPos == OrderTop) // jeśli miałby być zapis na aktalnej pozycji if (OrderList[OrderPos] < Shunt) // ale nie jedzie - ++OrderTop; // niekt�re operacje musz� zosta� najpierw doko�czone => zapis na kolejnej - if (OrderList[OrderTop] != NewOrder) // je�li jest to samo, to nie dodajemy + ++OrderTop; // niektóre operacje muszą zostać najpierw dokończone => zapis na kolejnej + if (OrderList[OrderTop] != NewOrder) // jeśli jest to samo, to nie dodajemy OrderList[OrderTop++] = NewOrder; // dodanie rozkazu na stos // if (OrderTop= maxorders) ErrorLog("Commands overflow: The program will now crash"); #if LOGORDERS WriteLog("--> OrderPush"); - OrdersDump(); // normalnie nie ma po co tego wypisywa� + OrdersDump(); // normalnie nie ma po co tego wypisywać #endif } void TController::OrdersDump() -{ // wypisanie kolejnych rozkaz�w do logu +{ // wypisanie kolejnych rozkazów do logu WriteLog("Orders for " + pVehicle->asName + ":"); for (int b = 0; b < maxorders; ++b) { - WriteLog(std::to_string(b) + ": " + Order2Str(OrderList[b]) + (OrderPos == b ? " <-" : "")); - if (b) // z wyj�tkiem pierwszej pozycji - if (OrderList[b] == Wait_for_orders) // je�li ko�cowa komenda + WriteLog((std::to_string(b) + ": " + Order2Str(OrderList[b]) + (OrderPos == b ? " <-" : ""))); + if (b) // z wyjątkiem pierwszej pozycji + if (OrderList[b] == Wait_for_orders) // jeśli końcowa komenda break; // dalej nie trzeba } }; @@ -4964,191 +4906,191 @@ inline TOrders TController::OrderNextGet() } void TController::OrdersInit(double fVel) -{ // wype�nianie tabelki rozkaz�w na podstawie rozk�adu - // ustawienie kolejno�ci komend, niezale�nie kto prowadzi +{ // wypełnianie tabelki rozkazów na podstawie rozkładu + // ustawienie kolejności komend, niezależnie kto prowadzi // Mechanik->OrderPush(Wait_for_orders); //czekanie na lepsze czasy - // OrderPos=OrderTop=0; //wype�niamy od pozycji 0 - OrdersClear(); // usuni�cie poprzedniej tabeli + // OrderPos=OrderTop=0; //wypełniamy od pozycji 0 + OrdersClear(); // usunięcie poprzedniej tabeli OrderPush(Prepare_engine); // najpierw odpalenie silnika if (TrainParams->TrainName == "none") - { // brak rozk�adu to jazda manewrowa - if (fVel > 0.05) // typowo 0.1 oznacza gotowo�� do jazdy, 0.01 tylko za��czenie silnika - OrderPush(Shunt); // je�li nie ma rozk�adu, to manewruje + { // brak rozkładu to jazda manewrowa + if (fVel > 0.05) // typowo 0.1 oznacza gotowość do jazdy, 0.01 tylko załączenie silnika + OrderPush(Shunt); // jeśli nie ma rozkładu, to manewruje } else - { // je�li z rozk�adem, to jedzie na szlak + { // jeśli z rozkładem, to jedzie na szlak if ((fVel > 0.0) && (fVel < 0.02)) - OrderPush(Shunt); // dla pr�dko�ci 0.01 w��czamy jazd� manewrow� + OrderPush(Shunt); // dla prędkości 0.01 włączamy jazdę manewrową else if (TrainParams ? - (TrainParams->DirectionChange() ? // je�li obr�t na pierwszym przystanku + (TrainParams->DirectionChange() ? // jeśli obrót na pierwszym przystanku ((iDrivigFlags & - movePushPull) ? // SZT r�wnie�! SN61 zale�nie od wagon�w... + movePushPull) ? // SZT również! SN61 zależnie od wagonów... (TrainParams->TimeTable[1].StationName == TrainParams->Relation1) : false) : false) : true) - OrderPush(Shunt); // a teraz start b�dzie w manewrowym, a tryb poci�gowy w��czy W4 + OrderPush(Shunt); // a teraz start będzie w manewrowym, a tryb pociągowy włączy W4 else - // je�li start z pierwszej stacji i jednocze�nie jest na niej zmiana kierunku, to EZT ma - // mie� Shunt + // jeśli start z pierwszej stacji i jednocześnie jest na niej zmiana kierunku, to EZT ma + // mieć Shunt OrderPush(Obey_train); // dla starych scenerii start w trybie pociagowym - if (DebugModeFlag) // normalnie nie ma po co tego wypisywa� + if (DebugModeFlag) // normalnie nie ma po co tego wypisywać WriteLog("/* Timetable: " + TrainParams->ShowRelation()); TMTableLine *t; for (int i = 0; i <= TrainParams->StationCount; ++i) { t = TrainParams->TimeTable + i; - if (DebugModeFlag) // normalnie nie ma po co tego wypisywa� + if (DebugModeFlag) // normalnie nie ma po co tego wypisywa? WriteLog(t->StationName + " " + std::to_string(t->Ah) + ":" + std::to_string(t->Am) + ", " + std::to_string(t->Dh) + ":" + std::to_string(t->Dm) + " " + t->StationWare); if (t->StationWare.find('@') != std::string::npos) - { // zmiana kierunku i dalsza jazda wg rozk�adu - if (iDrivigFlags & movePushPull) // SZT r�wnie�! SN61 zale�nie od wagon�w... - { // je�li sk�ad zespolony, wystarczy zmieni� kierunek jazdy + { // zmiana kierunku i dalsza jazda wg rozk?adu + if (iDrivigFlags & movePushPull) // SZT również! SN61 zależnie od wagonów... + { // jeśli skład zespolony, wystarczy zmienić kierunek jazdy OrderPush(Change_direction); // zmiana kierunku } else - { // dla zwyk�ego sk�adu wagonowego odczepiamy lokomotyw� + { // dla zwykłego składu wagonowego odczepiamy lokomotywę OrderPush(Disconnect); // odczepienie lokomotywy OrderPush(Shunt); // a dalej manewry - if (i <= TrainParams->StationCount) // 130827: to si� jednak nie sprawdza - { //"@" na ostatniej robi tylko odpi�cie + if (i <= TrainParams->StationCount) // 130827: to się jednak nie sprawdza + { //"@" na ostatniej robi tylko odpięcie // OrderPush(Change_direction); //zmiana kierunku - // OrderPush(Shunt); //jazda na drug� stron� sk�adu + // OrderPush(Shunt); //jazda na drugą stronę składu // OrderPush(Change_direction); //zmiana kierunku // OrderPush(Connect); //jazda pod wagony } } if (i < TrainParams->StationCount) // jak nie ostatnia stacja - OrderPush(Obey_train); // to dalej wg rozk�adu + OrderPush(Obey_train); // to dalej wg rozkładu } } - if (DebugModeFlag) // normalnie nie ma po co tego wypisywa� + if (DebugModeFlag) // normalnie nie ma po co tego wypisywać WriteLog("*/"); - OrderPush(Shunt); // po wykonaniu rozk�adu prze��czy si� na manewry + OrderPush(Shunt); // po wykonaniu rozkładu przełączy się na manewry } // McZapkie-100302 - to ma byc wyzwalane ze scenerii if (fVel == 0.0) - SetVelocity(0, 0, stopSleep); // je�li nie ma pr�dko�ci pocz�tkowej, to �pi + SetVelocity(0, 0, stopSleep); // jeśli nie ma prędkości początkowej, to śpi else - { // je�li podana niezerowa pr�dko�� + { // jeśli podana niezerowa prędkość if ((fVel >= 1.0) || - (fVel < 0.02)) // je�li ma jecha� - dla 0.01 ma podjecha� manewrowo po podaniu sygna�u + (fVel < 0.02)) // jeśli ma jechać - dla 0.01 ma podjechać manewrowo po podaniu sygnału iDrivigFlags = (iDrivigFlags & ~moveStopHere) | - moveStopCloser; // to do nast�pnego W4 ma podjecha� blisko + moveStopCloser; // to do następnego W4 ma podjechać blisko else - iDrivigFlags |= moveStopHere; // czeka� na sygna� + iDrivigFlags |= moveStopHere; // czekać na sygnał JumpToFirstOrder(); - if (fVel >= 1.0) // je�li ma jecha� - SetVelocity(fVel, -1); // ma ustawi� ��dan� pr�dko�� + if (fVel >= 1.0) // jeśli ma jechać + SetVelocity(fVel, -1); // ma ustawić żądaną prędkość else - SetVelocity(0, 0, stopSleep); // pr�dko�� w przedziale (0;1) oznacza, �e ma sta� + SetVelocity(0, 0, stopSleep); // prędkość w przedziale (0;1) oznacza, że ma stać } #if LOGORDERS WriteLog("--> OrdersInit"); #endif - if (DebugModeFlag) // normalnie nie ma po co tego wypisywa� - OrdersDump(); // wypisanie kontrolne tabelki rozkaz�w + if (DebugModeFlag) // normalnie nie ma po co tego wypisywać + OrdersDump(); // wypisanie kontrolne tabelki rozkazów // McZapkie! - zeby w ogole AI ruszyl to musi wykonac powyzsze rozkazy // Ale mozna by je zapodac ze scenerii }; string TController::StopReasonText() { // informacja tekstowa o przyczynie zatrzymania - if (eStopReason != 7) // zawalidroga b�dzie inaczej + if (eStopReason != 7) // zawalidroga będzie inaczej return StopReasonTable[eStopReason]; else return "Blocked by " + (pVehicles[0]->PrevAny()->GetName()); }; //---------------------------------------------------------------------------------------------------------------------- -// McZapkie: skanowanie semafor�w -// Ra: stare funkcje skanuj�ce, u�ywane podczas manewr�w do szukania sygnalizatora z ty�u -//- nie reaguj� na PutValues, bo nie ma takiej potrzeby -//- rozpoznaj� tylko zerow� pr�dko�� (jako koniec toru i brak podstaw do dalszego skanowania) +// McZapkie: skanowanie semaforów +// Ra: stare funkcje skanujące, używane podczas manewrów do szukania sygnalizatora z tyłu +//- nie reagują na PutValues, bo nie ma takiej potrzeby +//- rozpoznają tylko zerową prędkość (jako koniec toru i brak podstaw do dalszego skanowania) //---------------------------------------------------------------------------------------------------------------------- -/* //nie u�ywane +/* //nie używane double TController::Distance(vector3 &p1,vector3 &n,vector3 &p2) -{//Ra:obliczenie odleg�o�ci punktu (p1) od p�aszczyzny o wektorze normalnym (n) przechodz�cej przez +{//Ra:obliczenie odległości punktu (p1) od płaszczyzny o wektorze normalnym (n) przechodzącej przez (p2) return n.x*(p1.x-p2.x)+n.y*(p1.y-p2.y)+n.z*(p1.z-p2.z); //ax1+by1+cz1+d, gdzie d=-(ax2+by2+cz2) }; */ bool TController::BackwardTrackBusy(TTrack *Track) -{ // najpierw sprawdzamy, czy na danym torze s� pojazdy z innego sk�adu +{ // najpierw sprawdzamy, czy na danym torze są pojazdy z innego składu if (Track->iNumDynamics) - { // je�li tylko z w�asnego sk�adu, to tor jest wolny + { // jeśli tylko z własnego składu, to tor jest wolny for (int i = 0; i < Track->iNumDynamics; ++i) - if (Track->Dynamics[i]->ctOwner != this) // je�li jest jaki� cudzy - return true; // to tor jest zaj�ty i skanowanie nie obowi�zuje + if (Track->Dynamics[i]->ctOwner != this) // jeśli jest jakiś cudzy + return true; // to tor jest zajęty i skanowanie nie obowiązuje } return false; // wolny }; -TEvent *TController::CheckTrackEventBackward(double fDirection, TTrack *Track) -{ // sprawdzanie eventu w torze, czy jest sygna�owym - skanowanie do ty�u +TEvent * TController::CheckTrackEventBackward(double fDirection, TTrack *Track) +{ // sprawdzanie eventu w torze, czy jest sygnałowym - skanowanie do tyłu TEvent *e = (fDirection > 0) ? Track->evEvent2 : Track->evEvent1; if (e) - if (!e->bEnabled) // je�li sygna�owy (nie dodawany do kolejki) - if (e->Type == tp_GetValues) // PutValues nie mo�e si� zmieni� + if (!e->bEnabled) // jeśli sygnałowy (nie dodawany do kolejki) + if (e->Type == tp_GetValues) // PutValues nie może się zmienić return e; return NULL; }; -TTrack *TController::BackwardTraceRoute(double &fDistance, double &fDirection, TTrack *Track, - TEvent *&Event) -{ // szukanie sygnalizatora w kierunku przeciwnym jazdy (eventu odczytu kom�rki pami�ci) - TTrack *pTrackChVel = Track; // tor ze zmian� pr�dko�ci - TTrack *pTrackFrom; // odcinek poprzedni, do znajdywania ko�ca dr�g - double fDistChVel = -1; // odleg�o�� do toru ze zmian� pr�dko�ci +TTrack * TController::BackwardTraceRoute(double &fDistance, double &fDirection, + TTrack *Track, TEvent *&Event) +{ // szukanie sygnalizatora w kierunku przeciwnym jazdy (eventu odczytu komórki pamięci) + TTrack *pTrackChVel = Track; // tor ze zmianą prędkości + TTrack *pTrackFrom; // odcinek poprzedni, do znajdywania końca dróg + double fDistChVel = -1; // odległość do toru ze zmianą prędkości double fCurrentDistance = pVehicle->RaTranslationGet(); // aktualna pozycja na torze double s = 0; - if (fDirection > 0) // je�li w kierunku Point2 toru + if (fDirection > 0) // jeśli w kierunku Point2 toru fCurrentDistance = Track->Length() - fCurrentDistance; if (BackwardTrackBusy(Track)) - { // jak tor zaj�ty innym sk�adem, to nie ma po co skanowa� + { // jak tor zajęty innym składem, to nie ma po co skanować fDistance = 0; // to na tym torze stoimy - return NULL; // stop, skanowanie nie da�o sensownych rezultat�w + return NULL; // stop, skanowanie nie dało sensownych rezultatów } if ((Event = CheckTrackEventBackward(fDirection, Track)) != NULL) - { // je�li jest semafor na tym torze + { // jeśli jest semafor na tym torze fDistance = 0; // to na tym torze stoimy return Track; } if ((Track->VelocityGet() == 0.0) || (Track->iDamageFlag & 128)) - { // jak pr�dkos� 0 albo uszkadza, to nie ma po co skanowa� + { // jak prędkosć 0 albo uszkadza, to nie ma po co skanować fDistance = 0; // to na tym torze stoimy - return NULL; // stop, skanowanie nie da�o sensownych rezultat�w + return NULL; // stop, skanowanie nie dało sensownych rezultatów } while (s < fDistance) { - // Track->ScannedFlag=true; //do pokazywania przeskanowanych tor�w - pTrackFrom = Track; // zapami�tanie aktualnego odcinka - s += fCurrentDistance; // doliczenie kolejnego odcinka do przeskanowanej d�ugo�ci + // Track->ScannedFlag=true; //do pokazywania przeskanowanych torów + pTrackFrom = Track; // zapamiętanie aktualnego odcinka + s += fCurrentDistance; // doliczenie kolejnego odcinka do przeskanowanej długości if (fDirection > 0) - { // je�li szukanie od Point1 w kierunku Point2 + { // jeśli szukanie od Point1 w kierunku Point2 if (Track->iNextDirection) fDirection = -fDirection; - Track = Track->CurrentNext(); // mo�e by� NULL + Track = Track->CurrentNext(); // może być NULL } else // if (fDirection<0) - { // je�li szukanie od Point2 w kierunku Point1 + { // jeśli szukanie od Point2 w kierunku Point1 if (!Track->iPrevDirection) fDirection = -fDirection; - Track = Track->CurrentPrev(); // mo�e by� NULL + Track = Track->CurrentPrev(); // może być NULL } if (Track == pTrackFrom) - Track = NULL; // koniec, tak jak dla tor�w + Track = NULL; // koniec, tak jak dla torów if (Track ? (Track->VelocityGet() == 0.0) || (Track->iDamageFlag & 128) || BackwardTrackBusy(Track) : true) - { // gdy dalej toru nie ma albo zerowa pr�dko��, albo uszkadza pojazd + { // gdy dalej toru nie ma albo zerowa prędkość, albo uszkadza pojazd fDistance = s; - return NULL; // zwraca NULL, �e skanowanie nie da�o sensownych rezultat�w + return NULL; // zwraca NULL, że skanowanie nie dało sensownych rezultatów } fCurrentDistance = Track->Length(); if ((Event = CheckTrackEventBackward(fDirection, Track)) != NULL) @@ -5163,115 +5105,115 @@ TTrack *TController::BackwardTraceRoute(double &fDistance, double &fDirection, T fDistance = s; return Track; } - fDistance = fDistChVel; // odleg�o�� do zmiany pr�dko�ci - return pTrackChVel; // i tor na kt�rym si� zmienia + fDistance = fDistChVel; // odległość do zmiany prędkości + return pTrackChVel; // i tor na którym się zmienia } -// sprawdzanie zdarze� semafor�w i ogranicze� szlakowych +// sprawdzanie zdarzeń semaforów i ograniczeń szlakowych void TController::SetProximityVelocity(double dist, double vel, const vector3 *pos) -{ // Ra:przeslanie do AI pr�dko�ci +{ // Ra:przeslanie do AI prędkości /* - //!!!! zast�pi� prawid�ow� reakcj� AI na SetProximityVelocity !!!! + //!!!! zastąpić prawidłową reakcją AI na SetProximityVelocity !!!! if (vel==0) - {//je�li zatrzymanie, to zmniejszamy dystans o 10m + {//jeśli zatrzymanie, to zmniejszamy dystans o 10m dist-=10.0; }; if (dist<0.0) dist=0.0; if ((vel<0)?true:dist>0.1*(MoverParameters->Vel*MoverParameters->Vel-vel*vel)+50) - {//je�li jest dalej od umownej drogi hamowania + {//jeśli jest dalej od umownej drogi hamowania */ PutCommand("SetProximityVelocity", dist, vel, pos); /* } else - {//je�li jest zagro�enie, �e przekroczy + {//jeśli jest zagrożenie, że przekroczy Mechanik->SetVelocity(floor(0.2*sqrt(dist)+vel),vel,stopError); } */ } TCommandType TController::BackwardScan() -{ // sprawdzanie zdarze� semafor�w z ty�u pojazdu, zwraca komend� - // dzi�ki temu b�dzie mo�na stawa� za wskazanym sygnalizatorem, a zw�aszcza je�li b�dzie jazda - // na kozio� - // ograniczenia pr�dko�ci nie s� wtedy istotne, r�wnie� koniec toru jest do niczego nie +{ // sprawdzanie zdarzeń semaforów z tyłu pojazdu, zwraca komendę + // dzięki temu będzie można stawać za wskazanym sygnalizatorem, a zwłaszcza jeśli będzie jazda + // na kozioł + // ograniczenia prędkości nie są wtedy istotne, również koniec toru jest do niczego nie // przydatny - // zwraca true, je�li nale�y odwr�ci� kierunek jazdy pojazdu + // zwraca true, jeśli należy odwrócić kierunek jazdy pojazdu if ((OrderList[OrderPos] & ~(Shunt | Connect))) - return cm_Unknown; // skanowanie sygna��w tylko gdy jedzie w trybie manewrowym albo czeka na + return cm_Unknown; // skanowanie sygnałów tylko gdy jedzie w trybie manewrowym albo czeka na // rozkazy vector3 sl; int startdir = - -pVehicles[0]->DirectionGet(); // kierunek jazdy wzgl�dem sprz�g�w pojazdu na czele - if (startdir == 0) // je�li kabina i kierunek nie jest okre�lony + -pVehicles[0]->DirectionGet(); // kierunek jazdy względem sprzęgów pojazdu na czele + if (startdir == 0) // jeśli kabina i kierunek nie jest określony return cm_Unknown; // nie robimy nic double scandir = startdir * pVehicles[0]->RaDirectionGet(); // szukamy od pierwszej osi w wybranym kierunku if (scandir != - 0.0) // skanowanie toru w poszukiwaniu event�w GetValues (PutValues nie s� przydatne) - { // Ra: przy wstecznym skanowaniu pr�dko�� nie ma znaczenia - // scanback=pVehicles[1]->NextDistance(fLength+1000.0); //odleg�o�� do nast�pnego pojazdu, + 0.0) // skanowanie toru w poszukiwaniu eventów GetValues (PutValues nie są przydatne) + { // Ra: przy wstecznym skanowaniu prędkość nie ma znaczenia + // scanback=pVehicles[1]->NextDistance(fLength+1000.0); //odległość do następnego pojazdu, // 1000 gdy nic nie ma - double scanmax = 1000; // 1000m do ty�u, �eby widzia� przeciwny koniec stacji - double scandist = scanmax; // zmodyfikuje na rzeczywi�cie przeskanowane + double scanmax = 1000; // 1000m do tyłu, żeby widział przeciwny koniec stacji + double scandist = scanmax; // zmodyfikuje na rzeczywiście przeskanowane TEvent *e = NULL; // event potencjalnie od semafora - // opcjonalnie mo�e by� skanowanie od "wska�nika" z przodu, np. W5, Tm=Ms1, koniec toru + // opcjonalnie może być skanowanie od "wskaźnika" z przodu, np. W5, Tm=Ms1, koniec toru TTrack *scantrack = BackwardTraceRoute(scandist, scandir, pVehicles[0]->RaTrackGet(), e); // wg drugiej osi w kierunku ruchu vector3 dir = startdir * pVehicles[0]->VectorFront(); // wektor w kierunku jazdy/szukania - if (!scantrack) // je�li wstecz wykryto koniec toru - return cm_Unknown; // to raczej nic si� nie da w takiej sytuacji zrobi� + if (!scantrack) // jeśli wstecz wykryto koniec toru + return cm_Unknown; // to raczej nic się nie da w takiej sytuacji zrobić else - { // a je�li s� dalej tory - double vmechmax; // pr�dko�� ustawiona semaforem + { // a jeśli są dalej tory + double vmechmax; // prędkość ustawiona semaforem if (e) - { // je�li jest jaki� sygna� na widoku + { // jeśli jest jakiś sygnał na widoku #if LOGBACKSCAN AnsiString edir = pVehicle->asName + " - " + AnsiString((scandir > 0) ? "Event2 " : "Event1 "); #endif - // najpierw sprawdzamy, czy semafor czy inny znak zosta� przejechany - vector3 pos = pVehicles[1]->RearPosition(); // pozycja ty�u - vector3 sem; // wektor do sygna�u + // najpierw sprawdzamy, czy semafor czy inny znak został przejechany + vector3 pos = pVehicles[1]->RearPosition(); // pozycja tyłu + vector3 sem; // wektor do sygnału if (e->Type == tp_GetValues) - { // przes�a� info o zbli�aj�cym si� semaforze + { // przesłać info o zbliżającym się semaforze #if LOGBACKSCAN edir += "(" + (e->Params[8].asGroundNode->asName) + "): "; #endif - sl = e->PositionGet(); // po�o�enie kom�rki pami�ci - sem = sl - pos; // wektor do kom�rki pami�ci od ko�ca sk�adu - // sem=e->Params[8].asGroundNode->pCenter-pos; //wektor do kom�rki pami�ci - if (dir.x * sem.x + dir.z * sem.z < 0) // je�li zosta� mini�ty - // if ((mvOccupied->CategoryFlag&1)?(VelNext!=0.0):true) //dla poci�gu wymagany - // sygna� zezwalaj�cy - { // iloczyn skalarny jest ujemny, gdy sygna� stoi z ty�u + sl = e->PositionGet(); // położenie komórki pamięci + sem = sl - pos; // wektor do komórki pamięci od końca składu + // sem=e->Params[8].asGroundNode->pCenter-pos; //wektor do komórki pamięci + if (dir.x * sem.x + dir.z * sem.z < 0) // jeśli został minięty + // if ((mvOccupied->CategoryFlag&1)?(VelNext!=0.0):true) //dla pociągu wymagany + // sygnał zezwalający + { // iloczyn skalarny jest ujemny, gdy sygnał stoi z tyłu #if LOGBACKSCAN WriteLog(edir + "- ignored as not passed yet"); #endif return cm_Unknown; // nic } - vmechmax = e->ValueGet(1); // pr�dko�� przy tym semaforze - // przeliczamy odleg�o�� od semafora - potrzebne by by�y wsp��rz�dne pocz�tku - // sk�adu + vmechmax = e->ValueGet(1); // prędkość przy tym semaforze + // przeliczamy odległość od semafora - potrzebne by były współrzędne początku + // składu // scandist=(pos-e->Params[8].asGroundNode->pCenter).Length()-0.5*mvOccupied->Dim.L-10; // //10m luzu scandist = sem.Length() - 2; // 2m luzu przy manewrach wystarczy if (scandist < 0) - scandist = 0; // ujemnych nie ma po co wysy�a� - bool move = false; // czy AI w trybie manewerowym ma doci�gn�� pod S1 + scandist = 0; // ujemnych nie ma po co wysyłać + bool move = false; // czy AI w trybie manewerowym ma dociągnąć pod S1 if (e->Command() == cm_SetVelocity) if ((vmechmax == 0.0) ? (OrderCurrentGet() & (Shunt | Connect)) : (OrderCurrentGet() & - Connect)) // przy podczepianiu ignorowa� wyjazd? - move = true; // AI w trybie manewerowym ma doci�gn�� pod S1 + Connect)) // przy podczepianiu ignorować wyjazd? + move = true; // AI w trybie manewerowym ma dociągnąć pod S1 else { // if ((scandist > fMinProximityDist) ? (mvOccupied->Vel > 0.0) && (OrderCurrentGet() != Shunt) : false) - { // je�li semafor jest daleko, a pojazd jedzie, to informujemy o -// zmianie pr�dko�ci -// je�li jedzie manewrowo, musi dosta� SetVelocity, �eby sie na poci�gowy prze��czy� + { // jeśli semafor jest daleko, a pojazd jedzie, to informujemy o +// zmianie prędkości +// jeśli jedzie manewrowo, musi dostać SetVelocity, żeby sie na pociągowy przełączył // Mechanik->PutCommand("SetProximityVelocity",scandist,vmechmax,sl); #if LOGBACKSCAN // WriteLog(edir+"SetProximityVelocity "+AnsiString(scandist)+" @@ -5281,13 +5223,13 @@ TCommandType TController::BackwardScan() // SetProximityVelocity(scandist,vmechmax,&sl); return (vmechmax > 0) ? cm_SetVelocity : cm_Unknown; } - else // ustawiamy pr�dko�� tylko wtedy, gdy ma ruszy�, stan�� albo ma - // sta� - // if ((MoverParameters->Vel==0.0)||(vmechmax==0.0)) //je�li stoi lub ma - // stan��/sta� - { // semafor na tym torze albo lokomtywa stoi, a ma ruszy�, albo ma -// stan��, albo nie rusza� -// stop trzeba powtarza�, bo inaczej zatr�bi i pojedzie sam + else // ustawiamy prędkość tylko wtedy, gdy ma ruszyć, stanąć albo ma + // stać + // if ((MoverParameters->Vel==0.0)||(vmechmax==0.0)) //jeśli stoi lub ma + // stanąć/stać + { // semafor na tym torze albo lokomtywa stoi, a ma ruszyć, albo ma +// stanąć, albo nie ruszać +// stop trzeba powtarzać, bo inaczej zatrąbi i pojedzie sam // PutCommand("SetVelocity",vmechmax,e->Params[9].asMemCell->Value2(),&sl,stopSem); #if LOGBACKSCAN WriteLog(edir + "SetVelocity " + AnsiString(vmechmax) + " " + @@ -5297,18 +5239,18 @@ TCommandType TController::BackwardScan() } } if (OrderCurrentGet() ? OrderCurrentGet() & (Shunt | Connect) : - true) // w Wait_for_orders te� widzi tarcze - { // reakcja AI w trybie manewrowym dodatkowo na sygna�y manewrowe + true) // w Wait_for_orders też widzi tarcze + { // reakcja AI w trybie manewrowym dodatkowo na sygnały manewrowe if (move ? true : e->Command() == cm_ShuntVelocity) - { // je�li powy�ej by�o SetVelocity 0 0, to doci�gamy pod S1 + { // jeśli powyżej było SetVelocity 0 0, to dociągamy pod S1 if ((scandist > fMinProximityDist) ? (mvOccupied->Vel > 0.0) || (vmechmax == 0.0) : false) - { // je�li tarcza jest daleko, to: - //- jesli pojazd jedzie, to informujemy o zmianie pr�dko�ci - //- je�li stoi, to z w�asnej inicjatywy mo�e podjecha� pod zamkni�t� - // tarcz� - if (mvOccupied->Vel > 0.0) // tylko je�li jedzie + { // jeśli tarcza jest daleko, to: + //- jesli pojazd jedzie, to informujemy o zmianie prędkości + //- jeśli stoi, to z własnej inicjatywy może podjechać pod zamkniętą + // tarczę + if (mvOccupied->Vel > 0.0) // tylko jeśli jedzie { // Mechanik->PutCommand("SetProximityVelocity",scandist,vmechmax,sl); #if LOGBACKSCAN // WriteLog(edir+"SetProximityVelocity "+AnsiString(scandist)+" @@ -5318,16 +5260,16 @@ TCommandType TController::BackwardScan() // SetProximityVelocity(scandist,vmechmax,&sl); return (iDrivigFlags & moveTrackEnd) ? cm_ChangeDirection : - cm_Unknown; // je�li jedzie na W5 albo koniec toru, - // to mo�na zmieni� kierunek + cm_Unknown; // jeśli jedzie na W5 albo koniec toru, + // to można zmienić kierunek } } - else // ustawiamy pr�dko�� tylko wtedy, gdy ma ruszy�, albo stan�� albo - // ma sta� pod tarcz� - { // stop trzeba powtarza�, bo inaczej zatr�bi i pojedzie sam - // if ((MoverParameters->Vel==0.0)||(vmechmax==0.0)) //je�li jedzie - // lub ma stan��/sta� - { // nie dostanie komendy je�li jedzie i ma jecha� + else // ustawiamy prędkość tylko wtedy, gdy ma ruszyć, albo stanąć albo + // ma stać pod tarczą + { // stop trzeba powtarzać, bo inaczej zatrąbi i pojedzie sam + // if ((MoverParameters->Vel==0.0)||(vmechmax==0.0)) //jeśli jedzie + // lub ma stanąć/stać + { // nie dostanie komendy jeśli jedzie i ma jechać // PutCommand("ShuntVelocity",vmechmax,e->Params[9].asMemCell->Value2(),&sl,stopSem); #if LOGBACKSCAN WriteLog(edir + "ShuntVelocity " + AnsiString(vmechmax) + " " + @@ -5337,9 +5279,9 @@ TCommandType TController::BackwardScan() } } if ((vmechmax != 0.0) && (scandist < 100.0)) - { // je�li Tm w odleg�o�ci do 100m podaje zezwolenie na jazd�, to od -// razu j� ignorujemy, aby m�c szuka� kolejnej -// eSignSkip=e; //wtedy uznajemy ignorowan� przy poszukiwaniu nowej + { // jeśli Tm w odległości do 100m podaje zezwolenie na jazdę, to od +// razu ją ignorujemy, aby móc szukać kolejnej +// eSignSkip=e; //wtedy uznajemy ignorowaną przy poszukiwaniu nowej #if LOGBACKSCAN WriteLog(edir + "- will be ignored due to Ms2"); #endif @@ -5347,9 +5289,9 @@ TCommandType TController::BackwardScan() } } // if (move?... } // if (OrderCurrentGet()==Shunt) - if (!e->bEnabled) // je�li skanowany - if (e->StopCommand()) // a pod��czona kom�rka ma komend� - return cm_Command; // to te� si� obr�ci� + if (!e->bEnabled) // jeśli skanowany + if (e->StopCommand()) // a podłączona komórka ma komendę + return cm_Command; // to też się obrócić } // if (e->Type==tp_GetValues) } // if (e) } // if (scantrack) @@ -5358,14 +5300,14 @@ TCommandType TController::BackwardScan() }; std::string TController::NextStop() -{ // informacja o nast�pnym zatrzymaniu, wy�wietlane pod [F1] +{ // informacja o następnym zatrzymaniu, wyświetlane pod [F1] if (asNextStop.length() < 19) - return ""; // nie zawiera nazwy stacji, gdy dojecha� do ko�ca - // doda� godzin� odjazdu + return ""; // nie zawiera nazwy stacji, gdy dojechał do końca + // dodać godzinę odjazdu if (!TrainParams) - return ""; // tu nie powinno nigdy wej�� + return ""; // tu nie powinno nigdy wejść TMTableLine *t = TrainParams->TimeTable + TrainParams->StationIndex; - if (t->Dh >= 0) // je�li jest godzina odjazdu + if (t->Dh >= 0) // jeśli jest godzina odjazdu return asNextStop.substr(19, 30) + " " + std::to_string(t->Dh) + ":" + std::to_string(t->Dm); // odjazd else if (t->Ah >= 0) // przyjazd @@ -5377,88 +5319,88 @@ std::string TController::NextStop() //-----------koniec skanowania semaforow void TController::TakeControl(bool yes) -{ // przej�cie kontroli przez AI albo oddanie +{ // przejęcie kontroli przez AI albo oddanie if (AIControllFlag == yes) - return; // ju� jest jak ma by� - if (yes) //�eby nie wykonywa� dwa razy + return; // już jest jak ma być + if (yes) //żeby nie wykonywać dwa razy { // teraz AI prowadzi AIControllFlag = AIdriver; pVehicle->Controller = AIdriver; - iDirection = 0; // kierunek jazdy trzeba dopiero zgadn�� - // gdy zgaszone �wiat�a, flaga podje�d�ania pod semafory pozostaje bez zmiany - if (OrderCurrentGet()) // je�li co� robi + iDirection = 0; // kierunek jazdy trzeba dopiero zgadnąć + // gdy zgaszone światła, flaga podjeżdżania pod semafory pozostaje bez zmiany + if (OrderCurrentGet()) // jeśli coś robi PrepareEngine(); // niech sprawdzi stan silnika - else // je�li nic nie robi + else // jeśli nic nie robi if (pVehicle->iLights[mvOccupied->CabNo < 0 ? 1 : 0] & - 21) // kt�re� ze �wiate� zapalone? - { // od wersji 357 oczekujemy podania komend dla AI przez sceneri� + 21) // któreś ze świateł zapalone? + { // od wersji 357 oczekujemy podania komend dla AI przez scenerię OrderNext(Prepare_engine); - if (pVehicle->iLights[mvOccupied->CabNo < 0 ? 1 : 0] & 4) // g�rne �wiat�o zapalone - OrderNext(Obey_train); // jazda poci�gowa + if (pVehicle->iLights[mvOccupied->CabNo < 0 ? 1 : 0] & 4) // górne światło zapalone + OrderNext(Obey_train); // jazda pociągowa else OrderNext(Shunt); // jazda manewrowa - if (mvOccupied->Vel >= 1.0) // je�li jedzie (dla 0.1 ma sta�) - iDrivigFlags &= ~moveStopHere; // to ma nie czeka� na sygna�, tylko jecha� + if (mvOccupied->Vel >= 1.0) // jeśli jedzie (dla 0.1 ma stać) + iDrivigFlags &= ~moveStopHere; // to ma nie czekać na sygnał, tylko jechać else iDrivigFlags |= moveStopHere; // a jak stoi, to niech czeka } - /* od wersji 357 oczekujemy podania komend dla AI przez sceneri� + /* od wersji 357 oczekujemy podania komend dla AI przez scenerię if (OrderCurrentGet()) {if (OrderCurrentGet()iLights[mvOccupied->CabNo<0?1:0]&4) //g�rne �wiat�o - OrderNext(Obey_train); //jazda poci�gowa + if (pVehicle->iLights[mvOccupied->CabNo<0?1:0]&4) //górne światło + OrderNext(Obey_train); //jazda pociągowa else OrderNext(Shunt); //jazda manewrowa } } - else //je�li jest w stanie Wait_for_orders + else //jeśli jest w stanie Wait_for_orders JumpToFirstOrder(); //uruchomienie? // czy dac ponizsze? to problematyczne //SetVelocity(pVehicle->GetVelocity(),-1); //utrzymanie dotychczasowej? if (pVehicle->GetVelocity()>0.0) - SetVelocity(-1,-1); //AI ustali sobie odpowiedni� pr�dko�� + SetVelocity(-1,-1); //AI ustali sobie odpowiednią prędkość */ - // Activation(); //przeniesie u�ytkownika w ostatnio wybranym kierunku - CheckVehicles(); // ustawienie �wiate� - TableClear(); // ponowne utworzenie tabelki, bo cz�owiek m�g� pojecha� niezgodnie z - // sygna�ami + // Activation(); //przeniesie użytkownika w ostatnio wybranym kierunku + CheckVehicles(); // ustawienie świateł + TableClear(); // ponowne utworzenie tabelki, bo człowiek mógł pojechać niezgodnie z + // sygnałami } else - { // a teraz u�ytkownik + { // a teraz użytkownik AIControllFlag = Humandriver; pVehicle->Controller = Humandriver; } }; void TController::DirectionForward(bool forward) -{ // ustawienie jazdy do przodu dla true i do ty�u dla false (zale�y od kabiny) - while (mvControlling->MainCtrlPos) // samo zap�tlenie DecSpeed() nie wystarcza - DecSpeed(true); // wymuszenie zerowania nastawnika jazdy, inaczej si� mo�e zawiesi� +{ // ustawienie jazdy do przodu dla true i do tyłu dla false (zależy od kabiny) + while (mvControlling->MainCtrlPos) // samo zapętlenie DecSpeed() nie wystarcza + DecSpeed(true); // wymuszenie zerowania nastawnika jazdy, inaczej się może zawiesić if (forward) while (mvOccupied->ActiveDir <= 0) mvOccupied->DirectionForward(); // do przodu w obecnej kabinie else while (mvOccupied->ActiveDir >= 0) - mvOccupied->DirectionBackward(); // do ty�u w obecnej kabinie + mvOccupied->DirectionBackward(); // do tyłu w obecnej kabinie if (mvOccupied->EngineType == DieselEngine) // specjalnie dla SN61 - if (iDrivigFlags & moveActive) // je�li by� ju� odpalony + if (iDrivigFlags & moveActive) // jeśli był już odpalony if (mvControlling->RList[mvControlling->MainCtrlPos].Mn == 0) - mvControlling->IncMainCtrl(1); //�eby nie zgas� + mvControlling->IncMainCtrl(1); //żeby nie zgasł }; std::string TController::Relation() -{ // zwraca relacj� poci�gu +{ // zwraca relację pociągu return TrainParams->ShowRelation(); }; std::string TController::TrainName() -{ // zwraca numer poci�gu +{ // zwraca numer pociągu return TrainParams->TrainName; }; int TController::StationCount() -{ // zwraca ilo�� stacji (miejsc zatrzymania) +{ // zwraca ilość stacji (miejsc zatrzymania) return TrainParams->StationCount; }; @@ -5468,49 +5410,49 @@ int TController::StationIndex() }; bool TController::IsStop() -{ // informuje, czy jest zatrzymanie na najbli�szej stacji +{ // informuje, czy jest zatrzymanie na najbliższej stacji return TrainParams->IsStop(); }; void TController::MoveTo(TDynamicObject *to) -{ // przesuni�cie AI do innego pojazdu (przy zmianie kabiny) - // mvOccupied->CabDeactivisation(); //wy��czenie kabiny w opuszczanym - pVehicle->Mechanik = to->Mechanik; //�eby si� zamieni�y, jak jest jakie� drugie +{ // przesunięcie AI do innego pojazdu (przy zmianie kabiny) + // mvOccupied->CabDeactivisation(); //wyłączenie kabiny w opuszczanym + pVehicle->Mechanik = to->Mechanik; //żeby się zamieniły, jak jest jakieś drugie pVehicle = to; - ControllingSet(); // utworzenie po��czenia do sterowanego pojazdu + ControllingSet(); // utworzenie połączenia do sterowanego pojazdu pVehicle->Mechanik = this; - // iDirection=0; //kierunek jazdy trzeba dopiero zgadn�� + // iDirection=0; //kierunek jazdy trzeba dopiero zgadnąć }; void TController::ControllingSet() -{ // znajduje cz�on do sterowania w EZT b�dzie to silnikowy - // problematyczne jest sterowanie z cz�onu biernego, dlatego damy AI silnikowy - // dzi�ki temu b�dzie wirtualna kabina w silnikowym, dzia�aj�ca w rozrz�dczym - // w plikach FIZ zosta�y zgubione ujemne maski sprz�g�w, st�d problemy z EZT - mvOccupied = pVehicle->MoverParameters; // domy�lny skr�t do obiektu parametr�w - mvControlling = pVehicle->ControlledFind()->MoverParameters; // poszukiwanie cz�onu sterowanego +{ // znajduje człon do sterowania w EZT będzie to silnikowy + // problematyczne jest sterowanie z członu biernego, dlatego damy AI silnikowy + // dzięki temu będzie wirtualna kabina w silnikowym, działająca w rozrządczym + // w plikach FIZ zostały zgubione ujemne maski sprzęgów, stąd problemy z EZT + mvOccupied = pVehicle->MoverParameters; // domyślny skrót do obiektu parametrów + mvControlling = pVehicle->ControlledFind()->MoverParameters; // poszukiwanie członu sterowanego }; std::string TController::TableText(int i) -{ // pozycja tabelki pr�dko�ci +{ // pozycja tabelki prędkości i = (iFirst + i) % iSpeedTableSize; // numer pozycji - if (i != iLast) // w (iLast) znajduje si� kolejny tor do przeskanowania, ale nie jest ona - // aktywn� + if (i != iLast) // w (iLast) znajduje się kolejny tor do przeskanowania, ale nie jest ona + // aktywną return sSpeedTable[i].TableText(); - return ""; // wska�nik ko�ca + return ""; // wskaźnik końca }; int TController::CrossRoute(TTrack *tr) -{ // zwraca numer segmentu dla skrzy�owania (tr) - // po��dany numer segmentu jest okre�lany podczas skanowania drogi - // droga powinna by� okre�lona sposobem przejazdu przez skrzy�owania albo wsp��rz�dnymi miejsca +{ // zwraca numer segmentu dla skrzyżowania (tr) + // pożądany numer segmentu jest określany podczas skanowania drogi + // droga powinna być określona sposobem przejazdu przez skrzyżowania albo współrzędnymi miejsca // docelowego for (int i = iFirst; i != iLast; i = (i + 1) % iSpeedTableSize) - { // trzeba przejrze� tabel� skanowania w poszukiwaniu (tr) - // i jak si� znajdzie, to zwr�ci� zapami�tany numer segmentu i kierunek przejazdu + { // trzeba przejrzeć tabelę skanowania w poszukiwaniu (tr) + // i jak się znajdzie, to zwrócić zapamiętany numer segmentu i kierunek przejazdu // (-6..-1,1..6) - if ((sSpeedTable[i].iFlags & 3) == 3) // je�li pozycja istotna (1) oraz odcinek (2) - if (sSpeedTable[i].trTrack == tr) // je�li pozycja odpowiadaj�ca skrzy�owaniu (tr) + if ((sSpeedTable[i].iFlags & 3) == 3) // jeśli pozycja istotna (1) oraz odcinek (2) + if (sSpeedTable[i].trTrack == tr) // jeśli pozycja odpowiadająca skrzyżowaniu (tr) return (sSpeedTable[i].iFlags >> 28); // najstarsze 4 bity jako liczba -8..7 } return 0; // nic nie znaleziono? @@ -5522,20 +5464,20 @@ void TController::RouteSwitch(int d) if (d) if (iRouteWanted != d) { // nowy kierunek - iRouteWanted = d; // zapami�tanie - if (mvOccupied->CategoryFlag & 2) // je�li samoch�d + iRouteWanted = d; // zapamiętanie + if (mvOccupied->CategoryFlag & 2) // jeśli samochód for (int i = iFirst; i != iLast; i = (i + 1) % iSpeedTableSize) - { // szukanie pierwszego skrzy�owania i resetowanie kierunku na nim + { // szukanie pierwszego skrzyżowania i resetowanie kierunku na nim if ((sSpeedTable[i].iFlags & 3) == - 3) // je�li pozycja istotna (1) oraz odcinek (2) - if ((sSpeedTable[i].iFlags & 32) == 0) // odcinek nie mo�e by� mini�tym - if (sSpeedTable[i].trTrack->eType == tt_Cross) // je�li skrzy�owanie - { // obci�cie tabelki skanowania przed skrzy�owaniem, aby ponownie - // wybra� drog� - iLast = i - 1; // ponowne skanowanie skrzy�owania (w zwrotnicach - // jest iLast=i, ale tam jest pro�ciej) + 3) // jeśli pozycja istotna (1) oraz odcinek (2) + if ((sSpeedTable[i].iFlags & 32) == 0) // odcinek nie może być miniętym + if (sSpeedTable[i].trTrack->eType == tt_Cross) // jeśli skrzyżowanie + { // obcięcie tabelki skanowania przed skrzyżowaniem, aby ponownie + // wybrać drogę + iLast = i - 1; // ponowne skanowanie skrzyżowania (w zwrotnicach + // jest iLast=i, ale tam jest prościej) if (iLast < 0) - iLast += iSpeedTableSize; // bo tabelka jest zap�tlona + iLast += iSpeedTableSize; // bo tabelka jest zapętlona return; } } diff --git a/Driver.h b/Driver.h index 7149530c..ec9afa6f 100644 --- a/Driver.h +++ b/Driver.h @@ -19,127 +19,127 @@ using namespace Mtable; enum TOrders { // rozkazy dla AI - Wait_for_orders = 0, // czekanie na dostarczenie nastpnych rozkazw + Wait_for_orders = 0, // czekanie na dostarczenie następnych rozkazów // operacje tymczasowe - Prepare_engine = 1, // wczenie silnika - Release_engine = 2, // wyczenie silnika + Prepare_engine = 1, // włączenie silnika + Release_engine = 2, // wyłączenie silnika Change_direction = 4, // zmiana kierunku (bez skanowania sygnalizacji) - Connect = 8, // podczanie wagonw (z czciowym skanowaniem sygnalizacji) - Disconnect = 0x10, // odczanie wagonw (bez skanowania sygnalizacji) + Connect = 8, // podłączanie wagonów (z częściowym skanowaniem sygnalizacji) + Disconnect = 0x10, // odłączanie wagonów (bez skanowania sygnalizacji) // jazda Shunt = 0x20, // tryb manewrowy - Obey_train = 0x40, // tryb pocigowy - Jump_to_first_order = 0x60 // zaplenie do pierwszej pozycji (po co?) + Obey_train = 0x40, // tryb pociągowy + Jump_to_first_order = 0x60 // zapęlenie do pierwszej pozycji (po co?) }; enum TMovementStatus { // flagi bitowe ruchu (iDrivigFlags) - moveStopCloser = 1, // podjecha blisko W4 (nie podjeda na pocztku ani po zmianie czoa) - moveStopPoint = 2, // stawa na W4 (wyczone podczas zmiany czoa) - moveActive = 4, // pojazd jest zaczony i skanuje - movePress = 8, // dociskanie przy odczeniu (zamiast zmiennej Prepare2press) - moveConnect = 0x10, // jest blisko innego pojazdu i mona prbowa podczy - movePrimary = 0x20, // ma priorytet w skadzie (master) - moveLate = 0x40, // flaga spnienia, wczy bardziej - moveStopHere = 0x80, // nie podjeda do semafora, jeli droga nie jest wolna - moveStartHorn = 0x100, // podawaj sygna po podaniu wolnej drogi - moveStartHornNow = 0x200, // podaj sygna po odhamowaniu - moveStartHornDone = 0x400, // podano sygna po podaniu wolnej drogi - moveOerlikons = 0x800, // skad wycznie z zaworami? Oerlikona - moveIncSpeed = 0x1000, // zaczenie jazdy (np. dla EZT) + moveStopCloser = 1, // podjechać blisko W4 (nie podjeżdżać na początku ani po zmianie czoła) + moveStopPoint = 2, // stawać na W4 (wyłączone podczas zmiany czoła) + moveActive = 4, // pojazd jest załączony i skanuje + movePress = 8, // dociskanie przy odłączeniu (zamiast zmiennej Prepare2press) + moveConnect = 0x10, // jest blisko innego pojazdu i można próbować podłączyć + movePrimary = 0x20, // ma priorytet w składzie (master) + moveLate = 0x40, // flaga spóźnienia, włączy bardziej + moveStopHere = 0x80, // nie podjeżdżać do semafora, jeśli droga nie jest wolna + moveStartHorn = 0x100, // podawaj sygnał po podaniu wolnej drogi + moveStartHornNow = 0x200, // podaj sygnał po odhamowaniu + moveStartHornDone = 0x400, // podano sygnał po podaniu wolnej drogi + moveOerlikons = 0x800, // skład wyłącznie z zaworami? Oerlikona + moveIncSpeed = 0x1000, // załączenie jazdy (np. dla EZT) moveTrackEnd = 0x2000, // dalsza jazda do przodu trwale ograniczona (W5, koniec toru) moveSwitchFound = 0x4000, // na drodze skanowania do przodu jest rozjazd - moveGuardSignal = 0x8000, // sygna od kierownika (min czas postoju) - moveVisibility = 0x10000, // jazda na widoczno po przejechaniu S1 na SBL - moveDoorOpened = 0x20000, // drzwi zostay otwarte - doliczy czas na zamknicie + moveGuardSignal = 0x8000, // sygnał od kierownika (minął czas postoju) + moveVisibility = 0x10000, // jazda na widoczność po przejechaniu S1 na SBL + moveDoorOpened = 0x20000, // drzwi zostały otwarte - doliczyć czas na zamknięcie movePushPull = - 0x40000, // zmiana czoa przez zmian kabiny - nie odczepia przy zmianie kierunku - moveSemaphorFound = 0x80000, // na drodze skanowania zosta znaleziony semafor - moveSemaphorWasElapsed = 0x100000, // minity zosta semafor + 0x40000, // zmiana czoła przez zmianę kabiny - nie odczepiać przy zmianie kierunku + moveSemaphorFound = 0x80000, // na drodze skanowania został znaleziony semafor + moveSemaphorWasElapsed = 0x100000, // minięty został semafor moveTrainInsideStation = - 0x200000, // pocig midzy semaforem a rozjazdami lub nastpnym semaforem - moveSpeedLimitFound = 0x400000 // pocig w ograniczeniu z podan jego dugoci + 0x200000, // pociąg między semaforem a rozjazdami lub następnym semaforem + moveSpeedLimitFound = 0x400000 // pociąg w ograniczeniu z podaną jego długością }; enum TStopReason -{ // powd zatrzymania, dodawany do SetVelocity 0 - w zasadzie do usunicia - stopNone, // nie ma powodu - powinien jecha - stopSleep, // nie zosta odpalony, to nie pojedzie - stopSem, // semafor zamknity - stopTime, // czekanie na godzin odjazdu - stopEnd, // brak dalszej czci toru - stopDir, // trzeba stan, by zmieni kierunek jazdy - stopJoin, // stoi w celu poczenia wagonw +{ // powód zatrzymania, dodawany do SetVelocity 0 - w zasadzie do usunięcia + stopNone, // nie ma powodu - powinien jechać + stopSleep, // nie został odpalony, to nie pojedzie + stopSem, // semafor zamknięty + stopTime, // czekanie na godzinę odjazdu + stopEnd, // brak dalszej części toru + stopDir, // trzeba stanąć, by zmienić kierunek jazdy + stopJoin, // stoi w celu połączenia wagonów stopBlock, // przeszkoda na drodze ruchu - stopComm, // otrzymano tak komend (niewiadomego pochodzenia) - stopOut, // komenda wyjazdu poza stacj (raczej nie powinna zatrzymywa!) + stopComm, // otrzymano taką komendę (niewiadomego pochodzenia) + stopOut, // komenda wyjazdu poza stację (raczej nie powinna zatrzymywać!) stopRadio, // komunikat przekazany radiem (Radiostop) - stopExt, // komenda z zewntrz - stopError // z powodu bdu w obliczeniu drogi hamowania + stopExt, // komenda z zewnątrz + stopError // z powodu błędu w obliczeniu drogi hamowania }; enum TAction -{ // przechowanie aktualnego stanu AI od poprzedniego przebysku wiadomoci - actUnknown, // stan nieznany (domylny na pocztku) - actPantUp, // podnie pantograf (info dla uytkownika) - actConv, // zacz przetwornic (info dla uytkownika) - actCompr, // zacz sprark (info dla uytkownika) - actSleep, //pi (wygaszony) +{ // przechowanie aktualnego stanu AI od poprzedniego przebłysku świadomości + actUnknown, // stan nieznany (domyślny na początku) + actPantUp, // podnieś pantograf (info dla użytkownika) + actConv, // załącz przetwornicę (info dla użytkownika) + actCompr, // załącz sprężarkę (info dla użytkownika) + actSleep, //śpi (wygaszony) actDrive, // jazda actGo, // ruszanie z miejsca actSlow, // przyhamowanie przed ograniczeniem sctStop, // hamowanie w celu precyzyjnego zatrzymania - actIdle, // luzowanie skadu przed odjazdem - actRelease, // luzowanie skadu po zmniejszeniu prdkoci + actIdle, // luzowanie składu przed odjazdem + actRelease, // luzowanie składu po zmniejszeniu prędkości actConnect, // dojazd w celu podczepienia actWait, // czekanie na przystanku - actReady, // zgoszona gotowo do odjazdu od kierownika + actReady, // zgłoszona gotowość do odjazdu od kierownika actEmergency, // hamowanie awaryjne - actGoUphill, // ruszanie pod gr + actGoUphill, // ruszanie pod górę actTest, // hamowanie kontrolne (podczas jazdy) - actTrial // prba hamulca (na postoju) + actTrial // próba hamulca (na postoju) }; enum TSpeedPosFlag -{ // wartoci dla iFlag w TSpeedPos - spEnabled = 0x1, // pozycja brana pod uwag +{ // wartości dla iFlag w TSpeedPos + spEnabled = 0x1, // pozycja brana pod uwagę spTrack = 0x2, // to jest tor spReverse = 0x4, // odwrotnie spSwitch = 0x8, // to zwrotnica spSwitchStatus = 0x10, // stan zwrotnicy - spElapsed = 0x20, // pozycja minita przez pojazd + spElapsed = 0x20, // pozycja minięta przez pojazd spEnd = 0x40, // koniec - spCurve = 0x80, // uk + spCurve = 0x80, // łuk spEvent = 0x100, // event spShuntSemaphor = 0x200, // tarcza manewrowa - spPassengerStopPoint = 0x400, // przystanek osobowy (wskanik W4) + spPassengerStopPoint = 0x400, // przystanek osobowy (wskaźnik W4) spStopOnSBL = 0x800, // zatrzymanie na SBL - spCommandSent = 0x1000, // komenda wysana - spOutsideStation = 0x2000, // wskanik koca manewrw - spSemaphor = 0x4000, // semafor pocigowy - spRoadVel = 0x8000, // zadanie prdkoci drogowej + spCommandSent = 0x1000, // komenda wysłana + spOutsideStation = 0x2000, // wskaźnik końca manewrów + spSemaphor = 0x4000, // semafor pociągowy + spRoadVel = 0x8000, // zadanie prędkości drogowej spSectionVel = 0x20000, // odcinek z ograniczeniem - spProximityVelocity = 0x40000, // odcinek z ograniczeniem i podan jego dugocia + spProximityVelocity = 0x40000, // odcinek z ograniczeniem i podaną jego długościa spEndOfTable = 0x10000 // zatkanie tabelki }; class TSpeedPos -{ // pozycja tabeli prdkoci dla AI +{ // pozycja tabeli prędkości dla AI public: - double fDist; // aktualna odlego (ujemna gdy minite) - double fVelNext; // prdko obowizujca od tego miejsca - double fSectionVelocityDist; // dugo ograniczenia prdkoci + double fDist; // aktualna odległość (ujemna gdy minięte) + double fVelNext; // prędkość obowiązująca od tego miejsca + double fSectionVelocityDist; // długość ograniczenia prędkości // double fAcc; int iFlags; // flagi typu wpisu do tabelki - // 1=istotny,2=tor,4=odwrotnie,8-zwrotnica (moe si zmieni),16-stan - // zwrotnicy,32-minity,64=koniec,128=uk - // 0x100=event,0x200=manewrowa,0x400=przystanek,0x800=SBL,0x1000=wysana komenda,0x2000=W5 + // 1=istotny,2=tor,4=odwrotnie,8-zwrotnica (może się zmienić),16-stan + // zwrotnicy,32-minięty,64=koniec,128=łuk + // 0x100=event,0x200=manewrowa,0x400=przystanek,0x800=SBL,0x1000=wysłana komenda,0x2000=W5 // 0x4000=semafor,0x10000=zatkanie - vector3 vPos; // wsprzdne XYZ do liczenia odlegoci + vector3 vPos; // współrzędne XYZ do liczenia odległości struct { - TTrack *trTrack; // wskanik na tor o zmiennej prdkoci (zwrotnica, obrotnica) - TEvent *evEvent; // poczenie z eventem albo komrk pamici + TTrack *trTrack; // wskaźnik na tor o zmiennej prędkości (zwrotnica, obrotnica) + TEvent *evEvent; // połączenie z eventem albo komórką pamięci }; void CommandCheck(); @@ -158,57 +158,57 @@ static const bool Aggressive = true; static const bool Easyman = false; static const bool AIdriver = true; static const bool Humandriver = false; -static const int maxorders = 32; // ilo rozkazw w tabelce -static const int maxdriverfails = 4; // ile bdw moe zrobi AI zanim zmieni nastawienie -extern bool WriteLogFlag; // logowanie parametrw fizycznych +static const int maxorders = 32; // ilość rozkazów w tabelce +static const int maxdriverfails = 4; // ile błędów może zrobić AI zanim zmieni nastawienie +extern bool WriteLogFlag; // logowanie parametrów fizycznych //---------------------------------------------------------------------------- class TController { - private: // obsuga tabelki prdkoci (musi mie moliwo odhaczania stacji w rozkadzie) - TSpeedPos *sSpeedTable; // najblisze zmiany prdkoci - int iSpeedTableSize; // wielko tabelki + private: // obsługa tabelki prędkości (musi mieć możliwość odhaczania stacji w rozkładzie) + TSpeedPos *sSpeedTable; // najbliższe zmiany prędkości + int iSpeedTableSize; // wielkość tabelki int iFirst; // aktualna pozycja w tabeli (modulo iSpeedTableSize) - int iLast; // ostatnia wypeniona pozycja w tabeli 0:przelicza do - // punktu, <0:podana warto - double FirstSemaphorDist; // odlego do pierwszego znalezionego semafora + double fProximityDist; // odleglosc podawana w SetProximityVelocity(); >0:przeliczać do + // punktu, <0:podana wartość + double FirstSemaphorDist; // odległość do pierwszego znalezionego semafora public: double - ActualProximityDist; // odlego brana pod uwag przy wyliczaniu prdkoci i przyspieszenia + ActualProximityDist; // odległość brana pod uwagę przy wyliczaniu prędkości i przyspieszenia private: vector3 vCommandLocation; // polozenie wskaznika, sygnalizatora lub innego obiektu do ktorego // odnosi sie komenda - TOrders OrderList[maxorders]; // lista rozkazw + TOrders OrderList[maxorders]; // lista rozkazów int OrderPos, OrderTop; // rozkaz aktualny oraz wolne miejsce do wstawiania nowych std::ofstream LogFile; // zapis parametrow fizycznych std::ofstream AILogFile; // log AI bool MaxVelFlag; bool MinVelFlag; - int iDirection; // kierunek jazdy wzgldem sprzgw pojazdu, w ktrym siedzi AI (1=przd,-1=ty) - int iDirectionOrder; //adany kierunek jazdy (suy do zmiany kierunku) - int iVehicleCount; // ilo pojazdw do odczenia albo zabrania ze skadu (-1=wszystkie) - int iCoupler; // maska sprzgu, jak naley uy przy czeniu (po osigniciu trybu Connect), 0 - // gdy jazda bez czenia - int iDriverFailCount; // licznik bdw AI - bool Need_TryAgain; // true, jeli druga pozycja w elektryku nie zaapaa + int iDirection; // kierunek jazdy względem sprzęgów pojazdu, w którym siedzi AI (1=przód,-1=tył) + int iDirectionOrder; //żadany kierunek jazdy (służy do zmiany kierunku) + int iVehicleCount; // ilość pojazdów do odłączenia albo zabrania ze składu (-1=wszystkie) + int iCoupler; // maska sprzęgu, jaką należy użyć przy łączeniu (po osiągnięciu trybu Connect), 0 + // gdy jazda bez łączenia + int iDriverFailCount; // licznik błędów AI + bool Need_TryAgain; // true, jeśli druga pozycja w elektryku nie załapała bool Need_BrakeRelease; public: - double fMinProximityDist; // minimalna olego do przeszkody, jak naley zachowa - double fOverhead1; // informacja o napiciu w sieci trakcyjnej (0=brak drutu, zatrzymaj!) - double fOverhead2; // informacja o sposobie jazdy (-1=normalnie, 0=bez prdu, >0=z opuszczonym i - // ograniczeniem prdkoci) - int iOverheadZero; // suma bitowa jezdy bezprdowej, bity ustawiane przez pojazdy z + double fMinProximityDist; // minimalna oległość do przeszkody, jaką należy zachować + double fOverhead1; // informacja o napięciu w sieci trakcyjnej (0=brak drutu, zatrzymaj!) + double fOverhead2; // informacja o sposobie jazdy (-1=normalnie, 0=bez prądu, >0=z opuszczonym i + // ograniczeniem prędkości) + int iOverheadZero; // suma bitowa jezdy bezprądowej, bity ustawiane przez pojazdy z // podniesionymi pantografami - int iOverheadDown; // suma bitowa opuszczenia pantografw, bity ustawiane przez pojazdy z + int iOverheadDown; // suma bitowa opuszczenia pantografów, bity ustawiane przez pojazdy z // podniesionymi pantografami - double fVoltage; // urednione napicie sieci: przy spadku poniej wartoci minimalnej opni + double fVoltage; // uśrednione napięcie sieci: przy spadku poniżej wartości minimalnej opóźnić // rozruch o losowy czas private: - double fMaxProximityDist; // akceptowalna odlego stanicia przed przeszkod - TStopReason eStopReason; // powd zatrzymania przy ustawieniu zerowej prdkoci + double fMaxProximityDist; // akceptowalna odległość stanięcia przed przeszkodą + TStopReason eStopReason; // powód zatrzymania przy ustawieniu zerowej prędkości std::string VehicleName; - double fVelPlus; // dopuszczalne przekroczenie prdkoci na ograniczeniu bez hamowania - double fVelMinus; // margines obnienia prdkoci, powodujcy zaczenie napdu - double fWarningDuration; // ile czasu jeszcze trbi - double fStopTime; // czas postoju przed dalsz jazd (np. na przystanku) + double fVelPlus; // dopuszczalne przekroczenie prędkości na ograniczeniu bez hamowania + double fVelMinus; // margines obniżenia prędkości, powodujący załączenie napędu + double fWarningDuration; // ile czasu jeszcze trąbić + double fStopTime; // czas postoju przed dalszą jazdą (np. na przystanku) double WaitingTime; // zliczany czas oczekiwania do samoistnego ruszenia double WaitingExpireTime; // maksymlany czas oczekiwania do samoistnego ruszenia - // TEvent* eSignLast; //ostatnio znaleziony sygna, o ile nie minity - private: //---//---//---//---// koniec zmiennych, poniej metody //---//---//---//---// + // TEvent* eSignLast; //ostatnio znaleziony sygnał, o ile nie minięty + private: //---//---//---//---// koniec zmiennych, poniżej metody //---//---//---//---// void SetDriverPsyche(); bool PrepareEngine(); bool ReleaseEngine(); @@ -310,9 +310,9 @@ class TController void SpeedSet(); void Doors(bool what); void RecognizeCommand(); // odczytuje komende przekazana lokomotywie - void Activation(); // umieszczenie obsady w odpowiednim czonie - void ControllingSet(); // znajduje czon do sterowania - void AutoRewident(); // ustawia hamulce w skadzie + void Activation(); // umieszczenie obsady w odpowiednim członie + void ControllingSet(); // znajduje człon do sterowania + void AutoRewident(); // ustawia hamulce w składzie public: Mtable::TTrainParameters *Timetable() { @@ -322,13 +322,13 @@ class TController const TLocation &NewLocation, TStopReason reason = stopComm); bool PutCommand(std::string NewCommand, double NewValue1, double NewValue2, const vector3 *NewLocation, TStopReason reason = stopComm); - bool UpdateSituation(double dt); // uruchamiac przynajmniej raz na sekund + bool UpdateSituation(double dt); // uruchamiac przynajmniej raz na sekundę // procedury dotyczace rozkazow dla maszynisty void SetVelocity(double NewVel, double NewVelNext, - TStopReason r = stopNone); // uaktualnia informacje o prdkoci + TStopReason r = stopNone); // uaktualnia informacje o prędkości bool SetProximityVelocity( double NewDist, - double NewVelNext); // uaktualnia informacje o prdkoci przy nastepnym semaforze + double NewVelNext); // uaktualnia informacje o prędkości przy nastepnym semaforze public: void JumpToNextOrder(); void JumpToFirstOrder(); @@ -347,7 +347,7 @@ class TController void OrdersClear(); void OrdersDump(); TController(bool AI, TDynamicObject *NewControll, bool InitPsyche, - bool primary = true // czy ma aktywnie prowadzi? + bool primary = true // czy ma aktywnie prowadzić? ); std::string OrderCurrent(); void WaitingSet(double Seconds); @@ -359,7 +359,7 @@ class TController void Lights(int head, int rear); double Distance(vector3 &p1, vector3 &n, vector3 &p2); - private: // Ra: metody obsugujce skanowanie toru + private: // Ra: metody obsługujące skanowanie toru TEvent *CheckTrackEvent(double fDirection, TTrack *Track); bool TableCheckEvent(TEvent *e); bool TableAddNew(); @@ -371,7 +371,7 @@ class TController TCommandType TableUpdate(double &fVelDes, double &fDist, double &fNext, double &fAcc); void TablePurger(); - private: // Ra: stare funkcje skanujce, uywane do szukania sygnalizatora z tyu + private: // Ra: stare funkcje skanujące, używane do szukania sygnalizatora z tyłu bool BackwardTrackBusy(TTrack *Track); TEvent *CheckTrackEventBackward(double fDirection, TTrack *Track); TTrack *BackwardTraceRoute(double &fDistance, double &fDirection, TTrack *Track, diff --git a/DynObj.h b/DynObj.h index 8cfa62c5..48e25b53 100644 --- a/DynObj.h +++ b/DynObj.h @@ -22,17 +22,17 @@ http://mozilla.org/MPL/2.0/. //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- -int const ANIM_TYPES = 7; // Ra: ilo typw animacji -int const ANIM_WHEELS = 0; // koa +int const ANIM_TYPES = 7; // Ra: ilość typów animacji +int const ANIM_WHEELS = 0; // koła int const ANIM_DOORS = 1; // drzwi -int const ANIM_LEVERS = 2; // elementy obracane (wycieraczki, koa skrtne, przestawiacze, klocki ham.) +int const ANIM_LEVERS = 2; // elementy obracane (wycieraczki, koła skrętne, przestawiacze, klocki ham.) int const ANIM_BUFFERS = 3; // elementy przesuwane (zderzaki) -int const ANIM_BOOGIES = 4; // wzki (s skrcane w dwch osiach) +int const ANIM_BOOGIES = 4; // wózki (są skręcane w dwóch osiach) int const ANIM_PANTS = 5; // pantografy -int const ANIM_STEAMS = 6; // napd parowozu +int const ANIM_STEAMS = 6; // napęd parowozu class TAnim; -//typedef void(__closure *TUpdate)(TAnim *pAnim); // typ funkcji aktualizujcej pooenie submodeli +//typedef void(__closure *TUpdate)(TAnim *pAnim); // typ funkcji aktualizującej położenie submodeli typedef std::function TUpdate; // __closure is Borland-specific extension // McZapkie-250202 @@ -40,100 +40,100 @@ int const MaxAxles = 16; // ABu 280105: zmienione z 8 na 16 // const MaxAnimatedAxles=16; //i to tez. // const MaxAnimatedDoors=16; //NBMX wrzesien 2003 /* -Ra: Utworzy klas wyposaenia opcjonalnego, z ktrej bd dziedziczy klasy drzwi, -pantografw, napdu parowozu i innych ruchomych czci pojazdw. Klasy powinny by -pseudo-wirtualne, bo wirtualne mog obnia wydajnos. -Przy wczytywaniu MMD utworzy tabel wskanikow na te dodatki. Przy wywietlaniu -pojazdu wykonywa Update() na kolejnych obiektach wyposaenia. -Rozway uycie oddzielnych modeli dla niektrych pojazdw (np. lokomotywy), co -zaoszczdzio by czas ustawiania animacji na modelu wsplnym dla kilku pojazdw, -szczeglnie dla pojazdw w danej chwili nieruchomych (przy duym zagszczeniu -modeli na stacjach na og przewaga jest tych nieruchomych). +Ra: Utworzyć klasę wyposażenia opcjonalnego, z której będą dziedziczyć klasy drzwi, +pantografów, napędu parowozu i innych ruchomych części pojazdów. Klasy powinny być +pseudo-wirtualne, bo wirtualne mogą obniżać wydajnosść. +Przy wczytywaniu MMD utworzyć tabelę wskaźnikow na te dodatki. Przy wyświetlaniu +pojazdu wykonywać Update() na kolejnych obiektach wyposażenia. +Rozważyć użycie oddzielnych modeli dla niektórych pojazdów (np. lokomotywy), co +zaoszczędziło by czas ustawiania animacji na modelu wspólnym dla kilku pojazdów, +szczególnie dla pojazdów w danej chwili nieruchomych (przy dużym zagęszczeniu +modeli na stacjach na ogół przewaga jest tych nieruchomych). */ class TAnimValveGear -{ // wspczynniki do animacji parowozu (wartoci przykadowe dla Pt47) - int iValues; // ilo liczb (wersja): - float fKorbowodR; // dugo korby (p skoku toka) [m]: 0.35 - float fKorbowodL; // dugo korbowodu [m]: 3.8 - float fDrazekR; // promie mimorodu (drka) [m]: 0.18 - float fDrazekL; // d. drka mimorodowego [m]: 2.55889 - float fJarzmoV; // wysoko w pionie osi jarzma od osi koa [m]: 0.751 - float fJarzmoH; // odlego w poziomie osi jarzma od osi koa [m]: 2.550 - float fJarzmoR; // promie jarzma do styku z drkiem [m]: 0.450 - float fJarzmoA; // kt mimorodu wzgldem kta koa []: -96.77416667 - float fWdzidloL; // dugo wodzida [m]: 2.0 - float fWahaczH; // dugo wahacza (gra) [m]: 0.14 - float fSuwakH; // wysoko osi suwaka ponad osi koa [m]: 0.62 - float fWahaczL; // dugo wahacza (d) [m]: 0.84 - float fLacznikL; // dugo cznika wahacza [m]: 0.75072 - float fRamieL; // odlego ramienia krzyulca od osi koa [m]: 0.192 - float fSuwakL; // odlego rodka toka/suwaka od osi koa [m]: 5.650 - // dooy parametry drka nastawnicy - // albo nawet zrobi dynamiczn tablic float[] i w ni pakowa wszelkie wspczynniki, potem - // uywa indeksw - // wspczynniki mog by wsplne dla 2-4 tokw, albo kady tok moe mie odrbne +{ // współczynniki do animacji parowozu (wartości przykładowe dla Pt47) + int iValues; // ilość liczb (wersja): + float fKorbowodR; // długość korby (pół skoku tłoka) [m]: 0.35 + float fKorbowodL; // długość korbowodu [m]: 3.8 + float fDrazekR; // promień mimośrodu (drążka) [m]: 0.18 + float fDrazekL; // dł. drążka mimośrodowego [m]: 2.55889 + float fJarzmoV; // wysokość w pionie osi jarzma od osi koła [m]: 0.751 + float fJarzmoH; // odległość w poziomie osi jarzma od osi koła [m]: 2.550 + float fJarzmoR; // promień jarzma do styku z drążkiem [m]: 0.450 + float fJarzmoA; // kąt mimośrodu względem kąta koła [°]: -96.77416667 + float fWdzidloL; // długość wodzidła [m]: 2.0 + float fWahaczH; // długość wahacza (góra) [m]: 0.14 + float fSuwakH; // wysokość osi suwaka ponad osią koła [m]: 0.62 + float fWahaczL; // długość wahacza (dół) [m]: 0.84 + float fLacznikL; // długość łącznika wahacza [m]: 0.75072 + float fRamieL; // odległość ramienia krzyżulca od osi koła [m]: 0.192 + float fSuwakL; // odległość środka tłoka/suwaka od osi koła [m]: 5.650 + // dołożyć parametry drążka nastawnicy + // albo nawet zrobić dynamiczną tablicę float[] i w nią pakować wszelkie współczynniki, potem + // używać indeksów + // współczynniki mogą być wspólne dla 2-4 tłoków, albo każdy tłok może mieć odrębne }; class TAnimPant -{ // wspczynniki do animacji pantografu +{ // współczynniki do animacji pantografu public: - vector3 vPos; // Ra: wsprzdne punktu zerowego pantografu (X dodatnie dla przedniego) - double fLenL1; // dugo dolnego ramienia 1, odczytana z modelu - double fLenU1; // dugo grnego ramienia 1, odczytana z modelu - double fLenL2; // dugo dolnego ramienia 2, odczytana z modelu - double fLenU2; // dugo grnego ramienia 2, odczytana z modelu - double fHoriz; // przesunicie lizgu w dugoci pojazdu wzgldem osi obrotu dolnego ramienia - double fHeight; // wysoko lizgu ponad o obrotu, odejmowana od wysokoci drutu - double fWidth; // poowa szerokoci roboczej lizgu, do wykrycia zelizgnicia si drutu - double fAngleL0; // Ra: pocztkowy kt dolnego ramienia (odejmowany przy animacji) - double fAngleU0; // Ra: pocztkowy kt grnego ramienia (odejmowany przy animacji) - double PantTraction; // Winger 170204: wysoko drutu ponad punktem na wysokoci vPos.y p.g.s. - double PantWys; // Ra: aktualna wysoko uniesienia lizgu do porwnania z wysokoci drutu - double fAngleL; // Winger 160204: aktualny kt ramienia dolnego - double fAngleU; // Ra: aktualny kt ramienia grnego + vector3 vPos; // Ra: współrzędne punktu zerowego pantografu (X dodatnie dla przedniego) + double fLenL1; // długość dolnego ramienia 1, odczytana z modelu + double fLenU1; // długość górnego ramienia 1, odczytana z modelu + double fLenL2; // długość dolnego ramienia 2, odczytana z modelu + double fLenU2; // długość górnego ramienia 2, odczytana z modelu + double fHoriz; // przesunięcie ślizgu w długości pojazdu względem osi obrotu dolnego ramienia + double fHeight; // wysokość ślizgu ponad oś obrotu, odejmowana od wysokości drutu + double fWidth; // połowa szerokości roboczej ślizgu, do wykrycia ześlizgnięcia się drutu + double fAngleL0; // Ra: początkowy kąt dolnego ramienia (odejmowany przy animacji) + double fAngleU0; // Ra: początkowy kąt górnego ramienia (odejmowany przy animacji) + double PantTraction; // Winger 170204: wysokość drutu ponad punktem na wysokości vPos.y p.g.s. + double PantWys; // Ra: aktualna wysokość uniesienia ślizgu do porównania z wysokością drutu + double fAngleL; // Winger 160204: aktualny kąt ramienia dolnego + double fAngleU; // Ra: aktualny kąt ramienia górnego double NoVoltTime; // czas od utraty kontaktu z drutem TTraction *hvPowerWire; // aktualnie podczepione druty, na razie tu - float fWidthExtra; // dodatkowy rozmiar poziomy poza cz robocz (fWidth) - float fHeightExtra[5]; //amana symulujca ksztat nabienika - // double fHorizontal; //Ra 2015-01: pooenie drutu wzgldem osi pantografu + float fWidthExtra; // dodatkowy rozmiar poziomy poza część roboczą (fWidth) + float fHeightExtra[5]; //łamana symulująca kształt nabieżnika + // double fHorizontal; //Ra 2015-01: położenie drutu względem osi pantografu void AKP_4E(); }; class TAnim -{ // klasa animowanej czci pojazdu (koa, drzwi, pantografy, burty, napd parowozu, siowniki +{ // klasa animowanej części pojazdu (koła, drzwi, pantografy, burty, napęd parowozu, siłowniki // itd.) public: union { - TSubModel *smAnimated; // animowany submodel (jeli tylko jeden, np. o) - TSubModel **smElement; // jeli animowanych elementw jest wicej (pantograf, napd + TSubModel *smAnimated; // animowany submodel (jeśli tylko jeden, np. oś) + TSubModel **smElement; // jeśli animowanych elementów jest więcej (pantograf, napęd // parowozu) - int iShift; // przesunicie przed przydzieleniem wskanika + int iShift; // przesunięcie przed przydzieleniem wskaźnika }; union { // parametry animacji - TAnimValveGear *pValveGear; // wspczynniki do animacji parowozu - double *dWheelAngle; // wskanik na kt obrotu osi - float *fParam; // rne parametry dla animacji - TAnimPant *fParamPants; // rne parametry dla animacji + TAnimValveGear *pValveGear; // współczynniki do animacji parowozu + double *dWheelAngle; // wskaźnik na kąt obrotu osi + float *fParam; // różne parametry dla animacji + TAnimPant *fParamPants; // różne parametry dla animacji }; union - { // wskanik na obiekt odniesienia - double *fDoubleBase; // jaki double w fizyce - float *fFloatBase; // jaki float w fizyce - int *iIntBase; // jaki int w fizyce + { // wskaźnik na obiekt odniesienia + double *fDoubleBase; // jakiś double w fizyce + float *fFloatBase; // jakiś float w fizyce + int *iIntBase; // jakiś int w fizyce }; - // void _fastcall Update(); //wskanik do funkcji aktualizacji animacji + // void _fastcall Update(); //wskaźnik do funkcji aktualizacji animacji int iFlags; // flagi animacji - float fMaxDist; // do jakiej odlegoci wykonywana jest animacja - float fSpeed; // parametr szybkoci animacji + float fMaxDist; // do jakiej odległości wykonywana jest animacja + float fSpeed; // parametr szybkości animacji int iNumber; // numer kolejny obiektu public: TAnim(); ~TAnim(); - TUpdate yUpdate; // metoda TDynamicObject aktualizujca animacj + TUpdate yUpdate; // metoda TDynamicObject aktualizująca animację int TypeSet(int i, int fl = 0); // ustawienie typu - void Parovoz(); // wykonanie oblicze animacji + void Parovoz(); // wykonanie obliczeń animacji }; //--------------------------------------------------------------------------- @@ -142,73 +142,73 @@ class TAnim class TDynamicObject { // klasa pojazdu - private: // pooenie pojazdu w wiecie oraz parametry ruchu - vector3 vPosition; // Ra: pozycja pojazdu liczona zaraz po przesuniciu - vector3 vCoulpler[2]; // wsprzdne sprzgw do liczenia zderze czoowych + private: // położenie pojazdu w świecie oraz parametry ruchu + vector3 vPosition; // Ra: pozycja pojazdu liczona zaraz po przesunięciu + vector3 vCoulpler[2]; // współrzędne sprzęgów do liczenia zderzeń czołowych vector3 vUp, vFront, vLeft; // wektory jednostkowe ustawienia pojazdu - int iDirection; // kierunek pojazdu wzgldem czoa skadu (1=zgodny,0=przeciwny) + int iDirection; // kierunek pojazdu względem czoła składu (1=zgodny,0=przeciwny) TTrackShape ts; // parametry toru przekazywane do fizyki TTrackParam tp; // parametry toru przekazywane do fizyki - TTrackFollower Axle0; // o z przodu (od sprzgu 0) - TTrackFollower Axle1; // o z tyu (od sprzgu 1) - int iAxleFirst; // numer pierwszej osi w kierunku ruchu (o wica pojazd z torem i wyzwalajca + TTrackFollower Axle0; // oś z przodu (od sprzęgu 0) + TTrackFollower Axle1; // oś z tyłu (od sprzęgu 1) + int iAxleFirst; // numer pierwszej osi w kierunku ruchu (oś wiążąca pojazd z torem i wyzwalająca // eventy) - float fAxleDist; // rozstaw wzkw albo osi do liczenia proporcji zacienienia - vector3 modelRot; // obrot puda wzgldem wiata - do przeanalizowania, czy potrzebne!!! - // bool bCameraNear; //blisko kamer s potrzebne dodatkowe obliczenia szczegw + float fAxleDist; // rozstaw wózków albo osi do liczenia proporcji zacienienia + vector3 modelRot; // obrot pudła względem świata - do przeanalizowania, czy potrzebne!!! + // bool bCameraNear; //blisko kamer są potrzebne dodatkowe obliczenia szczegółów TDynamicObject * ABuFindNearestObject(TTrack *Track, TDynamicObject *MyPointer, int &CouplNr); - public: // parametry pooenia pojazdu dostpne publicznie - std::string asTrack; // nazwa toru pocztkowego; wywali? - std::string asDestination; // dokd pojazd ma by kierowany "(stacja):(tor)" - matrix4x4 mMatrix; // macierz przeksztacenia do renderowania modeli + public: // parametry położenia pojazdu dostępne publicznie + std::string asTrack; // nazwa toru początkowego; wywalić? + std::string asDestination; // dokąd pojazd ma być kierowany "(stacja):(tor)" + matrix4x4 mMatrix; // macierz przekształcenia do renderowania modeli TMoverParameters *MoverParameters; // parametry fizyki ruchu oraz przeliczanie - // TMoverParameters *pControlled; //wskanik do sterowanego czonu silnikowego - TDynamicObject *NextConnected; // pojazd podczony od strony sprzgu 1 (kabina -1) - TDynamicObject *PrevConnected; // pojazd podczony od strony sprzgu 0 (kabina 1) - int NextConnectedNo; // numer sprzgu podczonego z tyu - int PrevConnectedNo; // numer sprzgu podczonego z przodu - double fScanDist; // odlego skanowania torw na obecno innych pojazdw + // TMoverParameters *pControlled; //wskaźnik do sterowanego członu silnikowego + TDynamicObject *NextConnected; // pojazd podłączony od strony sprzęgu 1 (kabina -1) + TDynamicObject *PrevConnected; // pojazd podłączony od strony sprzęgu 0 (kabina 1) + int NextConnectedNo; // numer sprzęgu podłączonego z tyłu + int PrevConnectedNo; // numer sprzęgu podłączonego z przodu + double fScanDist; // odległość skanowania torów na obecność innych pojazdów - public: // modele skadowe pojazdu - TModel3d *mdModel; // model puda - TModel3d *mdLoad; // model zmiennego adunku - TModel3d *mdPrzedsionek; // model przedsionkw dla EZT - moe uy mdLoad zamiast? - TModel3d *mdKabina; // model kabiny dla uytkownika; McZapkie-030303: to z train.h + public: // modele składowe pojazdu + TModel3d *mdModel; // model pudła + TModel3d *mdLoad; // model zmiennego ładunku + TModel3d *mdPrzedsionek; // model przedsionków dla EZT - może użyć mdLoad zamiast? + TModel3d *mdKabina; // model kabiny dla użytkownika; McZapkie-030303: to z train.h TModel3d *mdLowPolyInt; // ABu 010305: wnetrze lowpoly - float fShade; // zacienienie: 0:normalnie, -1:w ciemnoci, +1:dodatkowe wiato (brak koloru?) + float fShade; // zacienienie: 0:normalnie, -1:w ciemności, +1:dodatkowe światło (brak koloru?) - private: // zmienne i metody do animacji submodeli; Ra: sprzatam animacje w pojedzie - public: // tymczasowo udostpnione do wyszukiwania drutu - int iAnimType[ANIM_TYPES]; // 0-osie,1-drzwi,2-obracane,3-zderzaki,4-wzki,5-pantografy,6-toki + private: // zmienne i metody do animacji submodeli; Ra: sprzatam animacje w pojeździe + public: // tymczasowo udostępnione do wyszukiwania drutu + int iAnimType[ANIM_TYPES]; // 0-osie,1-drzwi,2-obracane,3-zderzaki,4-wózki,5-pantografy,6-tłoki private: - int iAnimations; // liczba obiektw animujcych - TAnim *pAnimations; // obiekty animujce (zawieraj wskanik do funkcji wykonujcej animacj) + int iAnimations; // liczba obiektów animujących + TAnim *pAnimations; // obiekty animujące (zawierają wskaźnik do funkcji wykonującej animację) TSubModel ** - pAnimated; // lista animowanych submodeli (moe by ich wicej ni obiektw animujcych) - double dWheelAngle[3]; // kty obrotu k: 0=przednie toczne, 1=napdzajce i wizary, 2=tylne + pAnimated; // lista animowanych submodeli (może być ich więcej niż obiektów animujących) + double dWheelAngle[3]; // kąty obrotu kół: 0=przednie toczne, 1=napędzające i wiązary, 2=tylne // toczne void UpdateNone(TAnim *pAnim){}; // animacja pusta (funkcje ustawiania submodeli, gdy blisko kamery) void UpdateAxle(TAnim *pAnim); // animacja osi - void UpdateBoogie(TAnim *pAnim); // animacja wzka + void UpdateBoogie(TAnim *pAnim); // animacja wózka void UpdateDoorTranslate(TAnim *pAnim); // animacja drzwi - przesuw - void UpdateDoorRotate(TAnim *pAnim); // animacja drzwi - obrt - void UpdateDoorFold(TAnim *pAnim); // animacja drzwi - skadanie + void UpdateDoorRotate(TAnim *pAnim); // animacja drzwi - obrót + void UpdateDoorFold(TAnim *pAnim); // animacja drzwi - składanie void UpdateDoorPlug(TAnim *pAnim); // animacja drzwi - odskokowo-przesuwne void UpdatePant(TAnim *pAnim); // animacja pantografu - void UpdateLeverDouble(TAnim *pAnim); // animacja gaki zalena od double - void UpdateLeverFloat(TAnim *pAnim); // animacja gaki zalena od float - void UpdateLeverInt(TAnim *pAnim); // animacja gaki zalena od int (warto) - void UpdateLeverEnum(TAnim *pAnim); // animacja gaki zalena od int (lista ktw) - private: // Ra: cig dalszy animacji, dopiero do ogarnicia + void UpdateLeverDouble(TAnim *pAnim); // animacja gałki zależna od double + void UpdateLeverFloat(TAnim *pAnim); // animacja gałki zależna od float + void UpdateLeverInt(TAnim *pAnim); // animacja gałki zależna od int (wartość) + void UpdateLeverEnum(TAnim *pAnim); // animacja gałki zależna od int (lista kątów) + private: // Ra: ciąg dalszy animacji, dopiero do ogarnięcia // ABuWozki 060504 vector3 bogieRot[2]; // Obroty wozkow w/m korpusu TSubModel *smBogie[2]; // Wyszukiwanie max 2 wozkow - TSubModel *smWahacze[4]; // wahacze (np. nogi, dwignia w drezynie) - TSubModel *smBrakeMode; // Ra 15-01: nastawa hamulca te - TSubModel *smLoadMode; // Ra 15-01: nastawa prny/adowny + TSubModel *smWahacze[4]; // wahacze (np. nogi, dźwignia w drezynie) + TSubModel *smBrakeMode; // Ra 15-01: nastawa hamulca też + TSubModel *smLoadMode; // Ra 15-01: nastawa próżny/ładowny double fWahaczeAmp; // Winger 160204 - pantografy double pantspeedfactor; @@ -216,16 +216,16 @@ class TDynamicObject TSubModel *smBuforLewy[2]; TSubModel *smBuforPrawy[2]; TAnimValveGear *pValveGear; - vector3 vFloor; // podoga dla adunku + vector3 vFloor; // podłoga dla ładunku public: - TAnim *pants; // indeks obiektu animujcego dla pantografu 0 + TAnim *pants; // indeks obiektu animującego dla pantografu 0 double NoVoltTime; // czas od utraty zasilania double dDoorMoveL; // NBMX double dDoorMoveR; // NBMX TSubModel *smBrakeSet; // nastawa hamulca (wajcha) - TSubModel *smLoadSet; // nastawa adunku (wajcha) - TSubModel *smWiper; // wycieraczka (poniekd te wajcha) - // Ra: koneic animacji do ogarnicia + TSubModel *smLoadSet; // nastawa ładunku (wajcha) + TSubModel *smWiper; // wycieraczka (poniekąd też wajcha) + // Ra: koneic animacji do ogarnięcia private: void ABuLittleUpdate(double ObjSqrDist); @@ -249,7 +249,7 @@ class TDynamicObject TButton btCCtrl2; TButton btCPass1; // mostki przejsciowe TButton btCPass2; - char cp1, sp1, cp2, sp2; // ustawienia wy + char cp1, sp1, cp2, sp2; // ustawienia węży TButton btEndSignals11; // sygnalu konca pociagu TButton btEndSignals13; @@ -268,7 +268,7 @@ class TDynamicObject TButton btMechanik1; TButton btMechanik2; //TSubModel *smMechanik0; // Ra: mechanik wbudowany w model jako submodel? - //TSubModel *smMechanik1; // mechanik od strony sprzgu 1 + //TSubModel *smMechanik1; // mechanik od strony sprzęgu 1 double enginevolume; // MC: pomocnicze zeby gladziej silnik buczal int iAxles; // McZapkie: to potem mozna skasowac i zastapic iNumAxles @@ -307,21 +307,21 @@ class TDynamicObject vector3 modelShake; bool renderme; // yB - czy renderowac - // TRealSound sBrakeAcc; //dwik przyspieszacza + // TRealSound sBrakeAcc; //dźwięk przyspieszacza PSound sBrakeAcc; bool bBrakeAcc; TRealSound rsUnbrake; // yB - odglos luzowania float ModCamRot; - int iInventory; // flagi bitowe posiadanych submodeli (np. wiate) + int iInventory; // flagi bitowe posiadanych submodeli (np. świateł) void TurnOff(); public: - int iHornWarning; // numer syreny do uycia po otrzymaniu sygnau do jazdy - bool bEnabled; // Ra: wyjecha na portal i ma by usunity + int iHornWarning; // numer syreny do użycia po otrzymaniu sygnału do jazdy + bool bEnabled; // Ra: wyjechał na portal i ma być usunięty protected: - // TTrackFollower Axle2; //dwie osie z czterech (te s protected) - // TTrackFollower Axle3; //Ra: wyczyem, bo kty s liczone w Segment.cpp - int iNumAxles; // ilo osi + // TTrackFollower Axle2; //dwie osie z czterech (te są protected) + // TTrackFollower Axle3; //Ra: wyłączyłem, bo kąty są liczone w Segment.cpp + int iNumAxles; // ilość osi int CouplCounter; std::string asModel; @@ -334,8 +334,8 @@ class TDynamicObject void ABuCheckMyTrack(); public: - int *iLights; // wskanik na bity zapalonych wiate (wasne albo innego czonu) - double fTrackBlock; // odlego do przeszkody do dalszego ruchu (wykrywanie kolizji z innym + int *iLights; // wskaźnik na bity zapalonych świateł (własne albo innego członu) + double fTrackBlock; // odległość do przeszkody do dalszego ruchu (wykrywanie kolizji z innym // pojazdem) TDynamicObject * PrevAny(); TDynamicObject * Prev(); @@ -380,7 +380,7 @@ class TDynamicObject // McZapkie-010302 TController *Mechanik; - TController *ctOwner; // wskanik na obiekt zarzdzajcy skadem + TController *ctOwner; // wskażnik na obiekt zarządzający składem bool MechInside; // McZapkie-270202 bool Controller; @@ -389,16 +389,16 @@ class TDynamicObject TTrack *MyTrack; // McZapkie-030303: tor na ktorym stoi, ABu std::string asBaseDir; GLuint ReplacableSkinID[5]; // McZapkie:zmienialne nadwozie - int iAlpha; // maska przezroczystoci tekstur + int iAlpha; // maska przezroczystości tekstur int iMultiTex; //<0 tekstury wskazane wpisem, >0 tekstury z przecinkami, =0 jedna - int iOverheadMask; // maska przydzielana przez AI pojazdom posiadajcym pantograf, aby wymuszay - // jazd bezprdow + int iOverheadMask; // maska przydzielana przez AI pojazdom posiadającym pantograf, aby wymuszały + // jazdę bezprądową TTractionParam tmpTraction; - double fAdjustment; // korekcja - docelowo przenie do TrkFoll.cpp wraz z odlegoci od + double fAdjustment; // korekcja - docelowo przenieść do TrkFoll.cpp wraz z odległością od // poprzedniego TDynamicObject(); ~TDynamicObject(); - double TDynamicObject::Init( // zwraca dugo pojazdu albo 0, jeli bd + double TDynamicObject::Init( // zwraca długość pojazdu albo 0, jeśli błąd std::string Name, std::string BaseDir, std::string asReplacableSkin, std::string Type_Name, TTrack *Track, double fDist, std::string DriverType, double fVel, std::string TrainName, float Load, std::string LoadType, bool Reversed, std::string); @@ -419,11 +419,11 @@ class TDynamicObject inline vector3 HeadPosition() { return vCoulpler[iDirection ^ 1]; - }; // pobranie wsprzdnych czoa + }; // pobranie współrzędnych czoła inline vector3 RearPosition() { return vCoulpler[iDirection]; - }; // pobranie wsprzdnych tyu + }; // pobranie współrzędnych tyłu inline vector3 AxlePositionGet() { return iAxleFirst ? Axle1.pPosition : Axle0.pPosition; @@ -470,19 +470,19 @@ class TDynamicObject return (Axle1.GetTrack() == MyTrack ? Axle1.GetDirection() : Axle0.GetDirection()); }; // inline double ABuGetTranslation() //ABu. - // {//zwraca przesunicie wzka wzgldem Point1 toru + // {//zwraca przesunięcie wózka względem Point1 toru // return (Axle1.GetTrack()==MyTrack?Axle1.GetTranslation():Axle0.GetTranslation()); // }; inline double RaDirectionGet() - { // zwraca kierunek pojazdu na torze z aktywn os + { // zwraca kierunek pojazdu na torze z aktywną osą return iAxleFirst ? Axle1.GetDirection() : Axle0.GetDirection(); }; inline double RaTranslationGet() - { // zwraca przesunicie wzka wzgldem Point1 toru z aktywn osi + { // zwraca przesunięcie wózka względem Point1 toru z aktywną osią return iAxleFirst ? Axle1.GetTranslation() : Axle0.GetTranslation(); }; inline TTrack * RaTrackGet() - { // zwraca tor z aktywn osi + { // zwraca tor z aktywną osią return iAxleFirst ? Axle1.GetTrack() : Axle0.GetTrack(); }; void CouplersDettach(double MinDist, int MyScanDir); @@ -492,19 +492,19 @@ class TDynamicObject // void RaAxleEvent(TEvent *e); TDynamicObject * FirstFind(int &coupler_nr, int cf = 1); float GetEPP(); // wyliczanie sredniego cisnienia w PG - int DirectionSet(int d); // ustawienie kierunku w skadzie + int DirectionSet(int d); // ustawienie kierunku w składzie int DirectionGet() { return iDirection + iDirection - 1; - }; // odczyt kierunku w skadzie + }; // odczyt kierunku w składzie int DettachStatus(int dir); int Dettach(int dir); TDynamicObject * Neightbour(int &dir); void CoupleDist(); TDynamicObject * ControlledFind(); void ParamSet(int what, int into); - int RouteWish(TTrack *tr); // zapytanie do AI, po ktrym segmencie skrzyowania - // jecha + int RouteWish(TTrack *tr); // zapytanie do AI, po którym segmencie skrzyżowania + // jechać void DestinationSet(std::string to, std::string numer); std::string TextureTest(std::string const &name); void OverheadTrack(float o); diff --git a/EvLaunch.cpp b/EvLaunch.cpp index bd989e9f..42a92268 100644 --- a/EvLaunch.cpp +++ b/EvLaunch.cpp @@ -31,13 +31,13 @@ using namespace Mtable; //--------------------------------------------------------------------------- TEventLauncher::TEventLauncher() -{ // ustawienie pocztkowych wartoci dla wszystkich zmiennych +{ // ustawienie początkowych wartości dla wszystkich zmiennych iKey = 0; DeltaTime = -1; UpdatedTime = 0; fVal1 = fVal2 = 0; szText = NULL; - iHour = iMinute = -1; // takiego czasu nigdy nie bdzie + iHour = iMinute = -1; // takiego czasu nigdy nie będzie dRadius = 0; Event1 = Event2 = NULL; MemCell = NULL; @@ -54,32 +54,32 @@ void TEventLauncher::Init() } bool TEventLauncher::Load(cParser *parser) -{ // wczytanie wyzwalacza zdarze +{ // wczytanie wyzwalacza zdarzeń std::string token; parser->getTokens(); - *parser >> dRadius; // promie dziaania + *parser >> dRadius; // promień działania if (dRadius > 0.0) - dRadius *= dRadius; // do kwadratu, pod warunkiem, e nie jest ujemne - parser->getTokens(); // klawisz sterujcy + dRadius *= dRadius; // do kwadratu, pod warunkiem, że nie jest ujemne + parser->getTokens(); // klawisz sterujący *parser >> token; if (token != "none") { if (token.length() == 1) iKey = VkKeyScan(token[1]); // jeden znak jest konwertowany na kod klawisza else - iKey = stol_def(token,0); // a jak wicej, to jakby numer klawisza jest + iKey = stol_def(token,0); // a jak więcej, to jakby numer klawisza jest } parser->getTokens(); *parser >> DeltaTime; if (DeltaTime < 0) DeltaTime = -DeltaTime; // dla ujemnego zmieniamy na dodatni else if (DeltaTime > 0) - { // warto dodatnia oznacza wyzwalanie o okrelonej godzinie - iMinute = int(DeltaTime) % 100; // minuty s najmodszymi cyframi dziesietnymi + { // wartość dodatnia oznacza wyzwalanie o określonej godzinie + iMinute = int(DeltaTime) % 100; // minuty są najmłodszymi cyframi dziesietnymi iHour = int(DeltaTime - iMinute) / 100; // godzina to setki - DeltaTime = 0; // bez powtrze + DeltaTime = 0; // bez powtórzeń WriteLog("EventLauncher at " + std::to_string(iHour) + ":" + - std::to_string(iMinute)); // wywietlenie czasu + std::to_string(iMinute)); // wyświetlenie czasu } parser->getTokens(); *parser >> token; @@ -88,18 +88,18 @@ bool TEventLauncher::Load(cParser *parser) *parser >> token; asEvent2Name = token; // drugi event if ((asEvent2Name == "end") || (asEvent2Name == "condition")) - { // drugiego eventu moe nie by, bo s z tym problemy, ale ciii... - token = asEvent2Name; // rozpoznane sowo idzie do dalszego przetwarzania + { // drugiego eventu może nie być, bo są z tym problemy, ale ciii... + token = asEvent2Name; // rozpoznane słowo idzie do dalszego przetwarzania asEvent2Name = "none"; // a drugiego eventu nie ma } else - { // gdy s dwa eventy + { // gdy są dwa eventy parser->getTokens(); *parser >> token; //str = AnsiString(token.c_str()); } if (token == "condition") - { // obsuga wyzwalania warunkowego + { // obsługa wyzwalania warunkowego parser->getTokens(); *parser >> token; asMemCellName = token; @@ -108,11 +108,11 @@ bool TEventLauncher::Load(cParser *parser) SafeDeleteArray(szText); szText = new char[256]; strcpy(szText, token.c_str()); - if (token.compare("*") != 0) //*=nie bra command pod uwag + if (token.compare("*") != 0) //*=nie brać command pod uwagę iCheckMask |= conditional_memstring; parser->getTokens(); *parser >> token; - if (token.compare("*") != 0) //*=nie bra wartoci 1. pod uwag + if (token.compare("*") != 0) //*=nie brać wartości 1. pod uwagę { iCheckMask |= conditional_memval1; //str = AnsiString(token.c_str()); @@ -122,7 +122,7 @@ bool TEventLauncher::Load(cParser *parser) fVal1 = 0; parser->getTokens(); *parser >> token; - if (token.compare("*") != 0) //*=nie bra wartoci 2. pod uwag + if (token.compare("*") != 0) //*=nie brać wartości 2. pod uwagę { iCheckMask |= conditional_memval2; //str = AnsiString(token.c_str()); @@ -130,7 +130,7 @@ bool TEventLauncher::Load(cParser *parser) } else fVal2 = 0; - parser->getTokens(); // sowo zamykajce + parser->getTokens(); // słowo zamykające *parser >> token; } return true; @@ -141,8 +141,8 @@ bool TEventLauncher::Render() bool bCond = false; if (iKey != 0) { - if (Global::bActive) // tylko jeli okno jest aktywne - bCond = (Console::Pressed(iKey)); // czy klawisz wcinity + if (Global::bActive) // tylko jeśli okno jest aktywne + bCond = (Console::Pressed(iKey)); // czy klawisz wciśnięty } if (DeltaTime > 0) { @@ -155,11 +155,11 @@ bool TEventLauncher::Render() UpdatedTime += Timer::GetDeltaTime(); // aktualizacja naliczania czasu } else - { // jeli nie cykliczny, to sprawdzi czas + { // jeśli nie cykliczny, to sprawdzić czas if (GlobalTime->hh == iHour) { if (GlobalTime->mm == iMinute) - { // zgodno czasu uruchomienia + { // zgodność czasu uruchomienia if (UpdatedTime < 10) { UpdatedTime = 20; // czas do kolejnego wyzwolenia? @@ -170,9 +170,9 @@ bool TEventLauncher::Render() else UpdatedTime = 1; } - if (bCond) // jeli speniony zosta warunek + if (bCond) // jeśli spełniony został warunek { - if ((iCheckMask != 0) && MemCell) // sprawdzanie warunku na komrce pamici + if ((iCheckMask != 0) && MemCell) // sprawdzanie warunku na komórce pamięci bCond = MemCell->Compare(szText, fVal1, fVal2, iCheckMask); } return bCond; // sprawdzanie dRadius w Ground.cpp @@ -183,7 +183,7 @@ bool TEventLauncher::IsGlobal() if (DeltaTime == 0) if (iHour >= 0) if (iMinute >= 0) - if (dRadius < 0.0) // bez ograniczenia zasigu + if (dRadius < 0.0) // bez ograniczenia zasięgu return true; return false; }; diff --git a/Event.cpp b/Event.cpp index 7be970cc..157caf48 100644 --- a/Event.cpp +++ b/Event.cpp @@ -26,54 +26,54 @@ http://mozilla.org/MPL/2.0/. TEvent::TEvent(string m) { - // asName=""; //czy nazwa eventu jest niezbdna w tym przypadku? chyba nie + // asName=""; //czy nazwa eventu jest niezbędna w tym przypadku? chyba nie evNext = evNext2 = NULL; - bEnabled = false; // false dla eventw uywanych do skanowania sygnaw (nie dodawane do + bEnabled = false; // false dla eventów używanych do skanowania sygnałów (nie dodawane do // kolejki) - asNodeName = m; // nazwa obiektu powizanego - iQueued = 0; // nie zosta dodany do kolejki + asNodeName = m; // nazwa obiektu powiązanego + iQueued = 0; // nie został dodany do kolejki // bIsHistory=false; fDelay = 0; fStartTime = 0; // 0 nie ma sensu Type = m.empty() ? tp_Unknown : - tp_GetValues; // utworzenie niejawnego odczytu komrki pamici w torze + tp_GetValues; // utworzenie niejawnego odczytu komórki pamięci w torze for (int i = 0; i < 13; i++) Params[i].asPointer = NULL; - evJoined = NULL; // nie ma kolejnego z t sam nazw, usuwane s wg listy Next2 + evJoined = NULL; // nie ma kolejnego z tą samą nazwą, usuwane są wg listy Next2 Activator = NULL; iFlags = 0; - // event niejawny jest tworzony przed faz InitEvents, ktra podmienia nazw komrki pamici na - // wskanik - // Current->Params[8].asGroundNode=m; //to si ustawi w InitEvents + // event niejawny jest tworzony przed fazą InitEvents, która podmienia nazwę komórki pamięci na + // wskaźnik + // Current->Params[8].asGroundNode=m; //to się ustawi w InitEvents // Current->Params[9].asMemCell=m->MemCell; - fRandomDelay = 0.0; // standardowo nie bdzie dodatkowego losowego opnienia + fRandomDelay = 0.0; // standardowo nie będzie dodatkowego losowego opóźnienia }; TEvent::~TEvent() { switch (Type) - { // sprztanie + { // sprzątanie case tp_Multiple: - // SafeDeleteArray(Params[9].asText); //nie usuwa - nazwa obiektu powizanego zamieniana na - // wskanik - if (iFlags & conditional_memstring) // o ile jest acuch do porwnania w memcompare + // SafeDeleteArray(Params[9].asText); //nie usuwać - nazwa obiektu powiązanego zamieniana na + // wskaźnik + if (iFlags & conditional_memstring) // o ile jest łańcuch do porównania w memcompare SafeDeleteArray(Params[10].asText); break; case tp_UpdateValues: case tp_AddValues: SafeDeleteArray(Params[0].asText); - if (iFlags & conditional_memstring) // o ile jest acuch do porwnania w memcompare + if (iFlags & conditional_memstring) // o ile jest łańcuch do porównania w memcompare SafeDeleteArray(Params[10].asText); break; case tp_Animation: // nic - // SafeDeleteArray(Params[9].asText); //nie usuwa - nazwa jest zamieniana na wskanik do + // SafeDeleteArray(Params[9].asText); //nie usuwać - nazwa jest zamieniana na wskaźnik do // submodelu - if (Params[0].asInt == 4) // jeli z pliku VMD - delete[] Params[8].asPointer; // zwolni obszar + if (Params[0].asInt == 4) // jeśli z pliku VMD + delete[] Params[8].asPointer; // zwolnić obszar case tp_GetValues: // nic break; } - evJoined = NULL; // nie usuwa podczepionych tutaj + evJoined = NULL; // nie usuwać podczepionych tutaj }; void TEvent::Init(){ @@ -81,14 +81,14 @@ void TEvent::Init(){ }; void TEvent::Conditions(cParser *parser, string s) -{ // przetwarzanie warunkw, wsplne dla Multiple i UpdateValues +{ // przetwarzanie warunków, wspólne dla Multiple i UpdateValues if (s == "condition") { // jesli nie "endevent" std::string token, str; if (!asNodeName.empty()) - { // podczepienie acucha, jeli nie jest pusty + { // podczepienie łańcucha, jeśli nie jest pusty Params[9].asText = new char[asNodeName.length() + 1]; // usuwane i zamieniane na - // wskanik + // wskaźnik strcpy(Params[9].asText, asNodeName.c_str()); } parser->getTokens(); @@ -111,7 +111,7 @@ void TEvent::Conditions(cParser *parser, string s) *parser >> token; str = token; if (str != "*") //"*" - nie brac command pod uwage - { // zapamitanie acucha do porwnania + { // zapamiętanie łańcucha do porównania Params[10].asText = new char[255]; strcpy(Params[10].asText, str.c_str()); iFlags |= conditional_memstring; @@ -135,10 +135,10 @@ void TEvent::Conditions(cParser *parser, string s) } parser->getTokens(); *parser >> token; - s = token; // ewentualnie dalej losowe opnienie + s = token; // ewentualnie dalej losowe opóźnienie } if (s == "randomdelay") - { // losowe opnienie + { // losowe opóźnienie std::string token; parser->getTokens(); *parser >> fRandomDelay; // Ra 2014-03-11 @@ -156,11 +156,11 @@ void TEvent::Load(cParser *parser, vector3 *org) //string str; char *ptr; - bEnabled = true; // zmieniane na false dla eventw uywanych do skanowania sygnaw + bEnabled = true; // zmieniane na false dla eventów używanych do skanowania sygnałów parser->getTokens(); *parser >> token; - asName = ToLower(token); // uycie parametrw moe dawa wielkie + asName = ToLower(token); // użycie parametrów może dawać wielkie parser->getTokens(); *parser >> token; @@ -185,7 +185,7 @@ void TEvent::Load(cParser *parser, vector3 *org) else if (token == "lights") Type = tp_Lights; else if (token == "visible") - Type = tp_Visible; // zmiana wywietlania obiektu + Type = tp_Visible; // zmiana wyświetlania obiektu else if (token == "switch") Type = tp_Switch; else if (token == "dynvel") @@ -203,9 +203,9 @@ void TEvent::Load(cParser *parser, vector3 *org) else if (token == "logvalues") Type = tp_LogValues; else if (token == "voltage") - Type = tp_Voltage; // zmiana napicia w zasilaczu (TractionPowerSource) + Type = tp_Voltage; // zmiana napięcia w zasilaczu (TractionPowerSource) else if (token == "message") - Type = tp_Message; // wywietlenie komunikatu + Type = tp_Message; // wyświetlenie komunikatu else if (token == "friction") Type = tp_Friction; // zmiana tarcia na scenerii else @@ -219,28 +219,28 @@ void TEvent::Load(cParser *parser, vector3 *org) // str = AnsiString(token.c_str()); if (token != "none") - asNodeName = token; // nazwa obiektu powizanego + asNodeName = token; // nazwa obiektu powiązanego if (asName.substr(0, 5) == "none_") - Type = tp_Ignored; // Ra: takie s ignorowane + Type = tp_Ignored; // Ra: takie są ignorowane switch (Type) { case tp_AddValues: iFlags = update_memadd; // dodawanko case tp_UpdateValues: - // if (Type==tp_UpdateValues) iFlags=0; //co modyfikowa + // if (Type==tp_UpdateValues) iFlags=0; //co modyfikować parser->getTokens(1, false); // case sensitive *parser >> token; // str = AnsiString(token.c_str()); Params[0].asText = new char[token.length() + 1]; strcpy(Params[0].asText, token.c_str()); - if (token != "*") // czy ma zosta bez zmian? + if (token != "*") // czy ma zostać bez zmian? iFlags |= update_memstring; parser->getTokens(); *parser >> token; // str = AnsiString(token.c_str()); - if (token != "*") // czy ma zosta bez zmian? + if (token != "*") // czy ma zostać bez zmian? { Params[1].asdouble = atof(token.c_str()); iFlags |= update_memval1; @@ -250,7 +250,7 @@ void TEvent::Load(cParser *parser, vector3 *org) parser->getTokens(); *parser >> token; // str = AnsiString(token.c_str()); - if (token != "*") // czy ma zosta bez zmian? + if (token != "*") // czy ma zostać bez zmian? { Params[2].asdouble = atof(token.c_str()); iFlags |= update_memval2; @@ -259,23 +259,23 @@ void TEvent::Load(cParser *parser, vector3 *org) Params[2].asdouble = 0; parser->getTokens(); *parser >> token; - Conditions(parser, token); // sprawdzanie warunkw + Conditions(parser, token); // sprawdzanie warunków break; case tp_CopyValues: Params[9].asText = NULL; iFlags = update_memstring | update_memval1 | update_memval2; // normalanie trzy i = 0; parser->getTokens(); - *parser >> token; // nazwa drugiej komrki (rdowej) + *parser >> token; // nazwa drugiej komórki (źródłowej) while (token.compare("endevent") != 0) { switch (++i) - { // znaczenie kolejnych parametrw - case 1: // nazwa drugiej komrki (rdowej) - Params[9].asText = new char[token.length() + 1]; // usuwane i zamieniane na wskanik + { // znaczenie kolejnych parametrów + case 1: // nazwa drugiej komórki (źródłowej) + Params[9].asText = new char[token.length() + 1]; // usuwane i zamieniane na wskaźnik strcpy(Params[9].asText, token.c_str()); break; - case 2: // maska wartoci + case 2: // maska wartości iFlags = stol_def(token, (update_memstring | update_memval1 | update_memval2)); break; @@ -288,12 +288,12 @@ void TEvent::Load(cParser *parser, vector3 *org) iFlags = update_memstring | update_memval1 | update_memval2; // normalanie trzy i = 0; parser->getTokens(); - *parser >> token; // nazwa drugiej komrki (rdowej) + *parser >> token; // nazwa drugiej komórki (źródłowej) while (token.compare("endevent") != 0) { switch (++i) - { // znaczenie kolejnych parametrw - case 1: // maska wartoci + { // znaczenie kolejnych parametrów + case 1: // maska wartości iFlags = stol_def(token, (update_memstring | update_memval1 | update_memval2)); break; @@ -309,12 +309,12 @@ void TEvent::Load(cParser *parser, vector3 *org) break; case tp_PutValues: parser->getTokens(3); - *parser >> Params[3].asdouble >> Params[4].asdouble >> Params[5].asdouble; // pooenie + *parser >> Params[3].asdouble >> Params[4].asdouble >> Params[5].asdouble; // położenie // X,Y,Z if (org) - { // przesunicie - // tmp->pCenter.RotateY(aRotate.y/180.0*M_PI); //Ra 2014-11: uwzgldnienie rotacji - Params[3].asdouble += org->x; // wsprzdne w scenerii + { // przesunięcie + // tmp->pCenter.RotateY(aRotate.y/180.0*M_PI); //Ra 2014-11: uwzględnienie rotacji + Params[3].asdouble += org->x; // współrzędne w scenerii Params[4].asdouble += org->y; Params[5].asdouble += org->z; } @@ -325,9 +325,9 @@ void TEvent::Load(cParser *parser, vector3 *org) if (token.substr(0, 19) == "PassengerStopPoint:") { if (token.find("#")) - token = token.substr(0, token.find("#") - 1); // obcicie unikatowoci - bEnabled = false; // nie do kolejki (dla SetVelocity te, ale jak jest do toru - // dowizany) + token = token.substr(0, token.find("#") - 1); // obcięcie unikatowości + bEnabled = false; // nie do kolejki (dla SetVelocity też, ale jak jest do toru + // dowiązany) Params[6].asCommand = cm_PassengerStopPoint; } else if (token == "SetVelocity") @@ -357,7 +357,7 @@ void TEvent::Load(cParser *parser, vector3 *org) //} else if (token == "OutsideStation") { - bEnabled = false; // ma by skanowny, aby AI nie przekraczao W5 + bEnabled = false; // ma być skanowny, aby AI nie przekraczało W5 Params[6].asCommand = cm_OutsideStation; } else @@ -407,12 +407,12 @@ void TEvent::Load(cParser *parser, vector3 *org) { // str = AnsiString(token.c_str()); if (i < 8) - Params[i].asdouble = atof(token.c_str()); // teraz moe mie uamek + Params[i].asdouble = atof(token.c_str()); // teraz może mieć ułamek i++; } } while (token.compare("endevent") != 0); break; - case tp_Visible: // zmiana wywietlania obiektu + case tp_Visible: // zmiana wyświetlania obiektu parser->getTokens(); *parser >> token; // str = AnsiString(token.c_str()); @@ -454,7 +454,7 @@ void TEvent::Load(cParser *parser, vector3 *org) *parser >> token; Params[0].asInt = 0; // na razie nieznany typ if (token.compare("rotate") == 0) - { // obrt wzgldem osi + { // obrót względem osi parser->getTokens(); *parser >> token; Params[9].asText = new char[255]; // nazwa submodelu @@ -482,11 +482,11 @@ void TEvent::Load(cParser *parser, vector3 *org) Params[9].asText = new char[255]; // nazwa submodelu strcpy(Params[9].asText, token.c_str()); Params[0].asInt = 8; - parser->getTokens(4); // jaki ma by sens tych parametrw? + parser->getTokens(4); // jaki ma być sens tych parametrów? *parser >> Params[1].asdouble >> Params[2].asdouble >> Params[3].asdouble >> Params[4].asdouble; } - else if (token.substr(token.length() - 4, 4) == ".vmd") // na razie tu, moe bdzie inaczej + else if (token.substr(token.length() - 4, 4) == ".vmd") // na razie tu, może będzie inaczej { // animacja z pliku VMD // TFileStream *fs = new TFileStream( "models\\" + AnsiString( token.c_str() ), fmOpenRead ); { @@ -517,22 +517,22 @@ void TEvent::Load(cParser *parser, vector3 *org) // str = AnsiString(token.c_str()); if (token != "endevent") { - Params[1].asdouble = atof(token.c_str()); // prdko liniowa ruchu iglic + Params[1].asdouble = atof(token.c_str()); // prędkość liniowa ruchu iglic parser->getTokens(); *parser >> token; // str = AnsiString(token.c_str()); } else - Params[1].asdouble = -1.0; // uy domylnej + Params[1].asdouble = -1.0; // użyć domyślnej if (token != "endevent") { Params[2].asdouble = - atof(token.c_str()); // dodatkowy ruch drugiej iglicy (zamknicie nastawnicze) + atof(token.c_str()); // dodatkowy ruch drugiej iglicy (zamknięcie nastawnicze) parser->getTokens(); *parser >> token; } else - Params[2].asdouble = -1.0; // uy domylnej + Params[2].asdouble = -1.0; // użyć domyślnej break; case tp_DynVel: parser->getTokens(); @@ -556,17 +556,17 @@ void TEvent::Load(cParser *parser, vector3 *org) token != "randomdelay") { if ((token.substr(0, 5) != "none_") ? (i < 8) : false) - { // eventy rozpoczynajce si od "none_" s ignorowane + { // eventy rozpoczynające się od "none_" są ignorowane if (token != "else") { Params[i].asText = new char[255]; strcpy(Params[i].asText, token.c_str()); if (ti) - iFlags |= conditional_else << i; // oflagowanie dla eventw "else" + iFlags |= conditional_else << i; // oflagowanie dla eventów "else" i++; } else - ti = !ti; // zmiana flagi dla sowa "else" + ti = !ti; // zmiana flagi dla słowa "else" } else if (i >= 8) ErrorLog("Bad event: \"" + token + "\" ignored in multiple \"" + asName + "\"!"); @@ -576,16 +576,16 @@ void TEvent::Load(cParser *parser, vector3 *org) *parser >> token; // str = AnsiString(token.c_str()); } - Conditions(parser, token); // sprawdzanie warunkw + Conditions(parser, token); // sprawdzanie warunków break; - case tp_Voltage: // zmiana napicia w zasilaczu (TractionPowerSource) + case tp_Voltage: // zmiana napięcia w zasilaczu (TractionPowerSource) case tp_Friction: // zmiana przyczepnosci na scenerii parser->getTokens(); *parser >> Params[0].asdouble; // Ra 2014-01-27 parser->getTokens(); *parser >> token; break; - case tp_Message: // wywietlenie komunikatu + case tp_Message: // wyświetlenie komunikatu do { parser->getTokens(); @@ -623,72 +623,72 @@ void TEvent::AddToQuery(TEvent *e) string TEvent::CommandGet() { // odczytanie komendy z eventu switch (Type) - { // to si wykonuje rwnie skadu jadcego bez obsugi + { // to się wykonuje również składu jadącego bez obsługi case tp_GetValues: return string(Params[9].asMemCell->Text()); case tp_PutValues: return string(Params[0].asText); } - return ""; // inne eventy si nie licz + return ""; // inne eventy się nie liczą }; TCommandType TEvent::Command() { // odczytanie komendy z eventu switch (Type) - { // to si wykonuje rwnie dla skadu jadcego bez obsugi + { // to się wykonuje również dla składu jadącego bez obsługi case tp_GetValues: return Params[9].asMemCell->Command(); case tp_PutValues: return Params[6].asCommand; // komenda zakodowana binarnie } - return cm_Unknown; // inne eventy si nie licz + return cm_Unknown; // inne eventy się nie liczą }; double TEvent::ValueGet(int n) { // odczytanie komendy z eventu - n &= 1; // tylko 1 albo 2 jest prawidowy + n &= 1; // tylko 1 albo 2 jest prawidłowy switch (Type) - { // to si wykonuje rwnie skadu jadcego bez obsugi + { // to się wykonuje również składu jadącego bez obsługi case tp_GetValues: return n ? Params[9].asMemCell->Value1() : Params[9].asMemCell->Value2(); case tp_PutValues: return Params[2 - n].asdouble; } - return 0.0; // inne eventy si nie licz + return 0.0; // inne eventy się nie liczą }; vector3 TEvent::PositionGet() -{ // pobranie wsprzdnych eventu +{ // pobranie współrzędnych eventu switch (Type) { // case tp_GetValues: - return Params[9].asMemCell->Position(); // wsprzdne podczonej komrki pamici + return Params[9].asMemCell->Position(); // współrzędne podłączonej komórki pamięci case tp_PutValues: return vector3(Params[3].asdouble, Params[4].asdouble, Params[5].asdouble); } - return vector3(0, 0, 0); // inne eventy si nie licz + return vector3(0, 0, 0); // inne eventy się nie liczą }; bool TEvent::StopCommand() { // if (Type == tp_GetValues) - return Params[9].asMemCell->StopCommand(); // info o komendzie z komrki + return Params[9].asMemCell->StopCommand(); // info o komendzie z komórki return false; }; void TEvent::StopCommandSent() { if (Type == tp_GetValues) - Params[9].asMemCell->StopCommandSent(); // komenda z komrki zostaa wysana + Params[9].asMemCell->StopCommandSent(); // komenda z komórki została wysłana }; void TEvent::Append(TEvent *e) -{ // doczepienie kolejnych z t sam nazw +{ // doczepienie kolejnych z tą samą nazwą if (evJoined) - evJoined->Append(e); // rekurencja! - gra kilkanacie eventw bdzie potrzebne + evJoined->Append(e); // rekurencja! - góra kilkanaście eventów będzie potrzebne else { evJoined = e; - e->bEnabled = true; // ten doczepiony moe by tylko kolejkowany + e->bEnabled = true; // ten doczepiony może być tylko kolejkowany } }; diff --git a/Event.h b/Event.h index 8070ea95..5c0de7c2 100644 --- a/Event.h +++ b/Event.h @@ -43,21 +43,21 @@ typedef enum tp_Friction } TEventType; -const int update_memstring = 0x0000001; // zmodyfikowa tekst (UpdateValues) -const int update_memval1 = 0x0000002; // zmodyfikowa pierwsz wartos -const int update_memval2 = 0x0000004; // zmodyfikowa drug wartos -const int update_memadd = 0x0000008; // doda do poprzedniej zawartoci -const int update_load = 0x0000010; // odczyta adunek -const int update_only = 0x00000FF; // warto graniczna -const int conditional_memstring = 0x0000100; // porwnanie tekstu -const int conditional_memval1 = 0x0000200; // porwnanie pierwszej wartoci liczbowej -const int conditional_memval2 = 0x0000400; // porwnanie drugiej wartoci -const int conditional_else = 0x0010000; // flaga odwrcenia warunku (przesuwana bitowo) -const int conditional_anyelse = 0x0FF0000; // do sprawdzania, czy s odwrcone warunki -const int conditional_trackoccupied = 0x1000000; // jeli tor zajty -const int conditional_trackfree = 0x2000000; // jeli tor wolny -const int conditional_propability = 0x4000000; // zalenie od generatora lizcb losowych -const int conditional_memcompare = 0x8000000; // porwnanie zawartoci +const int update_memstring = 0x0000001; // zmodyfikować tekst (UpdateValues) +const int update_memval1 = 0x0000002; // zmodyfikować pierwszą wartosć +const int update_memval2 = 0x0000004; // zmodyfikować drugą wartosć +const int update_memadd = 0x0000008; // dodać do poprzedniej zawartości +const int update_load = 0x0000010; // odczytać ładunek +const int update_only = 0x00000FF; // wartość graniczna +const int conditional_memstring = 0x0000100; // porównanie tekstu +const int conditional_memval1 = 0x0000200; // porównanie pierwszej wartości liczbowej +const int conditional_memval2 = 0x0000400; // porównanie drugiej wartości +const int conditional_else = 0x0010000; // flaga odwrócenia warunku (przesuwana bitowo) +const int conditional_anyelse = 0x0FF0000; // do sprawdzania, czy są odwrócone warunki +const int conditional_trackoccupied = 0x1000000; // jeśli tor zajęty +const int conditional_trackfree = 0x2000000; // jeśli tor wolny +const int conditional_propability = 0x4000000; // zależnie od generatora lizcb losowych +const int conditional_memcompare = 0x8000000; // porównanie zawartości union TParam { @@ -86,20 +86,20 @@ class TEvent // zmienne: ev* public: std::string asName; - bool bEnabled; // false gdy ma nie by dodawany do kolejki (skanowanie sygnaw) + bool bEnabled; // false gdy ma nie być dodawany do kolejki (skanowanie sygnałów) int iQueued; // ile razy dodany do kolejki // bool bIsHistory; - TEvent *evNext; // nastpny w kolejce + TEvent *evNext; // następny w kolejce TEvent *evNext2; TEventType Type; double fStartTime; double fDelay; TDynamicObject *Activator; - TParam Params[13]; // McZapkie-070502 //Ra: zamieni to na union/struct + TParam Params[13]; // McZapkie-070502 //Ra: zamienić to na union/struct unsigned int iFlags; // zamiast Params[8] z flagami warunku std::string asNodeName; // McZapkie-100302 - dodalem zeby zapamietac nazwe toru - TEvent *evJoined; // kolejny event z t sam nazw - od wersji 378 - double fRandomDelay; // zakres dodatkowego opnienia + TEvent *evJoined; // kolejny event z tą samą nazwą - od wersji 378 + double fRandomDelay; // zakres dodatkowego opóźnienia public: // metody TEvent(std::string m = ""); ~TEvent(); diff --git a/Float3d.h b/Float3d.h index 5b9cdd6b..c3ee39a7 100644 --- a/Float3d.h +++ b/Float3d.h @@ -13,7 +13,7 @@ http://mozilla.org/MPL/2.0/. //--------------------------------------------------------------------------- class float3 -{ // waprzdne wierchoka 3D o pojedynczej precyzji +{ // wapółrzędne wierchołka 3D o pojedynczej precyzji public: float x, y, z; float3(void){}; @@ -58,7 +58,7 @@ inline float3 operator/(const float3 &v, double k) return float3(v.x / k, v.y / k, v.z / k); }; inline float3 SafeNormalize(const float3 &v) -{ // bezpieczna normalizacja (wektor dugoci 1.0) +{ // bezpieczna normalizacja (wektor długości 1.0) double l = v.Length(); float3 retVal; if (l == 0) @@ -98,14 +98,14 @@ class float4 }; }; inline float4 operator*(const float4 &q1, const float4 &q2) -{ // mnoenie to prawie jak mnoenie macierzy +{ // mnożenie to prawie jak mnożenie macierzy return float4(q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y, q1.w * q2.y + q1.y * q2.w + q1.z * q2.x - q1.x * q2.z, q1.w * q2.z + q1.z * q2.w + q1.x * q2.y - q1.y * q2.x, q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z); } inline float4 operator-(const float4 &q) -{ // sprzony; odwrotny tylko dla znormalizowanych! +{ // sprzężony; odwrotny tylko dla znormalizowanych! return float4(-q.x, -q.y, -q.z, q.w); }; inline float4 operator-(const float4 &q1, const float4 &q2) @@ -121,14 +121,14 @@ inline float4 operator/(const float4 &v, double k) return float4(v.x / k, v.y / k, v.z / k, v.w / k); }; inline float4 Normalize(const float4 &v) -{ // bezpieczna normalizacja (wektor dugoci 1.0) +{ // bezpieczna normalizacja (wektor długości 1.0) double l = v.LengthSquared(); if (l == 1.0) return v; if (l == 0.0) return float4(); // wektor zerowy, w=1 else - return v / sqrt(l); // pierwiastek liczony tylko jeli trzeba wykona dzielenia + return v / sqrt(l); // pierwiastek liczony tylko jeśli trzeba wykonać dzielenia }; inline float Dot(const float4 &q1, const float4 &q2) @@ -136,7 +136,7 @@ float Dot(const float4 &q1, const float4 &q2) return q1.x * q2.x + q1.y * q2.y + q1.z * q2.z + q1.w * q2.w; } inline float4 &operator*=(float4 &v1, double d) -{ // mnoenie przez skalar, jaki ma sens? +{ // mnożenie przez skalar, jaki ma sens? v1.x *= d; v1.y *= d; v1.z *= d; @@ -149,7 +149,7 @@ inline float4 Slerp(const float4 &q0, const float4 &q1, float t) float cosOmega = Dot(q0, q1); float4 new_q1(q1); if (cosOmega < 0.0f) - { // jeeli s niezgodne kierunki, jeden z nich trzeba zanegowa + { // jeżeli są niezgodne kierunki, jeden z nich trzeba zanegować new_q1.x = -new_q1.x; new_q1.y = -new_q1.y; new_q1.z = -new_q1.z; @@ -158,15 +158,15 @@ inline float4 Slerp(const float4 &q0, const float4 &q1, float t) } double k0, k1; if (cosOmega > 0.9999f) - { // jeli jestemy z (t) na maksimum kosinusa, to tam prawie liniowo jest + { // jeśli jesteśmy z (t) na maksimum kosinusa, to tam prawie liniowo jest k0 = 1.0f - t; k1 = t; } else - { // a w oglnym przypadku trzeba liczy na trygonometri + { // a w ogólnym przypadku trzeba liczyć na trygonometrię double sinOmega = sqrt(1.0f - cosOmega * cosOmega); // sinus z jedynki tryg. - double omega = atan2(sinOmega, cosOmega); // wyznaczenie kta - double oneOverSinOmega = 1.0f / sinOmega; // odwrotno sinusa, bo sinus w mianowniku + double omega = atan2(sinOmega, cosOmega); // wyznaczenie kąta + double oneOverSinOmega = 1.0f / sinOmega; // odwrotność sinusa, bo sinus w mianowniku k0 = sin((1.0f - t) * omega) * oneOverSinOmega; k1 = sin(t * omega) * oneOverSinOmega; } @@ -175,7 +175,7 @@ inline float4 Slerp(const float4 &q0, const float4 &q1, float t) } struct float8 -{ // wierchoek 3D z wektorem normalnym i mapowaniem, pojedyncza precyzja +{ // wierchołek 3D z wektorem normalnym i mapowaniem, pojedyncza precyzja public: float3 Point; float3 Normal; @@ -212,7 +212,7 @@ class float4x4 return &e[i << 2]; }; void InitialRotate() - { // taka specjalna rotacja, nie ma co ciga trygonometrii + { // taka specjalna rotacja, nie ma co ciągać trygonometrii float f; for (int i = 0; i < 16; i += 4) { @@ -224,7 +224,7 @@ class float4x4 }; inline float4x4 &Rotation(double angle, float3 axis); inline bool IdentityIs() - { // sprawdzenie jednostkowoci + { // sprawdzenie jednostkowości for (int i = 0; i < 16; ++i) if (e[i] != ((i % 5) ? 0.0 : 1.0)) // jedynki tylko na 0, 5, 10 i 15 return false; @@ -238,7 +238,7 @@ class float4x4 }; inline float3 operator*(const float4x4 &m, const float3 &v) -{ // mnoenie wektora przez macierz +{ // mnożenie wektora przez macierz return float3(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0] + m[3][0], v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1] + m[3][1], v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2] + m[3][2]); @@ -295,19 +295,19 @@ inline float4x4 operator*(const float4x4 &m1, const float4x4 &m2) // From code in Graphics Gems; p. 766 inline float Det2x2(float a, float b, float c, float d) -{ // obliczenie wyznacznika macierzy 22 +{ // obliczenie wyznacznika macierzy 2×2 return a * d - b * c; }; inline float Det3x3(float a1, float a2, float a3, float b1, float b2, float b3, float c1, float c2, float c3) -{ // obliczenie wyznacznika macierzy 33 +{ // obliczenie wyznacznika macierzy 3×3 return +a1 * Det2x2(b2, b3, c2, c3) - b1 * Det2x2(a2, a3, c2, c3) + c1 * Det2x2(a2, a3, b2, b3); }; inline float Det(const float4x4 &m) -{ // obliczenie wyznacznika macierzy 44 +{ // obliczenie wyznacznika macierzy 4×4 float a1 = m[0][0], a2 = m[1][0], a3 = m[2][0], a4 = m[3][0]; float b1 = m[0][1], b2 = m[1][1], b3 = m[2][1], b4 = m[3][1]; float c1 = m[0][2], c2 = m[1][2], c3 = m[2][2], c4 = m[3][2]; diff --git a/Forth.cpp b/Forth.cpp index 2fd4d080..a797e3b3 100644 --- a/Forth.cpp +++ b/Forth.cpp @@ -16,37 +16,37 @@ http://mozilla.org/MPL/2.0/. #pragma package(smart_init) -/* Ra: Forth jest prostym jzykiem programowania, funkcjonujcym na dosy -niskim poziomie. Moe by zarwno interpretowany jak i kompilowany, co -pozwala szybko dziaa skompilowanym programom, jak rwnie wykonywa -polecenia wprowadzane z klawiatury. Za pomoc zdefiniowanych kompilatorw -mona definiowa nowe funkcje, mona rwnie tworzy nowe struktury jezyka, -np. wykraczajce poza dotychczasow skadni. Prostota i wydajno s okupione -nieco specyficzn skadni, wynikajc z uycia stosu do oblicze (tzw. odwrotna +/* Ra: Forth jest prostym językiem programowania, funkcjonującym na dosyć +niskim poziomie. Może być zarówno interpretowany jak i kompilowany, co +pozwala szybko działać skompilowanym programom, jak również wykonywać +polecenia wprowadzane z klawiatury. Za pomocą zdefiniowanych kompilatorów +można definiować nowe funkcje, można również tworzyć nowe struktury jezyka, +np. wykraczające poza dotychczasową składnię. Prostota i wydajność są okupione +nieco specyficzną składnią, wynikającą z użycia stosu do obliczeń (tzw. odwrotna notacja polska). -Forth ma by uywany jako: - 1. Alternatywna posta eventw. Dotychczasowe eventy w sceneriach mog by -traktowane jako funkcje jzyka Forth. Jednoczenie mona uzyska uelastycznienie -skadni, poprzez np. poczenie w jednym wpisie rnych typw eventw wraz z -dodaniem warunkw dostpnych tylko dla Multiple. Rwnie mona bdzie uywa -wyrae jzyka Forth, czyli dokonywa oblicze. - 2. Jako docelowa posta schematw obwodw Ladder Diagram. Mona zrobi tak, by -program rdowy w Forth (przy pewnych ograniczeniach) by wywietlany graficznie -jako Ladder Diagram. Jednoczenie graficzne modyfikacje schematu mona by -przeoy na posta tekstow Forth i skompilowa na kod niskiego poziomu. - 3. Jako algorytm funkcjonowania AI, moliwy do zaprogramowania na zewntzr EXE. -Kady uytkownik bdzie mg swj wasny styl jazdy. - 4. Jako algorytm sterowania ruchem (zalenoci na stacji). - 5. Jako AI stacji, zarzdzajce ruchem na stacji zalenie w czasie rzeczywistym. +Forth ma być używany jako: + 1. Alternatywna postać eventów. Dotychczasowe eventy w sceneriach mogą być +traktowane jako funkcje języka Forth. Jednocześnie można uzyskać uelastycznienie +składni, poprzez np. połączenie w jednym wpisie różnych typów eventów wraz z +dodaniem warunków dostępnych tylko dla Multiple. Również można będzie używać +wyrażeń języka Forth, czyli dokonywać obliczeń. + 2. Jako docelowa postać schematów obwodów Ladder Diagram. Można zrobić tak, by +program źródłowy w Forth (przy pewnych ograniczeniach) był wyświetlany graficznie +jako Ladder Diagram. Jednocześnie graficzne modyfikacje schematu można by +przełożyć na postać tekstową Forth i skompilować na kod niskiego poziomu. + 3. Jako algorytm funkcjonowania AI, możliwy do zaprogramowania na zewnątzr EXE. +Każdy użytkownik będzie mógł swój własny styl jazdy. + 4. Jako algorytm sterowania ruchem (zależności na stacji). + 5. Jako AI stacji, zarządzające ruchem na stacji zależnie w czasie rzeczywistym. -Wzgldem pierwotnego jzyka Forth, uyty tutaj bdzie mia pewne odstpstwa: - 1. Operacje na liczbach czterobajtowych float. Naley we wasnym zakresie dba -o zgodno uytych funkcji z typem argumentu na stosie. - 2. Jedynym typem cakowitym jest czterobajtowy int. - 3. Do wyszukiwania obiektw w scenerii po nazwie (torw, eventw), uywane jest +Względem pierwotnego języka Forth, użyty tutaj będzie miał pewne odstępstwa: + 1. Operacje na liczbach czterobajtowych float. Należy we własnym zakresie dbać +o zgodność użytych funkcji z typem argumentu na stosie. + 2. Jedynym typem całkowitym jest czterobajtowy int. + 3. Do wyszukiwania obiektów w scenerii po nazwie (torów, eventów), używane jest drzewo zamiast listy. -Wpisy w scenerii, przetwarzane jako komendy Forth, nie mog uywa rednika jako -separatora sw. Uniemoliwia to uywanie rednika jako sowa. +Wpisy w scenerii, przetwarzane jako komendy Forth, nie mogą używać średnika jako +separatora słów. Uniemożliwia to używanie średnika jako słowa. */ diff --git a/Forth.h b/Forth.h index 3ba62078..979a5135 100644 --- a/Forth.h +++ b/Forth.h @@ -12,6 +12,6 @@ http://mozilla.org/MPL/2.0/. //--------------------------------------------------------------------------- class Forth -{ // klasa obsugi jzyka +{ // klasa obsługi języka }; #endif diff --git a/Gauge.cpp b/Gauge.cpp index c0ea2c10..04091419 100644 --- a/Gauge.cpp +++ b/Gauge.cpp @@ -28,7 +28,7 @@ TGauge::TGauge() fOffset = 0.0; fScale = 1.0; fStepSize = 5; - // iChannel=-1; //kana analogowej komunikacji zwrotnej + // iChannel=-1; //kanał analogowej komunikacji zwrotnej SubModel = NULL; }; @@ -44,10 +44,10 @@ void TGauge::Clear() void TGauge::Init(TSubModel *NewSubModel, TGaugeType eNewType, double fNewScale, double fNewOffset, double fNewFriction, double fNewValue) -{ // ustawienie parametrw animacji submodelu +{ // ustawienie parametrów animacji submodelu if (NewSubModel) - { // warunek na wszelki wypadek, gdyby si submodel nie - // podczy + { // warunek na wszelki wypadek, gdyby się submodel nie + // podłączył fFriction = fNewFriction; fValue = fNewValue; fOffset = fNewOffset; @@ -58,19 +58,19 @@ void TGauge::Init(TSubModel *NewSubModel, TGaugeType eNewType, double fNewScale, { TSubModel *sm = SubModel->ChildGet(); do - { // ptla po submodelach potomnych i obracanie ich o kt zaley od + { // pętla po submodelach potomnych i obracanie ich o kąt zależy od // cyfry w (fValue) if (sm->pName) - { // musi mie niepust nazw + { // musi mieć niepustą nazwę if (sm->pName[0] >= '0') if (sm->pName[0] <= '9') - sm->WillBeAnimated(); // wyczenie optymalizacji + sm->WillBeAnimated(); // wyłączenie optymalizacji } sm = sm->NextGet(); } while (sm); } - else // a banan moe by z optymalizacj? - NewSubModel->WillBeAnimated(); // wyczenie ignowania jedynkowego transformu + else // a banan może być z optymalizacją? + NewSubModel->WillBeAnimated(); // wyłączenie ignowania jedynkowego transformu } }; @@ -86,10 +86,10 @@ bool TGauge::Load(cParser &Parser, TModel3d *md1, TModel3d *md2, double mul) >> val5; val3 *= mul; TSubModel *sm = md1->GetFromName( str1.c_str() ); - if (sm) // jeli nie znaleziony - md2 = NULL; // informacja, e znaleziony - else if (md2) // a jest podany drugi model (np. zewntrzny) - sm = md2->GetFromName(str1.c_str()); // to moe tam bdzie, co za rnica gdzie + if (sm) // jeśli nie znaleziony + md2 = NULL; // informacja, że znaleziony + else if (md2) // a jest podany drugi model (np. zewnętrzny) + sm = md2->GetFromName(str1.c_str()); // to może tam będzie, co za różnica gdzie if (str2 == "mov") Init(sm, gt_Move, val3, val4, val5); else if (str2 == "wip") @@ -98,7 +98,7 @@ bool TGauge::Load(cParser &Parser, TModel3d *md1, TModel3d *md2, double mul) Init(sm, gt_Digital, val3, val4, val5); else Init(sm, gt_Rotate, val3, val4, val5); - return (md2); // true, gdy podany model zewntrzny, a w kabinie nie byo + return (md2); // true, gdy podany model zewnętrzny, a w kabinie nie było }; void TGauge::PermIncValue(double fNewDesired) @@ -112,21 +112,21 @@ void TGauge::PermIncValue(double fNewDesired) }; void TGauge::IncValue(double fNewDesired) -{ // uywane tylko dla uniwersali +{ // używane tylko dla uniwersali fDesiredValue = fDesiredValue + fNewDesired * fScale + fOffset; if (fDesiredValue > fScale + fOffset) fDesiredValue = fScale + fOffset; }; void TGauge::DecValue(double fNewDesired) -{ // uywane tylko dla uniwersali +{ // używane tylko dla uniwersali fDesiredValue = fDesiredValue - fNewDesired * fScale + fOffset; if (fDesiredValue < 0) fDesiredValue = 0; }; void TGauge::UpdateValue(double fNewDesired) -{ // ustawienie wartoci docelowej +{ // ustawienie wartości docelowej fDesiredValue = fNewDesired * fScale + fOffset; }; @@ -147,8 +147,8 @@ void TGauge::Update() else fValue = fDesiredValue; if (SubModel) - { // warunek na wszelki wypadek, gdyby si submodel nie - // podczy + { // warunek na wszelki wypadek, gdyby się submodel nie + // podłączył TSubModel *sm; switch (eType) { @@ -171,14 +171,14 @@ void TGauge::Update() break; case gt_Digital: // Ra 2014-07: licznik cyfrowy sm = SubModel->ChildGet(); -/* std::string n = FormatFloat( "0000000000", floor( fValue ) ); // na razie tak troch bez sensu +/* std::string n = FormatFloat( "0000000000", floor( fValue ) ); // na razie tak trochę bez sensu */ std::string n( "000000000" + std::to_string( static_cast( std::floor( fValue ) ) ) ); if( n.length() > 10 ) { n.erase( 0, n.length() - 10 ); } // also dumb but should work for now do - { // ptla po submodelach potomnych i obracanie ich o kt zaley od + { // pętla po submodelach potomnych i obracanie ich o kąt zależy od // cyfry w (fValue) if (sm->pName) - { // musi mie niepust nazw + { // musi mieć niepustą nazwę if (sm->pName[0] >= '0') if (sm->pName[0] <= '9') sm->SetRotate(float3(0, 1, 0), @@ -209,9 +209,9 @@ void TGauge::AssignInt(int *iValue) iData = iValue; }; void TGauge::UpdateValue() -{ // ustawienie wartoci docelowej z parametru +{ // ustawienie wartości docelowej z parametru switch (cDataType) - { // to nie jest zbyt optymalne, mona by zrobi osobne funkcje + { // to nie jest zbyt optymalne, można by zrobić osobne funkcje case 'f': fDesiredValue = (*fData) * fScale + fOffset; break; diff --git a/Gauge.h b/Gauge.h index 891c9c73..de6ba90b 100644 --- a/Gauge.h +++ b/Gauge.h @@ -14,26 +14,26 @@ http://mozilla.org/MPL/2.0/. typedef enum { // typ ruchu gt_Unknown, // na razie nie znany - gt_Rotate, // obrt - gt_Move, // przesunicie rwnolege - gt_Wiper, // obrt trzech kolejnych submodeli o ten sam kt (np. wycieraczka, drzwi + gt_Rotate, // obrót + gt_Move, // przesunięcie równoległe + gt_Wiper, // obrót trzech kolejnych submodeli o ten sam kąt (np. wycieraczka, drzwi // harmonijkowe) - gt_Digital // licznik cyfrowy, np. kilometrw + gt_Digital // licznik cyfrowy, np. kilometrów } TGaugeType; class TGauge // zmienne "gg" -{ // animowany wskanik, mogcy przyjmowa wiele stanw porednich +{ // animowany wskaźnik, mogący przyjmować wiele stanów pośrednich private: TGaugeType eType; // typ ruchu - double fFriction; // hamowanie przy zlianiu si do zadanej wartoci - double fDesiredValue; // warto docelowa - double fValue; // warto obecna - double fOffset; // warto pocztkowa ("0") - double fScale; // warto kocowa ("1") - double fStepSize; // nie uywane + double fFriction; // hamowanie przy zliżaniu się do zadanej wartości + double fDesiredValue; // wartość docelowa + double fValue; // wartość obecna + double fOffset; // wartość początkowa ("0") + double fScale; // wartość końcowa ("1") + double fStepSize; // nie używane char cDataType; // typ zmiennej parametru: f-float, d-double, i-int union - { // wskanik na parametr pokazywany przez animacj + { // wskaźnik na parametr pokazywany przez animację float *fData; double *dData; int *iData; diff --git a/Globals.cpp b/Globals.cpp index 0715e5cb..c1ee6f20 100644 --- a/Globals.cpp +++ b/Globals.cpp @@ -25,55 +25,55 @@ http://mozilla.org/MPL/2.0/. // namespace Global { -// parametry do u�ytku wewn�trznego +// parametry do użytku wewnętrznego // double Global::tSinceStart=0; TGround *Global::pGround = NULL; // char Global::CreatorName1[30]="2001-2004 Maciej Czapkiewicz "; -// char Global::CreatorName2[30]="2001-2003 Marcin Wo�niak "; +// char Global::CreatorName2[30]="2001-2003 Marcin Woźniak "; // char Global::CreatorName3[20]="2004-2005 Adam Bugiel "; -// char Global::CreatorName4[30]="2004 Arkadiusz �lusarczyk "; -// char Global::CreatorName5[30]="2003-2009 �ukasz Kirchner "; +// char Global::CreatorName4[30]="2004 Arkadiusz Ślusarczyk "; +// char Global::CreatorName5[30]="2003-2009 Łukasz Kirchner "; std::string Global::asCurrentSceneryPath = "scenery/"; std::string Global::asCurrentTexturePath = std::string(szTexturePath); std::string Global::asCurrentDynamicPath = ""; int Global::iSlowMotion = - 0; // info o malym FPS: 0-OK, 1-wy��czy� multisampling, 3-promie� 1.5km, 7-1km + 0; // info o malym FPS: 0-OK, 1-wyłączyć multisampling, 3-promień 1.5km, 7-1km TDynamicObject *Global::changeDynObj = NULL; // info o zmianie pojazdu bool Global::detonatoryOK; // info o nowych detonatorach double Global::ABuDebug = 0; std::string Global::asSky = "1"; -double Global::fOpenGL = 0.0; // wersja OpenGL - do sprawdzania obecno�ci rozszerze� -bool Global::bOpenGL_1_5 = false; // czy s� dost�pne funkcje OpenGL 1.5 -double Global::fLuminance = 1.0; // jasno�� �wiat�a do automatycznego zapalania -int Global::iReCompile = 0; // zwi�kszany, gdy trzeba od�wie�y� siatki +double Global::fOpenGL = 0.0; // wersja OpenGL - do sprawdzania obecności rozszerzeń +bool Global::bOpenGL_1_5 = false; // czy są dostępne funkcje OpenGL 1.5 +double Global::fLuminance = 1.0; // jasność światła do automatycznego zapalania +int Global::iReCompile = 0; // zwiększany, gdy trzeba odświeżyć siatki HWND Global::hWnd = NULL; // uchwyt okna int Global::iCameraLast = -1; -std::string Global::asRelease = "16.1.1174.483"; +std::string Global::asRelease = "16.0.1172.482"; std::string Global::asVersion = - "Compilation 2017-01-13, release " + Global::asRelease + "."; // tutaj, bo wysy�any -int Global::iViewMode = 0; // co aktualnie wida�: 0-kabina, 1-latanie, 2-sprz�gi, 3-dokumenty -int Global::iTextMode = 0; // tryb pracy wy�wietlacza tekstowego + "Compilation 2017-01-10, release " + Global::asRelease + "."; // tutaj, bo wysyłany +int Global::iViewMode = 0; // co aktualnie widać: 0-kabina, 1-latanie, 2-sprzęgi, 3-dokumenty +int Global::iTextMode = 0; // tryb pracy wyświetlacza tekstowego int Global::iScreenMode[12] = {0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0}; // numer ekranu wy�wietlacza tekstowego -double Global::fSunDeclination = 0.0; // deklinacja S�o�ca -double Global::fTimeAngleDeg = 0.0; // godzina w postaci k�ta -float Global::fClockAngleDeg[6]; // k�ty obrotu cylindr�w dla zegara cyfrowego + 0, 0, 0, 0, 0, 0}; // numer ekranu wyświetlacza tekstowego +double Global::fSunDeclination = 0.0; // deklinacja Słońca +double Global::fTimeAngleDeg = 0.0; // godzina w postaci kąta +float Global::fClockAngleDeg[6]; // kąty obrotu cylindrów dla zegara cyfrowego char *Global::szTexturesTGA[4] = {"tga", "dds", "tex", "bmp"}; // lista tekstur od TGA char *Global::szTexturesDDS[4] = {"dds", "tga", "tex", "bmp"}; // lista tekstur od DDS -int Global::iKeyLast = 0; // ostatnio naci�ni�ty klawisz w celu logowania -GLuint Global::iTextureId = 0; // ostatnio u�yta tekstura 2D +int Global::iKeyLast = 0; // ostatnio naciśnięty klawisz w celu logowania +GLuint Global::iTextureId = 0; // ostatnio użyta tekstura 2D int Global::iPause = 0x10; // globalna pauza ruchu bool Global::bActive = true; // czy jest aktywnym oknem -int Global::iErorrCounter = 0; // licznik sprawdza� do �ledzenia b��d�w OpenGL -int Global::iTextures = 0; // licznik u�ytych tekstur +int Global::iErorrCounter = 0; // licznik sprawdzań do śledzenia błędów OpenGL +int Global::iTextures = 0; // licznik użytych tekstur TWorld *Global::pWorld = NULL; cParser *Global::pParser = NULL; -int Global::iSegmentsRendered = 90; // ilo�� segment�w do regulacji wydajno�ci +int Global::iSegmentsRendered = 90; // ilość segmentów do regulacji wydajności TCamera *Global::pCamera = NULL; // parametry kamery -TDynamicObject *Global::pUserDynamic = NULL; // pojazd u�ytkownika, renderowany bez trz�sienia -bool Global::bSmudge = false; // czy wy�wietla� smug�, a pojazd u�ytkownika na ko�cu +TDynamicObject *Global::pUserDynamic = NULL; // pojazd użytkownika, renderowany bez trzęsienia +bool Global::bSmudge = false; // czy wyświetlać smugę, a pojazd użytkownika na końcu std::string Global::asTranscript[5]; // napisy na ekranie (widoczne) -TTranscripts Global::tranTexts; // obiekt obs�uguj�cy stenogramy d�wi�k�w na ekranie +TTranscripts Global::tranTexts; // obiekt obsługujący stenogramy dźwięków na ekranie // parametry scenerii vector3 Global::pCameraPosition; @@ -89,22 +89,22 @@ GLfloat Global::FogColor[] = {0.6f, 0.7f, 0.8f}; GLfloat Global::ambientDayLight[] = {0.40f, 0.40f, 0.45f, 1.0f}; // robocze GLfloat Global::diffuseDayLight[] = {0.55f, 0.54f, 0.50f, 1.0f}; GLfloat Global::specularDayLight[] = {0.95f, 0.94f, 0.90f, 1.0f}; -GLfloat Global::ambientLight[] = {0.80f, 0.80f, 0.85f, 1.0f}; // sta�e +GLfloat Global::ambientLight[] = {0.80f, 0.80f, 0.85f, 1.0f}; // stałe GLfloat Global::diffuseLight[] = {0.85f, 0.85f, 0.80f, 1.0f}; GLfloat Global::specularLight[] = {0.95f, 0.94f, 0.90f, 1.0f}; GLfloat Global::whiteLight[] = {1.00f, 1.00f, 1.00f, 1.0f}; GLfloat Global::noLight[] = {0.00f, 0.00f, 0.00f, 1.0f}; -GLfloat Global::darkLight[] = {0.03f, 0.03f, 0.03f, 1.0f}; //�ladowe +GLfloat Global::darkLight[] = {0.03f, 0.03f, 0.03f, 1.0f}; //śladowe GLfloat Global::lightPos[4]; -bool Global::bRollFix = true; // czy wykona� przeliczanie przechy�ki -bool Global::bJoinEvents = false; // czy grupowa� eventy o tych samych nazwach -int Global::iHiddenEvents = 1; // czy ��czy� eventy z torami poprzez nazw� toru +bool Global::bRollFix = true; // czy wykonać przeliczanie przechyłki +bool Global::bJoinEvents = false; // czy grupować eventy o tych samych nazwach +int Global::iHiddenEvents = 1; // czy łączyć eventy z torami poprzez nazwę toru -// parametry u�ytkowe (jak komu pasuje) +// parametry użytkowe (jak komu pasuje) int Global::Keys[MaxKeys]; int Global::iWindowWidth = 800; int Global::iWindowHeight = 600; -float Global::fDistanceFactor = 768.0; // baza do przeliczania odleg�o�ci dla LoD +float Global::fDistanceFactor = 768.0; // baza do przeliczania odległości dla LoD int Global::iFeedbackMode = 1; // tryb pracy informacji zwrotnej int Global::iFeedbackPort = 0; // dodatkowy adres dla informacji zwrotnych bool Global::bFreeFly = false; @@ -114,82 +114,83 @@ float Global::fMouseXScale = 1.5; float Global::fMouseYScale = 0.2; std::string Global::SceneryFile = "td.scn"; std::string Global::asHumanCtrlVehicle = "EU07-424"; -int Global::iMultiplayer = 0; // blokada dzia�ania niekt�rych funkcji na rzecz komunikacji -double Global::fMoveLight = -1; // ruchome �wiat�o -double Global::fLatitudeDeg = 52.0; // szeroko�� geograficzna -float Global::fFriction = 1.0; // mno�nik tarcia - KURS90 +int Global::iMultiplayer = 0; // blokada działania niektórych funkcji na rzecz komunikacji +double Global::fMoveLight = -1; // ruchome światło +double Global::fLatitudeDeg = 52.0; // szerokość geograficzna +float Global::fFriction = 1.0; // mnożnik tarcia - KURS90 double Global::fBrakeStep = 1.0; // krok zmiany hamulca dla klawiszy [Num3] i [Num9] -std::string Global::asLang = "pl"; // domy�lny j�zyk - http://tools.ietf.org/html/bcp47 +std::string Global::asLang = "pl"; // domyślny język - http://tools.ietf.org/html/bcp47 -// parametry wydajno�ciowe (np. regulacja FPS, szybko�� wczytywania) +// parametry wydajnościowe (np. regulacja FPS, szybkość wczytywania) bool Global::bAdjustScreenFreq = true; bool Global::bEnableTraction = true; bool Global::bLoadTraction = true; bool Global::bLiveTraction = true; -int Global::iDefaultFiltering = 9; // domy�lne rozmywanie tekstur TGA bez alfa -int Global::iBallastFiltering = 9; // domy�lne rozmywanie tekstur podsypki -int Global::iRailProFiltering = 5; // domy�lne rozmywanie tekstur szyn -int Global::iDynamicFiltering = 5; // domy�lne rozmywanie tekstur pojazd�w -bool Global::bUseVBO = false; // czy jest VBO w karcie graficznej (czy u�y�) +int Global::iDefaultFiltering = 9; // domyślne rozmywanie tekstur TGA bez alfa +int Global::iBallastFiltering = 9; // domyślne rozmywanie tekstur podsypki +int Global::iRailProFiltering = 5; // domyślne rozmywanie tekstur szyn +int Global::iDynamicFiltering = 5; // domyślne rozmywanie tekstur pojazdów +bool Global::bUseVBO = false; // czy jest VBO w karcie graficznej (czy użyć) GLint Global::iMaxTextureSize = 16384; // maksymalny rozmiar tekstury -bool Global::bSmoothTraction = false; // wyg�adzanie drut�w starym sposobem -char **Global::szDefaultExt = Global::szTexturesDDS; // domy�lnie od DDS +bool Global::bSmoothTraction = false; // wygładzanie drutów starym sposobem +char **Global::szDefaultExt = Global::szTexturesDDS; // domyślnie od DDS int Global::iMultisampling = 2; // tryb antyaliasingu: 0=brak,1=2px,2=4px,3=8px,4=16px bool Global::bGlutFont = false; // czy tekst generowany przez GLUT32.DLL -int Global::iConvertModels = 7; // tworzenie plik�w binarnych, +2-optymalizacja transform�w -int Global::iSlowMotionMask = -1; // maska wy��czanych w�a�ciwo�ci dla zwi�kszenia FPS -int Global::iModifyTGA = 7; // czy korygowa� pliki TGA dla szybszego wczytywania -// bool Global::bTerrainCompact=true; //czy zapisa� teren w pliku +int Global::iConvertModels = 7; // tworzenie plików binarnych, +2-optymalizacja transformów +int Global::iSlowMotionMask = -1; // maska wyłączanych właściwości dla zwiększenia FPS +int Global::iModifyTGA = 7; // czy korygować pliki TGA dla szybszego wczytywania +// bool Global::bTerrainCompact=true; //czy zapisać teren w pliku TAnimModel *Global::pTerrainCompact = NULL; // do zapisania terenu w pliku std::string Global::asTerrainModel = ""; // nazwa obiektu terenu do zapisania w pliku -double Global::fFpsAverage = 20.0; // oczekiwana wartos� FPS +double Global::fFpsAverage = 20.0; // oczekiwana wartosć FPS double Global::fFpsDeviation = 5.0; // odchylenie standardowe FPS -double Global::fFpsMin = 0.0; // dolna granica FPS, przy kt�rej promie� scenerii b�dzie zmniejszany -double Global::fFpsMax = 0.0; // g�rna granica FPS, przy kt�rej promie� scenerii b�dzie zwi�kszany -double Global::fFpsRadiusMax = 3000.0; // maksymalny promie� renderowania -int Global::iFpsRadiusMax = 225; // maksymalny promie� renderowania -double Global::fRadiusFactor = 1.1; // wsp��czynnik jednorazowej zmiany promienia scenerii -bool Global::bOldSmudge = false; // U�ywanie starej smugi +double Global::fFpsMin = 0.0; // dolna granica FPS, przy której promień scenerii będzie zmniejszany +double Global::fFpsMax = 0.0; // górna granica FPS, przy której promień scenerii będzie zwiększany +double Global::fFpsRadiusMax = 3000.0; // maksymalny promień renderowania +int Global::iFpsRadiusMax = 225; // maksymalny promień renderowania +double Global::fRadiusFactor = 1.1; // współczynnik jednorazowej zmiany promienia scenerii +bool Global::bOldSmudge = false; // Używanie starej smugi -// parametry testowe (do testowania scenerii i obiekt�w) +// parametry testowe (do testowania scenerii i obiektów) bool Global::bWireFrame = false; bool Global::bSoundEnabled = true; -int Global::iWriteLogEnabled = 3; // maska bitowa: 1-zapis do pliku, 2-okienko, 4-nazwy tor�w +int Global::iWriteLogEnabled = 3; // maska bitowa: 1-zapis do pliku, 2-okienko, 4-nazwy torów bool Global::bManageNodes = true; bool Global::bDecompressDDS = false; // czy programowa dekompresja DDS // parametry do kalibracji -// kolejno wsp��czynniki dla pot�g 0, 1, 2, 3 warto�ci odczytanej z urz�dzenia -double Global::fCalibrateIn[6][6] = {{0, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0}, - {0, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0}}; -double Global::fCalibrateOut[7][6] = {{0, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0}, - {0, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0}, +// kolejno współczynniki dla potęg 0, 1, 2, 3 wartości odczytanej z urządzenia +double Global::fCalibrateIn[6][6] = {{0, 1, 0, 0, 0, 0}, + {0, 1, 0, 0, 0, 0}, + {0, 1, 0, 0, 0, 0}, + {0, 1, 0, 0, 0, 0}, + {0, 1, 0, 0, 0, 0}, + {0, 1, 0, 0, 0, 0}}; +double Global::fCalibrateOut[7][6] = {{0, 1, 0, 0, 0, 0}, + {0, 1, 0, 0, 0, 0}, + {0, 1, 0, 0, 0, 0}, + {0, 1, 0, 0, 0, 0}, + {0, 1, 0, 0, 0, 0}, + {0, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0}}; double Global::fCalibrateOutMax[7] = {0, 0, 0, 0, 0, 0, 0}; int Global::iCalibrateOutDebugInfo = -1; int Global::iPoKeysPWM[7] = {0, 1, 2, 3, 4, 5, 6}; -// parametry przej�ciowe (do usuni�cia) -// bool Global::bTimeChange=false; //Ra: ZiomalCl wy��czy� star� wersj� nocy -// bool Global::bRenderAlpha=true; //Ra: wywali�am t� flag� +// parametry przejściowe (do usunięcia) +// bool Global::bTimeChange=false; //Ra: ZiomalCl wyłączył starą wersję nocy +// bool Global::bRenderAlpha=true; //Ra: wywaliłam tę flagę bool Global::bnewAirCouplers = true; -bool Global::bDoubleAmbient = false; // podw�jna jasno�� ambient -double Global::fTimeSpeed = 1.0; // przyspieszenie czasu, zmienna do test�w +bool Global::bDoubleAmbient = false; // podwójna jasność ambient +double Global::fTimeSpeed = 1.0; // przyspieszenie czasu, zmienna do testów bool Global::bHideConsole = false; // hunter-271211: ukrywanie konsoli -int Global::iBpp = 32; // chyba ju� nie u�ywa si� kart, na kt�rych 16bpp co� poprawi -// maciek001: konfiguracja wst�pna portu COM +int Global::iBpp = 32; // chyba już nie używa się kart, na których 16bpp coś poprawi +// maciek001: konfiguracja wstępna portu COM bool Global::bMWDdebugEnable = false; bool Global::bMWDInputDataEnable = false; -unsigned int Global::iMWDBaudrate = 500000; -std::string Global::sMWDPortId = "COM1"; // nazwa portu z kt�rego korzystamy - na razie nie dzia�a -bool Global::bMWDBreakEnable = - false; // zmieni� na FALSE!!! jak ju� b�dzie dzia�a� wczytywanie z *.ini -double Global::fMWDAnalogCalib[4][3] = { - {1023, 0, 1023}, {1023, 0, 1023}, {1023, 0, 1023}, {1023, 0, 1023}}; // warto�� max - // potencjometru, warto�� - // min potencjometru, - // rozdzielczo�� (max. - // warto�� jaka mo�e by� - // -1) +unsigned long int Global::iMWDBaudrate = 500000; +std::string Global::sMWDPortId = "COM1"; // nazwa portu z którego korzystamy - na razie nie działa +bool Global::bMWDBreakEnable = false; // zmienić na FALSE!!! jak już będzie działać wczytywanie z *.ini +double Global::fMWDAnalogCalib[4][3] = {{1023, 0, 1023},{1023, 0, 1023},{1023, 0, 1023},{1023, 0, 1023}}; // wartość max potencjometru, wartość min potencjometru, rozdzielczość (max. wartość jaka może być -1) double Global::fMWDzg[2] = {0.9, 1023}; double Global::fMWDpg[2] = {0.8, 1023}; double Global::fMWDph[2] = {0.6, 1023}; @@ -217,8 +218,8 @@ void Global::LoadIniFile(std::string asFileName) { for (int i = 0; i < 10; ++i) { // zerowanie pozycji kamer - pFreeCameraInit[i] = vector3(0, 0, 0); // wsp��rz�dne w scenerii - pFreeCameraInitAngle[i] = vector3(0, 0, 0); // k�ty obrotu w radianach + pFreeCameraInit[i] = vector3(0, 0, 0); // współrzędne w scenerii + pFreeCameraInitAngle[i] = vector3(0, 0, 0); // kąty obrotu w radianach } cParser parser(asFileName, cParser::buffer_FILE); ConfigParse(parser); @@ -342,7 +343,7 @@ void Global::ConfigParse(cParser &Parser) } else { - Global::iWriteLogEnabled = std::atoi(token.c_str()); + Global::iWriteLogEnabled = stol_def(token,3); } } else if (token == "adjustscreenfreq") @@ -360,7 +361,7 @@ void Global::ConfigParse(cParser &Parser) } else if (token == "enabletraction") { - // Winger 040204 - 'zywe' patyki dostosowujace sie do trakcji; Ra 2014-03: teraz �amanie + // Winger 040204 - 'zywe' patyki dostosowujace sie do trakcji; Ra 2014-03: teraz łamanie Parser.getTokens(); Parser >> token; Global::bEnableTraction = (token == "yes"); @@ -373,7 +374,7 @@ void Global::ConfigParse(cParser &Parser) Global::bLoadTraction = (token == "yes"); } else if (token == "friction") - { // mno�nik tarcia - KURS90 + { // mnożnik tarcia - KURS90 Parser.getTokens(1, false); Parser >> Global::fFriction; @@ -381,7 +382,7 @@ void Global::ConfigParse(cParser &Parser) else if (token == "livetraction") { // Winger 160404 - zaleznosc napiecia loka od trakcji; - // Ra 2014-03: teraz pr�d przy braku sieci + // Ra 2014-03: teraz prąd przy braku sieci Parser.getTokens(); Parser >> token; Global::bLiveTraction = (token == "yes"); @@ -414,7 +415,7 @@ void Global::ConfigParse(cParser &Parser) Parser >> token; if (token == "tga") { - // domy�lnie od TGA + // domyślnie od TGA Global::szDefaultExt = Global::szTexturesTGA; } } @@ -519,7 +520,7 @@ void Global::ConfigParse(cParser &Parser) } else if (token == "doubleambient") { - // podw�jna jasno�� ambient + // podwójna jasność ambient Parser.getTokens(); Parser >> token; Global::bDoubleAmbient = (token == "yes"); @@ -533,15 +534,15 @@ void Global::ConfigParse(cParser &Parser) { // pobranie daty z systemu std::time_t timenow = std::time(0); std::tm *localtime = std::localtime(&timenow); - Global::fMoveLight = localtime->tm_yday + 1; // numer bie��cego dnia w roku + Global::fMoveLight = localtime->tm_yday + 1; // numer bieżącego dnia w roku } - if (Global::fMoveLight > 0.f) // tu jest nadal zwi�kszone o 1 + if (fMoveLight > 0.f) // tu jest nadal zwiększone o 1 { // obliczenie deklinacji wg: // http://naturalfrequency.com/Tregenza_Sharples/Daylight_Algorithms/algorithm_1_11.htm // Spencer J W Fourier series representation of the position of the sun Search 2 (5) // 172 (1971) Global::fMoveLight = - M_PI / 182.5 * (Global::fMoveLight - 1.0); // numer dnia w postaci k�ta + M_PI / 182.5 * (Global::fMoveLight - 1.0); // numer dnia w postaci kąta fSunDeclination = 0.006918 - 0.3999120 * std::cos(fMoveLight) + 0.0702570 * std::sin(fMoveLight) - 0.0067580 * std::cos(2 * fMoveLight) + 0.0009070 * std::sin(2 * fMoveLight) - @@ -550,14 +551,14 @@ void Global::ConfigParse(cParser &Parser) } else if (token == "smoothtraction") { - // podw�jna jasno�� ambient + // podwójna jasność ambient Parser.getTokens(); Parser >> token; Global::bSmoothTraction = (token == "yes"); } else if (token == "timespeed") { - // przyspieszenie czasu, zmienna do test�w + // przyspieszenie czasu, zmienna do testów Parser.getTokens(1, false); Parser >> Global::fTimeSpeed; } @@ -576,13 +577,13 @@ void Global::ConfigParse(cParser &Parser) } else if (token == "latitude") { - // szeroko�� geograficzna + // szerokość geograficzna Parser.getTokens(1, false); Parser >> Global::fLatitudeDeg; } else if (token == "convertmodels") { - // tworzenie plik�w binarnych + // tworzenie plików binarnych Parser.getTokens(1, false); Parser >> Global::iConvertModels; } @@ -595,13 +596,13 @@ void Global::ConfigParse(cParser &Parser) } else if (token == "slowmotion") { - // tworzenie plik�w binarnych + // tworzenie plików binarnych Parser.getTokens(1, false); Parser >> Global::iSlowMotionMask; } else if (token == "modifytga") { - // czy korygowa� pliki TGA dla szybszego wczytywania + // czy korygować pliki TGA dla szybszego wczytywania Parser.getTokens(1, false); Parser >> Global::iModifyTGA; } @@ -621,14 +622,14 @@ void Global::ConfigParse(cParser &Parser) } else if (token == "rollfix") { - // Ra: poprawianie przechy�ki, aby wewn�trzna szyna by�a "pozioma" + // Ra: poprawianie przechyłki, aby wewnętrzna szyna była "pozioma" Parser.getTokens(); Parser >> token; Global::bRollFix = (token == "yes"); } else if (token == "fpsaverage") { - // oczekiwana wartos� FPS + // oczekiwana wartość FPS Parser.getTokens(1, false); Parser >> Global::fFpsAverage; } @@ -640,85 +641,85 @@ void Global::ConfigParse(cParser &Parser) } else if (token == "fpsradiusmax") { - // maksymalny promie� renderowania + // maksymalny promień renderowania Parser.getTokens(1, false); Parser >> Global::fFpsRadiusMax; } else if (token == "calibratein") { - // parametry kalibracji wej�� + // parametry kalibracji wejść Parser.getTokens(1, false); int in; Parser >> in; if ((in < 0) || (in > 5)) { - in = 5; // na ostatni, bo i tak trzeba pomin�� warto�ci + in = 5; // na ostatni, bo i tak trzeba pominąć wartości } Parser.getTokens(4, false); Parser >> Global::fCalibrateIn[in][0] // wyraz wolny - >> Global::fCalibrateIn[in][1] // mno�nik - >> Global::fCalibrateIn[in][2] // mno�nik dla kwadratu - >> Global::fCalibrateIn[in][3]; // mno�nik dla sze�cianu - Global::fCalibrateIn[in][4] = 0.0; // mno�nik 4 pot�gi - Global::fCalibrateIn[in][5] = 0.0; // mno�nik 5 pot�gi + >> Global::fCalibrateIn[in][1] // mnożnik + >> Global::fCalibrateIn[in][2] // mnożnik dla kwadratu + >> Global::fCalibrateIn[in][3]; // mnożnik dla sześcianu + Global::fCalibrateIn[in][4] = 0.0; // mnożnik 4 potęgi + Global::fCalibrateIn[in][5] = 0.0; // mnożnik 5 potęgi } else if (token == "calibrate5din") { - // parametry kalibracji wej�� + // parametry kalibracji wejść Parser.getTokens(1, false); int in; Parser >> in; if ((in < 0) || (in > 5)) { - in = 5; // na ostatni, bo i tak trzeba pomin�� warto�ci + in = 5; // na ostatni, bo i tak trzeba pominąć wartości } Parser.getTokens(6, false); Parser >> Global::fCalibrateIn[in][0] // wyraz wolny - >> Global::fCalibrateIn[in][1] // mno�nik - >> Global::fCalibrateIn[in][2] // mno�nik dla kwadratu - >> Global::fCalibrateIn[in][3] // mno�nik dla sze�cianu - >> Global::fCalibrateIn[in][4] // mno�nik 4 pot�gi - >> Global::fCalibrateIn[in][5]; // mno�nik 5 pot�gi + >> Global::fCalibrateIn[in][1] // mnożnik + >> Global::fCalibrateIn[in][2] // mnożnik dla kwadratu + >> Global::fCalibrateIn[in][3] // mnożnik dla sześcianu + >> Global::fCalibrateIn[in][4] // mnożnik 4 potęgi + >> Global::fCalibrateIn[in][5]; // mnożnik 5 potęgi } else if (token == "calibrateout") { - // parametry kalibracji wyj�� + // parametry kalibracji wyjść Parser.getTokens(1, false); int out; Parser >> out; if ((out < 0) || (out > 6)) { - out = 6; // na ostatni, bo i tak trzeba pomin�� warto�ci + out = 6; // na ostatni, bo i tak trzeba pominąć wartości } Parser.getTokens(4, false); Parser >> Global::fCalibrateOut[out][0] // wyraz wolny - >> Global::fCalibrateOut[out][1] // mno�nik liniowy - >> Global::fCalibrateOut[out][2] // mno�nik dla kwadratu - >> Global::fCalibrateOut[out][3]; // mno�nik dla sze�cianu - Global::fCalibrateOut[out][4] = 0.0; // mno�nik dla 4 pot�gi - Global::fCalibrateOut[out][5] = 0.0; // mno�nik dla 5 pot�gi + >> Global::fCalibrateOut[out][1] // mnożnik liniowy + >> Global::fCalibrateOut[out][2] // mnożnik dla kwadratu + >> Global::fCalibrateOut[out][3]; // mnożnik dla sześcianu + Global::fCalibrateOut[out][4] = 0.0; // mnożnik dla 4 potęgi + Global::fCalibrateOut[out][5] = 0.0; // mnożnik dla 5 potęgi } else if (token == "calibrate5dout") { - // parametry kalibracji wyj�� + // parametry kalibracji wyjść Parser.getTokens(1, false); int out; Parser >> out; if ((out < 0) || (out > 6)) { - out = 6; // na ostatni, bo i tak trzeba pomin�� warto�ci + out = 6; // na ostatni, bo i tak trzeba pominąć wartości } Parser.getTokens(6, false); Parser >> Global::fCalibrateOut[out][0] // wyraz wolny - >> Global::fCalibrateOut[out][1] // mno�nik liniowy - >> Global::fCalibrateOut[out][2] // mno�nik dla kwadratu - >> Global::fCalibrateOut[out][3] // mno�nik dla sze�cianu - >> Global::fCalibrateOut[out][4] // mno�nik dla 4 pot�gi - >> Global::fCalibrateOut[out][5]; // mno�nik dla 5 pot�gi + >> Global::fCalibrateOut[out][1] // mnożnik liniowy + >> Global::fCalibrateOut[out][2] // mnożnik dla kwadratu + >> Global::fCalibrateOut[out][3] // mnożnik dla sześcianu + >> Global::fCalibrateOut[out][4] // mnożnik dla 4 potęgi + >> Global::fCalibrateOut[out][5]; // mnożnik dla 5 potęgi } else if (token == "calibrateoutmaxvalues") { - // maksymalne warto�ci jakie mo�na wy�wietli� na mierniku + // maksymalne wartości jakie można wyświetlić na mierniku Parser.getTokens(7, false); Parser >> Global::fCalibrateOutMax[0] >> Global::fCalibrateOutMax[1] >> Global::fCalibrateOutMax[2] >> Global::fCalibrateOutMax[3] >> @@ -727,13 +728,13 @@ void Global::ConfigParse(cParser &Parser) } else if (token == "calibrateoutdebuginfo") { - // wyj�cie z info o przebiegu kalibracji + // wyjście z info o przebiegu kalibracji Parser.getTokens(1, false); Parser >> Global::iCalibrateOutDebugInfo; } else if (token == "pwm") { - // zmiana numer�w wyj�� PWM + // zmiana numerów wyjść PWM Parser.getTokens(2, false); int pwm_out, pwm_no; Parser >> pwm_out >> pwm_no; @@ -747,33 +748,33 @@ void Global::ConfigParse(cParser &Parser) } else if (token == "joinduplicatedevents") { - // czy grupowa� eventy o tych samych nazwach + // czy grupować eventy o tych samych nazwach Parser.getTokens(); Parser >> token; Global::bJoinEvents = (token == "yes"); } else if (token == "hiddenevents") { - // czy ��czy� eventy z torami poprzez nazw� toru + // czy łączyć eventy z torami poprzez nazwę toru Parser.getTokens(1, false); Parser >> Global::iHiddenEvents; } else if (token == "pause") { - // czy po wczytaniu ma by� pauza? + // czy po wczytaniu ma być pauza? Parser.getTokens(); Parser >> token; iPause |= (token == "yes" ? 1 : 0); } else if (token == "lang") { - // domy�lny j�zyk - http://tools.ietf.org/html/bcp47 + // domyślny język - http://tools.ietf.org/html/bcp47 Parser.getTokens(1, false); Parser >> Global::asLang; } else if (token == "opengl") { - // deklarowana wersja OpenGL, �eby powstrzyma� b��dy + // deklarowana wersja OpenGL, żeby powstrzymać błędy Parser.getTokens(1, false); Parser >> Global::fOpenGL; } @@ -794,7 +795,7 @@ void Global::ConfigParse(cParser &Parser) } // maciek001: ustawienia MWD else if (token == "mwddebug") - { // czy w��czy� obs�ug� hamulc�w + { // czy włączyć obslugę hamulców Parser.getTokens(); Parser >> token; bMWDdebugEnable = (token == "yes"); @@ -807,14 +808,14 @@ void Global::ConfigParse(cParser &Parser) WriteLog("PortName " + sMWDPortId); } else if (token == "mwdbaudrate") - { // pobierz pr�dko�� transmisji danych + { // pobierz prędkość transmisji danych Parser.getTokens(1, false); Parser >> iMWDBaudrate; if (bMWDdebugEnable) WriteLog("PortName " + to_string(iMWDBaudrate)); } else if (token == "mwdbreakenable") - { // czy w��czy� obs�ug� hamulc�w + { // czy włączyć obsługę hamulców Parser.getTokens(); Parser >> token; bMWDBreakEnable = (token == "yes"); @@ -825,18 +826,18 @@ void Global::ConfigParse(cParser &Parser) Parser >> token; bMWDInputDataEnable = (token == "yes"); } - else if (token == "mwdbreak") // warto�� max dla potencjometru hamulca zasadniczego + else if (token == "mwdbreak") // wartość max dla potencjometru hamulca zasadniczego { Parser.getTokens(); Parser >> token; - int i = stol_def(token, -1); // numer wej�cia + int i = stol_def(token, -1); // numer wejďż˝cia if ((i >= 0) || (i <= 1)) { Parser.getTokens(3, false); Parser >> fMWDAnalogCalib[i][0] // max -> 2^16 -1 >> fMWDAnalogCalib[i][1] // min -> 0 >> - fMWDAnalogCalib[i][2]; // rozdzielczo�� -> 255 maksymalna mo�liwa warto�� z ADC + fMWDAnalogCalib[i][2]; // rozdzielczość -> 255 maksymalna możliwa wartość z ADC if (bMWDdebugEnable) WriteLog("Break settings " + to_string(i) + ": " + to_string(fMWDAnalogCalib[i][0]) + " " + @@ -881,47 +882,47 @@ void Global::ConfigParse(cParser &Parser) WriteLog("Amp settings: " + to_string(fMWDamp[0]) + " " + to_string(fMWDamp[1])); } } while ((token != "") && (token != "endconfig")); //(!Parser->EndOfFile) - // na koniec troch� zale�no�ci - if (!bLoadTraction) // wczytywanie drut�w i s�up�w - { // tutaj wy��czenie, bo mog� nie by� zdefiniowane w INI - bEnableTraction = false; // false = pantograf si� nie po�amie - bLiveTraction = false; // false = pantografy zawsze zbieraj� 95% MaxVoltage + // na koniec trochę zależności + if (!bLoadTraction) // wczytywanie drutów i słupów + { // tutaj wyłączenie, bo mogą nie być zdefiniowane w INI + bEnableTraction = false; // false = pantograf się nie połamie + bLiveTraction = false; // false = pantografy zawsze zbierają 95% MaxVoltage } - // if (fMoveLight>0) bDoubleAmbient=false; //wtedy tylko jedno �wiat�o ruchome - // if (fOpenGL<1.3) iMultisampling=0; //mo�na by z g�ry wy��czy�, ale nie mamy jeszcze fOpenGL + // if (fMoveLight>0) bDoubleAmbient=false; //wtedy tylko jedno światło ruchome + // if (fOpenGL<1.3) iMultisampling=0; //można by z góry wyłączyć, ale nie mamy jeszcze fOpenGL if (iMultisampling) - { // antyaliasing ca�oekranowy wy��cza rozmywanie drut�w + { // antyaliasing całoekranowy wyłącza rozmywanie drutów bSmoothTraction = false; } if (iMultiplayer > 0) { - bInactivePause = false; // okno "w tle" nie mo�e pauzowa�, je�li w��czona komunikacja - // pauzowanie jest zablokowane dla (iMultiplayer&2)>0, wi�c iMultiplayer=1 da si� zapauzowa� + bInactivePause = false; // okno "w tle" nie może pauzować, jeśli włączona komunikacja + // pauzowanie jest zablokowane dla (iMultiplayer&2)>0, więc iMultiplayer=1 da się zapauzować // (tryb instruktora) } fFpsMin = fFpsAverage - - fFpsDeviation; // dolna granica FPS, przy kt�rej promie� scenerii b�dzie zmniejszany + fFpsDeviation; // dolna granica FPS, przy której promień scenerii będzie zmniejszany fFpsMax = fFpsAverage + - fFpsDeviation; // g�rna granica FPS, przy kt�rej promie� scenerii b�dzie zwi�kszany + fFpsDeviation; // górna granica FPS, przy której promień scenerii będzie zwiększany if (iPause) - iTextMode = VK_F1; // jak pauza, to pokaza� zegar + iTextMode = VK_F1; // jak pauza, to pokazać zegar /* this won't execute anymore with the old parser removed // TBD: remove, or launch depending on passed flag? if (qp) - { // to poni�ej wykonywane tylko raz, jedynie po wczytaniu eu07.ini + { // to poniżej wykonywane tylko raz, jedynie po wczytaniu eu07.ini Console::ModeSet(iFeedbackMode, iFeedbackPort); // tryb pracy konsoli sterowniczej iFpsRadiusMax = 0.000025 * fFpsRadiusMax * - fFpsRadiusMax; // maksymalny promie� renderowania 3000.0 -> 225 + fFpsRadiusMax; // maksymalny promień renderowania 3000.0 -> 225 if (iFpsRadiusMax > 400) iFpsRadiusMax = 400; if (fDistanceFactor > 1.0) { // dla 1.0 specjalny tryb bez przeliczania fDistanceFactor = iWindowHeight / - fDistanceFactor; // fDistanceFactor>1.0 dla rozdzielczo�ci wi�kszych ni� bazowa + fDistanceFactor; // fDistanceFactor>1.0 dla rozdzielczości większych niż bazowa fDistanceFactor *= (iMultisampling + 1.0) * - fDistanceFactor; // do kwadratu, bo wi�kszo�� odleg�o�ci to ich kwadraty + fDistanceFactor; // do kwadratu, bo większość odległości to ich kwadraty } } */ @@ -931,7 +932,7 @@ void Global::InitKeys(std::string asFileName) { // if (FileExists(asFileName)) // { - // Error("Chwilowo plik keys.ini nie jest obs�ugiwany. �aduj� standardowe + // Error("Chwilowo plik keys.ini nie jest obsługiwany. Ładuję standardowe // ustawienia.\nKeys.ini file is temporarily not functional, loading default keymap..."); /* TQueryParserComp *Parser; Parser=new TQueryParserComp(NULL); @@ -1064,7 +1065,7 @@ void Global::SetCameraPosition(vector3 pNewCameraPosition) } void Global::SetCameraRotation(double Yaw) -{ // ustawienie bezwzgl�dnego kierunku kamery z korekcj� do przedzia�u <-M_PI,M_PI> +{ // ustawienie bezwzględnego kierunku kamery z korekcją do przedziału <-M_PI,M_PI> pCameraRotation = Yaw; while (pCameraRotation < -M_PI) pCameraRotation += 2 * M_PI; @@ -1074,7 +1075,7 @@ void Global::SetCameraRotation(double Yaw) } void Global::BindTexture(GLuint t) -{ // ustawienie aktualnej tekstury, tylko gdy si� zmienia +{ // ustawienie aktualnej tekstury, tylko gdy się zmienia if (t != iTextureId) { iTextureId = t; @@ -1082,18 +1083,18 @@ void Global::BindTexture(GLuint t) }; void Global::TrainDelete(TDynamicObject *d) -{ // usuni�cie pojazdu prowadzonego przez u�ytkownika +{ // usunięcie pojazdu prowadzonego przez użytkownika if (pWorld) pWorld->TrainDelete(d); }; TDynamicObject *Global::DynamicNearest() -{ // ustalenie pojazdu najbli�szego kamerze +{ // ustalenie pojazdu najbliższego kamerze return pGround->DynamicNearest(pCamera->Pos); }; TDynamicObject *Global::CouplerNearest() -{ // ustalenie pojazdu najbli�szego kamerze +{ // ustalenie pojazdu najbliższego kamerze return pGround->CouplerNearest(pCamera->Pos); }; @@ -1104,7 +1105,7 @@ bool Global::AddToQuery(TEvent *event, TDynamicObject *who) //--------------------------------------------------------------------------- bool Global::DoEvents() -{ // wywo�ywa� czasem, �eby nie robi� wra�enia zawieszonego +{ // wywoływać czasem, żeby nie robił wrażenia zawieszonego MSG msg; while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { @@ -1119,146 +1120,146 @@ bool Global::DoEvents() TTranscripts::TTranscripts() { - iCount = 0; // brak linijek do wy�wietlenia - iStart = 0; // wype�nia� od linijki 0 + iCount = 0; // brak linijek do wyświetlenia + iStart = 0; // wypełniać od linijki 0 for (int i = 0; i < MAX_TRANSCRIPTS; ++i) - { // to do konstruktora mo�na by da� + { // to do konstruktora można by dać aLines[i].fHide = -1.0; // wolna pozycja (czas symulacji, 360.0 to doba) aLines[i].iNext = -1; // nie ma kolejnej } - fRefreshTime = 360.0; // warto�c zaporowa + fRefreshTime = 360.0; // wartośc zaporowa }; TTranscripts::~TTranscripts(){}; void TTranscripts::AddLine(char const *txt, float show, float hide, bool it) { // dodanie linii do tabeli, (show) i (hide) w [s] od aktualnego czasu if (show == hide) return; // komentarz jest ignorowany - show = Global::fTimeAngleDeg + show / 240.0; // je�li doba to 360, to 1s b�dzie r�wne 1/240 + show = Global::fTimeAngleDeg + show / 240.0; // jeśli doba to 360, to 1s będzie równe 1/240 hide = Global::fTimeAngleDeg + hide / 240.0; - int i = iStart, j, k; // od czego� trzeba zacz�� + int i = iStart, j, k; // od czegoś trzeba zacząć while ((aLines[i].iNext >= 0) ? (aLines[aLines[i].iNext].fShow <= show) : - false) // p�ki nie koniec i wcze�niej puszczane - i = aLines[i].iNext; // przej�cie do kolejnej linijki - //(i) wskazuje na lini�, po kt�rej nale�y wstawi� dany tekst, chyba �e + false) // póki nie koniec i wcześniej puszczane + i = aLines[i].iNext; // przejście do kolejnej linijki + //(i) wskazuje na linię, po której należy wstawić dany tekst, chyba że while (txt ? *txt : false) for (j = 0; j < MAX_TRANSCRIPTS; ++j) if (aLines[j].fHide < 0.0) { // znaleziony pierwszy wolny - aLines[j].iNext = aLines[i].iNext; // dotychczasowy nast�pny b�dzie za nowym - if (aLines[iStart].fHide < 0.0) // je�li tablica jest pusta - iStart = j; // fHide trzeba sprawdzi� przed ewentualnym nadpisaniem, gdy i=j=0 + aLines[j].iNext = aLines[i].iNext; // dotychczasowy następny będzie za nowym + if (aLines[iStart].fHide < 0.0) // jeśli tablica jest pusta + iStart = j; // fHide trzeba sprawdzić przed ewentualnym nadpisaniem, gdy i=j=0 else - aLines[i].iNext = j; // a nowy b�dzie za tamtym wcze�niejszym - aLines[j].fShow = show; // wy�wietla� od - aLines[j].fHide = hide; // wy�wietla� do + aLines[i].iNext = j; // a nowy będzie za tamtym wcześniejszym + aLines[j].fShow = show; // wyświetlać od + aLines[j].fHide = hide; // wyświetlać do aLines[j].bItalic = it; - aLines[j].asText = std::string(txt); // bez sensu, wystarczy�by wska�nik + aLines[j].asText = std::string(txt); // bez sensu, wystarczyłby wskaźnik if ((k = aLines[j].asText.find("|")) != std::string::npos) - { // jak jest podzia� linijki na wiersze + { // jak jest podział linijki na wiersze aLines[j].asText = aLines[j].asText.substr(0, k - 1); txt += k; - i = j; // kolejna linijka dopisywana b�dzie na koniec w�a�nie dodanej + i = j; // kolejna linijka dopisywana będzie na koniec właśnie dodanej } else txt = NULL; // koniec dodawania - if (fRefreshTime > show) // je�li od�wie�acz ustawiony jest na p��niej - fRefreshTime = show; // to od�wie�y� wcze�niej - break; // wi�cej ju� nic + if (fRefreshTime > show) // jeśli odświeżacz ustawiony jest na później + fRefreshTime = show; // to odświeżyć wcześniej + break; // więcej już nic } }; void TTranscripts::Add(char const *txt, float len, bool backgorund) -{ // dodanie tekst�w, d�ugo�� d�wi�ku, czy istotne +{ // dodanie tekstów, długość dźwięku, czy istotne if (!txt) return; // pusty tekst int i = 0, j = int(0.5 + 10.0 * len); //[0.1s] if (*txt == '[') - { // powinny by� dwa nawiasy + { // powinny być dwa nawiasy while (*++txt ? *txt != ']' : false) if ((*txt >= '0') && (*txt <= '9')) - i = 10 * i + int(*txt - '0'); // pierwsza liczba a� do ] + i = 10 * i + int(*txt - '0'); // pierwsza liczba aż do ] if (*txt ? *++txt == '[' : false) { - j = 0; // drugi nawias okre�la czas zako�czenia wy�wietlania + j = 0; // drugi nawias określa czas zakończenia wyświetlania while (*++txt ? *txt != ']' : false) if ((*txt >= '0') && (*txt <= '9')) - j = 10 * j + int(*txt - '0'); // druga liczba a� do ] + j = 10 * j + int(*txt - '0'); // druga liczba aż do ] if (*txt) - ++txt; // pomini�cie drugiego ] + ++txt; // pominięcie drugiego ] } } AddLine(txt, 0.1 * i, 0.1 * j, false); }; void TTranscripts::Update() -{ // usuwanie niepotrzebnych (nie cz��ciej ni� 10 razy na sekund�) +{ // usuwanie niepotrzebnych (nie częściej niż 10 razy na sekundę) if (fRefreshTime > Global::fTimeAngleDeg) return; // nie czas jeszcze na zmiany - // czas od�wie�enia mo�na ustali� wg tabelki, kiedy co� si� w niej zmienia - fRefreshTime = Global::fTimeAngleDeg + 360.0; // warto�� zaporowa - int i = iStart, j = -1; // od czego� trzeba zacz�� - bool change = false; // czy zmienia� napisy? + // czas odświeżenia można ustalić wg tabelki, kiedy coś się w niej zmienia + fRefreshTime = Global::fTimeAngleDeg + 360.0; // wartość zaporowa + int i = iStart, j = -1; // od czegoś trzeba zacząć + bool change = false; // czy zmieniać napisy? do { if (aLines[i].fHide >= 0.0) // o ile aktywne if (aLines[i].fHide < Global::fTimeAngleDeg) - { // gdy czas wy�wietlania up�yn�� - aLines[i].fHide = -1.0; // teraz b�dzie woln� pozycj� + { // gdy czas wyświetlania upłynął + aLines[i].fHide = -1.0; // teraz będzie wolną pozycją if (i == iStart) iStart = aLines[i].iNext >= 0 ? aLines[i].iNext : 0; // przestawienie pierwszego else if (j >= 0) - aLines[j].iNext = aLines[i].iNext; // usuni�cie ze �rodka + aLines[j].iNext = aLines[i].iNext; // usunięcie ze środka change = true; } else - { // gdy ma by� pokazane - if (aLines[i].fShow > Global::fTimeAngleDeg) // b�dzie pokazane w przysz�o�ci - if (fRefreshTime > aLines[i].fShow) // a nie ma nic wcze�niej + { // gdy ma być pokazane + if (aLines[i].fShow > Global::fTimeAngleDeg) // będzie pokazane w przyszłości + if (fRefreshTime > aLines[i].fShow) // a nie ma nic wcześniej fRefreshTime = aLines[i].fShow; if (fRefreshTime > aLines[i].fHide) fRefreshTime = aLines[i].fHide; } - // mo�na by jeszcze wykrywa�, kt�re nowe maj� by� pokazane + // można by jeszcze wykrywać, które nowe mają być pokazane j = i; i = aLines[i].iNext; // kolejna linijka - } while (i >= 0); // p�ki po tablicy - change = true; // bo na razie nie ma warunku, �e co� si� doda�o + } while (i >= 0); // póki po tablicy + change = true; // bo na razie nie ma warunku, że coś się dodało if (change) { // aktualizacja linijek ekranowych i = iStart; j = -1; do { - if (aLines[i].fHide > 0.0) // je�li nie ukryte - if (aLines[i].fShow < Global::fTimeAngleDeg) // to dodanie linijki do wy�wietlania + if (aLines[i].fHide > 0.0) // jeśli nie ukryte + if (aLines[i].fShow < Global::fTimeAngleDeg) // to dodanie linijki do wyświetlania if (j < 5 - 1) // ograniczona liczba linijek Global::asTranscript[++j] = aLines[i].asText; // skopiowanie tekstu i = aLines[i].iNext; // kolejna linijka - } while (i >= 0); // p�ki po tablicy + } while (i >= 0); // póki po tablicy for (++j; j < 5; ++j) - Global::asTranscript[j] = ""; // i czyszczenie nieu�ywanych linijek + Global::asTranscript[j] = ""; // i czyszczenie nieużywanych linijek } }; -// Ra: tymczasowe rozwi�zanie kwestii zagranicznych (czeskich) napis�w +// Ra: tymczasowe rozwiązanie kwestii zagranicznych (czeskich) napisów char bezogonkowo[] = "E?,?\"_++?%Sstzz" - "�^^L$A|S^CS<--RZo�,l'uP.,as>L\"lz" + " ^^L$A|S^CS<--RZo±,l'uP.,as>L\"lz" "RAAAALCCCEEEEIIDDNNOOOOxRUUUUYTB" "raaaalccceeeeiiddnnoooo-ruuuuyt?"; std::string Global::Bezogonkow(std::string str, bool _) -{ // wyci�cie liter z ogonkami, bo OpenGL nie umie wy�wietli� - for (unsigned int i = 1; i < str.length(); ++i) +{ // wycięcie liter z ogonkami, bo OpenGL nie umie wyświetlić + for (unsigned int i = 1; i <= str.length(); ++i) if (str[i] & 0x80) str[i] = bezogonkowo[str[i] & 0x7F]; - else if (str[i] < ' ') // znaki steruj�ce nie s� obs�ugiwane + else if (str[i] < ' ') // znaki sterujące nie są obsługiwane str[i] = ' '; else if (_) - if (str[i] == '_') // nazwy stacji nie mog� zawiera� spacji - str[i] = ' '; // wi�c trzeba wy�wietla� inaczej + if (str[i] == '_') // nazwy stacji nie mogą zawierać spacji + str[i] = ' '; // więc trzeba wyświetlać inaczej return str; }; double Global::Min0RSpeed(double vel1, double vel2) -{ // rozszerzenie funkcji Min0R o warto�ci -1.0 +{ // rozszerzenie funkcji Min0R o wartości -1.0 if (vel1 == -1.0) { vel1 = std::numeric_limits::max(); diff --git a/Globals.h b/Globals.h index 8c46d377..be2db597 100644 --- a/Globals.h +++ b/Globals.h @@ -110,7 +110,7 @@ const int k_Battery = 72; const int k_WalkMode = 73; const int MaxKeys = 74; -// klasy dla wska�nik�w globalnych +// klasy dla wskaźników globalnych class TGround; class TWorld; class TCamera; @@ -121,21 +121,21 @@ class TEvent; class TTextSound; class TTranscript -{ // klasa obs�uguj�ca linijk� napisu do d�wi�ku +{ // klasa obsługująca linijkę napisu do dźwięku public: float fShow; // czas pokazania - float fHide; // czas ukrycia/usuni�cia - std::string asText; // tekst gotowy do wy�wietlenia (usuni�te znaczniki czasu) - bool bItalic; // czy kursywa (d�wi�k nieistotny dla prowadz�cego) - int iNext; // nast�pna u�ywana linijka, �eby nie przestawia� fizycznie tabeli + float fHide; // czas ukrycia/usunięcia + std::string asText; // tekst gotowy do wyświetlenia (usunięte znaczniki czasu) + bool bItalic; // czy kursywa (dźwięk nieistotny dla prowadzącego) + int iNext; // następna używana linijka, żeby nie przestawiać fizycznie tabeli }; #define MAX_TRANSCRIPTS 30 class TTranscripts -{ // klasa obs�uguj�ca napisy do d�wi�k�w - TTranscript aLines[MAX_TRANSCRIPTS]; // pozycje na napisy do wy�wietlenia - int iCount; // liczba zaj�tych pozycji - int iStart; // pierwsza istotna pozycja w tabeli, �eby sortowa� przestawiaj�c numerki +{ // klasa obsługująca napisy do dźwięków + TTranscript aLines[MAX_TRANSCRIPTS]; // pozycje na napisy do wyświetlenia + int iCount; // liczba zajętych pozycji + int iStart; // pierwsza istotna pozycja w tabeli, żeby sortować przestawiając numerki float fRefreshTime; public: @@ -143,23 +143,23 @@ class TTranscripts ~TTranscripts(); void AddLine(char const *txt, float show, float hide, bool it); void Add(char const *txt, float len, - bool backgorund = false); // dodanie tekst�w, d�ugo�� d�wi�ku, czy istotne - void Update(); // usuwanie niepotrzebnych (ok. 10 razy na sekund�) + bool backgorund = false); // dodanie tekstów, długość dźwięku, czy istotne + void Update(); // usuwanie niepotrzebnych (ok. 10 razy na sekundę) }; class Global { private: - static GLuint iTextureId; // ostatnio u�yta tekstura 2D + static GLuint iTextureId; // ostatnio użyta tekstura 2D public: // double Global::tSinceStart; static int Keys[MaxKeys]; - static Math3D::vector3 pCameraPosition; // pozycja kamery w �wiecie + static Math3D::vector3 pCameraPosition; // pozycja kamery w świecie static double - pCameraRotation; // kierunek bezwzgl�dny kamery w �wiecie: 0=p��noc, 90�=zach�d (-azymut) + pCameraRotation; // kierunek bezwzględny kamery w świecie: 0=północ, 90°=zachód (-azymut) static double pCameraRotationDeg; // w stopniach, dla animacji billboard - static Math3D::vector3 pFreeCameraInit[ 10 ]; // pozycje kamery - static Math3D::vector3 pFreeCameraInitAngle[ 10 ]; + static Math3D::vector3 pFreeCameraInit[10]; // pozycje kamery + static Math3D::vector3 pFreeCameraInitAngle[10]; static int iWindowWidth; static int iWindowHeight; static float fDistanceFactor; @@ -227,81 +227,81 @@ class Global static std::string asSky; static bool bnewAirCouplers; // Ra: nowe zmienne globalne - static int iDefaultFiltering; // domy�lne rozmywanie tekstur TGA - static int iBallastFiltering; // domy�lne rozmywanie tekstury podsypki - static int iRailProFiltering; // domy�lne rozmywanie tekstury szyn - static int iDynamicFiltering; // domy�lne rozmywanie tekstur pojazd�w - static int iReCompile; // zwi�kszany, gdy trzeba od�wie�y� siatki + static int iDefaultFiltering; // domyślne rozmywanie tekstur TGA + static int iBallastFiltering; // domyślne rozmywanie tekstury podsypki + static int iRailProFiltering; // domyślne rozmywanie tekstury szyn + static int iDynamicFiltering; // domyślne rozmywanie tekstur pojazdów + static int iReCompile; // zwiększany, gdy trzeba odświeżyć siatki static bool bUseVBO; // czy jest VBO w karcie graficznej static int iFeedbackMode; // tryb pracy informacji zwrotnej static int iFeedbackPort; // dodatkowy adres dla informacji zwrotnych - static double fOpenGL; // wersja OpenGL - przyda si� - static bool bOpenGL_1_5; // czy s� dost�pne funkcje OpenGL 1.5 - static double fLuminance; // jasno�� �wiat�a do automatycznego zapalania - static int iMultiplayer; // blokada dzia�ania niekt�rych event�w na rzecz kominikacji + static double fOpenGL; // wersja OpenGL - przyda się + static bool bOpenGL_1_5; // czy są dostępne funkcje OpenGL 1.5 + static double fLuminance; // jasność światła do automatycznego zapalania + static int iMultiplayer; // blokada działania niektórych eventów na rzecz kominikacji static HWND hWnd; // uchwyt okna static int iCameraLast; static std::string asRelease; // numer static std::string asVersion; // z opisem static int - iViewMode; // co aktualnie wida�: 0-kabina, 1-latanie, 2-sprz�gi, 3-dokumenty, 4-obwody + iViewMode; // co aktualnie widać: 0-kabina, 1-latanie, 2-sprzęgi, 3-dokumenty, 4-obwody static GLint iMaxTextureSize; // maksymalny rozmiar tekstury - static int iTextMode; // tryb pracy wy�wietlacza tekstowego - static int iScreenMode[12]; // numer ekranu wy�wietlacza tekstowego - static bool bDoubleAmbient; // podw�jna jasno�� ambient + static int iTextMode; // tryb pracy wyświetlacza tekstowego + static int iScreenMode[12]; // numer ekranu wyświetlacza tekstowego + static bool bDoubleAmbient; // podwójna jasność ambient static double fMoveLight; // numer dnia w roku albo -1 - static bool bSmoothTraction; // wyg�adzanie drut�w - static double fSunDeclination; // deklinacja S�o�ca - static double fTimeSpeed; // przyspieszenie czasu, zmienna do test�w - static double fTimeAngleDeg; // godzina w postaci k�ta - static float fClockAngleDeg[6]; // k�ty obrotu cylindr�w dla zegara cyfrowego - static double fLatitudeDeg; // szeroko�� geograficzna + static bool bSmoothTraction; // wygładzanie drutów + static double fSunDeclination; // deklinacja Słońca + static double fTimeSpeed; // przyspieszenie czasu, zmienna do testów + static double fTimeAngleDeg; // godzina w postaci kąta + static float fClockAngleDeg[6]; // kąty obrotu cylindrów dla zegara cyfrowego + static double fLatitudeDeg; // szerokość geograficzna static char *szTexturesTGA[4]; // lista tekstur od TGA static char *szTexturesDDS[4]; // lista tekstur od DDS static int iMultisampling; // tryb antyaliasingu: 0=brak,1=2px,2=4px,3=8px,4=16px static bool bGlutFont; // tekst generowany przez GLUT - static int iKeyLast; // ostatnio naci�ni�ty klawisz w celu logowania - static int iPause; // globalna pauza ruchu: b0=start,b1=klawisz,b2=t�o,b3=lagi,b4=wczytywanie + static int iKeyLast; // ostatnio naciśnięty klawisz w celu logowania + static int iPause; // globalna pauza ruchu: b0=start,b1=klawisz,b2=tło,b3=lagi,b4=wczytywanie static bool bActive; // czy jest aktywnym oknem static void BindTexture(GLuint t); - static int iConvertModels; // tworzenie plik�w binarnych - static int iErorrCounter; // licznik sprawdza� do �ledzenia b��d�w OpenGL + static int iConvertModels; // tworzenie plików binarnych + static int iErorrCounter; // licznik sprawdzań do śledzenia błędów OpenGL static bool bInactivePause; // automatyczna pauza, gdy okno nieaktywne - static int iTextures; // licznik u�ytych tekstur - static int iSlowMotionMask; // maska wy��czanych w�a�ciwo�ci - static int iModifyTGA; // czy korygowa� pliki TGA dla szybszego wczytywania + static int iTextures; // licznik użytych tekstur + static int iSlowMotionMask; // maska wyłączanych właściwości + static int iModifyTGA; // czy korygować pliki TGA dla szybszego wczytywania static bool bHideConsole; // hunter-271211: ukrywanie konsoli - static bool bOldSmudge; // U�ywanie starej smugi + static bool bOldSmudge; // Używanie starej smugi - static TWorld *pWorld; // wska�nik na �wiat do usuwania pojazd�w + static TWorld *pWorld; // wskaźnik na świat do usuwania pojazdów static TAnimModel *pTerrainCompact; // obiekt terenu do ewentualnego zapisania w pliku static std::string asTerrainModel; // nazwa obiektu terenu do zapisania w pliku - static bool bRollFix; // czy wykona� przeliczanie przechy�ki + static bool bRollFix; // czy wykonać przeliczanie przechyłki static cParser *pParser; - static int iSegmentsRendered; // ilo�� segment�w do regulacji wydajno�ci - static double fFpsAverage; // oczekiwana wartos� FPS + static int iSegmentsRendered; // ilość segmentów do regulacji wydajności + static double fFpsAverage; // oczekiwana wartosć FPS static double fFpsDeviation; // odchylenie standardowe FPS - static double fFpsMin; // dolna granica FPS, przy kt�rej promie� scenerii b�dzie zmniejszany - static double fFpsMax; // g�rna granica FPS, przy kt�rej promie� scenerii b�dzie zwi�kszany - static double fFpsRadiusMax; // maksymalny promie� renderowania - static int iFpsRadiusMax; // maksymalny promie� renderowania w rozmiarze tabeli sektor�w - static double fRadiusFactor; // wsp��czynnik zmiany promienia + static double fFpsMin; // dolna granica FPS, przy której promień scenerii będzie zmniejszany + static double fFpsMax; // górna granica FPS, przy której promień scenerii będzie zwiększany + static double fFpsRadiusMax; // maksymalny promień renderowania + static int iFpsRadiusMax; // maksymalny promień renderowania w rozmiarze tabeli sektorów + static double fRadiusFactor; // współczynnik zmiany promienia static TCamera *pCamera; // parametry kamery - static TDynamicObject *pUserDynamic; // pojazd u�ytkownika, renderowany bez trz�sienia - static double fCalibrateIn[6][6]; // parametry kalibracyjne wej�� z pulpitu - static double fCalibrateOut[7][6]; // parametry kalibracyjne wyj�� dla pulpitu - static double fCalibrateOutMax[7]; // warto�ci maksymalne wyj�� dla pulpitu - static int iCalibrateOutDebugInfo; // numer wyj�cia kalibrowanego dla kt�rego wy�wietla� + static TDynamicObject *pUserDynamic; // pojazd użytkownika, renderowany bez trzęsienia + static double fCalibrateIn[6][6]; // parametry kalibracyjne wejść z pulpitu + static double fCalibrateOut[7][6]; // parametry kalibracyjne wyjść dla pulpitu + static double fCalibrateOutMax[7]; // wartości maksymalne wyjść dla pulpitu + static int iCalibrateOutDebugInfo; // numer wyjścia kalibrowanego dla którego wyświetlać // informacje podczas kalibracji static double fBrakeStep; // krok zmiany hamulca dla klawiszy [Num3] i [Num9] - static bool bJoinEvents; // czy grupowa� eventy o tych samych nazwach - static bool bSmudge; // czy wy�wietla� smug�, a pojazd u�ytkownika na ko�cu + static bool bJoinEvents; // czy grupować eventy o tych samych nazwach + static bool bSmudge; // czy wyświetlać smugę, a pojazd użytkownika na końcu static std::string asTranscript[5]; // napisy na ekranie (widoczne) - static TTranscripts tranTexts; // obiekt obs�uguj�cy stenogramy d�wi�k�w na ekranie - static std::string asLang; // domy�lny j�zyk - http://tools.ietf.org/html/bcp47 - static int iHiddenEvents; // czy ��czy� eventy z torami poprzez nazw� toru - static TTextSound *tsRadioBusy[10]; // zaj�to�� kana��w radiowych (wska�nik na odgrywany d�wi�k) - static int iPoKeysPWM[7]; // numery wej�� dla PWM + static TTranscripts tranTexts; // obiekt obsługujący stenogramy dźwięków na ekranie + static std::string asLang; // domyślny język - http://tools.ietf.org/html/bcp47 + static int iHiddenEvents; // czy łączyć eventy z torami poprzez nazwę toru + static TTextSound *tsRadioBusy[10]; // zajętość kanałów radiowych (wskaźnik na odgrywany dźwięk) + static int iPoKeysPWM[7]; // numery wejść dla PWM // metody static void TrainDelete(TDynamicObject *d); diff --git a/Ground.cpp b/Ground.cpp index 66a9bfd7..63a81db9 100644 --- a/Ground.cpp +++ b/Ground.cpp @@ -48,16 +48,16 @@ bool bCondition; // McZapkie: do testowania warunku na event multiple string LogComment; //--------------------------------------------------------------------------- -// Obiekt renderujcy siatk jest sztucznie tworzonym obiektem pomocniczym, -// grupujcym siatki obiektw dla danej tekstury. Obiektami skadowymi mog -// byc trjkty terenu, szyny, podsypki, a take proste modele np. supy. -// Obiekty skadowe dodane s do listy TSubRect::nMeshed z list zrobion na -// TGroundNode::nNext3, gdzie s posortowane wg tekstury. Obiekty renderujce -// s wpisane na list TSubRect::nRootMesh (TGroundNode::nNext2) oraz na -// odpowiednie listy renderowania, gdzie zastpuj obiekty skadowe (nNext3). -// Problematyczne s tory/drogi/rzeki, gdzie uywane sa 2 tekstury. Dlatego -// tory s zdublowane jako TP_TRACK oraz TP_DUMMYTRACK. Jeli tekstura jest -// tylko jedna (np. zwrotnice), nie jest uywany TP_DUMMYTRACK. +// Obiekt renderujący siatkę jest sztucznie tworzonym obiektem pomocniczym, +// grupującym siatki obiektów dla danej tekstury. Obiektami składowymi mogą +// byc trójkąty terenu, szyny, podsypki, a także proste modele np. słupy. +// Obiekty składowe dodane są do listy TSubRect::nMeshed z listą zrobioną na +// TGroundNode::nNext3, gdzie są posortowane wg tekstury. Obiekty renderujące +// są wpisane na listę TSubRect::nRootMesh (TGroundNode::nNext2) oraz na +// odpowiednie listy renderowania, gdzie zastępują obiekty składowe (nNext3). +// Problematyczne są tory/drogi/rzeki, gdzie używane sa 2 tekstury. Dlatego +// tory są zdublowane jako TP_TRACK oraz TP_DUMMYTRACK. Jeśli tekstura jest +// tylko jedna (np. zwrotnice), nie jest używany TP_DUMMYTRACK. //--------------------------------------------------------------------------- TGroundNode::TGroundNode() { // nowy obiekt terenu - pusty @@ -65,18 +65,18 @@ TGroundNode::TGroundNode() Vertices = NULL; nNext = nNext2 = NULL; pCenter = vector3(0, 0, 0); - iCount = 0; // wierzchokw w trjkcie - // iNumPts=0; //punktw w linii + iCount = 0; // wierzchołków w trójkącie + // iNumPts=0; //punktów w linii TextureID = 0; - iFlags = 0; // tryb przezroczystoci nie zbadany + iFlags = 0; // tryb przezroczystości nie zbadany DisplayListID = 0; - Pointer = NULL; // zerowanie wskanika kontekstowego + Pointer = NULL; // zerowanie wskaźnika kontekstowego bVisible = false; // czy widoczny fSquareRadius = 10000 * 10000; fSquareMinRadius = 0; asName = ""; // Color= TMaterialColor(1); - // fAngle=0; //obrt dla modelu + // fAngle=0; //obrót dla modelu // fLineThickness=1.0; //mm dla linii for (int i = 0; i < 3; i++) { @@ -84,14 +84,14 @@ TGroundNode::TGroundNode() Diffuse[i] = Global::whiteLight[i] * 255; Specular[i] = Global::noLight[i] * 255; } - nNext3 = NULL; // nie wywietla innych - iVboPtr = -1; // indeks w VBO sektora (-1: nie uywa VBO) + nNext3 = NULL; // nie wyświetla innych + iVboPtr = -1; // indeks w VBO sektora (-1: nie używa VBO) iVersion = 0; // wersja siatki } TGroundNode::~TGroundNode() { - // if (iFlags&0x200) //czy obiekt zosta utworzony? + // if (iFlags&0x200) //czy obiekt został utworzony? switch (iType) { case TP_MEMCELL: @@ -113,18 +113,18 @@ TGroundNode::~TGroundNode() SafeDelete(DynamicObject); break; case TP_MODEL: - if (iFlags & 0x200) // czy model zosta utworzony? + if (iFlags & 0x200) // czy model został utworzony? delete Model; Model = NULL; break; case TP_TERRAIN: - { // pierwsze nNode zawiera model E3D, reszta to trjkty + { // pierwsze nNode zawiera model E3D, reszta to trójkąty for (int i = 1; i < iCount; ++i) nNode->Vertices = - NULL; // zerowanie wskanikw w kolejnych elementach, bo nie s do usuwania - delete[] nNode; // usunicie tablicy i pierwszego elementu + NULL; // zerowanie wskaźników w kolejnych elementach, bo nie są do usuwania + delete[] nNode; // usunięcie tablicy i pierwszego elementu } - case TP_SUBMODEL: // dla formalnoci, nie wymaga usuwania + case TP_SUBMODEL: // dla formalności, nie wymaga usuwania break; case GL_LINES: case GL_LINE_STRIP: @@ -140,7 +140,7 @@ TGroundNode::~TGroundNode() } void TGroundNode::Init(int n) -{ // utworzenie tablicy wierzchokw +{ // utworzenie tablicy wierzchołków bVisible = false; iNumVerts = n; Vertices = new TGroundVertex[iNumVerts]; @@ -148,13 +148,13 @@ void TGroundNode::Init(int n) TGroundNode::TGroundNode(TGroundNodeType t, int n) { // utworzenie obiektu - TGroundNode(); // domylne ustawienia + TGroundNode(); // domyślne ustawienia iNumVerts = n; if (iNumVerts) Vertices = new TGroundVertex[iNumVerts]; iType = t; switch (iType) - { // zalenie od typu + { // zależnie od typu case TP_TRACK: pTrack = new TTrack(this); break; @@ -162,14 +162,14 @@ TGroundNode::TGroundNode(TGroundNodeType t, int n) } void TGroundNode::InitCenter() -{ // obliczenie rodka cikoci obiektu +{ // obliczenie środka ciężkości obiektu for (int i = 0; i < iNumVerts; i++) pCenter += Vertices[i].Point; pCenter /= iNumVerts; } void TGroundNode::InitNormals() -{ // obliczenie wektorw normalnych +{ // obliczenie wektorów normalnych vector3 v1, v2, v3, v4, v5, n1, n2, n3, n4; int i; float tu, tv; @@ -234,7 +234,7 @@ void TGroundNode::InitNormals() } void TGroundNode::MoveMe(vector3 pPosition) -{ // przesuwanie obiektw scenerii o wektor w celu redukcji trzsienia +{ // przesuwanie obiektów scenerii o wektor w celu redukcji trzęsienia pCenter += pPosition; switch (iType) { @@ -274,8 +274,8 @@ void TGroundNode::RaRenderVBO() { // renderowanie z domyslnego bufora VBO glColor3ub(Diffuse[0], Diffuse[1], Diffuse[2]); if (TextureID) - glBindTexture(GL_TEXTURE_2D, TextureID); // Ustaw aktywn tekstur - glDrawArrays(iType, iVboPtr, iNumVerts); // Narysuj naraz wszystkie trjkty + glBindTexture(GL_TEXTURE_2D, TextureID); // Ustaw aktywną teksturę + glDrawArrays(iType, iVboPtr, iNumVerts); // Narysuj naraz wszystkie trójkąty } void TGroundNode::RenderVBO() @@ -303,7 +303,7 @@ void TGroundNode::RenderVBO() // pStaticSound->Play(1,DSBPLAY_LOOPING,true,pStaticSound->vSoundPosition); // pStaticSound->AdjFreq(1.0,Timer::GetDeltaTime()); // } - // return; //Ra: TODO sprawdzi, czy dwiki nie s tylko w RenderHidden + // return; //Ra: TODO sprawdzić, czy dźwięki nie są tylko w RenderHidden case TP_MEMCELL: return; case TP_EVLAUNCH: @@ -329,7 +329,7 @@ void TGroundNode::RenderVBO() g = floor(Diffuse[1] * Global::ambientDayLight[1]); b = floor(Diffuse[2] * Global::ambientDayLight[2]); glColor4ub(r, g, b, linealpha); // przezroczystosc dalekiej linii - // glDisable(GL_LIGHTING); //nie powinny wieci + // glDisable(GL_LIGHTING); //nie powinny świecić glDrawArrays(iType, iVboPtr, iNumPts); // rysowanie linii // glEnable(GL_LIGHTING); } @@ -354,7 +354,7 @@ void TGroundNode::RenderAlphaVBO() if ((PROBLEND)) // sprawdza, czy w nazwie nie ma @ //Q: 13122011 - Szociu: 27012012 { glDisable(GL_BLEND); - glAlphaFunc(GL_GREATER, 0.45); // im mniejsza warto, tym wiksza ramka, domylnie 0.1f + glAlphaFunc(GL_GREATER, 0.45); // im mniejsza wartość, tym większa ramka, domyślnie 0.1f }; #endif switch (iType) @@ -390,7 +390,7 @@ void TGroundNode::RenderAlphaVBO() g = Diffuse[1] * Global::ambientDayLight[1]; b = Diffuse[2] * Global::ambientDayLight[2]; glColor4ub(r, g, b, linealpha); // przezroczystosc dalekiej linii - // glDisable(GL_LIGHTING); //nie powinny wieci + // glDisable(GL_LIGHTING); //nie powinny świecić glDrawArrays(iType, iVboPtr, iNumPts); // rysowanie linii // glEnable(GL_LIGHTING); #ifdef _PROBLEND @@ -426,9 +426,9 @@ void TGroundNode::RenderAlphaVBO() } void TGroundNode::Compile(bool many) -{ // tworzenie skompilowanej listy w wywietlaniu DL +{ // tworzenie skompilowanej listy w wyświetlaniu DL if (!many) - { // obsuga pojedynczej listy + { // obsługa pojedynczej listy if (DisplayListID) Release(); if (Global::bManageNodes) @@ -454,10 +454,10 @@ void TGroundNode::Compile(bool many) #endif } else if (iType == GL_TRIANGLE_STRIP || iType == GL_TRIANGLE_FAN || iType == GL_TRIANGLES) - { // jak nie linie, to trjkty + { // jak nie linie, to trójkąty TGroundNode *tri = this; do - { // ptla po obiektach w grupie w celu poczenia siatek + { // pętla po obiektach w grupie w celu połączenia siatek #ifdef USE_VERTEX_ARRAYS glVertexPointer(3, GL_DOUBLE, sizeof(TGroundVertex), &tri->Vertices[0].Point.x); glNormalPointer(GL_DOUBLE, sizeof(TGroundVertex), &tri->Vertices[0].Normal.x); @@ -479,9 +479,9 @@ void TGroundNode::Compile(bool many) glEnd(); #endif /* - if (tri->pTriGroup) //jeli z grupy - {tri=tri->pNext2; //nastpny w sektorze - while (tri?!tri->pTriGroup:false) tri=tri->pNext2; //szukamy kolejnego nalecego do + if (tri->pTriGroup) //jeśli z grupy + {tri=tri->pNext2; //następny w sektorze + while (tri?!tri->pTriGroup:false) tri=tri->pNext2; //szukamy kolejnego należącego do grupy } else @@ -490,20 +490,20 @@ void TGroundNode::Compile(bool many) } while (tri); } else if (iType == TP_MESH) - { // grupa ze wspln tekstur - wrzucanie do wsplnego Display List + { // grupa ze wspólną teksturą - wrzucanie do wspólnego Display List if (TextureID) - glBindTexture(GL_TEXTURE_2D, TextureID); // Ustaw aktywn tekstur + glBindTexture(GL_TEXTURE_2D, TextureID); // Ustaw aktywną teksturę TGroundNode *n = nNode; while (n ? n->TextureID == TextureID : false) { // wszystkie obiekty o tej samej testurze switch (n->iType) - { // poszczeglne typy rnie si tworzy + { // poszczególne typy różnie się tworzy case TP_TRACK: case TP_DUMMYTRACK: - n->pTrack->Compile(TextureID); // dodanie trjktw dla podanej tekstury + n->pTrack->Compile(TextureID); // dodanie trójkątów dla podanej tekstury break; } - n = n->nNext3; // nastpny z listy + n = n->nNext3; // następny z listy } } if (!many) @@ -519,7 +519,7 @@ void TGroundNode::Release() }; void TGroundNode::RenderHidden() -{ // renderowanie obiektw niewidocznych +{ // renderowanie obiektów niewidocznych double mgn = SquareMagnitude(pCenter - Global::pCameraPosition); switch (iType) { @@ -545,14 +545,14 @@ void TGroundNode::RenderHidden() }; void TGroundNode::RenderDL() -{ // wywietlanie obiektu przez Display List +{ // wyświetlanie obiektu przez Display List switch (iType) - { // obiekty renderowane niezalenie od odlegoci + { // obiekty renderowane niezależnie od odległości case TP_SUBMODEL: TSubModel::fSquareDist = 0; return smTerrain->RenderDL(); } - // if (pTriGroup) if (pTriGroup!=this) return; //wywietla go inny obiekt + // if (pTriGroup) if (pTriGroup!=this) return; //wyświetla go inny obiekt double mgn = SquareMagnitude(pCenter - Global::pCameraPosition); if ((mgn > fSquareRadius) || (mgn < fSquareMinRadius)) // McZapkie-070602: nie rysuj odleglych // obiektow ale sprawdzaj wyzwalacz @@ -579,14 +579,14 @@ void TGroundNode::RenderDL() if ((iType == GL_LINES) || (iType == GL_LINE_STRIP) || (iType == GL_LINE_LOOP)) // if (iNumPts) - { // wszelkie linie s rysowane na samym kocu + { // wszelkie linie są rysowane na samym końcu float r, g, b; r = Diffuse[0] * Global::ambientDayLight[0]; // w zaleznosci od koloru swiatla g = Diffuse[1] * Global::ambientDayLight[1]; b = Diffuse[2] * Global::ambientDayLight[2]; glColor4ub(r, g, b, 1.0); glCallList(DisplayListID); - // glColor4fv(Diffuse); //przywrcenie koloru + // glColor4fv(Diffuse); //przywrócenie koloru // glColor3ub(Diffuse[0],Diffuse[1],Diffuse[2]); } // GL_TRIANGLE etc @@ -612,7 +612,7 @@ void TGroundNode::RenderAlphaDL() // wlasciwie dla kazdego node'a // i jezeli tak to odpowiedni GL_GREATER w przeciwnym wypadku standardowy 0.04 - // if (pTriGroup) if (pTriGroup!=this) return; //wywietla go inny obiekt + // if (pTriGroup) if (pTriGroup!=this) return; //wyświetla go inny obiekt double mgn = SquareMagnitude(pCenter - Global::pCameraPosition); float r, g, b; if (mgn < fSquareMinRadius) @@ -641,7 +641,7 @@ void TGroundNode::RenderAlphaDL() if ((PROBLEND)) // sprawdza, czy w nazwie nie ma @ //Q: 13122011 - Szociu: 27012012 { glDisable(GL_BLEND); - glAlphaFunc(GL_GREATER, 0.45); // im mniejsza warto, tym wiksza ramka, domylnie 0.1f + glAlphaFunc(GL_GREATER, 0.45); // im mniejsza wartość, tym większa ramka, domyślnie 0.1f }; #endif if (!DisplayListID) //||Global::bReCompile) //Ra: wymuszenie rekompilacji @@ -683,60 +683,60 @@ void TGroundNode::RenderAlphaDL() //------------------------------------------------------------------------------ TSubRect::TSubRect() { - nRootNode = NULL; // lista wszystkich obiektw jest pusta + nRootNode = NULL; // lista wszystkich obiektów jest pusta nRenderHidden = nRenderRect = nRenderRectAlpha = nRender = nRenderMixed = nRenderAlpha = nRenderWires = NULL; tTrackAnim = NULL; // nic nie animujemy - tTracks = NULL; // nie ma jeszcze torw - nRootMesh = nMeshed = NULL; // te listy te s puste - iNodeCount = 0; // licznik obiektw - iTracks = 0; // licznik torw + tTracks = NULL; // nie ma jeszcze torów + nRootMesh = nMeshed = NULL; // te listy też są puste + iNodeCount = 0; // licznik obiektów + iTracks = 0; // licznik torów } TSubRect::~TSubRect() { - if (Global::bManageNodes) // Ra: tu si co sypie - ResourceManager::Unregister(this); // wyrejestrowanie ze sprztacza - // TODO: usun obiekty z listy (nRootMesh), bo s one tworzone dla sektora + if (Global::bManageNodes) // Ra: tu się coś sypie + ResourceManager::Unregister(this); // wyrejestrowanie ze sprzątacza + // TODO: usunąć obiekty z listy (nRootMesh), bo są one tworzone dla sektora } void TSubRect::NodeAdd(TGroundNode *Node) -{ // przyczepienie obiektu do sektora, wstpna kwalifikacja na listy renderowania +{ // przyczepienie obiektu do sektora, wstępna kwalifikacja na listy renderowania if (!this) - return; // zabezpiecznie przed obiektami przekraczajcymi obszar roboczy - // Ra: sortowanie obiektw na listy renderowania: - // nRenderHidden - lista obiektw niewidocznych, "renderowanych" rwnie z tyu + return; // zabezpiecznie przed obiektami przekraczającymi obszar roboczy + // Ra: sortowanie obiektów na listy renderowania: + // nRenderHidden - lista obiektów niewidocznych, "renderowanych" również z tyłu // nRenderRect - lista grup renderowanych z sektora - // nRenderRectAlpha - lista grup renderowanych z sektora z przezroczystoci - // nRender - lista grup renderowanych z wasnych VBO albo DL - // nRenderAlpha - lista grup renderowanych z wasnych VBO albo DL z przezroczystoci - // nRenderWires - lista grup renderowanych z wasnych VBO albo DL - druty i linie + // nRenderRectAlpha - lista grup renderowanych z sektora z przezroczystością + // nRender - lista grup renderowanych z własnych VBO albo DL + // nRenderAlpha - lista grup renderowanych z własnych VBO albo DL z przezroczystością + // nRenderWires - lista grup renderowanych z własnych VBO albo DL - druty i linie // nMeshed - obiekty do pogrupowania wg tekstur GLuint t; // pomocniczy kod tekstury switch (Node->iType) { - case TP_SOUND: // te obiekty s sprawdzanie niezalenie od kierunku patrzenia + case TP_SOUND: // te obiekty są sprawdzanie niezależnie od kierunku patrzenia case TP_EVLAUNCH: Node->nNext3 = nRenderHidden; nRenderHidden = Node; // do listy koniecznych break; - case TP_TRACK: // TODO: tory z cieniem (tunel, canyon) te da bez czenia? - ++iTracks; // jeden tor wicej - Node->pTrack->RaOwnerSet(this); // do ktrego sektora ma zgasza animacj + case TP_TRACK: // TODO: tory z cieniem (tunel, canyon) też dać bez łączenia? + ++iTracks; // jeden tor więcej + Node->pTrack->RaOwnerSet(this); // do którego sektora ma zgłaszać animację // if (Global::bUseVBO?false:!Node->pTrack->IsGroupable()) if (Global::bUseVBO ? true : - !Node->pTrack->IsGroupable()) // TODO: tymczasowo dla VBO wyczone + !Node->pTrack->IsGroupable()) // TODO: tymczasowo dla VBO wyłączone RaNodeAdd( - Node); // tory ruchome nie s grupowane przy Display Lists (wymagaj odwieania DL) + Node); // tory ruchome nie są grupowane przy Display Lists (wymagają odświeżania DL) else - { // tory nieruchome mog by pogrupowane wg tekstury, przy VBO wszystkie + { // tory nieruchome mogą być pogrupowane wg tekstury, przy VBO wszystkie Node->TextureID = Node->pTrack->TextureGet(0); // pobranie tekstury do sortowania t = Node->pTrack->TextureGet(1); - if (Node->TextureID) // jeeli jest pierwsza + if (Node->TextureID) // jeżeli jest pierwsza { if (t && (Node->TextureID != t)) - { // jeli s dwie rne tekstury, dodajemy drugi obiekt dla danego toru + { // jeśli są dwie różne tekstury, dodajemy drugi obiekt dla danego toru TGroundNode *n = new TGroundNode(); - n->iType = TP_DUMMYTRACK; // obiekt renderujcy siatki dla tekstury + n->iType = TP_DUMMYTRACK; // obiekt renderujący siatki dla tekstury n->TextureID = t; n->pTrack = Node->pTrack; // wskazuje na ten sam tor n->pCenter = Node->pCenter; @@ -744,7 +744,7 @@ void TSubRect::NodeAdd(TGroundNode *Node) n->fSquareMinRadius = Node->fSquareMinRadius; n->iFlags = Node->iFlags; n->nNext2 = nRootMesh; - nRootMesh = n; // podczepienie do listy, eby usun na kocu + nRootMesh = n; // podczepienie do listy, żeby usunąć na końcu n->nNext3 = nMeshed; nMeshed = n; } @@ -778,43 +778,43 @@ void TSubRect::NodeAdd(TGroundNode *Node) nRender = Node; } // DL: do nieprzezroczystych wszelakich /* - //Ra: na razie wyczone do testw VBO + //Ra: na razie wyłączone do testów VBO //if ((Node->iType==GL_TRIANGLE_STRIP)||(Node->iType==GL_TRIANGLE_FAN)||(Node->iType==GL_TRIANGLES)) - if (Node->fSquareMinRadius==0.0) //znikajce z bliska nie mog by optymalizowane - if (Node->fSquareRadius>=160000.0) //tak od 400m to ju normalne trjkty musz by + if (Node->fSquareMinRadius==0.0) //znikające z bliska nie mogą być optymalizowane + if (Node->fSquareRadius>=160000.0) //tak od 400m to już normalne trójkąty muszą być //if (Node->iFlags&0x10) //i nieprzezroczysty - {if (pTriGroup) //jeeli by ju jaki grupujcy - {if (pTriGroup->fSquareRadius>Node->fSquareRadius) //i mia wikszy zasig - Node->fSquareRadius=pTriGroup->fSquareRadius; //zwikszenie zakresu widocznoci - grupujcego + {if (pTriGroup) //jeżeli był już jakiś grupujący + {if (pTriGroup->fSquareRadius>Node->fSquareRadius) //i miał większy zasięg + Node->fSquareRadius=pTriGroup->fSquareRadius; //zwiększenie zakresu widoczności + grupującego pTriGroup->pTriGroup=Node; //poprzedniemu doczepiamy nowy } - Node->pTriGroup=Node; //nowy lider ma si sam wywietla - wskanik na siebie - pTriGroup=Node; //zapamitanie lidera + Node->pTriGroup=Node; //nowy lider ma się sam wyświetlać - wskaźnik na siebie + pTriGroup=Node; //zapamiętanie lidera } */ break; case TP_TRACTION: case GL_LINES: case GL_LINE_STRIP: - case GL_LINE_LOOP: // te renderowane na kocu, eby nie apay koloru nieba + case GL_LINE_LOOP: // te renderowane na końcu, żeby nie łapały koloru nieba Node->nNext3 = nRenderWires; - nRenderWires = Node; // lista drutw + nRenderWires = Node; // lista drutów break; - case TP_MODEL: // modele zawsze wywietlane z wasnego VBO - // jeli model jest prosty, mona prbowa zrobi wspln siatk (supy) - if ((Node->iFlags & 0x20200020) == 0) // czy brak przezroczystoci? + case TP_MODEL: // modele zawsze wyświetlane z własnego VBO + // jeśli model jest prosty, można próbować zrobić wspólną siatkę (słupy) + if ((Node->iFlags & 0x20200020) == 0) // czy brak przezroczystości? { Node->nNext3 = nRender; nRender = Node; } // do nieprzezroczystych - else if ((Node->iFlags & 0x10100010) == 0) // czy brak nieprzezroczystoci? + else if ((Node->iFlags & 0x10100010) == 0) // czy brak nieprzezroczystości? { Node->nNext3 = nRenderAlpha; nRenderAlpha = Node; } // do przezroczystych - else // jak i take i takie, to bdzie dwa razy renderowane... + else // jak i take i takie, to będzie dwa razy renderowane... { Node->nNext3 = nRenderMixed; nRenderMixed = Node; @@ -823,19 +823,19 @@ void TSubRect::NodeAdd(TGroundNode *Node) // nMeshed=Node; break; case TP_MEMCELL: - case TP_TRACTIONPOWERSOURCE: // a te w ogle pomijamy - // case TP_ISOLATED: //lista torw w obwodzie izolowanym - na razie ignorowana + case TP_TRACTIONPOWERSOURCE: // a te w ogóle pomijamy + // case TP_ISOLATED: //lista torów w obwodzie izolowanym - na razie ignorowana break; case TP_DYNAMIC: return; // tych nie dopisujemy wcale } - Node->nNext2 = nRootNode; // dopisanie do oglnej listy + Node->nNext2 = nRootNode; // dopisanie do ogólnej listy nRootNode = Node; - ++iNodeCount; // licznik obiektw + ++iNodeCount; // licznik obiektów } void TSubRect::RaNodeAdd(TGroundNode *Node) -{ // finalna kwalifikacja na listy renderowania, jeli nie obsugiwane grupowo +{ // finalna kwalifikacja na listy renderowania, jeśli nie obsługiwane grupowo switch (Node->iType) { case TP_TRACK: @@ -869,34 +869,34 @@ void TSubRect::RaNodeAdd(TGroundNode *Node) nRender = Node; } // DL: do nieprzezroczystych wszelakich break; - case TP_MODEL: // modele zawsze wywietlane z wasnego VBO - if ((Node->iFlags & 0x20200020) == 0) // czy brak przezroczystoci? + case TP_MODEL: // modele zawsze wyświetlane z własnego VBO + if ((Node->iFlags & 0x20200020) == 0) // czy brak przezroczystości? { Node->nNext3 = nRender; nRender = Node; } // do nieprzezroczystych - else if ((Node->iFlags & 0x10100010) == 0) // czy brak nieprzezroczystoci? + else if ((Node->iFlags & 0x10100010) == 0) // czy brak nieprzezroczystości? { Node->nNext3 = nRenderAlpha; nRenderAlpha = Node; } // do przezroczystych - else // jak i take i takie, to bdzie dwa razy renderowane... + else // jak i take i takie, to będzie dwa razy renderowane... { Node->nNext3 = nRenderMixed; nRenderMixed = Node; } // do mieszanych break; - case TP_MESH: // grupa ze wspln tekstur + case TP_MESH: // grupa ze wspólną teksturą //{Node->nNext3=nRenderRect; nRenderRect=Node;} //do nieprzezroczystych z sektora { Node->nNext3 = nRender; nRender = Node; } // do nieprzezroczystych break; - case TP_SUBMODEL: // submodele terenu w kwadracie kilometrowym id do nRootMesh + case TP_SUBMODEL: // submodele terenu w kwadracie kilometrowym idą do nRootMesh // WriteLog("nRootMesh was "+AnsiString(nRootMesh?"not null ":"null // ")+IntToHex(int(this),8)); - Node->nNext3 = nRootMesh; // przy VBO musi by inaczej + Node->nNext3 = nRootMesh; // przy VBO musi być inaczej nRootMesh = Node; break; } @@ -904,68 +904,68 @@ void TSubRect::RaNodeAdd(TGroundNode *Node) void TSubRect::Sort() { // przygotowanie sektora do renderowania - TGroundNode **n0, *n1, *n2; // wskaniki robocze - delete[] tTracks; // usunicie listy + TGroundNode **n0, *n1, *n2; // wskaźniki robocze + delete[] tTracks; // usunięcie listy tTracks = - iTracks ? new TTrack *[iTracks] : NULL; // tworzenie tabeli torw do renderowania pojazdw + iTracks ? new TTrack *[iTracks] : NULL; // tworzenie tabeli torów do renderowania pojazdów if (tTracks) - { // wypenianie tabeli torw + { // wypełnianie tabeli torów int i = 0; for (n1 = nRootNode; n1; n1 = n1->nNext2) // kolejne obiekty z sektora if (n1->iType == TP_TRACK) tTracks[i++] = n1->pTrack; } - // sortowanie obiektw w sektorze na listy renderowania + // sortowanie obiektów w sektorze na listy renderowania if (!nMeshed) return; // nie ma nic do sortowania bool sorted = false; while (!sorted) - { // sortowanie bbelkowe obiektw wg tekstury - sorted = true; // zakadamy posortowanie - n0 = &nMeshed; // wskanik niezbdny do zamieniania obiektw - n1 = nMeshed; // lista obiektw przetwarzanych na statyczne siatki + { // sortowanie bąbelkowe obiektów wg tekstury + sorted = true; // zakładamy posortowanie + n0 = &nMeshed; // wskaźnik niezbędny do zamieniania obiektów + n1 = nMeshed; // lista obiektów przetwarzanych na statyczne siatki while (n1) - { // sprawdzanie stanu posortowania obiektw i ewentualne zamiany + { // sprawdzanie stanu posortowania obiektów i ewentualne zamiany n2 = n1->nNext3; // kolejny z tej listy - if (n2) // jeli istnieje + if (n2) // jeśli istnieje if (n1->TextureID > n2->TextureID) - { // zamiana elementw miejscami - *n0 = n2; // drugi bdzie na pocztku - n1->nNext3 = n2->nNext3; // ten zza drugiego bdzie za pierwszym - n2->nNext3 = n1; // a za drugim bdzie pierwszy + { // zamiana elementów miejscami + *n0 = n2; // drugi będzie na początku + n1->nNext3 = n2->nNext3; // ten zza drugiego będzie za pierwszym + n2->nNext3 = n1; // a za drugim będzie pierwszy sorted = false; // potrzebny kolejny przebieg } n0 = &(n1->nNext3); n1 = n2; }; } - // wyrzucenie z listy obiektw pojedynczych (nie ma z czym ich grupowa) - // nawet jak s pojedyncze, to i tak lepiej, aby byy w jednym Display List + // wyrzucenie z listy obiektów pojedynczych (nie ma z czym ich grupować) + // nawet jak są pojedyncze, to i tak lepiej, aby były w jednym Display List /* else - {//dodanie do zwykej listy renderowania i usunicie z grupowego - *n0=n2; //drugi bdzie na pocztku - RaNodeAdd(n1); //nie ma go z czym zgrupowa; (n1->nNext3) zostanie nadpisane + {//dodanie do zwykłej listy renderowania i usunięcie z grupowego + *n0=n2; //drugi będzie na początku + RaNodeAdd(n1); //nie ma go z czym zgrupować; (n1->nNext3) zostanie nadpisane n1=n2; //potrzebne do ustawienia (n0) } */ //... - // przegldanie listy i tworzenie obiektw renderujcych dla danej tekstury + // przeglądanie listy i tworzenie obiektów renderujących dla danej tekstury GLuint t = 0; // pomocniczy kod tekstury - n1 = nMeshed; // lista obiektw przetwarzanych na statyczne siatki + n1 = nMeshed; // lista obiektów przetwarzanych na statyczne siatki while (n1) - { // dla kadej tekstury powinny istnie co najmniej dwa obiekty, ale dla DL nie ma to znaczenia - if (t < n1->TextureID) // jeli (n1) ma inn tekstur ni poprzednie - { // mona zrobi obiekt renderujcy + { // dla każdej tekstury powinny istnieć co najmniej dwa obiekty, ale dla DL nie ma to znaczenia + if (t < n1->TextureID) // jeśli (n1) ma inną teksturę niż poprzednie + { // można zrobić obiekt renderujący t = n1->TextureID; n2 = new TGroundNode(); n2->nNext2 = nRootMesh; - nRootMesh = n2; // podczepienie na pocztku listy - nRootMesh->iType = TP_MESH; // obiekt renderujcy siatki dla tekstury + nRootMesh = n2; // podczepienie na początku listy + nRootMesh->iType = TP_MESH; // obiekt renderujący siatki dla tekstury nRootMesh->TextureID = t; nRootMesh->nNode = n1; // pierwszy element z listy nRootMesh->pCenter = n1->pCenter; - nRootMesh->fSquareRadius = 1e8; // wida bez ogranicze + nRootMesh->fSquareRadius = 1e8; // widać bez ograniczeń nRootMesh->fSquareMinRadius = 0.0; nRootMesh->iFlags = 0x10; RaNodeAdd(nRootMesh); // dodanie do odpowiedniej listy renderowania @@ -975,10 +975,10 @@ void TSubRect::Sort() } TTrack * TSubRect::FindTrack(vector3 *Point, int &iConnection, TTrack *Exclude) -{ // szukanie toru, ktrego koniec jest najbliszy (*Point) +{ // szukanie toru, którego koniec jest najbliższy (*Point) TTrack *Track; for (int i = 0; i < iTracks; ++i) - if (tTracks[i] != Exclude) // mona uy tabel torw, bo jest mniejsza + if (tTracks[i] != Exclude) // można użyć tabelę torów, bo jest mniejsza { iConnection = tTracks[i]->TestPoint(Point); if (iConnection >= 0) @@ -987,7 +987,7 @@ TTrack * TSubRect::FindTrack(vector3 *Point, int &iConnection, TTrack *Exclude) /* TGroundNode *Current; for (Current=nRootNode;Current;Current=Current->Next) - if ((Current->iType==TP_TRACK)&&(Current->pTrack!=Exclude)) //mona uy tabel torw + if ((Current->iType==TP_TRACK)&&(Current->pTrack!=Exclude)) //można użyć tabelę torów { iConnection=Current->pTrack->TestPoint(Point); if (iConnection>=0) return Current; @@ -997,14 +997,14 @@ TTrack * TSubRect::FindTrack(vector3 *Point, int &iConnection, TTrack *Exclude) }; bool TSubRect::RaTrackAnimAdd(TTrack *t) -{ // aktywacja animacji torw w VBO (zwrotnica, obrotnica) +{ // aktywacja animacji torów w VBO (zwrotnica, obrotnica) if (m_nVertexCount < 0) - return true; // nie ma animacji, gdy nie wida + return true; // nie ma animacji, gdy nie widać if (tTrackAnim) tTrackAnim->RaAnimListAdd(t); else tTrackAnim = t; - return false; // bdzie animowane... + return false; // będzie animowane... } void TSubRect::RaAnimate() @@ -1012,17 +1012,17 @@ void TSubRect::RaAnimate() if (!tTrackAnim) return; // nie ma nic do animowania if (Global::bUseVBO) - { // odwieenie VBO sektora - if (Global::bOpenGL_1_5) // modyfikacje VBO s dostpne od OpenGL 1.5 + { // odświeżenie VBO sektora + if (Global::bOpenGL_1_5) // modyfikacje VBO są dostępne od OpenGL 1.5 glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_nVBOVertices); - else // dla OpenGL 1.4 z GL_ARB_vertex_buffer_object odwieenie caego sektora - Release(); // oprnienie VBO sektora, aby si odwiey z nowymi ustawieniami + else // dla OpenGL 1.4 z GL_ARB_vertex_buffer_object odświeżenie całego sektora + Release(); // opróżnienie VBO sektora, aby się odświeżył z nowymi ustawieniami } tTrackAnim = tTrackAnim->RaAnimate(); // przeliczenie animacji kolejnego }; TTraction * TSubRect::FindTraction(vector3 *Point, int &iConnection, TTraction *Exclude) -{ // szukanie przsa w sektorze, ktrego koniec jest najbliszy (*Point) +{ // szukanie przęsła w sektorze, którego koniec jest najbliższy (*Point) TGroundNode *Current; for (Current = nRenderWires; Current; Current = Current->nNext3) if ((Current->iType == TP_TRACTION) && (Current->hvTraction != Exclude)) @@ -1037,8 +1037,8 @@ TTraction * TSubRect::FindTraction(vector3 *Point, int &iConnection, TTraction * void TSubRect::LoadNodes() { // utworzenie siatek VBO dla wszystkich node w sektorze if (m_nVertexCount >= 0) - return; // obiekty byy ju sprawdzone - m_nVertexCount = 0; //-1 oznacza, e nie sprawdzono listy obiektw + return; // obiekty były już sprawdzone + m_nVertexCount = 0; //-1 oznacza, że nie sprawdzono listy obiektów if (!nRootNode) return; TGroundNode *n = nRootNode; @@ -1049,33 +1049,33 @@ void TSubRect::LoadNodes() case GL_TRIANGLE_STRIP: case GL_TRIANGLE_FAN: case GL_TRIANGLES: - n->iVboPtr = m_nVertexCount; // nowy pocztek + n->iVboPtr = m_nVertexCount; // nowy początek m_nVertexCount += n->iNumVerts; break; case GL_LINES: case GL_LINE_STRIP: case GL_LINE_LOOP: - n->iVboPtr = m_nVertexCount; // nowy pocztek + n->iVboPtr = m_nVertexCount; // nowy początek m_nVertexCount += - n->iNumPts; // miejsce w tablicach normalnych i teksturowania si zmarnuje... + n->iNumPts; // miejsce w tablicach normalnych i teksturowania się zmarnuje... break; case TP_TRACK: - n->iVboPtr = m_nVertexCount; // nowy pocztek - n->iNumVerts = n->pTrack->RaArrayPrepare(); // zliczenie wierzchokw + n->iVboPtr = m_nVertexCount; // nowy początek + n->iNumVerts = n->pTrack->RaArrayPrepare(); // zliczenie wierzchołków m_nVertexCount += n->iNumVerts; break; case TP_TRACTION: - n->iVboPtr = m_nVertexCount; // nowy pocztek - n->iNumVerts = n->hvTraction->RaArrayPrepare(); // zliczenie wierzchokw + n->iVboPtr = m_nVertexCount; // nowy początek + n->iNumVerts = n->hvTraction->RaArrayPrepare(); // zliczenie wierzchołków m_nVertexCount += n->iNumVerts; break; } - n = n->nNext2; // nastpny z sektora + n = n->nNext2; // następny z sektora } if (!m_nVertexCount) - return; // jeli nie ma obiektw do wywietlenia z VBO, to koniec + return; // jeśli nie ma obiektów do wyświetlenia z VBO, to koniec if (Global::bUseVBO) - { // tylko liczenie wierzchow, gdy nie ma VBO + { // tylko liczenie wierzchołów, gdy nie ma VBO MakeArray(m_nVertexCount); n = nRootNode; int i; @@ -1088,7 +1088,7 @@ void TSubRect::LoadNodes() case GL_TRIANGLE_FAN: case GL_TRIANGLES: for (i = 0; i < n->iNumVerts; ++i) - { // Ra: trjkty mona od razu wczytywa do takich tablic... to moe poczeka + { // Ra: trójkąty można od razu wczytywać do takich tablic... to może poczekać m_pVNT[n->iVboPtr + i].x = n->Vertices[i].Point.x; m_pVNT[n->iVboPtr + i].y = n->Vertices[i].Point.y; m_pVNT[n->iVboPtr + i].z = n->Vertices[i].Point.z; @@ -1107,52 +1107,52 @@ void TSubRect::LoadNodes() m_pVNT[n->iVboPtr + i].x = n->Points[i].x; m_pVNT[n->iVboPtr + i].y = n->Points[i].y; m_pVNT[n->iVboPtr + i].z = n->Points[i].z; - // miejsce w tablicach normalnych i teksturowania si marnuje... + // miejsce w tablicach normalnych i teksturowania się marnuje... } break; case TP_TRACK: - if (n->iNumVerts) // bo tory zabezpieczajce s niewidoczne + if (n->iNumVerts) // bo tory zabezpieczające są niewidoczne n->pTrack->RaArrayFill(m_pVNT + n->iVboPtr, m_pVNT); break; case TP_TRACTION: - if (n->iNumVerts) // druty mog by niewidoczne...? + if (n->iNumVerts) // druty mogą być niewidoczne...? n->hvTraction->RaArrayFill(m_pVNT + n->iVboPtr); break; } - n = n->nNext2; // nastpny z sektora + n = n->nNext2; // następny z sektora } BuildVBOs(); } if (Global::bManageNodes) - ResourceManager::Register(this); // dodanie do automatu zwalniajcego pami + ResourceManager::Register(this); // dodanie do automatu zwalniającego pamięć } bool TSubRect::StartVBO() -{ // pocztek rysowania elementw z VBO w sektorze - SetLastUsage(Timer::GetSimulationTime()); // te z tyu bd niepotrzebnie zwalniane +{ // początek rysowania elementów z VBO w sektorze + SetLastUsage(Timer::GetSimulationTime()); // te z tyłu będą niepotrzebnie zwalniane return CMesh::StartVBO(); }; void TSubRect::Release() -{ // wirtualne zwolnienie zasobw przez sprztacz albo destruktor +{ // wirtualne zwolnienie zasobów przez sprzątacz albo destruktor if (Global::bUseVBO) - CMesh::Clear(); // usuwanie buforw + CMesh::Clear(); // usuwanie buforów }; void TSubRect::RenderDL() { // renderowanie nieprzezroczystych (DL) TGroundNode *node; - RaAnimate(); // przeliczenia animacji torw w sektorze + RaAnimate(); // przeliczenia animacji torów w sektorze for (node = nRender; node; node = node->nNext3) - node->RenderDL(); // nieprzezroczyste obiekty (oprcz pojazdw) + node->RenderDL(); // nieprzezroczyste obiekty (oprócz pojazdów) for (node = nRenderMixed; node; node = node->nNext3) node->RenderDL(); // nieprzezroczyste z mieszanych modeli for (int j = 0; j < iTracks; ++j) - tTracks[j]->RenderDyn(); // nieprzezroczyste fragmenty pojazdw na torach + tTracks[j]->RenderDyn(); // nieprzezroczyste fragmenty pojazdów na torach }; void TSubRect::RenderAlphaDL() -{ // renderowanie przezroczystych modeli oraz pojazdw (DL) +{ // renderowanie przezroczystych modeli oraz pojazdów (DL) TGroundNode *node; for (node = nRenderMixed; node; node = node->nNext3) node->RenderAlphaDL(); // przezroczyste z mieszanych modeli @@ -1160,15 +1160,15 @@ void TSubRect::RenderAlphaDL() node->RenderAlphaDL(); // przezroczyste modele // for (node=tmp->nRender;node;node=node->nNext3) // if (node->iType==TP_TRACK) - // node->pTrack->RenderAlpha(); //przezroczyste fragmenty pojazdw na torach + // node->pTrack->RenderAlpha(); //przezroczyste fragmenty pojazdów na torach for (int j = 0; j < iTracks; ++j) - tTracks[j]->RenderDynAlpha(); // przezroczyste fragmenty pojazdw na torach + tTracks[j]->RenderDynAlpha(); // przezroczyste fragmenty pojazdów na torach }; void TSubRect::RenderVBO() { // renderowanie nieprzezroczystych (VBO) TGroundNode *node; - RaAnimate(); // przeliczenia animacji torw w sektorze + RaAnimate(); // przeliczenia animacji torów w sektorze LoadNodes(); // czemu tutaj? if (StartVBO()) { @@ -1178,15 +1178,15 @@ void TSubRect::RenderVBO() EndVBO(); } for (node = nRender; node; node = node->nNext3) - node->RenderVBO(); // nieprzezroczyste obiekty (oprcz pojazdw) + node->RenderVBO(); // nieprzezroczyste obiekty (oprócz pojazdów) for (node = nRenderMixed; node; node = node->nNext3) node->RenderVBO(); // nieprzezroczyste z mieszanych modeli for (int j = 0; j < iTracks; ++j) - tTracks[j]->RenderDyn(); // nieprzezroczyste fragmenty pojazdw na torach + tTracks[j]->RenderDyn(); // nieprzezroczyste fragmenty pojazdów na torach }; void TSubRect::RenderAlphaVBO() -{ // renderowanie przezroczystych modeli oraz pojazdw (VBO) +{ // renderowanie przezroczystych modeli oraz pojazdów (VBO) TGroundNode *node; for (node = nRenderMixed; node; node = node->nNext3) node->RenderAlphaVBO(); // przezroczyste z mieszanych modeli @@ -1194,20 +1194,20 @@ void TSubRect::RenderAlphaVBO() node->RenderAlphaVBO(); // przezroczyste modele // for (node=tmp->nRender;node;node=node->nNext3) // if (node->iType==TP_TRACK) - // node->pTrack->RenderAlpha(); //przezroczyste fragmenty pojazdw na torach + // node->pTrack->RenderAlpha(); //przezroczyste fragmenty pojazdów na torach for (int j = 0; j < iTracks; ++j) - tTracks[j]->RenderDynAlpha(); // przezroczyste fragmenty pojazdw na torach + tTracks[j]->RenderDynAlpha(); // przezroczyste fragmenty pojazdów na torach }; void TSubRect::RenderSounds() -{ // aktualizacja dwikw w pojazdach sektora (sektor moe nie by wywietlany) +{ // aktualizacja dźwięków w pojazdach sektora (sektor może nie być wyświetlany) for (int j = 0; j < iTracks; ++j) - tTracks[j]->RenderDynSounds(); // dwiki pojazdw id niezalenie od wywietlania + tTracks[j]->RenderDynSounds(); // dźwięki pojazdów idą niezależnie od wyświetlania }; //--------------------------------------------------------------------------- //------------------ Kwadrat kilometrowy ------------------------------------ //--------------------------------------------------------------------------- -int TGroundRect::iFrameNumber = 0; // licznik wywietlanych klatek +int TGroundRect::iFrameNumber = 0; // licznik wyświetlanych klatek TGroundRect::TGroundRect() { @@ -1221,24 +1221,24 @@ TGroundRect::~TGroundRect() }; void TGroundRect::RenderDL() -{ // renderowanie kwadratu kilometrowego (DL), jeli jeszcze nie zrobione +{ // renderowanie kwadratu kilometrowego (DL), jeśli jeszcze nie zrobione if (iLastDisplay != iFrameNumber) - { // tylko jezeli dany kwadrat nie by jeszcze renderowany + { // tylko jezeli dany kwadrat nie był jeszcze renderowany // for (TGroundNode* node=pRender;node;node=node->pNext3) - // node->Render(); //nieprzezroczyste trjkty kwadratu kilometrowego + // node->Render(); //nieprzezroczyste trójkąty kwadratu kilometrowego if (nRender) - { //czenie trjktw w jedn list - troch wioska + { //łączenie trójkątów w jedną listę - trochę wioska if (!nRender->DisplayListID || (nRender->iVersion != Global::iReCompile)) - { // jeeli nie skompilowany, kompilujemy wszystkie trjkty w jeden - nRender->fSquareRadius = 5000.0 * 5000.0; // aby agregat nigdy nie znika + { // jeżeli nie skompilowany, kompilujemy wszystkie trójkąty w jeden + nRender->fSquareRadius = 5000.0 * 5000.0; // aby agregat nigdy nie znikał nRender->DisplayListID = glGenLists(1); glNewList(nRender->DisplayListID, GL_COMPILE); nRender->iVersion = Global::iReCompile; // aktualna wersja siatek - for (TGroundNode *node = nRender; node; node = node->nNext3) // nastpny tej grupy + for (TGroundNode *node = nRender; node; node = node->nNext3) // następny tej grupy node->Compile(true); glEndList(); } - nRender->RenderDL(); // nieprzezroczyste trjkty kwadratu kilometrowego + nRender->RenderDL(); // nieprzezroczyste trójkąty kwadratu kilometrowego } if (nRootMesh) nRootMesh->RenderDL(); @@ -1247,19 +1247,19 @@ void TGroundRect::RenderDL() }; void TGroundRect::RenderVBO() -{ // renderowanie kwadratu kilometrowego (VBO), jeli jeszcze nie zrobione +{ // renderowanie kwadratu kilometrowego (VBO), jeśli jeszcze nie zrobione if (iLastDisplay != iFrameNumber) - { // tylko jezeli dany kwadrat nie by jeszcze renderowany + { // tylko jezeli dany kwadrat nie był jeszcze renderowany LoadNodes(); // ewentualne tworzenie siatek if (StartVBO()) { - for (TGroundNode *node = nRenderRect; node; node = node->nNext3) // nastpny tej grupy - node->RaRenderVBO(); // nieprzezroczyste trjkty kwadratu kilometrowego + for (TGroundNode *node = nRenderRect; node; node = node->nNext3) // następny tej grupy + node->RaRenderVBO(); // nieprzezroczyste trójkąty kwadratu kilometrowego EndVBO(); iLastDisplay = iFrameNumber; } if (nTerrain) - nTerrain->smTerrain->iVisible = iFrameNumber; // ma si wywietli w tej ramce + nTerrain->smTerrain->iVisible = iFrameNumber; // ma się wyświetlić w tej ramce } }; @@ -1277,15 +1277,15 @@ void TGround::MoveGroundNode(vector3 pPosition) TGroundRect *Rectx=new TGroundRect; //kwadrat kilometrowy for(int i=0;iNext) - {//rozoenie obiektw na mapie + {//rozłożenie obiektów na mapie if (Current->iType!=TP_DYNAMIC) - {//pojazdw to w ogle nie dotyczy - if ((Current->iType!=GL_TRIANGLES)&&(Current->iType!=GL_TRIANGLE_STRIP)?true //~czy trjkt? - :(Current->iFlags&0x20)?true //~czy tekstur ma nieprzezroczyst? - //:(Current->iNumVerts!=3)?true //~czy tylko jeden trjkt? + {//pojazdów to w ogóle nie dotyczy + if ((Current->iType!=GL_TRIANGLES)&&(Current->iType!=GL_TRIANGLE_STRIP)?true //~czy trójkąt? + :(Current->iFlags&0x20)?true //~czy teksturę ma nieprzezroczystą? + //:(Current->iNumVerts!=3)?true //~czy tylko jeden trójkąt? :(Current->fSquareMinRadius!=0.0)?true //~czy widoczny z bliska? :(Current->fSquareRadius<=90000.0)) //~czy widoczny z daleka? GetSubRect(Current->pCenter.x,Current->pCenter.z)->AddNode(Current); @@ -1315,11 +1315,11 @@ TGround::TGround() iNumNodes = 0; // pTrain=NULL; Global::pGround = this; - bInitDone = false; // Ra: eby nie robio dwa razy FirstInit + bInitDone = false; // Ra: żeby nie robiło dwa razy FirstInit for (int i = 0; i < TP_LAST; i++) nRootOfType[i] = NULL; // zerowanie tablic wyszukiwania - bDynamicRemove = false; // na razie nic do usunicia - sTracks = new TNames(); // nazwy torw - na razie tak + bDynamicRemove = false; // na razie nic do usunięcia + sTracks = new TNames(); // nazwy torów - na razie tak } TGround::~TGround() @@ -1360,7 +1360,7 @@ void TGround::Free() } TGroundNode * TGround::DynamicFindAny(std::string asNameToFind) -{ // wyszukanie pojazdu o podanej nazwie, szukanie po wszystkich (uy drzewa!) +{ // wyszukanie pojazdu o podanej nazwie, szukanie po wszystkich (użyć drzewa!) for (TGroundNode *Current = nRootDynamic; Current; Current = Current->nNext) if ((Current->asName == asNameToFind)) return Current; @@ -1368,7 +1368,7 @@ TGroundNode * TGround::DynamicFindAny(std::string asNameToFind) }; TGroundNode * TGround::DynamicFind(std::string asNameToFind) -{ // wyszukanie pojazdu z obsad o podanej nazwie (uy drzewa!) +{ // wyszukanie pojazdu z obsadą o podanej nazwie (użyć drzewa!) for (TGroundNode *Current = nRootDynamic; Current; Current = Current->nNext) if (Current->DynamicObject->Mechanik) if ((Current->asName == asNameToFind)) @@ -1377,12 +1377,12 @@ TGroundNode * TGround::DynamicFind(std::string asNameToFind) }; void TGround::DynamicList(bool all) -{ // odesanie nazw pojazdw dostpnych na scenerii (nazwy, szczeglnie wagonw, mog si - // powtarza!) +{ // odesłanie nazw pojazdów dostępnych na scenerii (nazwy, szczególnie wagonów, mogą się + // powtarzać!) for (TGroundNode *Current = nRootDynamic; Current; Current = Current->nNext) if (all || Current->DynamicObject->Mechanik) - WyslijString(Current->asName, 6); // same nazwy pojazdw - WyslijString("none", 6); // informacja o kocu listy + WyslijString(Current->asName, 6); // same nazwy pojazdów + WyslijString("none", 6); // informacja o końcu listy }; TGroundNode * TGround::FindGroundNode(std::string asNameToFind, TGroundNodeType iNodeType) @@ -1401,27 +1401,27 @@ TGroundNode * TGround::FindGroundNode(std::string asNameToFind, TGroundNodeType double fTrainSetVel = 0; double fTrainSetDir = 0; -double fTrainSetDist = 0; // odlego skadu od punktu 1 w stron punktu 2 +double fTrainSetDist = 0; // odległość składu od punktu 1 w stronę punktu 2 string asTrainSetTrack = ""; int iTrainSetConnection = 0; bool bTrainSet = false; string asTrainName = ""; int iTrainSetWehicleNumber = 0; -TGroundNode *nTrainSetNode = NULL; // poprzedni pojazd do czenia -TGroundNode *nTrainSetDriver = NULL; // pojazd, ktremu zostanie wysany rozkad +TGroundNode *nTrainSetNode = NULL; // poprzedni pojazd do łączenia +TGroundNode *nTrainSetDriver = NULL; // pojazd, któremu zostanie wysłany rozkład -TGroundVertex TempVerts[10000]; // tu wczytywane s trjkty -BYTE TempConnectionType[200]; // Ra: sprzgi w skadzie; ujemne, gdy odwrotnie +TGroundVertex TempVerts[10000]; // tu wczytywane są trójkąty +BYTE TempConnectionType[200]; // Ra: sprzęgi w składzie; ujemne, gdy odwrotnie void TGround::RaTriangleDivider(TGroundNode *node) -{ // tworzy dodatkowe trjkty i zmiejsza podany - // to jest wywoywane przy wczytywaniu trjktw - // dodatkowe trjkty s dodawane do gwnej listy trjktw - // podzia trjktw na sektory i kwadraty jest dokonywany pniej w FirstInit +{ // tworzy dodatkowe trójkąty i zmiejsza podany + // to jest wywoływane przy wczytywaniu trójkątów + // dodatkowe trójkąty są dodawane do głównej listy trójkątów + // podział trójkątów na sektory i kwadraty jest dokonywany później w FirstInit if (node->iType != GL_TRIANGLES) - return; // tylko pojedyncze trjkty + return; // tylko pojedyncze trójkąty if (node->iNumVerts != 3) - return; // tylko gdy jeden trjkt + return; // tylko gdy jeden trójkąt double x0 = 1000.0 * floor(0.001 * node->pCenter.x) - 200.0; double x1 = x0 + 1400.0; double z0 = 1000.0 * floor(0.001 * node->pCenter.z) - 200.0; @@ -1432,13 +1432,13 @@ void TGround::RaTriangleDivider(TGroundNode *node) (node->Vertices[1].Point.z >= z0) && (node->Vertices[1].Point.z <= z1) && (node->Vertices[2].Point.x >= x0) && (node->Vertices[2].Point.x <= x1) && (node->Vertices[2].Point.z >= z0) && (node->Vertices[2].Point.z <= z1)) - return; // trjkt wystajcy mniej ni 200m z kw. kilometrowego jest do przyjcia - // Ra: przerobi na dzielenie na 2 trjkty, podzia w przeciciu z siatk kilometrow - // Ra: i z rekurencj bdzie dzieli trzy trjkty, jeli bdzie taka potrzeba - int divide = -1; // bok do podzielenia: 0=AB, 1=BC, 2=CA; +4=podzia po OZ; +8 na x1/z1 - double min = 0, mul; // jeli przechodzi przez o, iloczyn bdzie ujemny + return; // trójkąt wystający mniej niż 200m z kw. kilometrowego jest do przyjęcia + // Ra: przerobić na dzielenie na 2 trójkąty, podział w przecięciu z siatką kilometrową + // Ra: i z rekurencją będzie dzielić trzy trójkąty, jeśli będzie taka potrzeba + int divide = -1; // bok do podzielenia: 0=AB, 1=BC, 2=CA; +4=podział po OZ; +8 na x1/z1 + double min = 0, mul; // jeśli przechodzi przez oś, iloczyn będzie ujemny x0 += 200.0; - x1 -= 200.0; // przestawienie na siatk + x1 -= 200.0; // przestawienie na siatkę z0 += 200.0; z1 -= 200.0; mul = (node->Vertices[0].Point.x - x0) * (node->Vertices[1].Point.x - x0); // AB na wschodzie @@ -1459,28 +1459,28 @@ void TGround::RaTriangleDivider(TGroundNode *node) mul = (node->Vertices[2].Point.x - x1) * (node->Vertices[0].Point.x - x1); // CA na zachodzie if (mul < min) min = mul, divide = 10; - mul = (node->Vertices[0].Point.z - z0) * (node->Vertices[1].Point.z - z0); // AB na poudniu + mul = (node->Vertices[0].Point.z - z0) * (node->Vertices[1].Point.z - z0); // AB na południu if (mul < min) min = mul, divide = 4; - mul = (node->Vertices[1].Point.z - z0) * (node->Vertices[2].Point.z - z0); // BC na poudniu + mul = (node->Vertices[1].Point.z - z0) * (node->Vertices[2].Point.z - z0); // BC na południu if (mul < min) min = mul, divide = 5; - mul = (node->Vertices[2].Point.z - z0) * (node->Vertices[0].Point.z - z0); // CA na poudniu + mul = (node->Vertices[2].Point.z - z0) * (node->Vertices[0].Point.z - z0); // CA na południu if (mul < min) min = mul, divide = 6; - mul = (node->Vertices[0].Point.z - z1) * (node->Vertices[1].Point.z - z1); // AB na pnocy + mul = (node->Vertices[0].Point.z - z1) * (node->Vertices[1].Point.z - z1); // AB na północy if (mul < min) min = mul, divide = 12; - mul = (node->Vertices[1].Point.z - z1) * (node->Vertices[2].Point.z - z1); // BC na pnocy + mul = (node->Vertices[1].Point.z - z1) * (node->Vertices[2].Point.z - z1); // BC na północy if (mul < min) min = mul, divide = 13; - mul = (node->Vertices[2].Point.z - z1) * (node->Vertices[0].Point.z - z1); // CA na pnocy + mul = (node->Vertices[2].Point.z - z1) * (node->Vertices[0].Point.z - z1); // CA na północy if (mul < min) divide = 14; - // tworzymy jeden dodatkowy trjkt, dzielc jeden bok na przeciciu siatki kilometrowej - TGroundNode *ntri; // wskanik na nowy trjkt + // tworzymy jeden dodatkowy trójkąt, dzieląc jeden bok na przecięciu siatki kilometrowej + TGroundNode *ntri; // wskaźnik na nowy trójkąt ntri = new TGroundNode(); // a ten jest nowy - ntri->iType = GL_TRIANGLES; // kopiowanie parametrw, przydaby si konstruktor kopiujcy + ntri->iType = GL_TRIANGLES; // kopiowanie parametrów, przydałby się konstruktor kopiujący ntri->Init(3); ntri->TextureID = node->TextureID; ntri->iFlags = node->iFlags; @@ -1493,44 +1493,44 @@ void TGround::RaTriangleDivider(TGroundNode *node) ntri->asName = node->asName; ntri->fSquareRadius = node->fSquareRadius; ntri->fSquareMinRadius = node->fSquareMinRadius; - ntri->bVisible = node->bVisible; // a s jakie niewidoczne? + ntri->bVisible = node->bVisible; // a są jakieś niewidoczne? ntri->nNext = nRootOfType[GL_TRIANGLES]; nRootOfType[GL_TRIANGLES] = ntri; // dopisanie z przodu do listy iNumNodes++; switch (divide & 3) - { // podzielenie jednego z bokw, powstaje wierzchoek D - case 0: // podzia AB (0-1) -> ADC i DBC - ntri->Vertices[2] = node->Vertices[2]; // wierzchoek C jest wsplny - ntri->Vertices[1] = node->Vertices[1]; // wierzchoek B przechodzi do nowego + { // podzielenie jednego z boków, powstaje wierzchołek D + case 0: // podział AB (0-1) -> ADC i DBC + ntri->Vertices[2] = node->Vertices[2]; // wierzchołek C jest wspólny + ntri->Vertices[1] = node->Vertices[1]; // wierzchołek B przechodzi do nowego // node->Vertices[1].HalfSet(node->Vertices[0],node->Vertices[1]); //na razie D tak if (divide & 4) node->Vertices[1].SetByZ(node->Vertices[0], node->Vertices[1], (divide & 8) ? z1 : z0); else node->Vertices[1].SetByX(node->Vertices[0], node->Vertices[1], (divide & 8) ? x1 : x0); - ntri->Vertices[0] = node->Vertices[1]; // wierzchoek D jest wsplny + ntri->Vertices[0] = node->Vertices[1]; // wierzchołek D jest wspólny break; - case 1: // podzia BC (1-2) -> ABD i ADC - ntri->Vertices[0] = node->Vertices[0]; // wierzchoek A jest wsplny - ntri->Vertices[2] = node->Vertices[2]; // wierzchoek C przechodzi do nowego + case 1: // podział BC (1-2) -> ABD i ADC + ntri->Vertices[0] = node->Vertices[0]; // wierzchołek A jest wspólny + ntri->Vertices[2] = node->Vertices[2]; // wierzchołek C przechodzi do nowego // node->Vertices[2].HalfSet(node->Vertices[1],node->Vertices[2]); //na razie D tak if (divide & 4) node->Vertices[2].SetByZ(node->Vertices[1], node->Vertices[2], (divide & 8) ? z1 : z0); else node->Vertices[2].SetByX(node->Vertices[1], node->Vertices[2], (divide & 8) ? x1 : x0); - ntri->Vertices[1] = node->Vertices[2]; // wierzchoek D jest wsplny + ntri->Vertices[1] = node->Vertices[2]; // wierzchołek D jest wspólny break; - case 2: // podzia CA (2-0) -> ABD i DBC - ntri->Vertices[1] = node->Vertices[1]; // wierzchoek B jest wsplny - ntri->Vertices[2] = node->Vertices[2]; // wierzchoek C przechodzi do nowego + case 2: // podział CA (2-0) -> ABD i DBC + ntri->Vertices[1] = node->Vertices[1]; // wierzchołek B jest wspólny + ntri->Vertices[2] = node->Vertices[2]; // wierzchołek C przechodzi do nowego // node->Vertices[2].HalfSet(node->Vertices[2],node->Vertices[0]); //na razie D tak if (divide & 4) node->Vertices[2].SetByZ(node->Vertices[2], node->Vertices[0], (divide & 8) ? z1 : z0); else node->Vertices[2].SetByX(node->Vertices[2], node->Vertices[0], (divide & 8) ? x1 : x0); - ntri->Vertices[0] = node->Vertices[2]; // wierzchoek D jest wsplny + ntri->Vertices[0] = node->Vertices[2]; // wierzchołek D jest wspólny break; } - // przeliczenie rodkw cikoci obu + // przeliczenie środków ciężkości obu node->pCenter = (node->Vertices[0].Point + node->Vertices[1].Point + node->Vertices[2].Point) / 3.0; ntri->pCenter = @@ -1541,7 +1541,7 @@ void TGround::RaTriangleDivider(TGroundNode *node) TGroundNode * TGround::AddGroundNode(cParser *parser) { // wczytanie wpisu typu "node" - // parser->LoadTraction=Global::bLoadTraction; //Ra: tu nie potrzeba powtarza + // parser->LoadTraction=Global::bLoadTraction; //Ra: tu nie potrzeba powtarzać string str, str1, str2, str3, str4, Skin, DriverType, asNodeName; int nv, ti, i, n; double tf, r, rmin, tf1, tf2, tf3, tf4, l, dist, mgn; @@ -1583,7 +1583,7 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) tmp->iType = GL_LINE_LOOP; else if (str == "model") tmp->iType = TP_MODEL; - // else if (str=="terrain") tmp->iType=TP_TERRAIN; //tymczasowo do odwoania + // else if (str=="terrain") tmp->iType=TP_TERRAIN; //tymczasowo do odwołania else if (str == "dynamic") tmp->iType = TP_DYNAMIC; else if (str == "sound") @@ -1606,8 +1606,8 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) { Error("Scene parse error near " + str); for (int i = 0; i < 60; ++i) - { // Ra: skopiowanie dalszej czci do logu - taka prowizorka, lepsza ni nic - parser->getTokens(); // pobranie linijki tekstu nie dziaa + { // Ra: skopiowanie dalszej części do logu - taka prowizorka, lepsza niż nic + parser->getTokens(); // pobranie linijki tekstu nie działa *parser >> token; WriteLog(token); } @@ -1626,21 +1626,21 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) *parser >> tmp->hvTraction->NominalVoltage >> tmp->hvTraction->MaxCurrent >> tmp->hvTraction->fResistivity; if (tmp->hvTraction->fResistivity == 0.01) // tyle jest w sceneriach [om/km] - tmp->hvTraction->fResistivity = 0.075; // taka sensowniejsza warto za + tmp->hvTraction->fResistivity = 0.075; // taka sensowniejsza wartość za // http://www.ikolej.pl/fileadmin/user_upload/Seminaria_IK/13_05_07_Prezentacja_Kruczek.pdf tmp->hvTraction->fResistivity *= 0.001; // teraz [om/m] parser->getTokens(); *parser >> token; - // Ra 2014-02: a tutaj damy symbol sieci i jej budow, np.: + // Ra 2014-02: a tutaj damy symbol sieci i jej budowę, np.: // SKB70-C, CuCd70-2C, KB95-2C, C95-C, C95-2C, YC95-2C, YpC95-2C, YC120-2C // YpC120-2C, YzC120-2C, YwsC120-2C, YC150-C150, YC150-2C150, C150-C150 // C120-2C, 2C120-2C, 2C120-2C-1, 2C120-2C-2, 2C120-2C-3, 2C120-2C-4 if (token.compare("none") == 0) tmp->hvTraction->Material = 0; else if (token.compare("al") == 0) - tmp->hvTraction->Material = 2; // 1=aluminiowa, rysuje si na czarno + tmp->hvTraction->Material = 2; // 1=aluminiowa, rysuje się na czarno else - tmp->hvTraction->Material = 1; // 1=miedziana, rysuje si na zielono albo czerwono + tmp->hvTraction->Material = 1; // 1=miedziana, rysuje się na zielono albo czerwono parser->getTokens(); *parser >> tmp->hvTraction->WireThickness; parser->getTokens(); @@ -1685,20 +1685,20 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) parser->getTokens(); *parser >> token; if (token.compare("parallel") == 0) - { // jawne wskazanie innego przsa, na ktre moe przestawi si pantograf + { // jawne wskazanie innego przęsła, na które może przestawić się pantograf parser->getTokens(); - *parser >> token; // wypadao by to zapamita... + *parser >> token; // wypadało by to zapamiętać... tmp->hvTraction->asParallel = token; parser->getTokens(); - *parser >> token; // a tu ju powinien by koniec + *parser >> token; // a tu już powinien być koniec } if (token.compare("endtraction") != 0) Error("ENDTRACTION delimiter missing! " + str2 + " found instead."); - tmp->hvTraction->Init(); // przeliczenie parametrw + tmp->hvTraction->Init(); // przeliczenie parametrów // if (Global::bLoadTraction) // tmp->hvTraction->Optimize(); //generowanie DL dla wszystkiego przy wczytywaniu? tmp->pCenter = (tmp->hvTraction->pPoint2 + tmp->hvTraction->pPoint1) * 0.5f; - // if (!Global::bLoadTraction) SafeDelete(tmp); //Ra: tak by nie moe, bo NULL to bd + // if (!Global::bLoadTraction) SafeDelete(tmp); //Ra: tak być nie może, bo NULL to błąd break; case TP_TRACTIONPOWERSOURCE: parser->getTokens(3); @@ -1710,17 +1710,17 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) case TP_MEMCELL: parser->getTokens(3); *parser >> tmp->pCenter.x >> tmp->pCenter.y >> tmp->pCenter.z; - tmp->pCenter.RotateY(aRotate.y / 180.0 * M_PI); // Ra 2014-11: uwzgldnienie rotacji + tmp->pCenter.RotateY(aRotate.y / 180.0 * M_PI); // Ra 2014-11: uwzględnienie rotacji tmp->pCenter += pOrigin; tmp->MemCell = new TMemCell(&tmp->pCenter); tmp->MemCell->Load(parser); if (!tmp->asName.empty()) // jest pusta gdy "none" { // dodanie do wyszukiwarki if (sTracks->Update(TP_MEMCELL, tmp->asName.c_str(), - tmp)) // najpierw sprawdzi, czy ju jest - { // przy zdublowaniu wskanik zostanie podmieniony w drzewku na pniejszy (zgodno + tmp)) // najpierw sprawdzić, czy już jest + { // przy zdublowaniu wskaźnik zostanie podmieniony w drzewku na późniejszy (zgodność // wsteczna) - ErrorLog("Duplicated memcell: " + tmp->asName); // to zgasza duplikat + ErrorLog("Duplicated memcell: " + tmp->asName); // to zgłaszać duplikat } else sTracks->Add(TP_MEMCELL, tmp->asName.c_str(), tmp); // nazwa jest unikalna @@ -1729,7 +1729,7 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) case TP_EVLAUNCH: parser->getTokens(3); *parser >> tmp->pCenter.x >> tmp->pCenter.y >> tmp->pCenter.z; - tmp->pCenter.RotateY(aRotate.y / 180.0 * M_PI); // Ra 2014-11: uwzgldnienie rotacji + tmp->pCenter.RotateY(aRotate.y / 180.0 * M_PI); // Ra 2014-11: uwzględnienie rotacji tmp->pCenter += pOrigin; tmp->EvLaunch = new TEventLauncher(); tmp->EvLaunch->Load(parser); @@ -1740,15 +1740,15 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) if (!tmp->asName.empty()) WriteLog(tmp->asName); tmp->pTrack->Load(parser, pOrigin, - tmp->asName); // w nazwie moe by nazwa odcinka izolowanego + tmp->asName); // w nazwie może być nazwa odcinka izolowanego if (!tmp->asName.empty()) // jest pusta gdy "none" { // dodanie do wyszukiwarki if (sTracks->Update(TP_TRACK, tmp->asName.c_str(), - tmp)) // najpierw sprawdzi, czy ju jest - { // przy zdublowaniu wskanik zostanie podmieniony w drzewku na pniejszy (zgodno + tmp)) // najpierw sprawdzić, czy już jest + { // przy zdublowaniu wskaźnik zostanie podmieniony w drzewku na późniejszy (zgodność // wsteczna) - if (tmp->pTrack->iCategoryFlag & 1) // jeli jest zdublowany tor kolejowy - ErrorLog("Duplicated track: " + tmp->asName); // to zgasza duplikat + if (tmp->pTrack->iCategoryFlag & 1) // jeśli jest zdublowany tor kolejowy + ErrorLog("Duplicated track: " + tmp->asName); // to zgłaszać duplikat } else sTracks->Add(TP_TRACK, tmp->asName.c_str(), tmp); // nazwa jest unikalna @@ -1761,7 +1761,7 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) case TP_SOUND: parser->getTokens(3); *parser >> tmp->pCenter.x >> tmp->pCenter.y >> tmp->pCenter.z; - tmp->pCenter.RotateY(aRotate.y / 180.0 * M_PI); // Ra 2014-11: uwzgldnienie rotacji + tmp->pCenter.RotateY(aRotate.y / 180.0 * M_PI); // Ra 2014-11: uwzględnienie rotacji tmp->pCenter += pOrigin; parser->getTokens(); *parser >> token; @@ -1771,7 +1771,7 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) tmp->pCenter.y, tmp->pCenter.z, false, rmin); if (rmin < 0.0) rmin = - 0.0; // przywrcenie poprawnej wartoci, jeli suya do wyczenia efektu Dopplera + 0.0; // przywrócenie poprawnej wartości, jeśli służyła do wyłączenia efektu Dopplera // tmp->pDirectSoundBuffer=TSoundsManager::GetFromName(str.c_str()); // tmp->iState=(Parser->GetNextSymbol().LowerCase()=="loop"?DSBPLAY_LOOPING:0); @@ -1792,15 +1792,15 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) *parser >> token; str3 = token; // McZapkie-131102: model w MMD if (bTrainSet) - { // jeli pojazd jest umieszczony w skadzie + { // jeśli pojazd jest umieszczony w składzie str = asTrainSetTrack; parser->getTokens(); - *parser >> tf1; // Ra: -1 oznacza odwrotne wstawienie, normalnie w skadzie 0 + *parser >> tf1; // Ra: -1 oznacza odwrotne wstawienie, normalnie w składzie 0 parser->getTokens(); *parser >> token; DriverType = token; // McZapkie:010303 - w przyszlosci rozne // konfiguracje mechanik/pomocnik itp - tf3 = fTrainSetVel; // prdko + tf3 = fTrainSetVel; // prędkość parser->getTokens(); *parser >> token; str4 = token; @@ -1820,18 +1820,18 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) // *parser >> int1; //yB: nastawy i takie tam TUTAJ!!!!! if (int1 < 0) int1 = (-int1) | - ctrain_depot; // sprzg zablokowany (pojazdy nierozczalne przy manewrach) + ctrain_depot; // sprzęg zablokowany (pojazdy nierozłączalne przy manewrach) if (tf1 != -1.0) - if (fabs(tf1) > 0.5) // maksymalna odlego midzy sprzgami - do przemylenia - int1 = 0; // likwidacja sprzgu, jeli odlego zbyt dua - to powinno by - // uwzgldniane w fizyce sprzgw... - TempConnectionType[iTrainSetWehicleNumber] = int1; // warto dodatnia + if (fabs(tf1) > 0.5) // maksymalna odległość między sprzęgami - do przemyślenia + int1 = 0; // likwidacja sprzęgu, jeśli odległość zbyt duża - to powinno być + // uwzględniane w fizyce sprzęgów... + TempConnectionType[iTrainSetWehicleNumber] = int1; // wartość dodatnia } else { // pojazd wstawiony luzem - fTrainSetDist = 0; // zerowanie dodatkowego przesunicia - asTrainName = ""; // puste oznacza jazd pojedynczego bez rozkadu, "none" jest dla - // skadu (trainset) + fTrainSetDist = 0; // zerowanie dodatkowego przesunięcia + asTrainName = ""; // puste oznacza jazdę pojedynczego bez rozkładu, "none" jest dla + // składu (trainset) parser->getTokens(); *parser >> token; str = token; // track @@ -1842,21 +1842,21 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) DriverType = token; // McZapkie:010303: obsada parser->getTokens(); *parser >> - tf3; // prdko, niektrzy wpisuj tu "3" jako sprzg, eby nie byo tabliczki + tf3; // prędkość, niektórzy wpisują tu "3" jako sprzęg, żeby nie było tabliczki iTrainSetWehicleNumber = 0; - TempConnectionType[iTrainSetWehicleNumber] = 3; // likwidacja tabliczki na kocu? + TempConnectionType[iTrainSetWehicleNumber] = 3; // likwidacja tabliczki na końcu? } parser->getTokens(); - *parser >> int2; // ilo adunku + *parser >> int2; // ilość ładunku if (int2 > 0) - { // jeeli adunku jest wicej ni 0, to rozpoznajemy jego typ + { // jeżeli ładunku jest więcej niż 0, to rozpoznajemy jego typ parser->getTokens(); *parser >> token; str2 = token; // LoadType - if (str2 == "enddynamic") // idiotoodporno: adunek bez podanego typu + if (str2 == "enddynamic") // idiotoodporność: ładunek bez podanego typu { str2 = ""; - int2 = 0; // ilo bez typu si nie liczy jako adunek + int2 = 0; // ilość bez typu się nie liczy jako ładunek } } else @@ -1864,56 +1864,56 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) tmp1 = FindGroundNode(str, TP_TRACK); // poszukiwanie toru if (tmp1 ? tmp1->pTrack != NULL : false) - { // jeli tor znaleziony + { // jeśli tor znaleziony Track = tmp1->pTrack; - if (!iTrainSetWehicleNumber) // jeli pierwszy pojazd - if (Track->evEvent0) // jeli tor ma Event0 - if (fabs(fTrainSetVel) <= 1.0) // a skad stoi - if (fTrainSetDist >= 0.0) // ale moe nie siga na owy tor - if (fTrainSetDist < 8.0) // i raczej nie siga + if (!iTrainSetWehicleNumber) // jeśli pierwszy pojazd + if (Track->evEvent0) // jeśli tor ma Event0 + if (fabs(fTrainSetVel) <= 1.0) // a skład stoi + if (fTrainSetDist >= 0.0) // ale może nie sięgać na owy tor + if (fTrainSetDist < 8.0) // i raczej nie sięga fTrainSetDist = - 8.0; // przesuwamy okoo p EU07 dla wstecznej zgodnoci + 8.0; // przesuwamy około pół EU07 dla wstecznej zgodności // WriteLog("Dynamic shift: "+AnsiString(fTrainSetDist)); - /* //Ra: to jednak robi due problemy - przesunicie w dynamic jest przesuniciem do - tyu, odwrotnie ni w trainset - if (!iTrainSetWehicleNumber) //dla pierwszego jest to przesunicie (ujemne = do - tyu) - if (tf1!=-1.0) //-1 wyjtkowo oznacza odwrcenie - tf1=-tf1; //a dla kolejnych odlego midzy sprzgami (ujemne = wbite) + /* //Ra: to jednak robi duże problemy - przesunięcie w dynamic jest przesunięciem do + tyłu, odwrotnie niż w trainset + if (!iTrainSetWehicleNumber) //dla pierwszego jest to przesunięcie (ujemne = do + tyłu) + if (tf1!=-1.0) //-1 wyjątkowo oznacza odwrócenie + tf1=-tf1; //a dla kolejnych odległość między sprzęgami (ujemne = wbite) */ tf3 = tmp->DynamicObject->Init(asNodeName, str1, Skin, str3, Track, (tf1 == -1.0 ? fTrainSetDist : fTrainSetDist - tf1), DriverType, tf3, asTrainName, int2, str2, (tf1 == -1.0), str4); - if (tf3 != 0.0) // zero oznacza bd + if (tf3 != 0.0) // zero oznacza błąd { fTrainSetDist -= - tf3; // przesunicie dla kolejnego, minus bo idziemy w stron punktu 1 + tf3; // przesunięcie dla kolejnego, minus bo idziemy w stronę punktu 1 tmp->pCenter = tmp->DynamicObject->GetPosition(); - if (TempConnectionType[iTrainSetWehicleNumber]) // jeli jest sprzg + if (TempConnectionType[iTrainSetWehicleNumber]) // jeśli jest sprzęg if (tmp->DynamicObject->MoverParameters->Couplers[tf1 == -1.0 ? 0 : 1] .AllowedFlag & ctrain_depot) // jesli zablokowany - TempConnectionType[iTrainSetWehicleNumber] |= ctrain_depot; // bdzie + TempConnectionType[iTrainSetWehicleNumber] |= ctrain_depot; // będzie // blokada iTrainSetWehicleNumber++; } else { // LastNode=NULL; delete tmp; - tmp = NULL; // nie moe by tu return, bo trzeba pomin jeszcze enddynamic + tmp = NULL; // nie może być tu return, bo trzeba pominąć jeszcze enddynamic } } else { // gdy tor nie znaleziony ErrorLog("Missed track: dynamic placed on \"" + tmp->DynamicObject->asTrack + "\""); delete tmp; - tmp = NULL; // nie moe by tu return, bo trzeba pomin jeszcze enddynamic + tmp = NULL; // nie może być tu return, bo trzeba pominąć jeszcze enddynamic } parser->getTokens(); *parser >> token; if (token.compare("destination") == 0) - { // dokd wagon ma jecha, uwzgldniane przy manewrach + { // dokąd wagon ma jechać, uwzględniane przy manewrach parser->getTokens(); *parser >> token; if (tmp) @@ -1927,7 +1927,7 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) if (rmin < 0) { tmp->iType = TP_TERRAIN; - tmp->fSquareMinRadius = 0; // to w ogle potrzebne? + tmp->fSquareMinRadius = 0; // to w ogóle potrzebne? } parser->getTokens(3); *parser >> tmp->pCenter.x >> tmp->pCenter.y >> tmp->pCenter.z; @@ -1940,28 +1940,28 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) // tmp->fAngle+=aRotate.y; // /180*M_PI /* if (tmp->iType==TP_MODEL) - {//jeli standardowy model + {//jeśli standardowy model */ tmp->Model = new TAnimModel(); tmp->Model->RaAnglesSet(aRotate.x, tf1 + aRotate.y, aRotate.z); // dostosowanie do pochylania linii if (tmp->Model->Load( - parser, tmp->iType == TP_TERRAIN)) // wczytanie modelu, tekstury i stanu wiate... + parser, tmp->iType == TP_TERRAIN)) // wczytanie modelu, tekstury i stanu świateł... tmp->iFlags = tmp->Model->Flags() | 0x200; // ustalenie, czy przezroczysty; flaga usuwania else if (tmp->iType != TP_TERRAIN) - { // model nie wczyta si - ignorowanie node + { // model nie wczytał się - ignorowanie node delete tmp; - tmp = NULL; // nie moe by tu return - break; // nie moe by tu return? + tmp = NULL; // nie może być tu return + break; // nie może być tu return? } /* } else if (tmp->iType==TP_TERRAIN) - {//nie potrzeba nakadki animujcej submodele + {//nie potrzeba nakładki animującej submodele *parser >> token; tmp->pModel3D=TModelsManager::GetModel(token.c_str(),false); - do //Ra: z tym to troch bez sensu jest + do //Ra: z tym to trochę bez sensu jest {parser->getTokens(); *parser >> token; str=AnsiString(token.c_str()); @@ -1969,14 +1969,14 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) } */ if (tmp->iType == TP_TERRAIN) - { // jeli model jest terenem, trzeba utworzy dodatkowe obiekty - // po wczytaniu model ma ju utworzone DL albo VBO + { // jeśli model jest terenem, trzeba utworzyć dodatkowe obiekty + // po wczytaniu model ma już utworzone DL albo VBO Global::pTerrainCompact = tmp->Model; // istnieje co najmniej jeden obiekt terenu tmp->iCount = Global::pTerrainCompact->TerrainCount() + 1; // zliczenie submodeli - tmp->nNode = new TGroundNode[tmp->iCount]; // sztuczne node dla kwadratw + tmp->nNode = new TGroundNode[tmp->iCount]; // sztuczne node dla kwadratów tmp->nNode[0].iType = TP_MODEL; // pierwszy zawiera model (dla delete) tmp->nNode[0].Model = Global::pTerrainCompact; - tmp->nNode[0].iFlags = 0x200; // nie wywietlany, ale usuwany + tmp->nNode[0].iFlags = 0x200; // nie wyświetlany, ale usuwany for (i = 1; i < tmp->iCount; ++i) { // a reszta to submodele tmp->nNode[i].iType = TP_SUBMODEL; // @@ -1990,10 +1990,10 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) else if (!tmp->asName.empty()) // jest pusta gdy "none" { // dodanie do wyszukiwarki if (sTracks->Update(TP_MODEL, tmp->asName.c_str(), - tmp)) // najpierw sprawdzi, czy ju jest - { // przy zdublowaniu wskanik zostanie podmieniony w drzewku na pniejszy (zgodno + tmp)) // najpierw sprawdzić, czy już jest + { // przy zdublowaniu wskaźnik zostanie podmieniony w drzewku na późniejszy (zgodność // wsteczna) - ErrorLog("Duplicated model: " + tmp->asName); // to zgasza duplikat + ErrorLog("Duplicated model: " + tmp->asName); // to zgłaszać duplikat } else sTracks->Add(TP_MODEL, tmp->asName.c_str(), tmp); // nazwa jest unikalna @@ -2023,7 +2023,7 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) *parser >> tmp->Ambient[2]; } else if (token.compare("diffuse:") == 0) - { // Ra: co jest nie tak, bo w jednej linijce nie dziaa + { // Ra: coś jest nie tak, bo w jednej linijce nie działa parser->getTokens(); *parser >> tmp->Diffuse[0]; parser->getTokens(); @@ -2054,11 +2054,11 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) str = token; #ifdef _PROBLEND // PROBLEND Q: 13122011 - Szociu: 27012012 - PROBLEND = true; // domyslnie uruchomione nowe wywietlanie + PROBLEND = true; // domyslnie uruchomione nowe wyświetlanie tmp->PROBLEND = true; // odwolanie do tgroundnode, bo rendering jest w tej klasie if (str.find("@") != string::npos) // sprawdza, czy w nazwie tekstury jest znak "@" { - PROBLEND = false; // jeli jest, wyswietla po staremu + PROBLEND = false; // jeśli jest, wyswietla po staremu tmp->PROBLEND = false; } #endif @@ -2067,22 +2067,22 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) if (((tmp->iType == GL_TRIANGLES) && (tmp->iFlags & 0x10)) ? Global::pTerrainCompact->TerrainLoaded() : false) - { // jeli jest tekstura nieprzezroczysta, a teren zaadowany, to pomijamy trjkty + { // jeśli jest tekstura nieprzezroczysta, a teren załadowany, to pomijamy trójkąty do - { // pomijanie trjktw + { // pomijanie trójkątów parser->getTokens(); *parser >> token; } while (token.compare("endtri") != 0); - // delete tmp; //nie ma co tego trzyma - // tmp=NULL; //to jest bd + // delete tmp; //nie ma co tego trzymać + // tmp=NULL; //to jest błąd } else { i = 0; do { - if (i < 9999) // 3333 trjkty - { // liczba wierzchokw nie jest nieograniczona + if (i < 9999) // 3333 trójkąty + { // liczba wierzchołków nie jest nieograniczona parser->getTokens(3); *parser >> TempVerts[i].Point.x >> TempVerts[i].Point.y >> TempVerts[i].Point.z; parser->getTokens(3); @@ -2140,7 +2140,7 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) } while (token.compare("endtri") != 0); nv = i; - tmp->Init(nv); // utworzenie tablicy wierzchokw + tmp->Init(nv); // utworzenie tablicy wierzchołków tmp->pCenter /= (nv > 0 ? nv : 1); // memcpy(tmp->Vertices,TempVerts,nv*sizeof(TGroundVertex)); @@ -2156,8 +2156,8 @@ TGroundNode * TGround::AddGroundNode(cParser *parser) // tmp->fSquareRadius=2000*2000+r; tmp->fSquareRadius += r; - RaTriangleDivider(tmp); // Ra: dzielenie trjktw jest teraz cakiem wydajne - } // koniec wczytywania trjktw + RaTriangleDivider(tmp); // Ra: dzielenie trójkątów jest teraz całkiem wydajne + } // koniec wczytywania trójkątów break; case GL_LINES: case GL_LINE_STRIP: @@ -2212,15 +2212,15 @@ TSubRect * TGround::FastGetSubRect(int iCol, int iRow) } TSubRect * TGround::GetSubRect(int iCol, int iRow) -{ // znalezienie maego kwadratu mapy +{ // znalezienie małego kwadratu mapy int br, bc, sr, sc; - br = iRow / iNumSubRects; // wsprzdne kwadratu kilometrowego + br = iRow / iNumSubRects; // współrzędne kwadratu kilometrowego bc = iCol / iNumSubRects; - sr = iRow - br * iNumSubRects; // wsprzdne wzglne maego kwadratu + sr = iRow - br * iNumSubRects; // współrzędne wzglęne małego kwadratu sc = iCol - bc * iNumSubRects; if ((br < 0) || (bc < 0) || (br >= iNumRects) || (bc >= iNumRects)) - return NULL; // jeli poza map - return (Rects[br][bc].SafeGetRect(sc, sr)); // pobranie maego kwadratu + return NULL; // jeśli poza mapą + return (Rects[br][bc].SafeGetRect(sc, sr)); // pobranie małego kwadratu } TEvent * TGround::FindEvent(const string &asEventName) @@ -2237,24 +2237,24 @@ TEvent * TGround::FindEvent(const string &asEventName) } TEvent * TGround::FindEventScan(const string &asEventName) -{ // wyszukanie eventu z opcj utworzenia niejawnego dla komrek skanowanych - TEvent *e = (TEvent *)sTracks->Find(0, asEventName.c_str()); // wyszukiwanie w drzewie eventw +{ // wyszukanie eventu z opcją utworzenia niejawnego dla komórek skanowanych + TEvent *e = (TEvent *)sTracks->Find(0, asEventName.c_str()); // wyszukiwanie w drzewie eventów if (e) - return e; // jak istnieje, to w porzdku + return e; // jak istnieje, to w porządku if (asEventName.substr(asEventName.length() - 4, 5) == - ":scan") // jeszcze moe by event niejawny - { // no to szukamy komrki pamici o nazwie zawartej w evencie + ":scan") // jeszcze może być event niejawny + { // no to szukamy komórki pamięci o nazwie zawartej w evencie string n = asEventName.substr(0, asEventName.length() - 5); // do dwukropka - if (sTracks->Find(TP_MEMCELL, n.c_str())) // jeli jest takowa komrka pamici + if (sTracks->Find(TP_MEMCELL, n.c_str())) // jeśli jest takowa komórka pamięci e = new TEvent(n); // utworzenie niejawnego eventu jej odczytu } - return e; // utworzony albo si nie udao + return e; // utworzony albo się nie udało } void TGround::FirstInit() -{ // ustalanie zalenoci na scenerii przed wczytaniem pojazdw +{ // ustalanie zależności na scenerii przed wczytaniem pojazdów if (bInitDone) - return; // Ra: eby nie robio si dwa razy + return; // Ra: żeby nie robiło się dwa razy bInitDone = true; WriteLog("InitNormals"); int i, j; @@ -2264,31 +2264,31 @@ void TGround::FirstInit() { Current->InitNormals(); if (Current->iType != TP_DYNAMIC) - { // pojazdw w ogle nie dotyczy dodawanie do mapy + { // pojazdów w ogóle nie dotyczy dodawanie do mapy if (i == TP_EVLAUNCH ? Current->EvLaunch->IsGlobal() : false) srGlobal.NodeAdd(Current); // dodanie do globalnego obiektu else if (i == TP_TERRAIN) { // specjalne przetwarzanie terenu wczytanego z pliku E3D TGroundRect *gr; for (j = 1; j < Current->iCount; ++j) - { // od 1 do koca s zestawy trjktw + { // od 1 do końca są zestawy trójkątów std::string xxxzzz = Current->nNode[j].smTerrain->pName; // pobranie nazwy gr = GetRect(1000 * (stol_def(xxxzzz.substr(0, 3),0) - 500), 1000 * (stol_def(xxxzzz.substr(3, 3),0) - 500)); if (Global::bUseVBO) - gr->nTerrain = Current->nNode + j; // zapamitanie + gr->nTerrain = Current->nNode + j; // zapamiętanie else gr->RaNodeAdd(&Current->nNode[j]); } } // else if // ((Current->iType!=GL_TRIANGLES)&&(Current->iType!=GL_TRIANGLE_STRIP)?true - // //~czy trjkt? + // //~czy trójkąt? else if ((Current->iType != GL_TRIANGLES) ? - true //~czy trjkt? + true //~czy trójkąt? : (Current->iFlags & 0x20) ? - true //~czy tekstur ma nieprzezroczyst? + true //~czy teksturę ma nieprzezroczystą? : (Current->fSquareMinRadius != 0.0) ? true //~czy widoczny z bliska? @@ -2304,13 +2304,13 @@ void TGround::FirstInit() } for (i = 0; i < iNumRects; ++i) for (j = 0; j < iNumRects; ++j) - Rects[i][j].Optimize(); // optymalizacja obiektw w sektorach + Rects[i][j].Optimize(); // optymalizacja obiektów w sektorach WriteLog("InitNormals OK"); WriteLog("InitTracks"); - InitTracks(); //czenie odcinkw ze sob i przyklejanie eventw + InitTracks(); //łączenie odcinków ze sobą i przyklejanie eventów WriteLog("InitTracks OK"); WriteLog("InitTraction"); - InitTraction(); //czenie drutw ze sob + InitTraction(); //łączenie drutów ze sobą WriteLog("InitTraction OK"); WriteLog("InitEvents"); InitEvents(); @@ -2324,7 +2324,7 @@ void TGround::FirstInit() hh, mm, srh, srm, ssh, ssm); // McZapkie-300302: inicjacja czasu rozkladowego - TODO: czytac z trasy! WriteLog("InitGlobalTime OK"); - // jeszcze ustawienie pogody, gdyby nie byo w scenerii wpisw + // jeszcze ustawienie pogody, gdyby nie było w scenerii wpisów glClearColor(Global::AtmoColor[0], Global::AtmoColor[1], Global::AtmoColor[2], 0.0); // Background Color if (Global::fFogEnd > 0) @@ -2340,35 +2340,35 @@ void TGround::FirstInit() glDisable(GL_LIGHTING); glLightfv(GL_LIGHT0, GL_POSITION, Global::lightPos); // daylight position glLightfv(GL_LIGHT0, GL_AMBIENT, Global::ambientDayLight); // kolor wszechobceny - glLightfv(GL_LIGHT0, GL_DIFFUSE, Global::diffuseDayLight); // kolor padajcy + glLightfv(GL_LIGHT0, GL_DIFFUSE, Global::diffuseDayLight); // kolor padający glLightfv(GL_LIGHT0, GL_SPECULAR, Global::specularDayLight); // kolor odbity - // musi by tutaj, bo wczeniej nie mielimy wartoci wiata - if (Global::fMoveLight >= 0.0) // albo tak, albo niech ustala minimum ciemnoci w nocy + // musi być tutaj, bo wcześniej nie mieliśmy wartości światła + if (Global::fMoveLight >= 0.0) // albo tak, albo niech ustala minimum ciemności w nocy { - Global::fLuminance = // obliczenie luminacji "wiata w ciemnoci" + Global::fLuminance = // obliczenie luminacji "światła w ciemności" +0.150 * Global::ambientDayLight[0] // R + 0.295 * Global::ambientDayLight[1] // G + 0.055 * Global::ambientDayLight[2]; // B - if (Global::fLuminance > 0.1) // jeli miao by by za jasno + if (Global::fLuminance > 0.1) // jeśli miało by być za jasno for (int i = 0; i < 3; i++) Global::ambientDayLight[i] *= - 0.1 / Global::fLuminance; // ograniczenie jasnoci w nocy + 0.1 / Global::fLuminance; // ograniczenie jasności w nocy glLightModelfv(GL_LIGHT_MODEL_AMBIENT, Global::ambientDayLight); } - else if (Global::bDoubleAmbient) // Ra: wczeniej byo ambient dawane na obydwa wiata + else if (Global::bDoubleAmbient) // Ra: wcześniej było ambient dawane na obydwa światła glLightModelfv(GL_LIGHT_MODEL_AMBIENT, Global::ambientDayLight); glEnable(GL_LIGHTING); WriteLog("FirstInit is done"); }; bool TGround::Init(std::string asFile, HDC hDC) -{ // gwne wczytywanie scenerii +{ // główne wczytywanie scenerii if (ToLower(asFile).substr(0, 7) == "scenery") - asFile = asFile.erase(0, 8); // Ra: usunicie niepotrzebnych znakw - zgodno wstecz z 2003 + asFile = asFile.erase(0, 8); // Ra: usunięcie niepotrzebnych znaków - zgodność wstecz z 2003 WriteLog("Loading scenery from " + asFile); Global::pGround = this; // pTrain=NULL; - pOrigin = aRotate = vector3(0, 0, 0); // zerowanie przesunicia i obrotu + pOrigin = aRotate = vector3(0, 0, 0); // zerowanie przesunięcia i obrotu string str = ""; // TFileStream *fs; // int size; @@ -2392,9 +2392,9 @@ bool TGround::Init(std::string asFile, HDC hDC) Parser->First(); AnsiString Token,asFileName; */ - const int OriginStackMaxDepth = 100; // rozmiar stosu dla zagniedenia origin + const int OriginStackMaxDepth = 100; // rozmiar stosu dla zagnieżdżenia origin int OriginStackTop = 0; - vector3 OriginStack[OriginStackMaxDepth]; // stos zagniedenia origin + vector3 OriginStack[OriginStackMaxDepth]; // stos zagnieżdżenia origin double tf; int ParamCount, ParamPos; @@ -2406,7 +2406,7 @@ bool TGround::Init(std::string asFile, HDC hDC) srm = 0; // minuty wschodu slonca ssh = 20; // godzina zachodu slonca ssm = 0; // minuty zachodu slonca - TGroundNode *LastNode = NULL; // do uycia w trainset + TGroundNode *LastNode = NULL; // do użycia w trainset iNumNodes = 0; token = ""; parser.getTokens(); @@ -2416,7 +2416,7 @@ bool TGround::Init(std::string asFile, HDC hDC) while (token != "") //(!Parser->EndOfFile) { if (refresh == 50) - { // SwapBuffers(hDC); //Ra: bez ogranicznika za bardzo spowalnia :( a u niektrych miga + { // SwapBuffers(hDC); //Ra: bez ogranicznika za bardzo spowalnia :( a u niektórych miga refresh = 0; Global::DoEvents(); } @@ -2425,51 +2425,51 @@ bool TGround::Init(std::string asFile, HDC hDC) str = token; if (str == "node") { - LastNode = AddGroundNode(&parser); // rozpoznanie wza + LastNode = AddGroundNode(&parser); // rozpoznanie węzła if (LastNode) - { // jeeli przetworzony poprawnie + { // jeżeli przetworzony poprawnie if (LastNode->iType == GL_TRIANGLES) { if (!LastNode->Vertices) - SafeDelete(LastNode); // usuwamy nieprzezroczyste trjkty terenu + SafeDelete(LastNode); // usuwamy nieprzezroczyste trójkąty terenu } else if (Global::bLoadTraction ? false : LastNode->iType == TP_TRACTION) - SafeDelete(LastNode); // usuwamy druty, jeli wyczone + SafeDelete(LastNode); // usuwamy druty, jeśli wyłączone if (LastNode) // dopiero na koniec dopisujemy do tablic if (LastNode->iType != TP_DYNAMIC) - { // jeli nie jest pojazdem - LastNode->nNext = nRootOfType[LastNode->iType]; // ostatni dodany doczamy - // na kocu nowego + { // jeśli nie jest pojazdem + LastNode->nNext = nRootOfType[LastNode->iType]; // ostatni dodany dołączamy + // na końcu nowego nRootOfType[LastNode->iType] = - LastNode; // ustawienie nowego na pocztku listy + LastNode; // ustawienie nowego na początku listy iNumNodes++; } else - { // jeli jest pojazdem - // if (!bInitDone) FirstInit(); //jeli nie byo w scenerii - if (LastNode->DynamicObject->Mechanik) // ale moe by pasaer + { // jeśli jest pojazdem + // if (!bInitDone) FirstInit(); //jeśli nie było w scenerii + if (LastNode->DynamicObject->Mechanik) // ale może być pasażer if (LastNode->DynamicObject->Mechanik - ->Primary()) // jeli jest gwnym (pasaer nie jest) + ->Primary()) // jeśli jest głównym (pasażer nie jest) nTrainSetDriver = - LastNode; // pojazd, ktremu zostanie wysany rozkad + LastNode; // pojazd, któremu zostanie wysłany rozkład LastNode->nNext = nRootDynamic; nRootDynamic = LastNode; // dopisanie z przodu do listy // if (bTrainSet && (LastNode?(LastNode->iType==TP_DYNAMIC):false)) - if (nTrainSetNode) // jeeli istnieje wczeniejszy TP_DYNAMIC + if (nTrainSetNode) // jeżeli istnieje wcześniejszy TP_DYNAMIC nTrainSetNode->DynamicObject->AttachPrev( LastNode->DynamicObject, TempConnectionType[iTrainSetWehicleNumber - 2]); nTrainSetNode = LastNode; // ostatnio wczytany if (TempConnectionType[iTrainSetWehicleNumber - 1] == - 0) // jeli sprzg jest zerowy, to wysa rozkad do skadu - { // powinien te tu wchodzi, gdy pojazd bez trainset - if (nTrainSetDriver) // pojazd, ktremu zostanie wysany rozkad - { // wysanie komendy "Timetable" ustawia odpowiedni tryb jazdy + 0) // jeśli sprzęg jest zerowy, to wysłać rozkład do składu + { // powinien też tu wchodzić, gdy pojazd bez trainset + if (nTrainSetDriver) // pojazd, któremu zostanie wysłany rozkład + { // wysłanie komendy "Timetable" ustawia odpowiedni tryb jazdy nTrainSetDriver->DynamicObject->Mechanik->DirectionInitial(); nTrainSetDriver->DynamicObject->Mechanik->PutCommand( "Timetable:" + asTrainName, fTrainSetVel, 0, NULL); nTrainSetDriver = - NULL; // a przy "endtrainset" ju wtedy nie potrzeba + NULL; // a przy "endtrainset" już wtedy nie potrzeba } } } @@ -2484,23 +2484,23 @@ bool TGround::Init(std::string asFile, HDC hDC) { iTrainSetWehicleNumber = 0; nTrainSetNode = NULL; - nTrainSetDriver = NULL; // pojazd, ktremu zostanie wysany rozkad + nTrainSetDriver = NULL; // pojazd, któremu zostanie wysłany rozkład bTrainSet = true; parser.getTokens(); parser >> token; asTrainName = token; // McZapkie: rodzaj+nazwa pociagu w SRJP parser.getTokens(); parser >> token; - asTrainSetTrack = token; //cieka startowa + asTrainSetTrack = token; //ścieżka startowa parser.getTokens(2); - parser >> fTrainSetDist >> fTrainSetVel; // przesunicie i prdko + parser >> fTrainSetDist >> fTrainSetVel; // przesunięcie i prędkość } else if (str == "endtrainset") { // McZapkie-110103: sygnaly konca pociagu ale tylko dla pociagow rozkladowych - if (nTrainSetNode) // trainset bez dynamic si sypa - { // powinien te tu wchodzi, gdy pojazd bez trainset - if (nTrainSetDriver) // pojazd, ktremu zostanie wysany rozkad - { // wysanie komendy "Timetable" ustawia odpowiedni tryb jazdy + if (nTrainSetNode) // trainset bez dynamic się sypał + { // powinien też tu wchodzić, gdy pojazd bez trainset + if (nTrainSetDriver) // pojazd, któremu zostanie wysłany rozkład + { // wysłanie komendy "Timetable" ustawia odpowiedni tryb jazdy nTrainSetDriver->DynamicObject->Mechanik->DirectionInitial(); nTrainSetDriver->DynamicObject->Mechanik->PutCommand("Timetable:" + asTrainName, fTrainSetVel, 0, NULL); @@ -2508,12 +2508,12 @@ bool TGround::Init(std::string asFile, HDC hDC) } if (LastNode) // ostatni wczytany obiekt if (LastNode->iType == - TP_DYNAMIC) // o ile jest pojazdem (na og jest, ale kto wie...) + TP_DYNAMIC) // o ile jest pojazdem (na ogół jest, ale kto wie...) if (iTrainSetWehicleNumber ? !TempConnectionType[iTrainSetWehicleNumber - 1] : - false) // jeli ostatni pojazd ma sprzg 0 - LastNode->DynamicObject->RaLightsSet(-1, 2 + 32 + 64); // to zaoymy mu - // kocwki blaszane - // (jak AI si + false) // jeśli ostatni pojazd ma sprzęg 0 + LastNode->DynamicObject->RaLightsSet(-1, 2 + 32 + 64); // to założymy mu + // końcówki blaszane + // (jak AI się // odpali, to sobie // poprawi) bTrainSet = false; @@ -2532,50 +2532,50 @@ bool TGround::Init(std::string asFile, HDC hDC) { // najpierw sprawdzamy, czy nie ma, a potem dopisujemy TEvent *found = FindEvent(tmp->asName); if (found) - { // jeli znaleziony duplikat + { // jeśli znaleziony duplikat int i = tmp->asName.length(); if (tmp->asName[1] == '#') // zawsze jeden znak co najmniej jest { delete tmp; tmp = NULL; - } // utylizacja duplikatu z krzyykiem + } // utylizacja duplikatu z krzyżykiem else if (i > 8 ? tmp->asName.substr(0, 9) == "lineinfo:" : - false) // tymczasowo wyjtki + false) // tymczasowo wyjątki { delete tmp; tmp = NULL; - } // tymczasowa utylizacja duplikatw W5 + } // tymczasowa utylizacja duplikatów W5 else if (i > 8 ? tmp->asName.substr(i - 7, 8) == "_warning" : - false) // tymczasowo wyjtki + false) // tymczasowo wyjątki { delete tmp; tmp = NULL; - } // tymczasowa utylizacja duplikatu z trbieniem + } // tymczasowa utylizacja duplikatu z trąbieniem else if (i > 4 ? tmp->asName.substr(i - 3, 4) == "_shp" : - false) // nie podlegaj logowaniu + false) // nie podlegają logowaniu { delete tmp; tmp = NULL; } // tymczasowa utylizacja duplikatu SHP - if (tmp) // jeli nie zosta zutylizowany + if (tmp) // jeśli nie został zutylizowany if (Global::bJoinEvents) - found->Append(tmp); // doczepka (taki wirtualny multiple bez warunkw) + found->Append(tmp); // doczepka (taki wirtualny multiple bez warunków) else { ErrorLog("Duplicated event: " + tmp->asName); - found->Append(tmp); // doczepka (taki wirtualny multiple bez warunkw) + found->Append(tmp); // doczepka (taki wirtualny multiple bez warunków) found->Type = tp_Ignored; // dezaktywacja pierwotnego - taka proteza na - // wsteczn zgodno - // SafeDelete(tmp); //bezlitonie usuwamy wszelkie duplikaty, eby nie - // zamieca drzewka + // wsteczną zgodność + // SafeDelete(tmp); //bezlitośnie usuwamy wszelkie duplikaty, żeby nie + // zaśmiecać drzewka } } if (tmp) - { // jeli nie duplikat - tmp->evNext2 = RootEvent; // lista wszystkich eventw (m.in. do InitEvents) + { // jeśli nie duplikat + tmp->evNext2 = RootEvent; // lista wszystkich eventów (m.in. do InitEvents) RootEvent = tmp; if (!found) - { // jeli nazwa wystpia, to do kolejki i wyszukiwarki dodawany jest tylko + { // jeśli nazwa wystąpiła, to do kolejki i wyszukiwarki dodawany jest tylko // pierwszy if (RootEvent->Type != tp_Ignored) if (RootEvent->asName.find( @@ -2594,7 +2594,7 @@ bool TGround::Init(std::string asFile, HDC hDC) else if (str == "rotate") { // parser.getTokens(3); - // parser >> aRotate.x >> aRotate.y >> aRotate.z; //Ra: to potrafi dawa bdne + // parser >> aRotate.x >> aRotate.y >> aRotate.z; //Ra: to potrafi dawać błędne // rezultaty parser.getTokens(); parser >> aRotate.x; @@ -2618,8 +2618,8 @@ bool TGround::Init(std::string asFile, HDC hDC) parser.getTokens(3); parser >> OriginStack[OriginStackTop].x >> OriginStack[OriginStackTop].y >> OriginStack[OriginStackTop].z; - pOrigin += OriginStack[OriginStackTop]; // sumowanie cakowitego przesunicia - OriginStackTop++; // zwikszenie wskanika stosu + pOrigin += OriginStack[OriginStackTop]; // sumowanie całkowitego przesunięcia + OriginStackTop++; // zwiększenie wskaźnika stosu } } else if (str == "endorigin") @@ -2633,26 +2633,26 @@ bool TGround::Init(std::string asFile, HDC hDC) break; } - OriginStackTop--; // zmniejszenie wskanika stosu + OriginStackTop--; // zmniejszenie wskaźnika stosu pOrigin -= OriginStack[OriginStackTop]; } } else if (str == "atmo") // TODO: uporzadkowac gdzie maja byc parametry mgly! - { // Ra: ustawienie parametrw OpenGL przeniesione do FirstInit + { // Ra: ustawienie parametrów OpenGL przeniesione do FirstInit WriteLog("Scenery atmo definition"); parser.getTokens(3); parser >> Global::AtmoColor[0] >> Global::AtmoColor[1] >> Global::AtmoColor[2]; parser.getTokens(2); parser >> Global::fFogStart >> Global::fFogEnd; if (Global::fFogEnd > 0.0) - { // ostatnie 3 parametry s opcjonalne + { // ostatnie 3 parametry są opcjonalne parser.getTokens(3); parser >> Global::FogColor[0] >> Global::FogColor[1] >> Global::FogColor[2]; } parser.getTokens(); parser >> token; while (token.compare("endatmo") != 0) - { // a kolejne parametry s pomijane + { // a kolejne parametry są pomijane parser.getTokens(); parser >> token; } @@ -2708,7 +2708,7 @@ bool TGround::Init(std::string asFile, HDC hDC) } } else if (str == "light") - { // Ra: ustawianie wiata przeniesione do FirstInit + { // Ra: ustawianie światła przeniesione do FirstInit WriteLog("Scenery light definition"); vector3 lp; parser.getTokens(); @@ -2729,7 +2729,7 @@ bool TGround::Init(std::string asFile, HDC hDC) parser >> Global::ambientDayLight[2]; parser.getTokens(); - parser >> Global::diffuseDayLight[0]; // kolor padajcy + parser >> Global::diffuseDayLight[0]; // kolor padający parser.getTokens(); parser >> Global::diffuseDayLight[1]; parser.getTokens(); @@ -2751,15 +2751,15 @@ bool TGround::Init(std::string asFile, HDC hDC) else if (str == "camera") { vector3 xyz, abc; - xyz = abc = vector3(0, 0, 0); // wartoci domylne, bo nie wszystie musz by - int i = -1, into = -1; // do ktrej definicji kamery wstawi + xyz = abc = vector3(0, 0, 0); // wartości domyślne, bo nie wszystie muszą być + int i = -1, into = -1; // do której definicji kamery wstawić WriteLog("Scenery camera definition"); do - { // opcjonalna sidma liczba okrela numer kamery, a kiedy byy tylko 3 + { // opcjonalna siódma liczba określa numer kamery, a kiedyś były tylko 3 parser.getTokens(); parser >> token; switch (++i) - { // kiedy camera miao tylko 3 wsprzdne + { // kiedyś camera miało tylko 3 współrzędne case 0: xyz.x = atof(token.c_str()); break; @@ -2779,7 +2779,7 @@ bool TGround::Init(std::string asFile, HDC hDC) abc.z = atof(token.c_str()); break; case 6: - into = atoi(token.c_str()); // takie sobie, bo mona wpisa -1 + into = atoi(token.c_str()); // takie sobie, bo można wpisać -1 } } while (token.compare("endcamera") != 0); if (into < 0) @@ -2803,7 +2803,7 @@ bool TGround::Init(std::string asFile, HDC hDC) if (Global::asSky == "1") Global::asSky = SkyTemp; do - { // poarcie dodatkowych parametrw + { // pożarcie dodatkowych parametrów parser.getTokens(); parser >> token; } while (token.compare("endsky") != 0); @@ -2820,7 +2820,7 @@ bool TGround::Init(std::string asFile, HDC hDC) } while (token.compare("enddescription") != 0); } else if (str == "test") - { // wypisywanie treci po przetworzeniu + { // wypisywanie treści po przetworzeniu WriteLog("---> Parser test:"); do { @@ -2831,13 +2831,13 @@ bool TGround::Init(std::string asFile, HDC hDC) WriteLog("---> End of parser test."); } else if (str == "config") - { // moliwo przedefiniowania parametrw w scenerii - Global::ConfigParse(parser); // parsowanie dodatkowych ustawie + { // możliwość przedefiniowania parametrów w scenerii + Global::ConfigParse(parser); // parsowanie dodatkowych ustawień } else if (str != "") - { // pomijanie od nierozpoznanej komendy do jej zakoczenia + { // pomijanie od nierozpoznanej komendy do jej zakończenia if ((token.length() > 2) && (atof(token.c_str()) == 0.0)) - { // jeli nie liczba, to sprbowa pomin komend + { // jeśli nie liczba, to spróbować pominąć komendę WriteLog("Unrecognized command: " + str); str = "end" + str; do @@ -2847,7 +2847,7 @@ bool TGround::Init(std::string asFile, HDC hDC) parser >> token; } while ((token != "") && (token.compare(str.c_str()) != 0)); } - else // jak liczba to na pewno bd + else // jak liczba to na pewno błąd Error("Unrecognized command: " + str); } /* else if (str == "") @@ -2860,20 +2860,20 @@ bool TGround::Init(std::string asFile, HDC hDC) parser >> token; } - sTracks->Sort(TP_TRACK); // finalne sortowanie drzewa torw - sTracks->Sort(TP_MEMCELL); // finalne sortowanie drzewa komrek pamici + sTracks->Sort(TP_TRACK); // finalne sortowanie drzewa torów + sTracks->Sort(TP_MEMCELL); // finalne sortowanie drzewa komórek pamięci sTracks->Sort(TP_MODEL); // finalne sortowanie drzewa modeli - sTracks->Sort(0); // finalne sortowanie drzewa eventw + sTracks->Sort(0); // finalne sortowanie drzewa eventów if (!bInitDone) - FirstInit(); // jeli nie byo w scenerii + FirstInit(); // jeśli nie było w scenerii if (Global::pTerrainCompact) - TerrainWrite(); // Ra: teraz mona zapisa teren w jednym pliku + TerrainWrite(); // Ra: teraz można zapisać teren w jednym pliku Global::iPause &= ~0x10; // koniec pauzy wczytywania return true; } bool TGround::InitEvents() -{ //czenie eventw z pozostaymi obiektami +{ //łączenie eventów z pozostałymi obiektami TGroundNode *tmp, *trk; char buff[255]; int i; @@ -2881,16 +2881,16 @@ bool TGround::InitEvents() { switch (Current->Type) { - case tp_AddValues: // sumowanie wartoci - case tp_UpdateValues: // zmiana wartoci + case tp_AddValues: // sumowanie wartości + case tp_UpdateValues: // zmiana wartości tmp = FindGroundNode(Current->asNodeName, - TP_MEMCELL); // nazwa komrki powizanej z eventem + TP_MEMCELL); // nazwa komórki powiązanej z eventem if (tmp) { // McZapkie-100302 if (Current->iFlags & (conditional_trackoccupied | conditional_trackfree)) - { // jeli chodzi o zajetosc toru (tor moe by inny, ni wpisany w komrce) + { // jeśli chodzi o zajetosc toru (tor może być inny, niż wpisany w komórce) trk = FindGroundNode(Current->asNodeName, - TP_TRACK); // nazwa toru ta sama, co nazwa komrki + TP_TRACK); // nazwa toru ta sama, co nazwa komórki if (trk) Current->Params[9].asTrack = trk->pTrack; if (!Current->Params[9].asTrack) @@ -2898,12 +2898,12 @@ bool TGround::InitEvents() "\" does not exists in \"" + Current->asName + "\""); } Current->Params[4].nGroundNode = tmp; - Current->Params[5].asMemCell = tmp->MemCell; // komrka do aktualizacji + Current->Params[5].asMemCell = tmp->MemCell; // komórka do aktualizacji if (Current->iFlags & (conditional_memcompare)) - Current->Params[9].asMemCell = tmp->MemCell; // komrka do badania warunku + Current->Params[9].asMemCell = tmp->MemCell; // komórka do badania warunku if (!tmp->MemCell->asTrackName - .empty()) // tor powizany z komrk powizan z eventem - { // tu potrzebujemy wskanik do komrki w (tmp) + .empty()) // tor powiązany z komórką powiązaną z eventem + { // tu potrzebujemy wskaźnik do komórki w (tmp) trk = FindGroundNode(tmp->MemCell->asTrackName, TP_TRACK); if (trk) Current->Params[6].asTrack = trk->pTrack; @@ -2915,7 +2915,7 @@ bool TGround::InitEvents() Current->Params[6].asTrack = NULL; } else - { // nie ma komrki, to nie bdzie dziaa poprawnie + { // nie ma komórki, to nie będzie działał poprawnie Current->Type = tp_Ignored; // deaktywacja ErrorLog("Bad event: \"" + Current->asName + "\" cannot find memcell \"" + Current->asNodeName + "\""); @@ -2934,27 +2934,27 @@ bool TGround::InitEvents() { Current->Params[8].nGroundNode = tmp; Current->Params[9].asMemCell = tmp->MemCell; - if (Current->Type == tp_GetValues) // jeli odczyt komrki - if (tmp->MemCell->IsVelocity()) // a komrka zawiera komend SetVelocity albo + if (Current->Type == tp_GetValues) // jeśli odczyt komórki + if (tmp->MemCell->IsVelocity()) // a komórka zawiera komendę SetVelocity albo // ShuntVelocity - Current->bEnabled = false; // to event nie bdzie dodawany do kolejki + Current->bEnabled = false; // to event nie będzie dodawany do kolejki } else - { // nie ma komrki, to nie bdzie dziaa poprawnie + { // nie ma komórki, to nie będzie działał poprawnie Current->Type = tp_Ignored; // deaktywacja ErrorLog("Bad event: \"" + Current->asName + "\" cannot find memcell \"" + Current->asNodeName + "\""); } break; - case tp_CopyValues: // skopiowanie komrki do innej - tmp = FindGroundNode(Current->asNodeName, TP_MEMCELL); // komrka docelowa + case tp_CopyValues: // skopiowanie komórki do innej + tmp = FindGroundNode(Current->asNodeName, TP_MEMCELL); // komórka docelowa if (tmp) { Current->Params[4].nGroundNode = tmp; - Current->Params[5].asMemCell = tmp->MemCell; // komrka docelowa + Current->Params[5].asMemCell = tmp->MemCell; // komórka docelowa if (!tmp->MemCell->asTrackName - .empty()) // tor powizany z komrk powizan z eventem - { // tu potrzebujemy wskanik do komrki w (tmp) + .empty()) // tor powiązany z komórką powiązaną z eventem + { // tu potrzebujemy wskaźnik do komórki w (tmp) trk = FindGroundNode(tmp->MemCell->asTrackName, TP_TRACK); if (trk) Current->Params[6].asTrack = trk->pTrack; @@ -2970,13 +2970,13 @@ bool TGround::InitEvents() "\" cannot find memcell \"" + Current->asNodeName + "\""); strcpy( buff, - Current->Params[9].asText); // skopiowanie nazwy drugiej komrki do bufora roboczego - SafeDeleteArray(Current->Params[9].asText); // usunicie nazwy komrki - tmp = FindGroundNode(buff, TP_MEMCELL); // komrka dowa + Current->Params[9].asText); // skopiowanie nazwy drugiej komórki do bufora roboczego + SafeDeleteArray(Current->Params[9].asText); // usunięcie nazwy komórki + tmp = FindGroundNode(buff, TP_MEMCELL); // komórka źódłowa if (tmp) { Current->Params[8].nGroundNode = tmp; - Current->Params[9].asMemCell = tmp->MemCell; // komrka rdowa + Current->Params[9].asMemCell = tmp->MemCell; // komórka źródłowa } else ErrorLog("Bad copyvalues: event \"" + Current->asName + @@ -2989,9 +2989,9 @@ bool TGround::InitEvents() strcpy( buff, Current->Params[9].asText); // skopiowanie nazwy submodelu do bufora roboczego - SafeDeleteArray(Current->Params[9].asText); // usunicie nazwy submodelu + SafeDeleteArray(Current->Params[9].asText); // usunięcie nazwy submodelu if (Current->Params[0].asInt == 4) - Current->Params[9].asModel = tmp->Model; // model dla caomodelowych animacji + Current->Params[9].asModel = tmp->Model; // model dla całomodelowych animacji else { // standardowo przypisanie submodelu Current->Params[9].asAnimContainer = tmp->Model->GetContainer(buff); // submodel @@ -3000,7 +3000,7 @@ bool TGround::InitEvents() Current->Params[9].asAnimContainer->WillBeAnimated(); // oflagowanie // animacji if (!Current->Params[9] - .asAnimContainer->Event()) // nie szuka, gdy znaleziony + .asAnimContainer->Event()) // nie szukać, gdy znaleziony Current->Params[9].asAnimContainer->EventAssign( FindEvent(Current->asNodeName + "." + buff + ":done")); } @@ -3011,7 +3011,7 @@ bool TGround::InitEvents() Current->asNodeName + "\""); Current->asNodeName = ""; break; - case tp_Lights: // zmiana wiete modelu + case tp_Lights: // zmiana świeteł modelu tmp = FindGroundNode(Current->asNodeName, TP_MODEL); if (tmp) Current->Params[9].asModel = tmp->Model; @@ -3020,10 +3020,10 @@ bool TGround::InitEvents() Current->asNodeName + "\""); Current->asNodeName = ""; break; - case tp_Visible: // ukrycie albo przywrcenie obiektu + case tp_Visible: // ukrycie albo przywrócenie obiektu tmp = FindGroundNode(Current->asNodeName, TP_MODEL); // najpierw model if (!tmp) - tmp = FindGroundNode(Current->asNodeName, TP_TRACTION); // moe druty? + tmp = FindGroundNode(Current->asNodeName, TP_TRACTION); // może druty? if (!tmp) tmp = FindGroundNode(Current->asNodeName, TP_TRACK); // albo tory? if (tmp) @@ -3033,26 +3033,26 @@ bool TGround::InitEvents() Current->asNodeName + "\""); Current->asNodeName = ""; break; - case tp_Switch: // przeoenie zwrotnicy albo zmiana stanu obrotnicy + case tp_Switch: // przełożenie zwrotnicy albo zmiana stanu obrotnicy tmp = FindGroundNode(Current->asNodeName, TP_TRACK); if (tmp) - { // dowizanie toru - if (!tmp->pTrack->iAction) // jeli nie jest zwrotnic ani obrotnic - tmp->pTrack->iAction |= 0x100; // to bdzie si zmienia stan uszkodzenia + { // dowiązanie toru + if (!tmp->pTrack->iAction) // jeśli nie jest zwrotnicą ani obrotnicą + tmp->pTrack->iAction |= 0x100; // to będzie się zmieniał stan uszkodzenia Current->Params[9].asTrack = tmp->pTrack; - if (!Current->Params[0].asInt) // jeli przecza do stanu 0 + if (!Current->Params[0].asInt) // jeśli przełącza do stanu 0 if (Current->Params[2].asdouble >= - 0.0) // jeli jest zdefiniowany dodatkowy ruch iglic + 0.0) // jeśli jest zdefiniowany dodatkowy ruch iglic Current->Params[9].asTrack->Switch( 0, Current->Params[1].asdouble, - Current->Params[2].asdouble); // przesanie parametrw + Current->Params[2].asdouble); // przesłanie parametrów } else ErrorLog("Bad switch: event \"" + Current->asName + "\" cannot find track \"" + Current->asNodeName + "\""); Current->asNodeName = ""; break; - case tp_Sound: // odtworzenie dwiku + case tp_Sound: // odtworzenie dźwięku tmp = FindGroundNode(Current->asNodeName, TP_SOUND); if (tmp) Current->Params[9].tsTextSound = tmp->tsStaticSound; @@ -3061,14 +3061,14 @@ bool TGround::InitEvents() "\" cannot find static sound \"" + Current->asNodeName + "\""); Current->asNodeName = ""; break; - case tp_TrackVel: // ustawienie prdkoci na torze + case tp_TrackVel: // ustawienie prędkości na torze if (!Current->asNodeName.empty()) { tmp = FindGroundNode(Current->asNodeName, TP_TRACK); if (tmp) { tmp->pTrack->iAction |= - 0x200; // flaga zmiany prdkoci toru jest istotna dla skanowania + 0x200; // flaga zmiany prędkości toru jest istotna dla skanowania Current->Params[9].asTrack = tmp->pTrack; } else @@ -3096,12 +3096,12 @@ bool TGround::InitEvents() { // przepisanie nazwy do bufora strcpy(buff, Current->Params[9].asText); SafeDeleteArray(Current->Params[9].asText); - Current->Params[9].asPointer = NULL; // zerowanie wskanika, aby wykry brak obeiktu + Current->Params[9].asPointer = NULL; // zerowanie wskaźnika, aby wykryć brak obeiktu } else buff[0] = '\0'; if (Current->iFlags & (conditional_trackoccupied | conditional_trackfree)) - { // jeli chodzi o zajetosc toru + { // jeśli chodzi o zajetosc toru tmp = FindGroundNode(buff, TP_TRACK); if (tmp) Current->Params[9].asTrack = tmp->pTrack; @@ -3115,7 +3115,7 @@ bool TGround::InitEvents() } else if (Current->iFlags & (conditional_memstring | conditional_memval1 | conditional_memval2)) - { // jeli chodzi o komorke pamieciow + { // jeśli chodzi o komorke pamieciową tmp = FindGroundNode(buff, TP_MEMCELL); if (tmp) Current->Params[9].asMemCell = tmp->MemCell; @@ -3145,11 +3145,11 @@ bool TGround::InitEvents() } } break; - case tp_Voltage: // zmiana napicia w zasilaczu (TractionPowerSource) + case tp_Voltage: // zmiana napięcia w zasilaczu (TractionPowerSource) if (!Current->asNodeName.empty()) { tmp = FindGroundNode(Current->asNodeName, - TP_TRACTIONPOWERSOURCE); // podczenie zasilacza + TP_TRACTIONPOWERSOURCE); // podłączenie zasilacza if (tmp) Current->Params[9].psPower = tmp->psTractionPowerSource; else @@ -3158,21 +3158,21 @@ bool TGround::InitEvents() } Current->asNodeName = ""; break; - case tp_Message: // wywietlenie komunikatu + case tp_Message: // wyświetlenie komunikatu break; } if (Current->fDelay < 0) AddToQuery(Current, NULL); } for (TGroundNode *Current = nRootOfType[TP_MEMCELL]; Current; Current = Current->nNext) - { // Ra: eventy komrek pamici, wykonywane po wysaniu komendy do zatrzymanego pojazdu + { // Ra: eventy komórek pamięci, wykonywane po wysłaniu komendy do zatrzymanego pojazdu Current->MemCell->AssignEvents(FindEvent(Current->asName + ":sent")); } return true; } void TGround::InitTracks() -{ //czenie torw ze sob i z eventami +{ //łączenie torów ze sobą i z eventami TGroundNode *Current, *Model; TTrack *tmp; // znaleziony tor TTrack *Track; @@ -3184,7 +3184,7 @@ void TGround::InitTracks() Track = Current->pTrack; if (Global::iHiddenEvents & 1) if (!Current->asName.empty()) - { // jeli podana jest nazwa torw, mona szuka eventw skojarzonych przez nazw + { // jeśli podana jest nazwa torów, można szukać eventów skojarzonych przez nazwę if (Track->asEvent0Name.empty()) if (FindEvent(Current->asName + ":event0")) Track->asEvent0Name = Current->asName + ":event0"; @@ -3216,29 +3216,29 @@ void TGround::InitTracks() FindEvent(Track->asEventall2Name)); // MC-280503 switch (Track->eType) { - case tt_Table: // obrotnic te czymy na starcie z innymi torami + case tt_Table: // obrotnicę też łączymy na starcie z innymi torami Model = FindGroundNode(Current->asName, TP_MODEL); // szukamy modelu o tej samej nazwie - // if (tmp) //mamy model, trzeba zapamita wskanik do jego animacji - { // jak co pjdzie le, to robimy z tego normalny tor - // Track->ModelAssign(tmp->Model->GetContainer(NULL)); //wizanie toru z modelem + // if (tmp) //mamy model, trzeba zapamiętać wskaźnik do jego animacji + { // jak coś pójdzie źle, to robimy z tego normalny tor + // Track->ModelAssign(tmp->Model->GetContainer(NULL)); //wiązanie toru z modelem // obrotnicy Track->RaAssign( Current, Model ? Model->Model : NULL, FindEvent(Current->asName + ":done"), - FindEvent(Current->asName + ":joined")); // wizanie toru z modelem obrotnicy - // break; //jednak pocz z ssiednim, jak ma si wysypywa null track + FindEvent(Current->asName + ":joined")); // wiązanie toru z modelem obrotnicy + // break; //jednak połączę z sąsiednim, jak ma się wysypywać null track } if (!Model) // jak nie ma modelu - break; // to pewnie jest wykolejnica, a ta jest domylnie zamknita i wykoleja - case tt_Normal: // tylko proste s podczane do rozjazdw, std dwa rozjazdy si nie - // pocz ze sob - if (Track->CurrentPrev() == NULL) // tylko jeli jeszcze nie podczony + break; // to pewnie jest wykolejnica, a ta jest domyślnie zamknięta i wykoleja + case tt_Normal: // tylko proste są podłączane do rozjazdów, stąd dwa rozjazdy się nie + // połączą ze sobą + if (Track->CurrentPrev() == NULL) // tylko jeśli jeszcze nie podłączony { tmp = FindTrack(Track->CurrentSegment()->FastGetPoint_0(), iConnection, Current); switch (iConnection) { - case -1: // Ra: pierwsza koncepcja zawijania samochodw i statkw - // if ((Track->iCategoryFlag&1)==0) //jeli nie jest torem szynowym - // Track->ConnectPrevPrev(Track,0); //czenie koca odcinka do samego siebie + case -1: // Ra: pierwsza koncepcja zawijania samochodów i statków + // if ((Track->iCategoryFlag&1)==0) //jeśli nie jest torem szynowym + // Track->ConnectPrevPrev(Track,0); //łączenie końca odcinka do samego siebie break; case 0: Track->ConnectPrevPrev(tmp, 0); @@ -3248,34 +3248,34 @@ void TGround::InitTracks() break; case 2: Track->ConnectPrevPrev(tmp, 0); // do Point1 pierwszego - tmp->SetConnections(0); // zapamitanie ustawie w Segmencie + tmp->SetConnections(0); // zapamiętanie ustawień w Segmencie break; case 3: Track->ConnectPrevNext(tmp, 1); // do Point2 pierwszego - tmp->SetConnections(0); // zapamitanie ustawie w Segmencie + tmp->SetConnections(0); // zapamiętanie ustawień w Segmencie break; case 4: tmp->Switch(1); Track->ConnectPrevPrev(tmp, 2); // do Point1 drugiego - tmp->SetConnections(1); // robi te Switch(0) + tmp->SetConnections(1); // robi też Switch(0) tmp->Switch(0); break; case 5: tmp->Switch(1); Track->ConnectPrevNext(tmp, 3); // do Point2 drugiego - tmp->SetConnections(1); // robi te Switch(0) + tmp->SetConnections(1); // robi też Switch(0) tmp->Switch(0); break; } } - if (Track->CurrentNext() == NULL) // tylko jeli jeszcze nie podczony + if (Track->CurrentNext() == NULL) // tylko jeśli jeszcze nie podłączony { tmp = FindTrack(Track->CurrentSegment()->FastGetPoint_1(), iConnection, Current); switch (iConnection) { - case -1: // Ra: pierwsza koncepcja zawijania samochodw i statkw - // if ((Track->iCategoryFlag&1)==0) //jeli nie jest torem szynowym - // Track->ConnectNextNext(Track,1); //czenie koca odcinka do samego siebie + case -1: // Ra: pierwsza koncepcja zawijania samochodów i statków + // if ((Track->iCategoryFlag&1)==0) //jeśli nie jest torem szynowym + // Track->ConnectNextNext(Track,1); //łączenie końca odcinka do samego siebie break; case 0: Track->ConnectNextPrev(tmp, 0); @@ -3285,102 +3285,102 @@ void TGround::InitTracks() break; case 2: Track->ConnectNextPrev(tmp, 0); - tmp->SetConnections(0); // zapamitanie ustawie w Segmencie + tmp->SetConnections(0); // zapamiętanie ustawień w Segmencie break; case 3: Track->ConnectNextNext(tmp, 1); - tmp->SetConnections(0); // zapamitanie ustawie w Segmencie + tmp->SetConnections(0); // zapamiętanie ustawień w Segmencie break; case 4: tmp->Switch(1); Track->ConnectNextPrev(tmp, 2); - tmp->SetConnections(1); // robi te Switch(0) + tmp->SetConnections(1); // robi też Switch(0) // tmp->Switch(0); break; case 5: tmp->Switch(1); Track->ConnectNextNext(tmp, 3); - tmp->SetConnections(1); // robi te Switch(0) + tmp->SetConnections(1); // robi też Switch(0) // tmp->Switch(0); break; } } break; - case tt_Switch: // dla rozjazdw szukamy eventw sygnalizacji rozprucia + case tt_Switch: // dla rozjazdów szukamy eventów sygnalizacji rozprucia Track->AssignForcedEvents(FindEvent(Current->asName + ":forced+"), FindEvent(Current->asName + ":forced-")); break; } name = Track->IsolatedName(); // pobranie nazwy odcinka izolowanego - if (!name.empty()) // jeli zostaa zwrcona nazwa + if (!name.empty()) // jeśli została zwrócona nazwa Track->IsolatedEventsAssign(FindEvent(name + ":busy"), FindEvent(name + ":free")); if (Current->asName.substr(0, 1) == - "*") // moliwy portal, jeli nie podczony od striny 1 + "*") // możliwy portal, jeśli nie podłączony od striny 1 if (!Track->CurrentPrev() && Track->CurrentNext()) Track->iCategoryFlag |= 0x100; // ustawienie flagi portalu } // WriteLog("Total "+AnsiString(tracks)+", far "+AnsiString(tracksfar)); TIsolated *p = TIsolated::Root(); while (p) - { // jeli si znajdzie, to poda wskanik - Current = FindGroundNode(p->asName, TP_MEMCELL); // czy jest komka o odpowiedniej nazwie + { // jeśli się znajdzie, to podać wskaźnik + Current = FindGroundNode(p->asName, TP_MEMCELL); // czy jest komóka o odpowiedniej nazwie if (Current) - p->pMemCell = Current->MemCell; // przypisanie powizanej komrki + p->pMemCell = Current->MemCell; // przypisanie powiązanej komórki else - { // utworzenie automatycznej komrki - Current = new TGroundNode(); // to nie musi mie nazwy, nazwa w wyszukiwarce wystarczy + { // utworzenie automatycznej komórki + Current = new TGroundNode(); // to nie musi mieć nazwy, nazwa w wyszukiwarce wystarczy // Current->asName=p->asName; //mazwa identyczna, jak nazwa odcinka izolowanego - Current->MemCell = new TMemCell(NULL); // nowa komrka + Current->MemCell = new TMemCell(NULL); // nowa komórka sTracks->Add(TP_MEMCELL, p->asName.c_str(), Current); // dodanie do wyszukiwarki Current->nNext = - nRootOfType[TP_MEMCELL]; // to nie powinno tutaj by, bo robi si mietnik + nRootOfType[TP_MEMCELL]; // to nie powinno tutaj być, bo robi się śmietnik nRootOfType[TP_MEMCELL] = Current; iNumNodes++; - p->pMemCell = Current->MemCell; // wskanik komki przekazany do odcinka izolowanego + p->pMemCell = Current->MemCell; // wskaźnik komóki przekazany do odcinka izolowanego } p = p->Next(); } // for (Current=nRootOfType[TP_TRACK];Current;Current=Current->nNext) // if (Current->pTrack->eType==tt_Cross) - // Current->pTrack->ConnectionsLog(); //zalogowanie informacji o poczeniach + // Current->pTrack->ConnectionsLog(); //zalogowanie informacji o połączeniach } void TGround::InitTraction() -{ //czenie drutw ze sob oraz z torami i eventami +{ //łączenie drutów ze sobą oraz z torami i eventami TGroundNode *nCurrent, *nTemp; - TTraction *tmp; // znalezione przso + TTraction *tmp; // znalezione przęsło TTraction *Traction; int iConnection; string name; for (nCurrent = nRootOfType[TP_TRACTION]; nCurrent; nCurrent = nCurrent->nNext) - { // podczenie do zasilacza, eby mona byo sumowa prd kilku pojazdw - // a jednoczenie z jednego miejsca zmienia napicie eventem - // wykonywane najpierw, eby mona byo logowa podczenie 2 zasilaczy do jednego drutu - // izolator zawieszony na przle jest ma by osobnym odcinkiem drutu o dugoci ok. 1m, - // podczonym do zasilacza o nazwie "*" (gwiazka); "none" nie bdzie odpowiednie + { // podłączenie do zasilacza, żeby można było sumować prąd kilku pojazdów + // a jednocześnie z jednego miejsca zmieniać napięcie eventem + // wykonywane najpierw, żeby można było logować podłączenie 2 zasilaczy do jednego drutu + // izolator zawieszony na przęśle jest ma być osobnym odcinkiem drutu o długości ok. 1m, + // podłączonym do zasilacza o nazwie "*" (gwiazka); "none" nie będzie odpowiednie Traction = nCurrent->hvTraction; nTemp = FindGroundNode(Traction->asPowerSupplyName, TP_TRACTIONPOWERSOURCE); if (nTemp) // jak zasilacz znaleziony - Traction->PowerSet(nTemp->psTractionPowerSource); // to podczy do przsa - else if (Traction->asPowerSupplyName != "*") // gwiazdka dla przsa z izolatorem - if (Traction->asPowerSupplyName != "none") // dopuszczamy na razie brak podczenia? - { // logowanie bdu i utworzenie zasilacza o domylnej zawartoci + Traction->PowerSet(nTemp->psTractionPowerSource); // to podłączyć do przęsła + else if (Traction->asPowerSupplyName != "*") // gwiazdka dla przęsła z izolatorem + if (Traction->asPowerSupplyName != "none") // dopuszczamy na razie brak podłączenia? + { // logowanie błędu i utworzenie zasilacza o domyślnej zawartości ErrorLog("Missed TractionPowerSource: " + Traction->asPowerSupplyName); nTemp = new TGroundNode(); nTemp->iType = TP_TRACTIONPOWERSOURCE; nTemp->asName = Traction->asPowerSupplyName; nTemp->psTractionPowerSource = new TTractionPowerSource(nTemp); nTemp->psTractionPowerSource->Init(Traction->NominalVoltage, Traction->MaxCurrent); - nTemp->nNext = nRootOfType[nTemp->iType]; // ostatni dodany doczamy na kocu + nTemp->nNext = nRootOfType[nTemp->iType]; // ostatni dodany dołączamy na końcu // nowego - nRootOfType[nTemp->iType] = nTemp; // ustawienie nowego na pocztku listy + nRootOfType[nTemp->iType] = nTemp; // ustawienie nowego na początku listy iNumNodes++; } } for (nCurrent = nRootOfType[TP_TRACTION]; nCurrent; nCurrent = nCurrent->nNext) { Traction = nCurrent->hvTraction; - if (!Traction->hvNext[0]) // tylko jeli jeszcze nie podczony + if (!Traction->hvNext[0]) // tylko jeśli jeszcze nie podłączony { tmp = FindTraction(&Traction->pPoint1, iConnection, nCurrent); switch (iConnection) @@ -3392,30 +3392,30 @@ void TGround::InitTraction() Traction->Connect(0, tmp, 1); break; } - if (Traction->hvNext[0]) // jeli zosta podczony - if (Traction->psSection && tmp->psSection) // tylko przso z izolatorem moe nie - // mie zasilania, bo ma 2, trzeba - // sprawdza ssiednie + if (Traction->hvNext[0]) // jeśli został podłączony + if (Traction->psSection && tmp->psSection) // tylko przęsło z izolatorem może nie + // mieć zasilania, bo ma 2, trzeba + // sprawdzać sąsiednie if (Traction->psSection != - tmp->psSection) // poczone odcinki maj rne zasilacze - { // to moe by albo podczenie podstacji lub kabiny sekcyjnej do sekcji, albo - // bd + tmp->psSection) // połączone odcinki mają różne zasilacze + { // to może być albo podłączenie podstacji lub kabiny sekcyjnej do sekcji, albo + // błąd if (Traction->psSection->bSection && !tmp->psSection->bSection) - { //(tmp->psSection) jest podstacj, a (Traction->psSection) nazw sekcji - tmp->PowerSet(Traction->psSection); // zastpienie wskazaniem sekcji + { //(tmp->psSection) jest podstacją, a (Traction->psSection) nazwą sekcji + tmp->PowerSet(Traction->psSection); // zastąpienie wskazaniem sekcji } else if (!Traction->psSection->bSection && tmp->psSection->bSection) - { //(Traction->psSection) jest podstacj, a (tmp->psSection) nazw sekcji - Traction->PowerSet(tmp->psSection); // zastpienie wskazaniem sekcji + { //(Traction->psSection) jest podstacją, a (tmp->psSection) nazwą sekcji + Traction->PowerSet(tmp->psSection); // zastąpienie wskazaniem sekcji } - else // jeli obie to sekcje albo obie podstacje, to bdzie bd + else // jeśli obie to sekcje albo obie podstacje, to będzie błąd ErrorLog("Bad power: at " + to_string(Traction->pPoint1.x, 2, 6) + " " + to_string(Traction->pPoint1.y, 2, 6) + " " + to_string(Traction->pPoint1.z, 2, 6)); } } - if (!Traction->hvNext[1]) // tylko jeli jeszcze nie podczony + if (!Traction->hvNext[1]) // tylko jeśli jeszcze nie podłączony { tmp = FindTraction(&Traction->pPoint2, iConnection, nCurrent); switch (iConnection) @@ -3427,22 +3427,22 @@ void TGround::InitTraction() Traction->Connect(1, tmp, 1); break; } - if (Traction->hvNext[1]) // jeli zosta podczony - if (Traction->psSection && tmp->psSection) // tylko przso z izolatorem moe nie - // mie zasilania, bo ma 2, trzeba - // sprawdza ssiednie + if (Traction->hvNext[1]) // jeśli został podłączony + if (Traction->psSection && tmp->psSection) // tylko przęsło z izolatorem może nie + // mieć zasilania, bo ma 2, trzeba + // sprawdzać sąsiednie if (Traction->psSection != tmp->psSection) - { // to moe by albo podczenie podstacji lub kabiny sekcyjnej do sekcji, albo - // bd + { // to może być albo podłączenie podstacji lub kabiny sekcyjnej do sekcji, albo + // błąd if (Traction->psSection->bSection && !tmp->psSection->bSection) - { //(tmp->psSection) jest podstacj, a (Traction->psSection) nazw sekcji - tmp->PowerSet(Traction->psSection); // zastpienie wskazaniem sekcji + { //(tmp->psSection) jest podstacją, a (Traction->psSection) nazwą sekcji + tmp->PowerSet(Traction->psSection); // zastąpienie wskazaniem sekcji } else if (!Traction->psSection->bSection && tmp->psSection->bSection) - { //(Traction->psSection) jest podstacj, a (tmp->psSection) nazw sekcji - Traction->PowerSet(tmp->psSection); // zastpienie wskazaniem sekcji + { //(Traction->psSection) jest podstacją, a (tmp->psSection) nazwą sekcji + Traction->PowerSet(tmp->psSection); // zastąpienie wskazaniem sekcji } - else // jeli obie to sekcje albo obie podstacje, to bdzie bd + else // jeśli obie to sekcje albo obie podstacje, to będzie błąd ErrorLog("Bad power: at " + to_string(Traction->pPoint2.x, 2, 6) + " " + to_string(Traction->pPoint2.y, 2, 6) + " " + @@ -3450,117 +3450,117 @@ void TGround::InitTraction() } } } - iConnection = 0; // teraz bdzie licznikiem kocw + iConnection = 0; // teraz będzie licznikiem końców for (nCurrent = nRootOfType[TP_TRACTION]; nCurrent; nCurrent = nCurrent->nNext) - { // operacje majce na celu wykrywanie bieni wsplnych i czenie przse naprania - if (nCurrent->hvTraction->WhereIs()) // oznakowanie przedostatnich przse - { // poszukiwanie bieni wsplnej dla przedostatnich przse, rwnie w celu poczenia + { // operacje mające na celu wykrywanie bieżni wspólnych i łączenie przęseł naprążania + if (nCurrent->hvTraction->WhereIs()) // oznakowanie przedostatnich przęseł + { // poszukiwanie bieżni wspólnej dla przedostatnich przęseł, również w celu połączenia // zasilania - // to si nie sprawdza, bo poczy si mog dwa niezasilane odcinki jako najblisze + // to się nie sprawdza, bo połączyć się mogą dwa niezasilane odcinki jako najbliższe // sobie // nCurrent->hvTraction->hvParallel=TractionNearestFind(nCurrent->pCenter,0,nCurrent); - // //szukanie najbliszego przsa - // trzeba by zlicza koce, a potem wpisa je do tablicy, aby sukcesywnie podcza do + // //szukanie najbliższego przęsła + // trzeba by zliczać końce, a potem wpisać je do tablicy, aby sukcesywnie podłączać do // zasilaczy - nCurrent->hvTraction->iTries = 5; // oznaczanie kocowych + nCurrent->hvTraction->iTries = 5; // oznaczanie końcowych ++iConnection; } if (nCurrent->hvTraction->fResistance[0] == 0.0) { nCurrent->hvTraction - ->ResistanceCalc(); // obliczanie przse w segmencie z bezporednim zasilaniem + ->ResistanceCalc(); // obliczanie przęseł w segmencie z bezpośrednim zasilaniem // ErrorLog("Section "+nCurrent->hvTraction->asPowerSupplyName+" connected"); //jako - // niby bd bdzie bardziej widoczne - nCurrent->hvTraction->iTries = 0; // nie potrzeba mu szuka zasilania + // niby błąd będzie bardziej widoczne + nCurrent->hvTraction->iTries = 0; // nie potrzeba mu szukać zasilania } - // if (!Traction->hvParallel) //jeszcze utworzy ptle z bieni wsplnych + // if (!Traction->hvParallel) //jeszcze utworzyć pętle z bieżni wspólnych } - int zg = 0; // zgodno kierunku przse, tymczasowo iterator do tabeli kocw - TGroundNode **nEnds = new TGroundNode *[iConnection]; // kocw jest ok. 10 razy mniej ni - // wszystkich przse (Quark: 216) + int zg = 0; // zgodność kierunku przęseł, tymczasowo iterator do tabeli końców + TGroundNode **nEnds = new TGroundNode *[iConnection]; // końców jest ok. 10 razy mniej niż + // wszystkich przęseł (Quark: 216) for (nCurrent = nRootOfType[TP_TRACTION]; nCurrent; nCurrent = nCurrent->nNext) - { //czenie bieni wsplnych, w tym oznaczanie niepodanych jawnie + { //łączenie bieżni wspólnych, w tym oznaczanie niepodanych jawnie Traction = nCurrent->hvTraction; - if (!Traction->asParallel.empty()) // bdzie wskanik na inne przso + if (!Traction->asParallel.empty()) // będzie wskaźnik na inne przęsło if ((Traction->asParallel == "none") || - (Traction->asParallel == "*")) // jeli nieokrelone + (Traction->asParallel == "*")) // jeśli nieokreślone Traction->iLast = - 2; // jakby przedostatni - niech po prostu szuka (iLast ju przeliczone) - else if (!Traction->hvParallel) // jeli jeszcze nie zosta wczony w kko + 2; // jakby przedostatni - niech po prostu szuka (iLast już przeliczone) + else if (!Traction->hvParallel) // jeśli jeszcze nie został włączony w kółko { nTemp = FindGroundNode(Traction->asParallel, TP_TRACTION); if (nTemp) - { // o ile zostanie znalezione przso o takiej nazwie + { // o ile zostanie znalezione przęsło o takiej nazwie if (!nTemp->hvTraction - ->hvParallel) // jeli tamten jeszcze nie ma wskanika bieni wsplnej + ->hvParallel) // jeśli tamten jeszcze nie ma wskaźnika bieżni wspólnej Traction->hvParallel = - nTemp->hvTraction; // wpisa siebie i dalej da mu wskanik zwrotny - else // a jak ma, to albo doczy si do keczka + nTemp->hvTraction; // wpisać siebie i dalej dać mu wskaźnik zwrotny + else // a jak ma, to albo dołączyć się do kółeczka Traction->hvParallel = - nTemp->hvTraction->hvParallel; // przj dotychczasowy wskanik od niego + nTemp->hvTraction->hvParallel; // przjąć dotychczasowy wskaźnik od niego nTemp->hvTraction->hvParallel = - Traction; // i na koniec ustawienie wskanika zwrotnego + Traction; // i na koniec ustawienie wskaźnika zwrotnego } if (!Traction->hvParallel) ErrorLog("Missed overhead: " + Traction->asParallel); // logowanie braku } - if (Traction->iTries > 0) // jeli zaznaczony do podczenia + if (Traction->iTries > 0) // jeśli zaznaczony do podłączenia // if (!nCurrent->hvTraction->psPower[0]||!nCurrent->hvTraction->psPower[1]) if (zg < iConnection) // zabezpieczenie - nEnds[zg++] = nCurrent; // wypenianie tabeli kocw w celu szukania im pocze + nEnds[zg++] = nCurrent; // wypełnianie tabeli końców w celu szukania im połączeń } while (zg < iConnection) - nEnds[zg++] = NULL; // zapenienie do koca tablicy, jeli by jakie koce wypady - zg = 1; // nieefektywny przebieg koczy czenie + nEnds[zg++] = NULL; // zapełnienie do końca tablicy, jeśli by jakieś końce wypadły + zg = 1; // nieefektywny przebieg kończy łączenie while (zg) - { // ustalenie zastpczej rezystancji dla kadego przsa - zg = 0; // flaga podczonych przse kocowych: -1=puste wskaniki, 0=co zostao, - // 1=wykonano czenie + { // ustalenie zastępczej rezystancji dla każdego przęsła + zg = 0; // flaga podłączonych przęseł końcowych: -1=puste wskaźniki, 0=coś zostało, + // 1=wykonano łączenie for (int i = 0; i < iConnection; ++i) - if (nEnds[i]) // zaatwione bdziemy zerowa - { // kady przebieg to prba podczenia koca segmentu naprania do innego zasilanego - // przsa + if (nEnds[i]) // załatwione będziemy zerować + { // każdy przebieg to próba podłączenia końca segmentu naprężania do innego zasilanego + // przęsła if (nEnds[i]->hvTraction->hvNext[0]) - { // jeli kocowy ma cig dalszy od strony 0 (Point1), szukamy odcinka najbliszego + { // jeśli końcowy ma ciąg dalszy od strony 0 (Point1), szukamy odcinka najbliższego // do Point2 if (TractionNearestFind(nEnds[i]->hvTraction->pPoint2, 0, - nEnds[i])) // poszukiwanie przsa + nEnds[i])) // poszukiwanie przęsła { nEnds[i] = NULL; - zg = 1; // jak co zostao podczone, to moe zasilanie gdzie dodatkowo + zg = 1; // jak coś zostało podłączone, to może zasilanie gdzieś dodatkowo // dotrze } } else if (nEnds[i]->hvTraction->hvNext[1]) - { // jeli kocowy ma cig dalszy od strony 1 (Point2), szukamy odcinka najbliszego + { // jeśli końcowy ma ciąg dalszy od strony 1 (Point2), szukamy odcinka najbliższego // do Point1 if (TractionNearestFind(nEnds[i]->hvTraction->pPoint1, 1, - nEnds[i])) // poszukiwanie przsa + nEnds[i])) // poszukiwanie przęsła { nEnds[i] = NULL; - zg = 1; // jak co zostao podczone, to moe zasilanie gdzie dodatkowo + zg = 1; // jak coś zostało podłączone, to może zasilanie gdzieś dodatkowo // dotrze } } else - { // gdy koniec jest samotny, to na razie nie zostanie podczony (nie powinno - // takich by) + { // gdy koniec jest samotny, to na razie nie zostanie podłączony (nie powinno + // takich być) nEnds[i] = NULL; } } } - delete[] nEnds; // nie potrzebne ju + delete[] nEnds; // nie potrzebne już }; void TGround::TrackJoin(TGroundNode *Current) -{ // wyszukiwanie ssiednich torw do podczenia (wydzielone na uytek obrotnicy) +{ // wyszukiwanie sąsiednich torów do podłączenia (wydzielone na użytek obrotnicy) TTrack *Track = Current->pTrack; TTrack *tmp; int iConnection; if (!Track->CurrentPrev()) { tmp = FindTrack(Track->CurrentSegment()->FastGetPoint_0(), iConnection, - Current); // Current do pominicia + Current); // Current do pominięcia switch (iConnection) { case 0: @@ -3597,10 +3597,10 @@ bool TGround::InitLaunchers() EventLauncher = Current->EvLaunch; if (EventLauncher->iCheckMask != 0) if (EventLauncher->asMemCellName != "none") - { // jeli jest powizana komrka pamici + { // jeśli jest powiązana komórka pamięci tmp = FindGroundNode(EventLauncher->asMemCellName, TP_MEMCELL); if (tmp) - EventLauncher->MemCell = tmp->MemCell; // jeli znaleziona, dopisa + EventLauncher->MemCell = tmp->MemCell; // jeśli znaleziona, dopisać else MessageBox(0, "Cannot find Memory Cell for Event Launcher", "Error", MB_OK); } @@ -3617,7 +3617,7 @@ bool TGround::InitLaunchers() } TTrack * TGround::FindTrack(vector3 Point, int &iConnection, TGroundNode *Exclude) -{ // wyszukiwanie innego toru koczcego si w (Point) +{ // wyszukiwanie innego toru kończącego się w (Point) TTrack *Track; TGroundNode *Current; TTrack *tmp; @@ -3626,13 +3626,13 @@ TTrack * TGround::FindTrack(vector3 Point, int &iConnection, TGroundNode *Exclud // najpierw szukamy w okolicznych segmentach int c = GetColFromX(Point.x); int r = GetRowFromZ(Point.z); - if ((sr = FastGetSubRect(c, r)) != NULL) // 75% torw jest w tym samym sektorze + if ((sr = FastGetSubRect(c, r)) != NULL) // 75% torów jest w tym samym sektorze if ((tmp = sr->FindTrack(&Point, iConnection, Exclude->pTrack)) != NULL) return tmp; int i, x, y; for (i = 1; i < 9; - ++i) // sektory w kolejnoci odlegoci, 4 jest tu wystarczajce, 9 na wszelki wypadek - { // niemal wszystkie podczone tory znajduj si w ssiednich 8 sektorach + ++i) // sektory w kolejności odległości, 4 jest tu wystarczające, 9 na wszelki wypadek + { // niemal wszystkie podłączone tory znajdują się w sąsiednich 8 sektorach x = SectorOrder[i].x; y = SectorOrder[i].y; if ((sr = FastGetSubRect(c + y, r + x)) != NULL) @@ -3651,7 +3651,7 @@ TTrack * TGround::FindTrack(vector3 Point, int &iConnection, TGroundNode *Exclud return tmp; } #if 0 - //wyszukiwanie czogowe (po wszystkich jak leci) - nie ma chyba sensu + //wyszukiwanie czołgowe (po wszystkich jak leci) - nie ma chyba sensu for (Current=nRootOfType[TP_TRACK];Current;Current=Current->Next) { if ((Current->iType==TP_TRACK) && (Current!=Exclude)) @@ -3665,7 +3665,7 @@ TTrack * TGround::FindTrack(vector3 Point, int &iConnection, TGroundNode *Exclud } TTraction * TGround::FindTraction(vector3 *Point, int &iConnection, TGroundNode *Exclude) -{ // wyszukiwanie innego przsa koczcego si w (Point) +{ // wyszukiwanie innego przęsła kończącego się w (Point) TTraction *Traction; TGroundNode *Current; TTraction *tmp; @@ -3674,13 +3674,13 @@ TTraction * TGround::FindTraction(vector3 *Point, int &iConnection, TGroundNode // najpierw szukamy w okolicznych segmentach int c = GetColFromX(Point->x); int r = GetRowFromZ(Point->z); - if ((sr = FastGetSubRect(c, r)) != NULL) // wikszo bdzie w tym samym sektorze + if ((sr = FastGetSubRect(c, r)) != NULL) // większość będzie w tym samym sektorze if ((tmp = sr->FindTraction(Point, iConnection, Exclude->hvTraction)) != NULL) return tmp; int i, x, y; for (i = 1; i < 9; - ++i) // sektory w kolejnoci odlegoci, 4 jest tu wystarczajce, 9 na wszelki wypadek - { // wszystkie przsa powinny zosta znajdowa si w ssiednich 8 sektorach + ++i) // sektory w kolejności odległości, 4 jest tu wystarczające, 9 na wszelki wypadek + { // wszystkie przęsła powinny zostać znajdować się w sąsiednich 8 sektorach x = SectorOrder[i].x; y = SectorOrder[i].y; if ((sr = FastGetSubRect(c + y, r + x)) != NULL) @@ -3703,26 +3703,26 @@ TTraction * TGround::FindTraction(vector3 *Point, int &iConnection, TGroundNode }; TTraction * TGround::TractionNearestFind(vector3 &p, int dir, TGroundNode *n) -{ // wyszukanie najbliszego do (p) przsa o tej samej nazwie sekcji (ale innego ni podczone) +{ // wyszukanie najbliższego do (p) przęsła o tej samej nazwie sekcji (ale innego niż podłączone) // oraz zasilanego z kierunku (dir) TGroundNode *nCurrent, *nBest = NULL; int i, j, k, zg; - double d, dist = 200.0 * 200.0; //[m] odlego graniczna + double d, dist = 200.0 * 200.0; //[m] odległość graniczna // najpierw szukamy w okolicznych segmentach int c = GetColFromX(n->pCenter.x); int r = GetRowFromZ(n->pCenter.z); TSubRect *sr; - for (i = -1; i <= 1; ++i) // przegldamy 9 najbliszych sektorw + for (i = -1; i <= 1; ++i) // przeglądamy 9 najbliższych sektorów for (j = -1; j <= 1; ++j) // - if ((sr = FastGetSubRect(c + i, r + j)) != NULL) // o ile w ogle sektor jest + if ((sr = FastGetSubRect(c + i, r + j)) != NULL) // o ile w ogóle sektor jest for (nCurrent = sr->nRenderWires; nCurrent; nCurrent = nCurrent->nNext3) if (nCurrent->iType == TP_TRACTION) if (nCurrent->hvTraction->psSection == - n->hvTraction->psSection) // jeli ta sama sekcja + n->hvTraction->psSection) // jeśli ta sama sekcja if (nCurrent != n) // ale nie jest tym samym if (nCurrent->hvTraction != n->hvTraction - ->hvNext[0]) // ale nie jest bezporednio podczonym + ->hvNext[0]) // ale nie jest bezpośrednio podłączonym if (nCurrent->hvTraction != n->hvTraction->hvNext[1]) if (nCurrent->hvTraction->psPower [k = (DotProduct( @@ -3732,26 +3732,26 @@ TTraction * TGround::TractionNearestFind(vector3 &p, int dir, TGroundNode *n) dir)]) // ma zasilanie z odpowiedniej // strony if (nCurrent->hvTraction->fResistance[k] >= - 0.0) //eby si nie propagoway jakie ujemne - { // znaleziony kandydat do poczenia + 0.0) //żeby się nie propagowały jakieś ujemne + { // znaleziony kandydat do połączenia d = SquareMagnitude( p - nCurrent - ->pCenter); // kwadrat odlegoci rodkw + ->pCenter); // kwadrat odległości środków if (dist > d) - { // zapamitanie nowego najbliszego - dist = d; // nowy rekord odlegoci + { // zapamiętanie nowego najbliższego + dist = d; // nowy rekord odległości nBest = nCurrent; - zg = k; // z ktrego koca bra wskanik + zg = k; // z którego końca brać wskaźnik // zasilacza } } - if (nBest) // jak znalezione przso z zasilaniem, to podczenie "rwnolege" + if (nBest) // jak znalezione przęsło z zasilaniem, to podłączenie "równoległe" { n->hvTraction->ResistanceCalc(dir, nBest->hvTraction->fResistance[zg], nBest->hvTraction->psPower[zg]); - // testowo skrzywienie przsa tak, aby pokaza skd ma zasilanie - // if (dir) //1 gdy cig dalszy jest od strony Point2 + // testowo skrzywienie przęsła tak, aby pokazać skąd ma zasilanie + // if (dir) //1 gdy ciąg dalszy jest od strony Point2 // n->hvTraction->pPoint3=0.25*(nBest->pCenter+3*(zg?nBest->hvTraction->pPoint4:nBest->hvTraction->pPoint3)); // else // n->hvTraction->pPoint4=0.25*(nBest->pCenter+3*(zg?nBest->hvTraction->pPoint4:nBest->hvTraction->pPoint3)); @@ -3761,17 +3761,17 @@ TTraction * TGround::TractionNearestFind(vector3 &p, int dir, TGroundNode *n) bool TGround::AddToQuery(TEvent *Event, TDynamicObject *Node) { - if (Event->bEnabled) // jeli moe by dodany do kolejki (nie uywany w skanowaniu) - if (!Event->iQueued) // jeli nie dodany jeszcze do kolejki - { // kolejka eventw jest posortowana wzgldem (fStartTime) + if (Event->bEnabled) // jeśli może być dodany do kolejki (nie używany w skanowaniu) + if (!Event->iQueued) // jeśli nie dodany jeszcze do kolejki + { // kolejka eventów jest posortowana względem (fStartTime) Event->Activator = Node; if (Event->Type == tp_AddValues ? (Event->fDelay == 0.0) : false) - { // eventy AddValues trzeba wykonywa natychmiastowo, inaczej kolejka moe zgubi - // jakie dodawanie - // Ra: kopiowanie wykonania tu jest bez sensu, lepiej by byo wydzieli funkcj - // wykonujc eventy i j wywoa + { // eventy AddValues trzeba wykonywać natychmiastowo, inaczej kolejka może zgubić + // jakieś dodawanie + // Ra: kopiowanie wykonania tu jest bez sensu, lepiej by było wydzielić funkcję + // wykonującą eventy i ją wywołać if (EventConditon(Event)) - { // teraz mog by warunki do tych eventw + { // teraz mogą być warunki do tych eventów Event->Params[5].asMemCell->UpdateValues( Event->Params[0].asText, Event->Params[1].asdouble, Event->Params[2].asdouble, Event->iFlags); @@ -3796,7 +3796,7 @@ bool TGround::AddToQuery(TEvent *Event, TDynamicObject *Node) } Event = Event - ->evJoined; // jeli jest kolejny o takiej samej nazwie, to idzie do kolejki + ->evJoined; // jeśli jest kolejny o takiej samej nazwie, to idzie do kolejki } if (Event) { // standardowe dodanie do kolejki @@ -3806,12 +3806,12 @@ bool TGround::AddToQuery(TEvent *Event, TDynamicObject *Node) fabs(Event->fDelay) + Timer::GetTime(); // czas od uruchomienia scenerii if (Event->fRandomDelay > 0.0) Event->fStartTime += Event->fRandomDelay * Random(10000) * - 0.0001; // doliczenie losowego czasu opnienia - ++Event->iQueued; // zabezpieczenie przed podwjnym dodaniem do kolejki + 0.0001; // doliczenie losowego czasu opóźnienia + ++Event->iQueued; // zabezpieczenie przed podwójnym dodaniem do kolejki if (QueryRootEvent ? Event->fStartTime >= QueryRootEvent->fStartTime : false) - QueryRootEvent->AddToQuery(Event); // dodanie gdzie w rodku + QueryRootEvent->AddToQuery(Event); // dodanie gdzieś w środku else - { // dodanie z przodu: albo nic nie ma, albo ma by wykonany szybciej ni pierwszy + { // dodanie z przodu: albo nic nie ma, albo ma być wykonany szybciej niż pierwszy Event->evNext = QueryRootEvent; QueryRootEvent = Event; } @@ -3821,7 +3821,7 @@ bool TGround::AddToQuery(TEvent *Event, TDynamicObject *Node) } bool TGround::EventConditon(TEvent *e) -{ // sprawdzenie spelnienia warunkw dla eventu +{ // sprawdzenie spelnienia warunków dla eventu if (e->iFlags <= update_only) return true; // bezwarunkowo if (e->iFlags & conditional_trackoccupied) @@ -3836,10 +3836,10 @@ bool TGround::EventConditon(TEvent *e) return (e->Params[10].asdouble > rprobability); } else if (e->iFlags & conditional_memcompare) - { // porwnanie wartoci + { // porównanie wartości if (tmpEvent->Params[9].asMemCell->Compare(e->Params[10].asText, e->Params[11].asdouble, e->Params[12].asdouble, e->iFlags)) - { //logowanie spenionych warunkw + { //logowanie spełnionych warunków LogComment = e->Params[9].asMemCell->Text() + string(" ") + to_string(e->Params[9].asMemCell->Value1(), 2, 8) + " " + to_string(tmpEvent->Params[9].asMemCell->Value2(), 2, 8) + @@ -3861,7 +3861,7 @@ bool TGround::EventConditon(TEvent *e) } //else if (Global::iWriteLogEnabled && DebugModeFlag) //zawsze bo to bardzo istotne w debugowaniu scenariuszy else - { // nie zgadza si, wic sprawdzmy, co + { // nie zgadza się, więc sprawdzmy, co LogComment = e->Params[9].asMemCell->Text() + string(" ") + to_string(e->Params[9].asMemCell->Value1(), 2, 8) + " " + to_string(tmpEvent->Params[9].asMemCell->Value2(), 2, 8) + @@ -3885,10 +3885,10 @@ bool TGround::EventConditon(TEvent *e) }; bool TGround::CheckQuery() -{ // sprawdzenie kolejki eventw oraz wykonanie tych, ktrym czas min +{ // sprawdzenie kolejki eventów oraz wykonanie tych, którym czas minął TLocation loc; int i; - /* //Ra: to w ogle jaki chory kod jest; wyglda jak wyszukanie eventu z najlepszym czasem + /* //Ra: to w ogóle jakiś chory kod jest; wygląda jak wyszukanie eventu z najlepszym czasem Double evtime,evlowesttime; //Ra: co to za typ? //evlowesttime=1000000; if (QueryRootEvent) @@ -3900,7 +3900,7 @@ bool TGround::CheckQuery() { for (i=0;i<90;++i) { - evtime=((tmpEvent->fStartTime)-(Timer::GetTime())); //pobranie wartoci zmiennej + evtime=((tmpEvent->fStartTime)-(Timer::GetTime())); //pobranie wartości zmiennej if (evtimefStartTime < Timer::GetTime() : false) - { // eventy s posortowana wg czasu wykonania - tmpEvent = QueryRootEvent; // wyjcie eventu z kolejki - if (QueryRootEvent->evJoined) // jeli jest kolejny o takiej samej nazwie - { // to teraz on bdzie nastpny do wykonania - QueryRootEvent = QueryRootEvent->evJoined; // nastpny bdzie ten doczepiony - QueryRootEvent->evNext = tmpEvent->evNext; // pamitajc o nastpnym z kolejki + { // eventy są posortowana wg czasu wykonania + tmpEvent = QueryRootEvent; // wyjęcie eventu z kolejki + if (QueryRootEvent->evJoined) // jeśli jest kolejny o takiej samej nazwie + { // to teraz on będzie następny do wykonania + QueryRootEvent = QueryRootEvent->evJoined; // następny będzie ten doczepiony + QueryRootEvent->evNext = tmpEvent->evNext; // pamiętając o następnym z kolejki QueryRootEvent->fStartTime = - tmpEvent->fStartTime; // czas musi by ten sam, bo nie jest aktualizowany - QueryRootEvent->Activator = tmpEvent->Activator; // pojazd aktywujcy - // w sumie mona by go doda normalnie do kolejki, ale trzeba te poczone posortowa wg + tmpEvent->fStartTime; // czas musi być ten sam, bo nie jest aktualizowany + QueryRootEvent->Activator = tmpEvent->Activator; // pojazd aktywujący + // w sumie można by go dodać normalnie do kolejki, ale trzeba te połączone posortować wg // czasu wykonania } else // a jak nazwa jest unikalna, to kolejka idzie dalej QueryRootEvent = QueryRootEvent->evNext; // NULL w skrajnym przypadku if (tmpEvent->bEnabled) - { // w zasadzie te wyczone s skanowane i nie powinny si nigdy w kolejce znale + { // w zasadzie te wyłączone są skanowane i nie powinny się nigdy w kolejce znaleźć WriteLog("EVENT LAUNCHED: " + tmpEvent->asName + (tmpEvent->Activator ? string(" by " + tmpEvent->Activator->asName) : string(""))); switch (tmpEvent->Type) { - case tp_CopyValues: // skopiowanie wartoci z innej komrki + case tp_CopyValues: // skopiowanie wartości z innej komórki tmpEvent->Params[5].asMemCell->UpdateValues( tmpEvent->Params[9].asMemCell->Text(), tmpEvent->Params[9].asMemCell->Value1(), tmpEvent->Params[9].asMemCell->Value2(), - tmpEvent->iFlags // flagi okrelaj, co ma by skopiowane + tmpEvent->iFlags // flagi określają, co ma być skopiowane ); - // break; //eby si wysao do torw i nie byo potrzeby na AddValues * 0 0 - case tp_AddValues: // rni si jedn flag od UpdateValues + // break; //żeby się wysłało do torów i nie było potrzeby na AddValues * 0 0 + case tp_AddValues: // różni się jedną flagą od UpdateValues case tp_UpdateValues: if (EventConditon(tmpEvent)) - { // teraz mog by warunki do tych eventw - if (tmpEvent->Type != tp_CopyValues) // dla CopyValues zrobio si wczeniej + { // teraz mogą być warunki do tych eventów + if (tmpEvent->Type != tp_CopyValues) // dla CopyValues zrobiło się wcześniej tmpEvent->Params[5].asMemCell->UpdateValues( tmpEvent->Params[0].asText, tmpEvent->Params[1].asdouble, tmpEvent->Params[2].asdouble, tmpEvent->iFlags); @@ -3993,7 +3993,7 @@ bool TGround::CheckQuery() // loc.Y= tmpEvent->Params[8].nGroundNode->pCenter.z; // loc.Z= tmpEvent->Params[8].nGroundNode->pCenter.y; if (Global::iMultiplayer) // potwierdzenie wykonania dla serwera (odczyt - // semafora ju tak nie dziaa) + // semafora już tak nie działa) WyslijEvent(tmpEvent->asName, tmpEvent->Activator->GetName()); // tmpEvent->Params[9].asMemCell->PutCommand(tmpEvent->Activator->Mechanik,loc); tmpEvent->Params[9].asMemCell->PutCommand( @@ -4005,7 +4005,7 @@ bool TGround::CheckQuery() if (tmpEvent->Activator) { loc.X = - -tmpEvent->Params[3].asdouble; // zamiana, bo fizyka ma inaczej ni sceneria + -tmpEvent->Params[3].asdouble; // zamiana, bo fizyka ma inaczej niż sceneria loc.Y = tmpEvent->Params[5].asdouble; loc.Z = tmpEvent->Params[4].asdouble; if (tmpEvent->Activator->Mechanik) // przekazanie rozkazu do AI @@ -4026,7 +4026,7 @@ bool TGround::CheckQuery() for (i = 0; i < iMaxNumLights; i++) if (tmpEvent->Params[i].asdouble >= 0) //-1 zostawia bez zmiany tmpEvent->Params[9].asModel->LightSet( - i, tmpEvent->Params[i].asdouble); // teraz te uamek + i, tmpEvent->Params[i].asdouble); // teraz też ułamek break; case tp_Visible: if (tmpEvent->Params[9].nGroundNode) @@ -4037,11 +4037,11 @@ bool TGround::CheckQuery() break; case tp_Exit: MessageBox(0, tmpEvent->asNodeName.c_str(), " THE END ", MB_OK); - Global::iTextMode = -1; // wyczenie takie samo jak sekwencja F10 -> Y + Global::iTextMode = -1; // wyłączenie takie samo jak sekwencja F10 -> Y return false; case tp_Sound: switch (tmpEvent->Params[0].asInt) - { // trzy moliwe przypadki: + { // trzy możliwe przypadki: case 0: tmpEvent->Params[9].tsTextSound->Stop(); break; @@ -4058,7 +4058,7 @@ bool TGround::CheckQuery() case tp_Disable: Error("Not implemented yet :("); break; - case tp_Animation: // Marcin: dorobic translacje - Ra: dorobiem ;-) + case tp_Animation: // Marcin: dorobic translacje - Ra: dorobiłem ;-) if (tmpEvent->Params[0].asInt == 1) tmpEvent->Params[9].asAnimContainer->SetRotateAnim( vector3(tmpEvent->Params[1].asdouble, tmpEvent->Params[2].asdouble, @@ -4072,7 +4072,7 @@ bool TGround::CheckQuery() else if (tmpEvent->Params[0].asInt == 4) tmpEvent->Params[9].asModel->AnimationVND( tmpEvent->Params[8].asPointer, - tmpEvent->Params[1].asdouble, // tu mog by dodatkowe parametry, np. od-do + tmpEvent->Params[1].asdouble, // tu mogą być dodatkowe parametry, np. od-do tmpEvent->Params[2].asdouble, tmpEvent->Params[3].asdouble, tmpEvent->Params[4].asdouble); break; @@ -4081,18 +4081,18 @@ bool TGround::CheckQuery() tmpEvent->Params[9].asTrack->Switch(tmpEvent->Params[0].asInt, tmpEvent->Params[1].asdouble, tmpEvent->Params[2].asdouble); - if (Global::iMultiplayer) // dajemy zna do serwera o przeoeniu - WyslijEvent(tmpEvent->asName, ""); // wysanie nazwy eventu przeczajacego - // Ra: bardziej by si przydaa nazwa toru, ale nie ma do niej std dostpu + if (Global::iMultiplayer) // dajemy znać do serwera o przełożeniu + WyslijEvent(tmpEvent->asName, ""); // wysłanie nazwy eventu przełączajacego + // Ra: bardziej by się przydała nazwa toru, ale nie ma do niej stąd dostępu break; case tp_TrackVel: if (tmpEvent->Params[9].asTrack) - { // prdko na zwrotnicy moe by ograniczona z gry we wpisie, wikszej si nie + { // prędkość na zwrotnicy może być ograniczona z góry we wpisie, większej się nie // ustawi eventem WriteLog("type: TrackVel"); // WriteLog("Vel: ",tmpEvent->Params[0].asdouble); tmpEvent->Params[9].asTrack->VelocitySet(tmpEvent->Params[0].asdouble); - if (DebugModeFlag) // wywietlana jest ta faktycznie ustawiona + if (DebugModeFlag) // wyświetlana jest ta faktycznie ustawiona WriteLog("vel: ", tmpEvent->Params[9].asTrack->VelocityGet()); } break; @@ -4103,36 +4103,36 @@ bool TGround::CheckQuery() { bCondition = EventConditon(tmpEvent); if (bCondition || (tmpEvent->iFlags & - conditional_anyelse)) // warunek spelniony albo byo uyte else + conditional_anyelse)) // warunek spelniony albo było użyte else { WriteLog("Multiple passed"); for (i = 0; i < 8; ++i) - { // dodawane do kolejki w kolejnoci zapisania + { // dodawane do kolejki w kolejności zapisania if (tmpEvent->Params[i].asEvent) if (bCondition != bool(tmpEvent->iFlags & (conditional_else << i))) { if (tmpEvent->Params[i].asEvent != tmpEvent) AddToQuery(tmpEvent->Params[i].asEvent, - tmpEvent->Activator); // normalnie doda - else // jeli ma by rekurencja + tmpEvent->Activator); // normalnie dodać + else // jeśli ma być rekurencja if (tmpEvent->fDelay >= - 5.0) // to musi mie sensowny okres powtarzania + 5.0) // to musi mieć sensowny okres powtarzania if (tmpEvent->iQueued < 2) - { // trzeba zrobi wyjtek, aby event mg si sam doda do - // kolejki, raz ju jest, ale bdzie usunity - // ptla eventowa moe by uruchomiona wiele razy, ale tylko - // pierwsze uruchomienie zadziaa + { // trzeba zrobić wyjątek, aby event mógł się sam dodać do + // kolejki, raz już jest, ale będzie usunięty + // pętla eventowa może być uruchomiona wiele razy, ale tylko + // pierwsze uruchomienie zadziała tmpEvent->iQueued = - 0; // tymczasowo, aby by ponownie dodany do kolejki + 0; // tymczasowo, aby był ponownie dodany do kolejki AddToQuery(tmpEvent, tmpEvent->Activator); tmpEvent->iQueued = - 2; // kolejny raz ju absolutnie nie dodawa + 2; // kolejny raz już absolutnie nie dodawać } } } - if (Global::iMultiplayer) // dajemy zna do serwera o wykonaniu + if (Global::iMultiplayer) // dajemy znać do serwera o wykonaniu if ((tmpEvent->iFlags & conditional_anyelse) == - 0) // jednoznaczne tylko, gdy nie byo else + 0) // jednoznaczne tylko, gdy nie było else { if (tmpEvent->Activator) WyslijEvent(tmpEvent->asName, tmpEvent->Activator->GetName()); @@ -4142,52 +4142,52 @@ bool TGround::CheckQuery() } } break; - case tp_WhoIs: // pobranie nazwy pocigu do komrki pamici + case tp_WhoIs: // pobranie nazwy pociągu do komórki pamięci if (tmpEvent->iFlags & update_load) - { // jeli pytanie o adunek - if (tmpEvent->iFlags & update_memadd) // jeli typ pojazdu + { // jeśli pytanie o ładunek + if (tmpEvent->iFlags & update_memadd) // jeśli typ pojazdu tmpEvent->Params[9].asMemCell->UpdateValues( strdup(tmpEvent->Activator->MoverParameters->TypeName.c_str()), // typ pojazdu 0, // na razie nic 0, // na razie nic tmpEvent->iFlags & (update_memstring | update_memval1 | update_memval2)); - else // jeli parametry adunku + else // jeśli parametry ładunku tmpEvent->Params[9].asMemCell->UpdateValues( tmpEvent->Activator->MoverParameters->LoadType != "" ? strdup(tmpEvent->Activator->MoverParameters->LoadType.c_str()) : - (char*)"none", // nazwa adunku - tmpEvent->Activator->MoverParameters->Load, // aktualna ilo - tmpEvent->Activator->MoverParameters->MaxLoad, // maksymalna ilo + (char*)"none", // nazwa ładunku + tmpEvent->Activator->MoverParameters->Load, // aktualna ilość + tmpEvent->Activator->MoverParameters->MaxLoad, // maksymalna ilość tmpEvent->iFlags & (update_memstring | update_memval1 | update_memval2)); } else if (tmpEvent->iFlags & update_memadd) - { // jeli miejsce docelowe pojazdu + { // jeśli miejsce docelowe pojazdu tmpEvent->Params[9].asMemCell->UpdateValues( strdup(tmpEvent->Activator->asDestination.c_str()), // adres docelowy - tmpEvent->Activator->DirectionGet(), // kierunek pojazdu wzgldem czoa - // skadu (1=zgodny,-1=przeciwny) + tmpEvent->Activator->DirectionGet(), // kierunek pojazdu względem czoła + // składu (1=zgodny,-1=przeciwny) tmpEvent->Activator->MoverParameters ->Power, // moc pojazdu silnikowego: 0 dla wagonu tmpEvent->iFlags & (update_memstring | update_memval1 | update_memval2)); } else if (tmpEvent->Activator->Mechanik) if (tmpEvent->Activator->Mechanik->Primary()) - { // tylko jeli kto tam siedzi - nie powinno dotyczy pasaera! + { // tylko jeśli ktoś tam siedzi - nie powinno dotyczyć pasażera! tmpEvent->Params[9].asMemCell->UpdateValues( const_cast(tmpEvent->Activator->Mechanik->TrainName().c_str()), tmpEvent->Activator->Mechanik->StationCount() - tmpEvent->Activator->Mechanik - ->StationIndex(), // ile przystankw do koca + ->StationIndex(), // ile przystanków do końca tmpEvent->Activator->Mechanik->IsStop() ? 1 : 0, // 1, gdy ma tu zatrzymanie tmpEvent->iFlags); WriteLog("Train detected: " + tmpEvent->Activator->Mechanik->TrainName()); } break; - case tp_LogValues: // zapisanie zawartoci komrki pamici do logu - if (tmpEvent->Params[9].asMemCell) // jeli bya podana nazwa komrki + case tp_LogValues: // zapisanie zawartości komórki pamięci do logu + if (tmpEvent->Params[9].asMemCell) // jeśli była podana nazwa komórki WriteLog("Memcell \"" + tmpEvent->asNodeName + "\": " + tmpEvent->Params[9].asMemCell->Text() + " " + std::to_string(tmpEvent->Params[9].asMemCell->Value1()) + " " + @@ -4199,31 +4199,31 @@ bool TGround::CheckQuery() Current->MemCell->Text() + " " + std::to_string(Current->MemCell->Value1()) + " " + std::to_string(Current->MemCell->Value2())); break; - case tp_Voltage: // zmiana napicia w zasilaczu (TractionPowerSource) + case tp_Voltage: // zmiana napięcia w zasilaczu (TractionPowerSource) if (tmpEvent->Params[9].psPower) - { // na razie takie chamskie ustawienie napicia zasilania + { // na razie takie chamskie ustawienie napięcia zasilania WriteLog("type: Voltage"); tmpEvent->Params[9].psPower->VoltageSet(tmpEvent->Params[0].asdouble); } case tp_Friction: // zmiana tarcia na scenerii - { // na razie takie chamskie ustawienie napicia zasilania + { // na razie takie chamskie ustawienie napięcia zasilania WriteLog("type: Friction"); Global::fFriction = (tmpEvent->Params[0].asdouble); } break; - case tp_Message: // wywietlenie komunikatu + case tp_Message: // wyświetlenie komunikatu break; } // switch (tmpEvent->Type) } // if (tmpEvent->bEnabled) - --tmpEvent->iQueued; // teraz moze by ponownie dodany do kolejki + --tmpEvent->iQueued; // teraz moze być ponownie dodany do kolejki /* - if (QueryRootEvent->eJoined) //jeli jest kolejny o takiej samej nazwie + if (QueryRootEvent->eJoined) //jeśli jest kolejny o takiej samej nazwie {//to teraz jego dajemy do wykonania - QueryRootEvent->eJoined->Next=QueryRootEvent->Next; //pamitajc o nastpnym z kolejki - QueryRootEvent->eJoined->fStartTime=QueryRootEvent->fStartTime; //czas musi by ten sam, + QueryRootEvent->eJoined->Next=QueryRootEvent->Next; //pamiętając o następnym z kolejki + QueryRootEvent->eJoined->fStartTime=QueryRootEvent->fStartTime; //czas musi być ten sam, bo nie jest aktualizowany //QueryRootEvent->fStartTime=0; - QueryRootEvent=QueryRootEvent->eJoined; //a wykona ten doczepiony + QueryRootEvent=QueryRootEvent->eJoined; //a wykonać ten doczepiony } else {//a jak nazwa jest unikalna, to kolejka idzie dalej @@ -4241,22 +4241,22 @@ void TGround::OpenGLUpdate(HDC hDC) }; void TGround::UpdatePhys(double dt, int iter) -{ // aktualizacja fizyki staym krokiem: dt=krok czasu [s], dt*iter=czas od ostatnich przelicze +{ // aktualizacja fizyki stałym krokiem: dt=krok czasu [s], dt*iter=czas od ostatnich przeliczeń for (TGroundNode *Current = nRootOfType[TP_TRACTIONPOWERSOURCE]; Current; Current = Current->nNext) - Current->psTractionPowerSource->Update(dt * iter); // zerowanie sumy prdw + Current->psTractionPowerSource->Update(dt * iter); // zerowanie sumy prądów }; bool TGround::Update(double dt, int iter) -{ // aktualizacja animacji krokiem FPS: dt=krok czasu [s], dt*iter=czas od ostatnich przelicze +{ // aktualizacja animacji krokiem FPS: dt=krok czasu [s], dt*iter=czas od ostatnich przeliczeń if (dt == 0.0) - { // jeli zaczona jest pauza, to tylko obsuy ruch w kabinie trzeba + { // jeśli załączona jest pauza, to tylko obsłużyć ruch w kabinie trzeba return true; } - // Ra: w zasadzie to trzeba by utworzy oddzieln list taboru do liczenia fizyki - // na ktr by si zapisyway wszystkie pojazdy bdce w ruchu - // pojazdy stojce nie potrzebuj aktualizacji, chyba e np. kto im zmieni nastaw hamulca - // oddzieln list mona by zrobi na pojazdy z napdem, najlepiej posortowan wg typu napdu + // Ra: w zasadzie to trzeba by utworzyć oddzielną listę taboru do liczenia fizyki + // na którą by się zapisywały wszystkie pojazdy będące w ruchu + // pojazdy stojące nie potrzebują aktualizacji, chyba że np. ktoś im zmieni nastawę hamulca + // oddzielną listę można by zrobić na pojazdy z napędem, najlepiej posortowaną wg typu napędu if (iter > 1) // ABu: ponizsze wykonujemy tylko jesli wiecej niz jedna iteracja { // pierwsza iteracja i wyznaczenie stalych: for (TGroundNode *Current = nRootDynamic; Current; Current = Current->nNext) @@ -4268,29 +4268,29 @@ bool TGround::Update(double dt, int iter) for (TGroundNode *Current = nRootDynamic; Current; Current = Current->nNext) Current->DynamicObject->FastUpdate(dt); // pozostale iteracje - for (int i = 1; i < (iter - 1); ++i) // jeli iter==5, to wykona si 3 razy + for (int i = 1; i < (iter - 1); ++i) // jeśli iter==5, to wykona się 3 razy { for (TGroundNode *Current = nRootDynamic; Current; Current = Current->nNext) Current->DynamicObject->UpdateForce(dt, dt, false); for (TGroundNode *Current = nRootDynamic; Current; Current = Current->nNext) Current->DynamicObject->FastUpdate(dt); } - // ABu 200205: a to robimy tylko raz, bo nie potrzeba wicej + // ABu 200205: a to robimy tylko raz, bo nie potrzeba więcej // Winger 180204 - pantografy - double dt1 = dt * iter; // cakowity czas + double dt1 = dt * iter; // całkowity czas UpdatePhys(dt1, 1); TAnimModel::AnimUpdate(dt1); // wykonanie zakolejkowanych animacji for (TGroundNode *Current = nRootDynamic; Current; Current = Current->nNext) - { // Ra: zmieni warunek na sprawdzanie pantografw w jednej zmiennej: czy pantografy i czy + { // Ra: zmienić warunek na sprawdzanie pantografów w jednej zmiennej: czy pantografy i czy // podniesione if (Current->DynamicObject->MoverParameters->EnginePowerSource.SourceType == CurrentCollector) - GetTraction(Current->DynamicObject); // poszukiwanie drutu dla pantografw + GetTraction(Current->DynamicObject); // poszukiwanie drutu dla pantografów Current->DynamicObject->UpdateForce(dt, dt1, true); //,true); } for (TGroundNode *Current = nRootDynamic; Current; Current = Current->nNext) - Current->DynamicObject->Update(dt, dt1); // Ra 2015-01: tylko tu przelicza sie - // trakcyjn + Current->DynamicObject->Update(dt, dt1); // Ra 2015-01: tylko tu przelicza sieć + // trakcyjną } else { // jezeli jest tylko jedna iteracja @@ -4306,15 +4306,15 @@ bool TGround::Update(double dt, int iter) Current->DynamicObject->UpdateForce(dt, dt, true); //,true); } for (TGroundNode *Current = nRootDynamic; Current; Current = Current->nNext) - Current->DynamicObject->Update(dt, dt); // Ra 2015-01: tylko tu przelicza sie trakcyjn + Current->DynamicObject->Update(dt, dt); // Ra 2015-01: tylko tu przelicza sieć trakcyjną } if (bDynamicRemove) - { // jeli jest co do usunicia z listy, to trzeba na kocu + { // jeśli jest coś do usunięcia z listy, to trzeba na końcu for (TGroundNode *Current = nRootDynamic; Current; Current = Current->nNext) if (!Current->DynamicObject->bEnabled) { - DynamicRemove(Current->DynamicObject); // usunicie tego i podczonych - Current = nRootDynamic; // sprawdzanie listy od pocztku + DynamicRemove(Current->DynamicObject); // usunięcie tego i podłączonych + Current = nRootDynamic; // sprawdzanie listy od początku } bDynamicRemove = false; // na razie koniec } @@ -4323,171 +4323,171 @@ bool TGround::Update(double dt, int iter) // Winger 170204 - szukanie trakcji nad pantografami bool TGround::GetTraction(TDynamicObject *model) -{ // aktualizacja drutu zasilajcego dla kadego pantografu, eby odczyta napicie - // jeli pojazd si nie porusza, to nie ma sensu przelicza tego wicej ni raz - double fRaParam; // parametr rwnania parametrycznego odcinka drutu - double fVertical; // odlego w pionie; musi by w zasigu ruchu "pionowego" pantografu - double fHorizontal; // odlego w bok; powinna by mniejsza ni p szerokoci pantografu +{ // aktualizacja drutu zasilającego dla każdego pantografu, żeby odczytać napięcie + // jeśli pojazd się nie porusza, to nie ma sensu przeliczać tego więcej niż raz + double fRaParam; // parametr równania parametrycznego odcinka drutu + double fVertical; // odległość w pionie; musi być w zasięgu ruchu "pionowego" pantografu + double fHorizontal; // odległość w bok; powinna być mniejsza niż pół szerokości pantografu vector3 vLeft, vUp, vFront, dwys; vector3 pant0; - vector3 vParam; // wspczynniki rwnania parametrycznego drutu - vector3 vStyk; // punkt przebicia drutu przez paszczyzn ruchu pantografu - vector3 vGdzie; // wektor pooenia drutu wzgldem pojazdu - vFront = model->VectorFront(); // wektor normalny dla paszczyzny ruchu pantografu - vUp = model->VectorUp(); // wektor pionu puda (pochylony od pionu na przechyce) - vLeft = model->VectorLeft(); // wektor odlegoci w bok (odchylony od poziomu na przechyce) - dwys = model->GetPosition(); // wsprzdne rodka pojazdu - TAnimPant *p; // wskanik do obiektu danych pantografu + vector3 vParam; // współczynniki równania parametrycznego drutu + vector3 vStyk; // punkt przebicia drutu przez płaszczyznę ruchu pantografu + vector3 vGdzie; // wektor położenia drutu względem pojazdu + vFront = model->VectorFront(); // wektor normalny dla płaszczyzny ruchu pantografu + vUp = model->VectorUp(); // wektor pionu pudła (pochylony od pionu na przechyłce) + vLeft = model->VectorLeft(); // wektor odległości w bok (odchylony od poziomu na przechyłce) + dwys = model->GetPosition(); // współrzędne środka pojazdu + TAnimPant *p; // wskaźnik do obiektu danych pantografu for (int k = 0; k < model->iAnimType[ANIM_PANTS]; ++k) - { // ptla po pantografach + { // pętla po pantografach p = model->pants[k].fParamPants; if (k ? model->MoverParameters->PantRearUp : model->MoverParameters->PantFrontUp) - { // jeli pantograf podniesiony + { // jeśli pantograf podniesiony pant0 = dwys + (vLeft * p->vPos.z) + (vUp * p->vPos.y) + (vFront * p->vPos.x); if (p->hvPowerWire) - { // jeeli znamy drut z poprzedniego przebiegu - int n = 30; //eby si nie zaptli + { // jeżeli znamy drut z poprzedniego przebiegu + int n = 30; //żeby się nie zapętlił while (p->hvPowerWire) - { // powtarzane a do znalezienia odpowiedniego odcinka na licie dwukierunkowej - // obliczamy wyraz wolny rwnania paszczyzny (to miejsce nie jest odpowienie) - vParam = p->hvPowerWire->vParametric; // wspczynniki rwnania parametrycznego + { // powtarzane aż do znalezienia odpowiedniego odcinka na liście dwukierunkowej + // obliczamy wyraz wolny równania płaszczyzny (to miejsce nie jest odpowienie) + vParam = p->hvPowerWire->vParametric; // współczynniki równania parametrycznego fRaParam = -DotProduct(pant0, vFront); - // podstawiamy rwnanie parametryczne drutu do rwnania paszczyzny pantografu + // podstawiamy równanie parametryczne drutu do równania płaszczyzny pantografu // vFront.x*(t1x+t*vParam.x)+vFront.y*(t1y+t*vParam.y)+vFront.z*(t1z+t*vParam.z)+fRaDist=0; fRaParam = -(DotProduct(p->hvPowerWire->pPoint1, vFront) + fRaParam) / DotProduct(vParam, vFront); if (fRaParam < - -0.001) // histereza rzdu 7cm na 70m typowego przsa daje 1 promil + -0.001) // histereza rzędu 7cm na 70m typowego przęsła daje 1 promil p->hvPowerWire = p->hvPowerWire->hvNext[0]; else if (fRaParam > 1.001) p->hvPowerWire = p->hvPowerWire->hvNext[1]; else if (p->hvPowerWire->iLast & 3) - { // dla ostatniego i przedostatniego przsa wymuszamy szukanie innego - p->hvPowerWire = NULL; // nie to, e nie ma, ale trzeba sprawdzi inne - // p->fHorizontal=fHorizontal; //zapamitanie pooenia drutu + { // dla ostatniego i przedostatniego przęsła wymuszamy szukanie innego + p->hvPowerWire = NULL; // nie to, że nie ma, ale trzeba sprawdzić inne + // p->fHorizontal=fHorizontal; //zapamiętanie położenia drutu break; } else if (p->hvPowerWire->hvParallel) - { // jeli przso tworzy bieni wspln, to trzeba sprawdzi pozostae - p->hvPowerWire = NULL; // nie to, e nie ma, ale trzeba sprawdzi inne - // p->fHorizontal=fHorizontal; //zapamitanie pooenia drutu - break; // tymczasowo dla bieni wsplnych poszukiwanie po caoci + { // jeśli przęsło tworzy bieżnię wspólną, to trzeba sprawdzić pozostałe + p->hvPowerWire = NULL; // nie to, że nie ma, ale trzeba sprawdzić inne + // p->fHorizontal=fHorizontal; //zapamiętanie położenia drutu + break; // tymczasowo dla bieżni wspólnych poszukiwanie po całości } else - { // jeli t jest w przedziale, wyznaczy odlego wzdu wektorw vUp i vLeft + { // jeśli t jest w przedziale, wyznaczyć odległość wzdłuż wektorów vUp i vLeft vStyk = p->hvPowerWire->pPoint1 + fRaParam * vParam; // punkt styku - // paszczyzny z drutem - // (dla generatora uku + // płaszczyzny z drutem + // (dla generatora łuku // el.) vGdzie = vStyk - pant0; // wektor - // odlego w pionie musi by w zasigu ruchu "pionowego" pantografu + // odległość w pionie musi być w zasięgu ruchu "pionowego" pantografu fVertical = DotProduct( - vGdzie, vUp); // musi si mieci w przedziale ruchu pantografu - // odlego w bok powinna by mniejsza ni p szerokoci pantografu + vGdzie, vUp); // musi się mieścić w przedziale ruchu pantografu + // odległość w bok powinna być mniejsza niż pół szerokości pantografu fHorizontal = fabs(DotProduct(vGdzie, vLeft)) - - p->fWidth; // to si musi mieci w przedziale zalenym od - // szerokoci pantografu - // jeli w pionie albo w bok jest za daleko, to dany drut jest nieuyteczny + p->fWidth; // to się musi mieścić w przedziale zależnym od + // szerokości pantografu + // jeśli w pionie albo w bok jest za daleko, to dany drut jest nieużyteczny if (fHorizontal > 0) // 0.635 dla AKP-1 AKP-4E - { // drut wyszed poza zakres roboczy, ale jeszcze jest nabienik - - // pantograf si unosi bez utraty prdu - if (fHorizontal > p->fWidthExtra) // czy wyszed za nabienik + { // drut wyszedł poza zakres roboczy, ale jeszcze jest nabieżnik - + // pantograf się unosi bez utraty prądu + if (fHorizontal > p->fWidthExtra) // czy wyszedł za nabieżnik { - p->hvPowerWire = NULL; // dotychczasowy drut nie liczy si - // p->fHorizontal=fHorizontal; //zapamitanie pooenia drutu + p->hvPowerWire = NULL; // dotychczasowy drut nie liczy się + // p->fHorizontal=fHorizontal; //zapamiętanie położenia drutu } else - { // problem jest, gdy nowy drut jest wyej, wtedy pantograf odcza si + { // problem jest, gdy nowy drut jest wyżej, wtedy pantograf odłącza się // od starego, a na podniesienie do nowego potrzebuje czasu p->PantTraction = fVertical + 0.15 * fHorizontal / p->fWidthExtra; // na razie liniowo na - // nabieniku, dokadno - // poprawi si pniej - // p->fHorizontal=fHorizontal; //zapamitanie pooenia drutu + // nabieżniku, dokładność + // poprawi się później + // p->fHorizontal=fHorizontal; //zapamiętanie położenia drutu } } else - { // po wyselekcjonowaniu drutu, przypisa go do toru, eby nie trzeba byo - // szuka - // dla 3 kocowych przse sprawdzi wszystkie dostpne przsa - // bo mog by umieszczone rwnolegle nad torem - poczy w piercie - // najlepiej, jakby odcinki rwnolege byy oznaczone we wpisach + { // po wyselekcjonowaniu drutu, przypisać go do toru, żeby nie trzeba było + // szukać + // dla 3 końcowych przęseł sprawdzić wszystkie dostępne przęsła + // bo mogą być umieszczone równolegle nad torem - połączyć w pierścień + // najlepiej, jakby odcinki równoległe były oznaczone we wpisach // WriteLog("Drut: "+AnsiString(fHorizontal)+" "+AnsiString(fVertical)); p->PantTraction = fVertical; - // p->fHorizontal=fHorizontal; //zapamitanie pooenia drutu - break; // koniec ptli, aktualny drut pasuje + // p->fHorizontal=fHorizontal; //zapamiętanie położenia drutu + break; // koniec pętli, aktualny drut pasuje } } - if (--n <= 0) // co za dugo to szukanie trwa + if (--n <= 0) // coś za długo to szukanie trwa p->hvPowerWire = NULL; } } - if (!p->hvPowerWire) // else nie, bo mg zosta wyrzucony + if (!p->hvPowerWire) // else nie, bo mógł zostać wyrzucony { // poszukiwanie po okolicznych sektorach int c = GetColFromX(dwys.x) + 1; int r = GetRowFromZ(dwys.z) + 1; TSubRect *tmp; TGroundNode *node; - p->PantTraction = 5.0; // taka za dua warto + p->PantTraction = 5.0; // taka za duża wartość for (int j = r - 2; j <= r; j++) for (int i = c - 2; i <= c; i++) - { // poszukiwanie po najbliszych sektorach niewiele da przy wikszym - // zagszczeniu + { // poszukiwanie po najbliższych sektorach niewiele da przy większym + // zagęszczeniu tmp = FastGetSubRect(i, j); if (tmp) - { // dany sektor moe nie mie nic w rodku + { // dany sektor może nie mieć nic w środku for (node = tmp->nRenderWires; node; - node = node->nNext3) // nastpny z grupy + node = node->nNext3) // następny z grupy if (node->iType == - TP_TRACTION) // w grupie tej s druty oraz inne linie + TP_TRACTION) // w grupie tej są druty oraz inne linie { vParam = node->hvTraction - ->vParametric; // wspczynniki rwnania parametrycznego + ->vParametric; // współczynniki równania parametrycznego fRaParam = -DotProduct(pant0, vFront); fRaParam = -(DotProduct(node->hvTraction->pPoint1, vFront) + fRaParam) / DotProduct(vParam, vFront); if ((fRaParam >= -0.001) ? (fRaParam <= 1.001) : false) - { // jeli tylko jest w przedziale, wyznaczy odlego wzdu - // wektorw vUp i vLeft + { // jeśli tylko jest w przedziale, wyznaczyć odległość wzdłuż + // wektorów vUp i vLeft vStyk = node->hvTraction->pPoint1 + - fRaParam * vParam; // punkt styku paszczyzny z - // drutem (dla generatora uku + fRaParam * vParam; // punkt styku płaszczyzny z + // drutem (dla generatora łuku // el.) vGdzie = vStyk - pant0; // wektor fVertical = DotProduct( vGdzie, - vUp); // musi si mieci w przedziale ruchu pantografu - if (fVertical >= 0.0) // jeli ponad pantografem (bo moe - // apa druty spod wiaduktu) + vUp); // musi się mieścić w przedziale ruchu pantografu + if (fVertical >= 0.0) // jeśli ponad pantografem (bo może + // łapać druty spod wiaduktu) if (Global::bEnableTraction ? fVertical < p->PantWys - 0.15 : - false) // jeli drut jest niej ni 15cm pod - // lizgiem - { // przeczamy w tryb poamania, o ile jedzie; - // (bEnableTraction) aby dao si jedzi na - // kolawych + false) // jeśli drut jest niżej niż 15cm pod + // ślizgiem + { // przełączamy w tryb połamania, o ile jedzie; + // (bEnableTraction) aby dało się jeździć na + // koślawych // sceneriach fHorizontal = fabs(DotProduct(vGdzie, vLeft)) - p->fWidth; // i do tego jeszcze - // wejdzie pod lizg + // wejdzie pod ślizg if (fHorizontal <= 0.0) // 0.635 dla AKP-1 AKP-4E { p->PantWys = - -1.0; // ujemna liczba oznacza poamanie - p->hvPowerWire = NULL; // bo inaczej si zasila - // w nieskoczono z - // poamanego - // p->fHorizontal=fHorizontal; //zapamitanie - // pooenia drutu + -1.0; // ujemna liczba oznacza połamanie + p->hvPowerWire = NULL; // bo inaczej się zasila + // w nieskończoność z + // połamanego + // p->fHorizontal=fHorizontal; //zapamiętanie + // położenia drutu if (model->MoverParameters->EnginePowerSource .CollectorParameters.CollectorsNo > - 0) // liczba pantografw + 0) // liczba pantografów --model->MoverParameters->EnginePowerSource .CollectorParameters - .CollectorsNo; // teraz bdzie + .CollectorsNo; // teraz będzie // mniejsza if (DebugModeFlag) ErrorLog( @@ -4499,65 +4499,65 @@ bool TGround::GetTraction(TDynamicObject *model) to_string(pant0.z, 2, 7)); } } - else if (fVertical < p->PantTraction) // ale niej, ni + else if (fVertical < p->PantTraction) // ale niżej, niż // poprzednio // znaleziony { fHorizontal = fabs(DotProduct(vGdzie, vLeft)) - p->fWidth; if (fHorizontal <= 0.0) // 0.635 dla AKP-1 AKP-4E - { // to si musi mieci w przedziale zaleznym od - // szerokoci pantografu + { // to się musi mieścić w przedziale zaleznym od + // szerokości pantografu p->hvPowerWire = - node->hvTraction; // jaki znaleziony + node->hvTraction; // jakiś znaleziony p->PantTraction = - fVertical; // zapamitanie nowej wysokoci - // p->fHorizontal=fHorizontal; //zapamitanie - // pooenia drutu + fVertical; // zapamiętanie nowej wysokości + // p->fHorizontal=fHorizontal; //zapamiętanie + // położenia drutu } else if (fHorizontal < - p->fWidthExtra) // czy zmieci si w - // zakresie nabienika? - { // problem jest, gdy nowy drut jest wyej, wtedy - // pantograf odcza si od starego, a na + p->fWidthExtra) // czy zmieścił się w + // zakresie nabieżnika? + { // problem jest, gdy nowy drut jest wyżej, wtedy + // pantograf odłącza się od starego, a na // podniesienie do nowego potrzebuje czasu fVertical += 0.15 * fHorizontal / - p->fWidthExtra; // korekta wysokoci o - // nabienik - drut nad - // nabienikiem jest + p->fWidthExtra; // korekta wysokości o + // nabieżnik - drut nad + // nabieżnikiem jest // geometrycznie jakby nieco - // wyej + // wyżej if (fVertical < p->PantTraction) // gdy po korekcie jest - // niej, ni poprzednio + // niżej, niż poprzednio // znaleziony - { // gdyby to wystarczyo, to moemy go uzna + { // gdyby to wystarczyło, to możemy go uznać p->hvPowerWire = - node->hvTraction; // moe by + node->hvTraction; // może być p->PantTraction = fVertical; // na razie liniowo na - // nabieniku, dokadno - // poprawi si pniej + // nabieżniku, dokładność + // poprawi się później // p->fHorizontal=fHorizontal; - // //zapamitanie pooenia drutu + // //zapamiętanie położenia drutu } } } } // warunek na parametr drutu <0;1> - } // ptla po drutach + } // pętla po drutach } // sektor istnieje - } // ptla po sektorach + } // pętla po sektorach } // koniec poszukiwania w sektorach - if (!p->hvPowerWire) // jeli drut nie znaleziony - if (!Global::bLiveTraction) // ale mona oszukiwa - model->pants[k].fParamPants->PantTraction = 1.4; // to dajemy co tam dla picu - } // koniec obsugi podniesionego + if (!p->hvPowerWire) // jeśli drut nie znaleziony + if (!Global::bLiveTraction) // ale można oszukiwać + model->pants[k].fParamPants->PantTraction = 1.4; // to dajemy coś tam dla picu + } // koniec obsługi podniesionego else p->hvPowerWire = NULL; // pantograf opuszczony } // if (model->fWahaczeAmpMoverParameters->DistCounter) - //{//nieuywana normalnie zmienna ogranicza powtrzone logowania + //{//nieużywana normalnie zmienna ogranicza powtórzone logowania // model->fWahaczeAmp=model->MoverParameters->DistCounter; // ErrorLog(FloatToStrF(1000.0*model->MoverParameters->DistCounter,ffFixed,7,3)+","+FloatToStrF(p->PantTraction,ffFixed,7,3)+","+FloatToStrF(p->fHorizontal,ffFixed,7,3)+","+FloatToStrF(p->PantWys,ffFixed,7,3)+","+AnsiString(p->hvPowerWire?1:0)); // // @@ -4565,7 +4565,7 @@ bool TGround::GetTraction(TDynamicObject *model) //{ // //Global::iPause|=1; //zapauzowanie symulacji // Global::fTimeSpeed=1; //spowolnienie czasu do obejrzenia pantografu - // return true; //apacz + // return true; //łapacz //} //} return true; @@ -4574,37 +4574,37 @@ bool TGround::GetTraction(TDynamicObject *model) bool TGround::RenderDL(vector3 pPosition) { // renderowanie scenerii z Display List - faza nieprzezroczystych glDisable(GL_BLEND); - glAlphaFunc(GL_GREATER, 0.45); // im mniejsza warto, tym wiksza ramka, domylnie 0.1f - ++TGroundRect::iFrameNumber; // zwiszenie licznika ramek (do usuwniania nadanimacji) + glAlphaFunc(GL_GREATER, 0.45); // im mniejsza wartość, tym większa ramka, domyślnie 0.1f + ++TGroundRect::iFrameNumber; // zwięszenie licznika ramek (do usuwniania nadanimacji) CameraDirection.x = sin(Global::pCameraRotation); // wektor kierunkowy CameraDirection.z = cos(Global::pCameraRotation); int tr, tc; TGroundNode *node; glColor3f(1.0f, 1.0f, 1.0f); glEnable(GL_LIGHTING); - int n = 2 * iNumSubRects; //(2*==2km) promie wywietlanej mapy w sektorach + int n = 2 * iNumSubRects; //(2*==2km) promień wyświetlanej mapy w sektorach int c = GetColFromX(pPosition.x); int r = GetRowFromZ(pPosition.z); TSubRect *tmp; for (node = srGlobal.nRenderHidden; node; node = node->nNext3) - node->RenderHidden(); // rednerowanie globalnych (nie za czsto?) + node->RenderHidden(); // rednerowanie globalnych (nie za często?) int i, j, k; - // renderowanie czogowe dla obiektw aktywnych a niewidocznych + // renderowanie czołgowe dla obiektów aktywnych a niewidocznych for (j = r - n; j <= r + n; j++) for (i = c - n; i <= c + n; i++) if ((tmp = FastGetSubRect(i, j)) != NULL) { - tmp->LoadNodes(); // oznaczanie aktywnych sektorw + tmp->LoadNodes(); // oznaczanie aktywnych sektorów for (node = tmp->nRenderHidden; node; node = node->nNext3) node->RenderHidden(); - tmp->RenderSounds(); // jeszcze dwiki pojazdw by si przyday, rwnie + tmp->RenderSounds(); // jeszcze dźwięki pojazdów by się przydały, również // niewidocznych } - // renderowanie progresywne - zalene od FPS oraz kierunku patrzenia - iRendered = 0; // ilo renderowanych sektorw + // renderowanie progresywne - zależne od FPS oraz kierunku patrzenia + iRendered = 0; // ilość renderowanych sektorów vector3 direction; - for (k = 0; k < Global::iSegmentsRendered; ++k) // sektory w kolejnoci odlegoci - { // przerobione na uycie SectorOrder + for (k = 0; k < Global::iSegmentsRendered; ++k) // sektory w kolejności odległości + { // przerobione na użycie SectorOrder i = SectorOrder[k].x; // na starcie oba >=0 j = SectorOrder[k].y; do @@ -4612,20 +4612,20 @@ bool TGround::RenderDL(vector3 pPosition) if (j <= 0) i = -i; // pierwszy przebieg: j<=0, i>=0; drugi: j>=0, i<=0; trzeci: j<=0, i<=0 // czwarty: j>=0, i>=0; - j = -j; // i oraz j musi by zmienione wczeniej, eby continue dziaao + j = -j; // i oraz j musi być zmienione wcześniej, żeby continue działało direction = vector3(i, 0, j); // wektor od kamery do danego sektora - if (LengthSquared3(direction) > 5) // te blisko s zawsze wywietlane + if (LengthSquared3(direction) > 5) // te blisko są zawsze wyświetlane { direction = SafeNormalize(direction); // normalizacja if (CameraDirection.x * direction.x + CameraDirection.z * direction.z < 0.55) - continue; // pomijanie sektorw poza ktem patrzenia + continue; // pomijanie sektorów poza kątem patrzenia } Rects[(i + c) / iNumSubRects][(j + r) / iNumSubRects] .RenderDL(); // kwadrat kilometrowy nie zawsze, bo szkoda FPS if ((tmp = FastGetSubRect(i + c, j + r)) != NULL) - if (tmp->iNodeCount) // o ile s jakie obiekty, bo po co puste sektory przelatywa - pRendered[iRendered++] = tmp; // tworzenie listy sektorw do renderowania - } while ((i < 0) || (j < 0)); // s 4 przypadki, oprcz i=j=0 + if (tmp->iNodeCount) // o ile są jakieś obiekty, bo po co puste sektory przelatywać + pRendered[iRendered++] = tmp; // tworzenie listy sektorów do renderowania + } while ((i < 0) || (j < 0)); // są 4 przypadki, oprócz i=j=0 } for (i = 0; i < iRendered; i++) pRendered[i]->RenderDL(); // renderowanie nieprzezroczystych @@ -4635,25 +4635,25 @@ bool TGround::RenderDL(vector3 pPosition) bool TGround::RenderAlphaDL(vector3 pPosition) { // renderowanie scenerii z Display List - faza przezroczystych glEnable(GL_BLEND); - glAlphaFunc(GL_GREATER, 0.04); // im mniejsza warto, tym wiksza ramka, domylnie 0.1f + glAlphaFunc(GL_GREATER, 0.04); // im mniejsza wartość, tym większa ramka, domyślnie 0.1f TGroundNode *node; glColor4f(1.0f, 1.0f, 1.0f, 1.0f); TSubRect *tmp; - // Ra: renderowanie progresywne - zalene od FPS oraz kierunku patrzenia + // Ra: renderowanie progresywne - zależne od FPS oraz kierunku patrzenia int i; for (i = iRendered - 1; i >= 0; --i) // od najdalszych - { // przezroczyste trjkty w oddzielnym cyklu przed modelami + { // przezroczyste trójkąty w oddzielnym cyklu przed modelami tmp = pRendered[i]; for (node = tmp->nRenderRectAlpha; node; node = node->nNext3) node->RenderAlphaDL(); // przezroczyste modele } for (i = iRendered - 1; i >= 0; --i) // od najdalszych - { // renderowanie przezroczystych modeli oraz pojazdw + { // renderowanie przezroczystych modeli oraz pojazdów pRendered[i]->RenderAlphaDL(); } - glDisable(GL_LIGHTING); // linie nie powinny wieci + glDisable(GL_LIGHTING); // linie nie powinny świecić for (i = iRendered - 1; i >= 0; --i) // od najdalszych - { // druty na kocu, eby si nie robiy biae plamy na tle lasu + { // druty na końcu, żeby się nie robiły białe plamy na tle lasu tmp = pRendered[i]; for (node = tmp->nRenderWires; node; node = node->nNext3) node->RenderAlphaDL(); // druty @@ -4664,22 +4664,22 @@ bool TGround::RenderAlphaDL(vector3 pPosition) bool TGround::RenderVBO(vector3 pPosition) { // renderowanie scenerii z VBO - faza nieprzezroczystych glDisable(GL_BLEND); - glAlphaFunc(GL_GREATER, 0.45); // im mniejsza warto, tym wiksza ramka, domylnie 0.1f - ++TGroundRect::iFrameNumber; // zwiszenie licznika ramek + glAlphaFunc(GL_GREATER, 0.45); // im mniejsza wartość, tym większa ramka, domyślnie 0.1f + ++TGroundRect::iFrameNumber; // zwięszenie licznika ramek CameraDirection.x = sin(Global::pCameraRotation); // wektor kierunkowy CameraDirection.z = cos(Global::pCameraRotation); int tr, tc; TGroundNode *node; glColor3f(1.0f, 1.0f, 1.0f); glEnable(GL_LIGHTING); - int n = 2 * iNumSubRects; //(2*==2km) promie wywietlanej mapy w sektorach + int n = 2 * iNumSubRects; //(2*==2km) promień wyświetlanej mapy w sektorach int c = GetColFromX(pPosition.x); int r = GetRowFromZ(pPosition.z); TSubRect *tmp; for (node = srGlobal.nRenderHidden; node; node = node->nNext3) - node->RenderHidden(); // rednerowanie globalnych (nie za czsto?) + node->RenderHidden(); // rednerowanie globalnych (nie za często?) int i, j, k; - // renderowanie czogowe dla obiektw aktywnych a niewidocznych + // renderowanie czołgowe dla obiektów aktywnych a niewidocznych for (j = r - n; j <= r + n; j++) for (i = c - n; i <= c + n; i++) { @@ -4687,15 +4687,15 @@ bool TGround::RenderVBO(vector3 pPosition) { for (node = tmp->nRenderHidden; node; node = node->nNext3) node->RenderHidden(); - tmp->RenderSounds(); // jeszcze dwiki pojazdw by si przyday, rwnie + tmp->RenderSounds(); // jeszcze dźwięki pojazdów by się przydały, również // niewidocznych } } - // renderowanie progresywne - zalene od FPS oraz kierunku patrzenia - iRendered = 0; // ilo renderowanych sektorw + // renderowanie progresywne - zależne od FPS oraz kierunku patrzenia + iRendered = 0; // ilość renderowanych sektorów vector3 direction; - for (k = 0; k < Global::iSegmentsRendered; ++k) // sektory w kolejnoci odlegoci - { // przerobione na uycie SectorOrder + for (k = 0; k < Global::iSegmentsRendered; ++k) // sektory w kolejności odległości + { // przerobione na użycie SectorOrder i = SectorOrder[k].x; // na starcie oba >=0 j = SectorOrder[k].y; do @@ -4703,23 +4703,23 @@ bool TGround::RenderVBO(vector3 pPosition) if (j <= 0) i = -i; // pierwszy przebieg: j<=0, i>=0; drugi: j>=0, i<=0; trzeci: j<=0, i<=0 // czwarty: j>=0, i>=0; - j = -j; // i oraz j musi by zmienione wczeniej, eby continue dziaao + j = -j; // i oraz j musi być zmienione wcześniej, żeby continue działało direction = vector3(i, 0, j); // wektor od kamery do danego sektora - if (LengthSquared3(direction) > 5) // te blisko s zawsze wywietlane + if (LengthSquared3(direction) > 5) // te blisko są zawsze wyświetlane { direction = SafeNormalize(direction); // normalizacja if (CameraDirection.x * direction.x + CameraDirection.z * direction.z < 0.55) - continue; // pomijanie sektorw poza ktem patrzenia + continue; // pomijanie sektorów poza kątem patrzenia } Rects[(i + c) / iNumSubRects][(j + r) / iNumSubRects] .RenderVBO(); // kwadrat kilometrowy nie zawsze, bo szkoda FPS if ((tmp = FastGetSubRect(i + c, j + r)) != NULL) - if (tmp->iNodeCount) // jeeli s jakie obiekty, bo po co puste sektory przelatywa - pRendered[iRendered++] = tmp; // tworzenie listy sektorw do renderowania - } while ((i < 0) || (j < 0)); // s 4 przypadki, oprcz i=j=0 + if (tmp->iNodeCount) // jeżeli są jakieś obiekty, bo po co puste sektory przelatywać + pRendered[iRendered++] = tmp; // tworzenie listy sektorów do renderowania + } while ((i < 0) || (j < 0)); // są 4 przypadki, oprócz i=j=0 } - // doda rednerowanie terenu z E3D - jedno VBO jest uywane dla caego modelu, chyba e jest ich - // wicej + // dodać rednerowanie terenu z E3D - jedno VBO jest używane dla całego modelu, chyba że jest ich + // więcej if (Global::pTerrainCompact) Global::pTerrainCompact->TerrainRenderVBO(TGroundRect::iFrameNumber); for (i = 0; i < iRendered; i++) @@ -4732,13 +4732,13 @@ bool TGround::RenderVBO(vector3 pPosition) bool TGround::RenderAlphaVBO(vector3 pPosition) { // renderowanie scenerii z VBO - faza przezroczystych glEnable(GL_BLEND); - glAlphaFunc(GL_GREATER, 0.04); // im mniejsza warto, tym wiksza ramka, domylnie 0.1f + glAlphaFunc(GL_GREATER, 0.04); // im mniejsza wartość, tym większa ramka, domyślnie 0.1f TGroundNode *node; glColor4f(1.0f, 1.0f, 1.0f, 1.0f); TSubRect *tmp; int i; for (i = iRendered - 1; i >= 0; --i) // od najdalszych - { // renderowanie przezroczystych trjktw sektora + { // renderowanie przezroczystych trójkątów sektora tmp = pRendered[i]; tmp->LoadNodes(); // ewentualne tworzenie siatek if (tmp->StartVBO()) @@ -4751,9 +4751,9 @@ bool TGround::RenderAlphaVBO(vector3 pPosition) } for (i = iRendered - 1; i >= 0; --i) // od najdalszych pRendered[i]->RenderAlphaVBO(); // przezroczyste modeli oraz pojazdy - glDisable(GL_LIGHTING); // linie nie powinny wieci + glDisable(GL_LIGHTING); // linie nie powinny świecić for (i = iRendered - 1; i >= 0; --i) // od najdalszych - { // druty na kocu, eby si nie robiy biae plamy na tle lasu + { // druty na końcu, żeby się nie robiły białe plamy na tle lasu tmp = pRendered[i]; if (tmp->StartVBO()) { @@ -4767,10 +4767,10 @@ bool TGround::RenderAlphaVBO(vector3 pPosition) //--------------------------------------------------------------------------- void TGround::Navigate(std::string const &ClassName, UINT Msg, WPARAM wParam, LPARAM lParam) -{ // wysanie komunikatu do sterujcego - HWND h = FindWindow(ClassName.c_str(), 0); // mona by to zapamita +{ // wysłanie komunikatu do sterującego + HWND h = FindWindow(ClassName.c_str(), 0); // można by to zapamiętać if (h == 0) - h = FindWindow(0, ClassName.c_str()); // mona by to zapamita + h = FindWindow(0, ClassName.c_str()); // można by to zapamiętać SendMessage(h, Msg, wParam, lParam); }; //-------------------------------- @@ -4781,45 +4781,45 @@ void TGround::WyslijEvent(const std::string &e, const std::string &d) r.iComm = 2; // 2 - event int i = e.length(), j = d.length(); r.cString[0] = char(i); - strcpy(r.cString + 1, e.c_str()); // zakoczony zerem - r.cString[i + 2] = char(j); // licznik po zerze koczcym - strcpy(r.cString + 3 + i, d.c_str()); // zakoczony zerem + strcpy(r.cString + 1, e.c_str()); // zakończony zerem + r.cString[i + 2] = char(j); // licznik po zerze kończącym + strcpy(r.cString + 3 + i, d.c_str()); // zakończony zerem COPYDATASTRUCT cData; cData.dwData = 'EU07'; // sygnatura - cData.cbData = 12 + i + j; // 8+dwa liczniki i dwa zera koczce + cData.cbData = 12 + i + j; // 8+dwa liczniki i dwa zera kończące cData.lpData = &r; Navigate("TEU07SRK", WM_COPYDATA, (WPARAM)Global::hWnd, (LPARAM)&cData); CommLog( Now() + " " + std::to_string(r.iComm) + " " + e + " sent" ); }; //--------------------------------------------------------------------------- void TGround::WyslijUszkodzenia(const std::string &t, char fl) -{ // wysanie informacji w postaci pojedynczego tekstu +{ // wysłanie informacji w postaci pojedynczego tekstu DaneRozkaz r; r.iSygn = 'EU07'; r.iComm = 13; // numer komunikatu int i = t.length(); r.cString[0] = char(fl); r.cString[1] = char(i); - strcpy(r.cString + 2, t.c_str()); // z zerem koczcym + strcpy(r.cString + 2, t.c_str()); // z zerem kończącym COPYDATASTRUCT cData; cData.dwData = 'EU07'; // sygnatura - cData.cbData = 11 + i; // 8+licznik i zero koczce + cData.cbData = 11 + i; // 8+licznik i zero kończące cData.lpData = &r; Navigate("TEU07SRK", WM_COPYDATA, (WPARAM)Global::hWnd, (LPARAM)&cData); CommLog( Now() + " " + std::to_string(r.iComm) + " " + t + " sent"); }; //--------------------------------------------------------------------------- void TGround::WyslijString(const std::string &t, int n) -{ // wysanie informacji w postaci pojedynczego tekstu +{ // wysłanie informacji w postaci pojedynczego tekstu DaneRozkaz r; r.iSygn = 'EU07'; r.iComm = n; // numer komunikatu int i = t.length(); r.cString[0] = char(i); - strcpy(r.cString + 1, t.c_str()); // z zerem koczcym + strcpy(r.cString + 1, t.c_str()); // z zerem kończącym COPYDATASTRUCT cData; cData.dwData = 'EU07'; // sygnatura - cData.cbData = 10 + i; // 8+licznik i zero koczce + cData.cbData = 10 + i; // 8+licznik i zero kończące cData.lpData = &r; Navigate("TEU07SRK", WM_COPYDATA, (WPARAM)Global::hWnd, (LPARAM)&cData); CommLog( Now() + " " + std::to_string(r.iComm) + " " + t + " sent"); @@ -4831,30 +4831,30 @@ void TGround::WyslijWolny(const std::string &t) }; //-------------------------------- void TGround::WyslijNamiary(TGroundNode *t) -{ // wysanie informacji o pojedzie - (float), dugo ramki bdzie zwikszana w miar potrzeby +{ // wysłanie informacji o pojeździe - (float), długość ramki będzie zwiększana w miarę potrzeby // WriteLog("Wysylam pojazd"); DaneRozkaz r; r.iSygn = 'EU07'; r.iComm = 7; // 7 - dane pojazdu int i = 32, j = t->asName.length(); - r.iPar[0] = i; // ilo danych liczbowych + r.iPar[0] = i; // ilość danych liczbowych r.fPar[1] = Global::fTimeAngleDeg / 360.0; // aktualny czas (1.0=doba) r.fPar[2] = t->DynamicObject->MoverParameters->Loc.X; // pozycja X r.fPar[3] = t->DynamicObject->MoverParameters->Loc.Y; // pozycja Y r.fPar[4] = t->DynamicObject->MoverParameters->Loc.Z; // pozycja Z - r.fPar[5] = t->DynamicObject->MoverParameters->V; // prdko ruchu X + r.fPar[5] = t->DynamicObject->MoverParameters->V; // prędkość ruchu X r.fPar[6] = t->DynamicObject->MoverParameters->nrot * M_PI * - t->DynamicObject->MoverParameters->WheelDiameter; // prdko obrotowa k - r.fPar[7] = 0; // prdko ruchu Z + t->DynamicObject->MoverParameters->WheelDiameter; // prędkość obrotowa kóŁ + r.fPar[7] = 0; // prędkość ruchu Z r.fPar[8] = t->DynamicObject->MoverParameters->AccS; // przyspieszenie X r.fPar[9] = t->DynamicObject->MoverParameters->AccN; // przyspieszenie Y //na razie nie r.fPar[10] = t->DynamicObject->MoverParameters->AccV; // przyspieszenie Z - r.fPar[11] = t->DynamicObject->MoverParameters->DistCounter; // przejechana odlego w km - r.fPar[12] = t->DynamicObject->MoverParameters->PipePress; // cinienie w PG - r.fPar[13] = t->DynamicObject->MoverParameters->ScndPipePress; // cinienie w PZ - r.fPar[14] = t->DynamicObject->MoverParameters->BrakePress; // cinienie w CH - r.fPar[15] = t->DynamicObject->MoverParameters->Compressor; // cinienie w ZG - r.fPar[16] = t->DynamicObject->MoverParameters->Itot; // Prd cakowity + r.fPar[11] = t->DynamicObject->MoverParameters->DistCounter; // przejechana odległość w km + r.fPar[12] = t->DynamicObject->MoverParameters->PipePress; // ciśnienie w PG + r.fPar[13] = t->DynamicObject->MoverParameters->ScndPipePress; // ciśnienie w PZ + r.fPar[14] = t->DynamicObject->MoverParameters->BrakePress; // ciśnienie w CH + r.fPar[15] = t->DynamicObject->MoverParameters->Compressor; // ciśnienie w ZG + r.fPar[16] = t->DynamicObject->MoverParameters->Itot; // Prąd całkowity r.iPar[17] = t->DynamicObject->MoverParameters->MainCtrlPos; // Pozycja NJ r.iPar[18] = t->DynamicObject->MoverParameters->ScndCtrlPos; // Pozycja NB r.iPar[19] = t->DynamicObject->MoverParameters->MainCtrlActualPos; // Pozycja jezdna @@ -4875,7 +4875,7 @@ void TGround::WyslijNamiary(TGroundNode *t) // WriteLog("Probuje pant "+IntToStr(p)); if (p < t->DynamicObject->iAnimType[ANIM_PANTS]) { - r.fPar[23 + p] = t->DynamicObject->pants[p].fParamPants->PantWys; // stan pantografw 4 + r.fPar[23 + p] = t->DynamicObject->pants[p].fParamPants->PantWys; // stan pantografów 4 // WriteLog("Zapisalem pant "+IntToStr(p)); } else @@ -4892,12 +4892,12 @@ void TGround::WyslijNamiary(TGroundNode *t) r.iPar[30] = t->DynamicObject->MoverParameters->WarningSignal; // trabienie r.fPar[31] = t->DynamicObject->MoverParameters->RunningTraction.TractionVoltage; // napiecie WN // WriteLog("Parametry gotowe"); - i <<= 2; // ilo bajtw - r.cString[i] = char(j); // na kocu nazwa, eby jako zidentyfikowa - strcpy(r.cString + i + 1, t->asName.c_str()); // zakoczony zerem + i <<= 2; // ilość bajtów + r.cString[i] = char(j); // na końcu nazwa, żeby jakoś zidentyfikować + strcpy(r.cString + i + 1, t->asName.c_str()); // zakończony zerem COPYDATASTRUCT cData; cData.dwData = 'EU07'; // sygnatura - cData.cbData = 10 + i + j; // 8+licznik i zero koczce + cData.cbData = 10 + i + j; // 8+licznik i zero kończące cData.lpData = &r; // WriteLog("Ramka gotowa"); Navigate("TEU07SRK", WM_COPYDATA, (WPARAM)Global::hWnd, (LPARAM)&cData); @@ -4906,7 +4906,7 @@ void TGround::WyslijNamiary(TGroundNode *t) }; // void TGround::WyslijObsadzone() -{ // wysanie informacji o pojedzie +{ // wysłanie informacji o pojeździe DaneRozkaz2 r; r.iSygn = 'EU07'; r.iComm = 12; // kod 12 @@ -4940,7 +4940,7 @@ void TGround::WyslijObsadzone() COPYDATASTRUCT cData; cData.dwData = 'EU07'; // sygnatura - cData.cbData = 8 + 1984; // 8+licznik i zero koczce + cData.cbData = 8 + 1984; // 8+licznik i zero kończące cData.lpData = &r; // WriteLog("Ramka gotowa"); Navigate("TEU07SRK", WM_COPYDATA, (WPARAM)Global::hWnd, (LPARAM)&cData); @@ -4949,18 +4949,18 @@ void TGround::WyslijObsadzone() //-------------------------------- void TGround::WyslijParam(int nr, int fl) -{ // wysanie parametrw symulacji w ramce (nr) z flagami (fl) +{ // wysłanie parametrów symulacji w ramce (nr) z flagami (fl) DaneRozkaz r; r.iSygn = 'EU07'; r.iComm = nr; // zwykle 5 - r.iPar[0] = fl; // flagi istotnoci kolejnych parametrw - int i = 0; // domylnie brak danych + r.iPar[0] = fl; // flagi istotności kolejnych parametrów + int i = 0; // domyślnie brak danych switch (nr) - { // mona tym przesya rne zestawy parametrw + { // można tym przesyłać różne zestawy parametrów case 5: // czas i pauza r.fPar[1] = Global::fTimeAngleDeg / 360.0; // aktualny czas (1.0=doba) r.iPar[2] = Global::iPause; // stan zapauzowania - i = 8; // dwa parametry po 4 bajty kady + i = 8; // dwa parametry po 4 bajty każdy break; } COPYDATASTRUCT cData; @@ -4973,77 +4973,77 @@ void TGround::WyslijParam(int nr, int fl) //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- void TGround::RadioStop(vector3 pPosition) -{ // zatrzymanie pocigw w okolicy +{ // zatrzymanie pociągów w okolicy TGroundNode *node; TSubRect *tmp; int c = GetColFromX(pPosition.x); int r = GetRowFromZ(pPosition.z); int i, j; - int n = 2 * iNumSubRects; // przegldanie czogowe okolicznych torw w kwadracie 4km4km + int n = 2 * iNumSubRects; // przeglądanie czołgowe okolicznych torów w kwadracie 4km×4km for (j = r - n; j <= r + n; j++) for (i = c - n; i <= c + n; i++) if ((tmp = FastGetSubRect(i, j)) != NULL) for (node = tmp->nRootNode; node != NULL; node = node->nNext2) if (node->iType == TP_TRACK) - node->pTrack->RadioStop(); // przekazanie do kadego toru w kadym segmencie + node->pTrack->RadioStop(); // przekazanie do każdego toru w każdym segmencie }; TDynamicObject * TGround::DynamicNearest(vector3 pPosition, double distance, bool mech) -{ // wyszukanie pojazdu najbliszego wzgldem (pPosition) +{ // wyszukanie pojazdu najbliższego względem (pPosition) TGroundNode *node; TSubRect *tmp; TDynamicObject *dyn = NULL; int c = GetColFromX(pPosition.x); int r = GetRowFromZ(pPosition.z); int i, j, k; - double sqm = distance * distance, sqd; // maksymalny promien poszukiwa do kwadratu - for (j = r - 1; j <= r + 1; j++) // plus dwa zewntrzne sektory, cznie 9 + double sqm = distance * distance, sqd; // maksymalny promien poszukiwań do kwadratu + for (j = r - 1; j <= r + 1; j++) // plus dwa zewnętrzne sektory, łącznie 9 for (i = c - 1; i <= c + 1; i++) if ((tmp = FastGetSubRect(i, j)) != NULL) - for (node = tmp->nRootNode; node; node = node->nNext2) // nastpny z sektora - if (node->iType == TP_TRACK) // Ra: przebudowa na uycie tabeli torw? + for (node = tmp->nRootNode; node; node = node->nNext2) // następny z sektora + if (node->iType == TP_TRACK) // Ra: przebudować na użycie tabeli torów? for (k = 0; k < node->pTrack->iNumDynamics; k++) if (mech ? (node->pTrack->Dynamics[k]->Mechanik != NULL) : - true) // czy ma mie obsad + true) // czy ma mieć obsadę if ((sqd = SquareMagnitude( node->pTrack->Dynamics[k]->GetPosition() - pPosition)) < sqm) { - sqm = sqd; // nowa odlego + sqm = sqd; // nowa odległość dyn = node->pTrack->Dynamics[k]; // nowy lider } return dyn; }; TDynamicObject * TGround::CouplerNearest(vector3 pPosition, double distance, bool mech) -{ // wyszukanie pojazdu, ktrego sprzg jest najbliej wzgldem (pPosition) +{ // wyszukanie pojazdu, którego sprzęg jest najbliżej względem (pPosition) TGroundNode *node; TSubRect *tmp; TDynamicObject *dyn = NULL; int c = GetColFromX(pPosition.x); int r = GetRowFromZ(pPosition.z); int i, j, k; - double sqm = distance * distance, sqd; // maksymalny promien poszukiwa do kwadratu - for (j = r - 1; j <= r + 1; j++) // plus dwa zewntrzne sektory, cznie 9 + double sqm = distance * distance, sqd; // maksymalny promien poszukiwań do kwadratu + for (j = r - 1; j <= r + 1; j++) // plus dwa zewnętrzne sektory, łącznie 9 for (i = c - 1; i <= c + 1; i++) if ((tmp = FastGetSubRect(i, j)) != NULL) - for (node = tmp->nRootNode; node; node = node->nNext2) // nastpny z sektora - if (node->iType == TP_TRACK) // Ra: przebudowa na uycie tabeli torw? + for (node = tmp->nRootNode; node; node = node->nNext2) // następny z sektora + if (node->iType == TP_TRACK) // Ra: przebudować na użycie tabeli torów? for (k = 0; k < node->pTrack->iNumDynamics; k++) if (mech ? (node->pTrack->Dynamics[k]->Mechanik != NULL) : - true) // czy ma mie obsad + true) // czy ma mieć obsadę { if ((sqd = SquareMagnitude( node->pTrack->Dynamics[k]->HeadPosition() - pPosition)) < sqm) { - sqm = sqd; // nowa odlego + sqm = sqd; // nowa odległość dyn = node->pTrack->Dynamics[k]; // nowy lider } if ((sqd = SquareMagnitude( node->pTrack->Dynamics[k]->RearPosition() - pPosition)) < sqm) { - sqm = sqd; // nowa odlego + sqm = sqd; // nowa odległość dyn = node->pTrack->Dynamics[k]; // nowy lider } } @@ -5051,112 +5051,112 @@ TDynamicObject * TGround::CouplerNearest(vector3 pPosition, double distance, boo }; //--------------------------------------------------------------------------- void TGround::DynamicRemove(TDynamicObject *dyn) -{ // Ra: usunicie pojazdw ze scenerii (gdy dojad na koniec i nie sa potrzebne) +{ // Ra: usunięcie pojazdów ze scenerii (gdy dojadą na koniec i nie sa potrzebne) TDynamicObject *d = dyn->Prev(); - if (d) // jeli co jest z przodu + if (d) // jeśli coś jest z przodu DynamicRemove(d); // zaczynamy od tego z przodu else - { // jeli mamy ju tego na pocztku + { // jeśli mamy już tego na początku TGroundNode **n, *node; d = dyn; // od pierwszego while (d) { if (d->MyTrack) - d->MyTrack->RemoveDynamicObject(d); // usunicie z toru o ile nie usunity - n = &nRootDynamic; // lista pojazdw od pocztku + d->MyTrack->RemoveDynamicObject(d); // usunięcie z toru o ile nie usunięty + n = &nRootDynamic; // lista pojazdów od początku // node=NULL; //nie znalezione while (*n ? (*n)->DynamicObject != d : false) - { // usuwanie z listy pojazdw - n = &((*n)->nNext); // sprawdzenie kolejnego pojazdu na licie + { // usuwanie z listy pojazdów + n = &((*n)->nNext); // sprawdzenie kolejnego pojazdu na liście } if ((*n)->DynamicObject == d) - { // jeli znaleziony - node = (*n); // zapamitanie wza, aby go usun - (*n) = node->nNext; // pominicie na licie + { // jeśli znaleziony + node = (*n); // zapamiętanie węzła, aby go usunąć + (*n) = node->nNext; // pominięcie na liście Global::TrainDelete(d); - d = d->Next(); // przejcie do kolejnego pojazdu, pki jeszcze jest - delete node; // usuwanie fizyczne z pamici + d = d->Next(); // przejście do kolejnego pojazdu, póki jeszcze jest + delete node; // usuwanie fizyczne z pamięci } else - d = NULL; // co nie tak! + d = NULL; // coś nie tak! } } }; //--------------------------------------------------------------------------- void TGround::TerrainRead(std::string const &f){ - // Ra: wczytanie trjktw terenu z pliku E3D + // Ra: wczytanie trójkątów terenu z pliku E3D }; //--------------------------------------------------------------------------- void TGround::TerrainWrite() -{ // Ra: zapisywanie trjktw terenu do pliku E3D +{ // Ra: zapisywanie trójkątów terenu do pliku E3D if (Global::pTerrainCompact->TerrainLoaded()) - return; // jeli zostao wczytane, to nie ma co dalej robi + return; // jeśli zostało wczytane, to nie ma co dalej robić if (Global::asTerrainModel.empty()) return; - // Trjkty s zapisywane kwadratami kilometrowymi. - // Kwadrat 500500 jest na rodku (od 0.0 do 1000.0 na OX oraz OZ). - // Ewentualnie w numerowaniu kwadratw uwzgldnic wpis //$g. - // Trjkty s grupowane w submodele wg tekstury. - // Triangle_strip oraz triangle_fan s rozpisywane na pojedyncze trjkty, - // chyba e dla danej tekstury wychodzi tylko jeden submodel. + // Trójkąty są zapisywane kwadratami kilometrowymi. + // Kwadrat 500500 jest na środku (od 0.0 do 1000.0 na OX oraz OZ). + // Ewentualnie w numerowaniu kwadratów uwzględnic wpis //$g. + // Trójkąty są grupowane w submodele wg tekstury. + // Triangle_strip oraz triangle_fan są rozpisywane na pojedyncze trójkąty, + // chyba że dla danej tekstury wychodzi tylko jeden submodel. TModel3d *m = new TModel3d(); // wirtualny model roboczy z oddzielnymi submodelami - TSubModel *sk; // wskanik roboczy na submodel kwadratu - TSubModel *st; // wskanik roboczy na submodel tekstury - // Zliczamy kwadraty z trjktami, ilo tekstur oraz wierzchokw. - // Ilo kwadratw i ilo tekstur okreli ilo submodeli. - // int sub=0; //cakowita ilo submodeli - // int ver=0; //cakowita ilo wierzchokw - int i, j, k; // indeksy w ptli + TSubModel *sk; // wskaźnik roboczy na submodel kwadratu + TSubModel *st; // wskaźnik roboczy na submodel tekstury + // Zliczamy kwadraty z trójkątami, ilość tekstur oraz wierzchołków. + // Ilość kwadratów i ilość tekstur określi ilość submodeli. + // int sub=0; //całkowita ilość submodeli + // int ver=0; //całkowita ilość wierzchołków + int i, j, k; // indeksy w pętli TGroundNode *Current; - float8 *ver; // trjkty - TSubModel::iInstance = 0; // pozycja w tabeli wierzchokw liczona narastajco - for (i = 0; i < iNumRects; ++i) // ptla po wszystkich kwadratach kilometrowych + float8 *ver; // trójkąty + TSubModel::iInstance = 0; // pozycja w tabeli wierzchołków liczona narastająco + for (i = 0; i < iNumRects; ++i) // pętla po wszystkich kwadratach kilometrowych for (j = 0; j < iNumRects; ++j) if (Rects[i][j].iNodeCount) - { // o ile s jakie trjkty w rodku + { // o ile są jakieś trójkąty w środku sk = new TSubModel(); // nowy submodel dla kawadratu - // numer kwadratu XXXZZZ, przy czym X jest ujemne - XXX ronie na wschd, ZZZ ronie - // na pnoc + // numer kwadratu XXXZZZ, przy czym X jest ujemne - XXX rośnie na wschód, ZZZ rośnie + // na północ sk->NameSet( std::to_string(1000 * (500 + i - iNumRects / 2) + (500 + j - iNumRects / 2)).c_str() ); // nazwa=numer kwadratu m->AddTo(NULL, sk); // dodanie submodelu dla kwadratu for (Current = Rects[i][j].nRootNode; Current; Current = Current->nNext2) if (Current->TextureID) switch (Current->iType) - { // ptla po trjktach - zliczanie wierzchokw, dodaje submodel dla - // kadej tekstury + { // pętla po trójkątach - zliczanie wierzchołków, dodaje submodel dla + // każdej tekstury case GL_TRIANGLES: Current->iVboPtr = sk->TriangleAdd( m, Current->TextureID, - Current->iNumVerts); // zwikszenie iloci trjktw w submodelu + Current->iNumVerts); // zwiększenie ilości trójkątów w submodelu m->iNumVerts += - Current->iNumVerts; // zwikszenie cakowitej iloci wierzchokw + Current->iNumVerts; // zwiększenie całkowitej ilości wierzchołków break; - case GL_TRIANGLE_STRIP: // na razie nie, bo trzeba przerabia na pojedyncze - // trjkty + case GL_TRIANGLE_STRIP: // na razie nie, bo trzeba przerabiać na pojedyncze + // trójkąty break; - case GL_TRIANGLE_FAN: // na razie nie, bo trzeba przerabia na pojedyncze - // trjkty + case GL_TRIANGLE_FAN: // na razie nie, bo trzeba przerabiać na pojedyncze + // trójkąty break; } for (Current = Rects[i][j].nRootNode; Current; Current = Current->nNext2) if (Current->TextureID) switch (Current->iType) - { // ptla po trjktach - dopisywanie wierzchokw + { // pętla po trójkątach - dopisywanie wierzchołków case GL_TRIANGLES: // ver=sk->TrianglePtr(TTexturesManager::GetName(Current->TextureID).c_str(),Current->iNumVerts); - // //wskanik na pocztek + // //wskaźnik na początek ver = sk->TrianglePtr(Current->TextureID, Current->iVboPtr, Current->Ambient, Current->Diffuse, - Current->Specular); // wskanik na pocztek - // WriteLog("Zapis "+AnsiString(Current->iNumVerts)+" trjktw w + Current->Specular); // wskaźnik na początek + // WriteLog("Zapis "+AnsiString(Current->iNumVerts)+" trójkątów w // ("+AnsiString(i)+","+AnsiString(j)+") od // "+AnsiString(Current->iVboPtr)+" dla // "+AnsiString(Current->TextureID)); - Current->iVboPtr = -1; // bo to byo tymczasowo uywane + Current->iVboPtr = -1; // bo to było tymczasowo używane for (k = 0; k < Current->iNumVerts; ++k) - { // przepisanie wsprzdnych + { // przepisanie współrzędnych ver[k].Point.x = Current->Vertices[k].Point.x; ver[k].Point.y = Current->Vertices[k].Point.y; ver[k].Point.z = Current->Vertices[k].Point.z; @@ -5167,11 +5167,11 @@ void TGround::TerrainWrite() ver[k].tv = Current->Vertices[k].tv; } break; - case GL_TRIANGLE_STRIP: // na razie nie, bo trzeba przerabia na pojedyncze - // trjkty + case GL_TRIANGLE_STRIP: // na razie nie, bo trzeba przerabiać na pojedyncze + // trójkąty break; - case GL_TRIANGLE_FAN: // na razie nie, bo trzeba przerabia na pojedyncze - // trjkty + case GL_TRIANGLE_FAN: // na razie nie, bo trzeba przerabiać na pojedyncze + // trójkąty break; } } @@ -5180,37 +5180,37 @@ void TGround::TerrainWrite() //--------------------------------------------------------------------------- void TGround::TrackBusyList() -{ // wysanie informacji o wszystkich zajtych odcinkach +{ // wysłanie informacji o wszystkich zajętych odcinkach TGroundNode *Current; TTrack *Track; for (Current = nRootOfType[TP_TRACK]; Current; Current = Current->nNext) - if (!Current->asName.empty()) // musi by nazwa - if (Current->pTrack->iNumDynamics) // osi to chyba nie ma jak policzy - WyslijString(Current->asName, 8); // zajty + if (!Current->asName.empty()) // musi być nazwa + if (Current->pTrack->iNumDynamics) // osi to chyba nie ma jak policzyć + WyslijString(Current->asName, 8); // zajęty }; //--------------------------------------------------------------------------- void TGround::IsolatedBusyList() -{ // wysanie informacji o wszystkich odcinkach izolowanych +{ // wysłanie informacji o wszystkich odcinkach izolowanych TIsolated *Current; for (Current = TIsolated::Root(); Current; Current = Current->Next()) - if (Current->Busy()) // sprawd zajto - WyslijString(Current->asName, 11); // zajty + if (Current->Busy()) // sprawdź zajętość + WyslijString(Current->asName, 11); // zajęty else WyslijString(Current->asName, 10); // wolny - WyslijString("none", 10); // informacja o kocu listy + WyslijString("none", 10); // informacja o końcu listy }; //--------------------------------------------------------------------------- void TGround::IsolatedBusy(const std::string t) -{ // wysanie informacji o odcinku izolowanym (t) - // Ra 2014-06: do wyszukania uy drzewka nazw +{ // wysłanie informacji o odcinku izolowanym (t) + // Ra 2014-06: do wyszukania użyć drzewka nazw TIsolated *Current; for (Current = TIsolated::Root(); Current; Current = Current->Next()) if (Current->asName == t) // wyszukiwanie odcinka o nazwie (t) - if (Current->Busy()) // sprawd zajeto + if (Current->Busy()) // sprawdź zajetość { - WyslijString(Current->asName, 11); // zajty + WyslijString(Current->asName, 11); // zajęty return; // nie sprawdzaj dalszych } WyslijString(t, 10); // wolny @@ -5221,19 +5221,19 @@ void TGround::Silence(vector3 gdzie) { // wyciszenie wszystkiego w sektorach przed przeniesieniem kamery z (gdzie) int tr, tc; TGroundNode *node; - int n = 2 * iNumSubRects; //(2*==2km) promie wywietlanej mapy w sektorach + int n = 2 * iNumSubRects; //(2*==2km) promień wyświetlanej mapy w sektorach int c = GetColFromX(gdzie.x); // sektory wg dotychczasowej pozycji kamery int r = GetRowFromZ(gdzie.z); TSubRect *tmp; int i, j, k; - // renderowanie czogowe dla obiektw aktywnych a niewidocznych + // renderowanie czołgowe dla obiektów aktywnych a niewidocznych for (j = r - n; j <= r + n; j++) for (i = c - n; i <= c + n; i++) if ((tmp = FastGetSubRect(i, j)) != NULL) - { // tylko dwiki interesuj + { // tylko dźwięki interesują for (node = tmp->nRenderHidden; node; node = node->nNext3) node->RenderHidden(); - tmp->RenderSounds(); // dwiki pojazdw by si przydao wyczy + tmp->RenderSounds(); // dźwięki pojazdów by się przydało wyłączyć } }; //--------------------------------------------------------------------------- diff --git a/Ground.h b/Ground.h index 77751b9d..4a17e4f1 100644 --- a/Ground.h +++ b/Ground.h @@ -18,9 +18,9 @@ http://mozilla.org/MPL/2.0/. using namespace Math3D; -// Ra: zmniejszone liczby, aby zrobi tabelk i zoptymalizowa wyszukiwanie +// Ra: zmniejszone liczby, aby zrobić tabelkę i zoptymalizować wyszukiwanie const int TP_MODEL = 10; -const int TP_MESH = 11; // Ra: specjalny obiekt grupojcy siatki dla tekstury +const int TP_MESH = 11; // Ra: specjalny obiekt grupujący siatki dla tekstury const int TP_DUMMYTRACK = 12; // Ra: zdublowanie obiektu toru dla rozdzielenia tekstur const int TP_TERRAIN = 13; // Ra: specjalny model dla terenu const int TP_DYNAMIC = 14; @@ -67,15 +67,15 @@ struct TGroundVertex vector3 Normal; float tu, tv; void HalfSet(const TGroundVertex &v1, const TGroundVertex &v2) - { // wyliczenie wsprzdnych i mapowania punktu na rodku odcinka v1<->v2 + { // wyliczenie współrzędnych i mapowania punktu na środku odcinka v1<->v2 Point = 0.5 * (v1.Point + v2.Point); Normal = 0.5 * (v1.Normal + v2.Normal); tu = 0.5 * (v1.tu + v2.tu); tv = 0.5 * (v1.tv + v2.tv); } void SetByX(const TGroundVertex &v1, const TGroundVertex &v2, double x) - { // wyliczenie wsprzdnych i mapowania punktu na odcinku v1<->v2 - double i = (x - v1.Point.x) / (v2.Point.x - v1.Point.x); // parametr rwnania + { // wyliczenie współrzędnych i mapowania punktu na odcinku v1<->v2 + double i = (x - v1.Point.x) / (v2.Point.x - v1.Point.x); // parametr równania double j = 1.0 - i; Point = j * v1.Point + i * v2.Point; Normal = j * v1.Normal + i * v2.Normal; @@ -83,8 +83,8 @@ struct TGroundVertex tv = j * v1.tv + i * v2.tv; } void SetByZ(const TGroundVertex &v1, const TGroundVertex &v2, double z) - { // wyliczenie wsprzdnych i mapowania punktu na odcinku v1<->v2 - double i = (z - v1.Point.z) / (v2.Point.z - v1.Point.z); // parametr rwnania + { // wyliczenie współrzędnych i mapowania punktu na odcinku v1<->v2 + double i = (z - v1.Point.z) / (v2.Point.z - v1.Point.z); // parametr równania double j = 1.0 - i; Point = j * v1.Point + i * v2.Point; Normal = j * v1.Normal + i * v2.Normal; @@ -93,7 +93,7 @@ struct TGroundVertex } }; -class TSubRect; // sektor (aktualnie 200m200m, ale moe by zmieniony) +class TSubRect; // sektor (aktualnie 200m×200m, ale może być zmieniony) class TGroundNode : public Resource { // obiekt scenerii @@ -101,64 +101,64 @@ class TGroundNode : public Resource public: TGroundNodeType iType; // typ obiektu union - { // Ra: wskaniki zalene od typu - zrobi klasy dziedziczone zamiast + { // Ra: wskażniki zależne od typu - zrobić klasy dziedziczone zamiast void *Pointer; // do przypisywania NULL TSubModel *smTerrain; // modele terenu (kwadratow kilometrowych) TAnimModel *Model; // model z animacjami TDynamicObject *DynamicObject; // pojazd vector3 *Points; // punkty dla linii TTrack *pTrack; // trajektoria ruchu - TGroundVertex *Vertices; // wierzchoki dla trjktw - TMemCell *MemCell; // komrka pamici - TEventLauncher *EvLaunch; // wyzwalacz zdarze - TTraction *hvTraction; // drut zasilajcy + TGroundVertex *Vertices; // wierzchołki dla trójkątów + TMemCell *MemCell; // komórka pamięci + TEventLauncher *EvLaunch; // wyzwalacz zdarzeń + TTraction *hvTraction; // drut zasilający TTractionPowerSource *psTractionPowerSource; // zasilanie drutu (zaniedbane w sceneriach) - TTextSound *tsStaticSound; // dwik przestrzenny - TGroundNode *nNode; // obiekt renderujcy grupowo ma tu wskanik na list obiektw + TTextSound *tsStaticSound; // dźwięk przestrzenny + TGroundNode *nNode; // obiekt renderujący grupowo ma tu wskaźnik na listę obiektów }; std::string asName; // nazwa (nie zawsze ma znaczenie) union { - int iNumVerts; // dla trjktw + int iNumVerts; // dla trójkątów int iNumPts; // dla linii int iCount; // dla terenu - // int iState; //Ra: nie uywane - dwiki zaptlone + // int iState; //Ra: nie używane - dźwięki zapętlone }; - vector3 pCenter; // wsprzdne rodka do przydzielenia sektora + vector3 pCenter; // współrzędne środka do przydzielenia sektora union { - // double fAngle; //kt obrotu dla modelu + // double fAngle; //kąt obrotu dla modelu double fLineThickness; // McZapkie-120702: grubosc linii // int Status; //McZapkie-170303: status dzwieku }; - double fSquareRadius; // kwadrat widocznoci do - double fSquareMinRadius; // kwadrat widocznoci od - // TGroundNode *nMeshGroup; //Ra: obiekt grupujcy trjkty w TSubRect dla tekstury + double fSquareRadius; // kwadrat widoczności do + double fSquareMinRadius; // kwadrat widoczności od + // TGroundNode *nMeshGroup; //Ra: obiekt grupujący trójkąty w TSubRect dla tekstury int iVersion; // wersja siatki (do wykonania rekompilacji) // union ? GLuint DisplayListID; // numer siatki DisplayLists bool PROBLEND; int iVboPtr; // indeks w buforze VBO - GLuint TextureID; // gwna (jedna) tekstura obiektu - int iFlags; // tryb przezroczystoci: 0x10-nieprz.,0x20-przezroczysty,0x30-mieszany - int Ambient[4], Diffuse[4], Specular[4]; // owietlenie + GLuint TextureID; // główna (jedna) tekstura obiektu + int iFlags; // tryb przezroczystości: 0x10-nieprz.,0x20-przezroczysty,0x30-mieszany + int Ambient[4], Diffuse[4], Specular[4]; // oświetlenie bool bVisible; - TGroundNode *nNext; // lista wszystkich w scenerii, ostatni na pocztku - TGroundNode *nNext2; // lista obiektw w sektorze - TGroundNode *nNext3; // lista obiektw renderowanych we wsplnym cyklu + TGroundNode *nNext; // lista wszystkich w scenerii, ostatni na początku + TGroundNode *nNext2; // lista obiektów w sektorze + TGroundNode *nNext3; // lista obiektów renderowanych we wspólnym cyklu TGroundNode(); TGroundNode(TGroundNodeType t, int n = 0); ~TGroundNode(); void Init(int n); - void InitCenter(); // obliczenie wsprzdnych rodka + void InitCenter(); // obliczenie współrzędnych środka void InitNormals(); - void MoveMe(vector3 pPosition); // przesuwanie (nie dziaa) + void MoveMe(vector3 pPosition); // przesuwanie (nie działa) // bool Disable(); inline TGroundNode * Find(const std::string &asNameToFind, TGroundNodeType iNodeType) - { // wyszukiwanie czogowe z typem + { // wyszukiwanie czołgowe z typem if ((iNodeType == iType) && (asNameToFind == asName)) return this; else if (nNext) @@ -170,36 +170,36 @@ class TGroundNode : public Resource void Release(); bool GetTraction(); - void RenderHidden(); // obsuga dwikw i wyzwalaczy zdarze + void RenderHidden(); // obsługa dźwięków i wyzwalaczy zdarzeń void RenderDL(); // renderowanie nieprzezroczystych w Display Lists void RenderAlphaDL(); // renderowanie przezroczystych w Display Lists // (McZapkie-131202) - void RaRenderVBO(); // renderowanie (nieprzezroczystych) ze wsplnego VBO - void RenderVBO(); // renderowanie nieprzezroczystych z wasnego VBO - void RenderAlphaVBO(); // renderowanie przezroczystych z (wasnego) VBO + void RaRenderVBO(); // renderowanie (nieprzezroczystych) ze wspólnego VBO + void RenderVBO(); // renderowanie nieprzezroczystych z własnego VBO + void RenderAlphaVBO(); // renderowanie przezroczystych z (własnego) VBO }; class TSubRect : public Resource, public CMesh -{ // sektor skadowy kwadratu kilometrowego +{ // sektor składowy kwadratu kilometrowego public: - int iTracks; // ilo torw w (tTracks) - TTrack **tTracks; // tory do renderowania pojazdw + int iTracks; // ilość torów w (tTracks) + TTrack **tTracks; // tory do renderowania pojazdów protected: TTrack *tTrackAnim; // obiekty do przeliczenia animacji - TGroundNode *nRootMesh; // obiekty renderujce wg tekstury (wtrne, lista po nNext2) - TGroundNode *nMeshed; // lista obiektw dla ktrych istniej obiekty renderujce grupowo + TGroundNode *nRootMesh; // obiekty renderujące wg tekstury (wtórne, lista po nNext2) + TGroundNode *nMeshed; // lista obiektów dla których istnieją obiekty renderujące grupowo public: TGroundNode * - nRootNode; // wszystkie obiekty w sektorze, z wyjtkiem renderujcych i pojazdw (nNext2) + nRootNode; // wszystkie obiekty w sektorze, z wyjątkiem renderujących i pojazdów (nNext2) TGroundNode * - nRenderHidden; // lista obiektw niewidocznych, "renderowanych" rwnie z tyu (nNext3) + nRenderHidden; // lista obiektów niewidocznych, "renderowanych" również z tyłu (nNext3) TGroundNode *nRenderRect; // z poziomu sektora - nieprzezroczyste (nNext3) TGroundNode *nRenderRectAlpha; // z poziomu sektora - przezroczyste (nNext3) TGroundNode *nRenderWires; // z poziomu sektora - druty i inne linie (nNext3) TGroundNode *nRender; // indywidualnie - nieprzezroczyste (nNext3) TGroundNode *nRenderMixed; // indywidualnie - nieprzezroczyste i przezroczyste (nNext3) TGroundNode *nRenderAlpha; // indywidualnie - przezroczyste (nNext3) - int iNodeCount; // licznik obiektw, do pomijania pustych sektorw + int iNodeCount; // licznik obiektów, do pomijania pustych sektorów public: void LoadNodes(); // utworzenie VBO sektora public: @@ -208,25 +208,25 @@ class TSubRect : public Resource, public CMesh virtual void Release(); // zwalnianie VBO sektora void NodeAdd(TGroundNode *Node); // dodanie obiektu do sektora na etapie rozdzielania na sektory void RaNodeAdd(TGroundNode *Node); // dodanie obiektu do listy renderowania - void Sort(); // optymalizacja obiektw w sektorze (sortowanie wg tekstur) + void Sort(); // optymalizacja obiektów w sektorze (sortowanie wg tekstur) TTrack * FindTrack(vector3 *Point, int &iConnection, TTrack *Exclude); TTraction * FindTraction(vector3 *Point, int &iConnection, TTraction *Exclude); bool StartVBO(); // ustwienie VBO sektora dla (nRenderRect), (nRenderRectAlpha) i // (nRenderWires) - bool RaTrackAnimAdd(TTrack *t); // zgoszenie toru do animacji - void RaAnimate(); // przeliczenie animacji torw + bool RaTrackAnimAdd(TTrack *t); // zgłoszenie toru do animacji + void RaAnimate(); // przeliczenie animacji torów void RenderDL(); // renderowanie nieprzezroczystych w Display Lists void RenderAlphaDL(); // renderowanie przezroczystych w Display Lists // (McZapkie-131202) - void RenderVBO(); // renderowanie nieprzezroczystych z wasnego VBO - void RenderAlphaVBO(); // renderowanie przezroczystych z (wasnego) VBO - void RenderSounds(); // dwiki pojazdw z niewidocznych sektorw + void RenderVBO(); // renderowanie nieprzezroczystych z własnego VBO + void RenderAlphaVBO(); // renderowanie przezroczystych z (własnego) VBO + void RenderSounds(); // dźwięki pojazdów z niewidocznych sektorów }; -// Ra: trzeba sprawdzi wydajno siatki +// Ra: trzeba sprawdzić wydajność siatki const int iNumSubRects = 5; // na ile dzielimy kilometr const int iNumRects = 500; -// const double fHalfNumRects=iNumRects/2.0; //poowa do wyznaczenia rodka +// const double fHalfNumRects=iNumRects/2.0; //połowa do wyznaczenia środka const int iTotalNumSubRects = iNumRects * iNumSubRects; const double fHalfTotalNumSubRects = iTotalNumSubRects / 2.0; const double fSubRectSize = 1000.0 / iNumSubRects; @@ -234,10 +234,10 @@ const double fRectSize = fSubRectSize * iNumSubRects; class TGroundRect : public TSubRect { // kwadrat kilometrowy - // obiekty o niewielkiej iloci wierzchokw bd renderowane std - // Ra: 2012-02 doszy submodele terenu + // obiekty o niewielkiej ilości wierzchołków będą renderowane stąd + // Ra: 2012-02 doszły submodele terenu private: - int iLastDisplay; // numer klatki w ktrej by ostatnio wywietlany + int iLastDisplay; // numer klatki w której był ostatnio wyświetlany TSubRect *pSubRects; void Init() { @@ -245,26 +245,26 @@ class TGroundRect : public TSubRect }; public: - static int iFrameNumber; // numer kolejny wywietlanej klatki - TGroundNode *nTerrain; // model terenu z E3D - uy nRootMesh? + static int iFrameNumber; // numer kolejny wyświetlanej klatki + TGroundNode *nTerrain; // model terenu z E3D - użyć nRootMesh? TGroundRect(); virtual ~TGroundRect(); TSubRect * SafeGetRect(int iCol, int iRow) - { // pobranie wskanika do maego kwadratu, utworzenie jeli trzeba + { // pobranie wskaźnika do małego kwadratu, utworzenie jeśli trzeba if (!pSubRects) - Init(); // utworzenie maych kwadratw - return pSubRects + iRow * iNumSubRects + iCol; // zwrcenie waciwego + Init(); // utworzenie małych kwadratów + return pSubRects + iRow * iNumSubRects + iCol; // zwrócenie właściwego }; TSubRect * FastGetRect(int iCol, int iRow) - { // pobranie wskanika do maego kwadratu, bez tworzenia jeli nie ma + { // pobranie wskaźnika do małego kwadratu, bez tworzenia jeśli nie ma return (pSubRects ? pSubRects + iRow * iNumSubRects + iCol : NULL); }; void Optimize() - { // optymalizacja obiektw w sektorach + { // optymalizacja obiektów w sektorach if (pSubRects) for (int i = iNumSubRects * iNumSubRects - 1; i >= 0; --i) - pSubRects[i].Sort(); // optymalizacja obiektw w sektorach + pSubRects[i].Sort(); // optymalizacja obiektów w sektorach }; void RenderDL(); void RenderVBO(); @@ -273,28 +273,28 @@ class TGroundRect : public TSubRect class TGround { vector3 CameraDirection; // zmienna robocza przy renderowaniu - int const *iRange; // tabela widocznoci - // TGroundNode *nRootNode; //lista wszystkich wzw - TGroundNode *nRootDynamic; // lista pojazdw - TGroundRect Rects[iNumRects][iNumRects]; // mapa kwadratw kilometrowych - TEvent *RootEvent; // lista zdarze + int const *iRange; // tabela widoczności + // TGroundNode *nRootNode; //lista wszystkich węzłów + TGroundNode *nRootDynamic; // lista pojazdów + TGroundRect Rects[iNumRects][iNumRects]; // mapa kwadratów kilometrowych + TEvent *RootEvent; // lista zdarzeń TEvent *QueryRootEvent, *tmpEvent, *tmp2Event, *OldQRE; - TSubRect *pRendered[1500]; // lista renderowanych sektorw + TSubRect *pRendered[1500]; // lista renderowanych sektorów int iNumNodes; vector3 pOrigin; vector3 aRotate; bool bInitDone; - TGroundNode *nRootOfType[TP_LAST]; // tablica grupujca obiekty, przyspiesza szukanie + TGroundNode *nRootOfType[TP_LAST]; // tablica grupująca obiekty, przyspiesza szukanie // TGroundNode *nLastOfType[TP_LAST]; //ostatnia TSubRect srGlobal; // zawiera obiekty globalne (na razie wyzwalacze czasowe) int hh, mm, srh, srm, ssh, ssm; // ustawienia czasu - // int tracks,tracksfar; //liczniki torw - TNames *sTracks; // posortowane nazwy torw i eventw + // int tracks,tracksfar; //liczniki torów + TNames *sTracks; // posortowane nazwy torów i eventów private: // metody prywatne bool EventConditon(TEvent *e); public: - bool bDynamicRemove; // czy uruchomi procedur usuwania pojazdw + bool bDynamicRemove; // czy uruchomić procedurę usuwania pojazdów TDynamicObject *LastDyn; // ABu: paskudnie, ale na bardzo szybko moze jakos przejdzie... // TTrain *pTrain; // double fVDozwolona; @@ -330,8 +330,8 @@ class TGround TGroundNode * GetNode(std::string asName); bool AddDynamic(TGroundNode *Node); void MoveGroundNode(vector3 pPosition); - void UpdatePhys(double dt, int iter); // aktualizacja fizyki staym krokiem - bool Update(double dt, int iter); // aktualizacja przesuni zgodna z FPS + void UpdatePhys(double dt, int iter); // aktualizacja fizyki stałym krokiem + bool Update(double dt, int iter); // aktualizacja przesunięć zgodna z FPS bool AddToQuery(TEvent *Event, TDynamicObject *Node); bool GetTraction(TDynamicObject *model); bool RenderDL(vector3 pPosition); @@ -394,7 +394,7 @@ class TGround public: void WyslijEvent(const std::string &e, const std::string &d); - int iRendered; // ilo renderowanych sektorw, pobierana przy pokazywniu FPS + int iRendered; // ilość renderowanych sektorów, pobierana przy pokazywniu FPS void WyslijString(const std::string &t, int n); void WyslijWolny(const std::string &t); void WyslijNamiary(TGroundNode *t); diff --git a/Logs.cpp b/Logs.cpp index b5736191..563003b0 100644 --- a/Logs.cpp +++ b/Logs.cpp @@ -12,9 +12,9 @@ http://mozilla.org/MPL/2.0/. #include "Globals.h" -std::ofstream output; // standardowy "log.txt", mona go wyczy -std::ofstream errors; // lista bdw "errors.txt", zawsze dziaa -std::ofstream comms; // lista komunikatow "comms.txt", mona go wyczy +std::ofstream output; // standardowy "log.txt", można go wyłączyć +std::ofstream errors; // lista błędów "errors.txt", zawsze działa +std::ofstream comms; // lista komunikatow "comms.txt", można go wyłączyć char endstring[10] = "\n"; @@ -71,7 +71,7 @@ void WriteLog(const char *str, bool newline) }; void ErrorLog(const char *str) -{ // Ra: bezwarunkowa rejestracja powanych bdw +{ // Ra: bezwarunkowa rejestracja poważnych błędów if (!errors.is_open()) { errors.open("errors.txt", std::ios::trunc); @@ -110,7 +110,7 @@ void WriteLog(const std::string &str, bool newline) }; void CommLog(const char *str) -{ // Ra: warunkowa rejestracja komunikatw +{ // Ra: warunkowa rejestracja komunikatów WriteLog(str); /* if (Global::iWriteLogEnabled & 4) { diff --git a/McZapkie/MOVER.h b/McZapkie/MOVER.h index ceaf46f6..741af16f 100644 --- a/McZapkie/MOVER.h +++ b/McZapkie/MOVER.h @@ -130,15 +130,15 @@ static int const dtrain_out = 128; /*wykolejenie*/ #define p_slippdmg (1.000000E-03) /*typ sprzegu*/ -static int const ctrain_virtual = 0; //gdy pojazdy na tym samym torze si widz wzajemnie +static int const ctrain_virtual = 0; //gdy pojazdy na tym samym torze się widzą wzajemnie static int const ctrain_coupler = 1; //sprzeg fizyczny static int const ctrain_pneumatic = 2; //przewody hamulcowe -static int const ctrain_controll = 4; //przewody sterujce (ukrotnienie) -static int const ctrain_power = 8; //przewody zasilajce (WN) -static int const ctrain_passenger = 16; //mostek przejciowy -static int const ctrain_scndpneumatic = 32; //przewody 8 atm (te; zasilanie powietrzem) +static int const ctrain_controll = 4; //przewody sterujące (ukrotnienie) +static int const ctrain_power = 8; //przewody zasilające (WN) +static int const ctrain_passenger = 16; //mostek przejściowy +static int const ctrain_scndpneumatic = 32; //przewody 8 atm (żółte; zasilanie powietrzem) static int const ctrain_heating = 64; //przewody ogrzewania WN -static int const ctrain_depot = 128; //nie rozczalny podczas zwykych manewrw (midzyczonowy), we wpisie warto ujemna +static int const ctrain_depot = 128; //nie rozłączalny podczas zwykłych manewrów (międzyczłonowy), we wpisie wartość ujemna /*typ hamulca elektrodynamicznego*/ static int const dbrake_none = 0; @@ -149,9 +149,9 @@ static int const dbrake_automatic = 8; /*status czuwaka/SHP*/ //hunter-091012: rozdzielenie alarmow, dodanie testu czuwaka -static int const s_waiting = 1; //dziaa +static int const s_waiting = 1; //działa static int const s_aware = 2; //czuwak miga -static int const s_active = 4; //SHP wieci +static int const s_active = 4; //SHP świeci static int const s_CAalarm = 8; //buczy static int const s_SHPalarm = 16; //buczy static int const s_CAebrake = 32; //hamuje @@ -170,20 +170,20 @@ static int const sound_brakeacc = 64; static bool PhysicActivationFlag = false; -//szczeglne typy pojazdw (inna obsuga) dla zmiennej TrainType -//zamienione na flagi bitowe, aby szybko wybiera grup (np. EZT+SZT) +//szczególne typy pojazdów (inna obsługa) dla zmiennej TrainType +//zamienione na flagi bitowe, aby szybko wybierać grupę (np. EZT+SZT) static int const dt_Default = 0; static int const dt_EZT = 1; static int const dt_ET41 = 2; static int const dt_ET42 = 4; static int const dt_PseudoDiesel = 8; -static int const dt_ET22 = 0x10; //uywane od Megapacka -static int const dt_SN61 = 0x20; //nie uywane w warunkach, ale ustawiane z CHK +static int const dt_ET22 = 0x10; //używane od Megapacka +static int const dt_SN61 = 0x20; //nie używane w warunkach, ale ustawiane z CHK static int const dt_EP05 = 0x40; static int const dt_ET40 = 0x80; static int const dt_181 = 0x100; -//stae dla asynchronw +//stałe dla asynchronów static int const eimc_s_dfic = 0; static int const eimc_s_dfmax = 1; static int const eimc_s_p = 2; @@ -206,7 +206,7 @@ static int const eimc_p_Imax = 20; static int const eimc_p_abed = 21; static int const eimc_p_eped = 22; -//zmienne dla asynchronw +//zmienne dla asynchronów static int const eimv_FMAXMAX = 0; static int const eimv_Fmax = 1; static int const eimv_ks = 2; @@ -234,10 +234,10 @@ static int const bom_PN = 2; static int const bom_EP = 4; static int const bom_MED = 8; -enum TProblem // lista problemw taboru, ktre uniemoliwiaj jazd +enum TProblem // lista problemów taboru, które uniemożliwiają jazdę { // flagi bitowe - pr_Hamuje = 1, // pojazd ma zaczony hamulec lub zatarte osie - pr_Pantografy = 2, // pojazd wymaga napompowania pantografw + pr_Hamuje = 1, // pojazd ma załączony hamulec lub zatarte osie + pr_Pantografy = 2, // pojazd wymaga napompowania pantografów pr_Ostatni = 0x80000000 // ostatnia flaga bitowa }; @@ -373,21 +373,21 @@ struct TBoilerType { }; /*rodzaj odbieraka pradu*/ struct TCurrentCollector { - long CollectorsNo; //musi by tu, bo inaczej si kopie - double MinH; double MaxH; //zakres ruchu pantografu, nigdzie nie uywany - double CSW; //szeroko czci roboczej (styku) lizgacza - double MinV; double MaxV; //minimalne i maksymalne akceptowane napicie + long CollectorsNo; //musi być tu, bo inaczej się kopie + double MinH; double MaxH; //zakres ruchu pantografu, nigdzie nie używany + double CSW; //szerokość części roboczej (styku) ślizgacza + double MinV; double MaxV; //minimalne i maksymalne akceptowane napięcie double OVP; //czy jest przekaznik nadnapieciowy - double InsetV; //minimalne napicie wymagane do zaczenia - double MinPress; //minimalne cinienie do zaczenia WS - double MaxPress; //maksymalne cinienie za reduktorem + double InsetV; //minimalne napięcie wymagane do załączenia + double MinPress; //minimalne ciśnienie do załączenia WS + double MaxPress; //maksymalne ciśnienie za reduktorem //inline TCurrentCollector() { // CollectorsNo = 0; // MinH, MaxH, CSW, MinV, MaxV = 0.0; // OVP, InsetV, MinPress, MaxPress = 0.0; //} }; -/*typy rde mocy*/ +/*typy źródeł mocy*/ enum TPowerSource { NotDefined, InternalSource, Transducer, Generator, Accumulator, CurrentCollector, PowerCable, Heater }; @@ -417,7 +417,7 @@ struct _mover__3 TBoilerType Boiler; }; -/*parametry rde mocy*/ +/*parametry źródeł mocy*/ struct TPowerParameters { double MaxVoltage; @@ -541,7 +541,7 @@ struct TSecuritySystem { int SystemType; /*0: brak, 1: czuwak aktywny, 2: SHP/sygnalizacja kabinowa*/ double AwareDelay; // czas powtarzania czuwaka - double AwareMinSpeed; // minimalna prdko zaczenia czuwaka, normalnie 10% Vmax + double AwareMinSpeed; // minimalna prędkość załączenia czuwaka, normalnie 10% Vmax double SoundSignalDelay; double EmergencyBrakeDelay; int Status; /*0: wylaczony, 1: wlaczony, 2: czuwak, 4: shp, 8: alarm, 16: hamowanie awaryjne*/ @@ -578,18 +578,18 @@ struct TCoupling { TCouplerType CouplerType; /*typ sprzegu*/ /*zmienne*/ int CouplingFlag; /*0 - wirtualnie, 1 - sprzegi, 2 - pneumatycznie, 4 - sterowanie, 8 - kabel mocy*/ - int AllowedFlag; //Ra: znaczenie jak wyej, maska dostpnych + int AllowedFlag; //Ra: znaczenie jak wyżej, maska dostępnych bool Render; /*ABu: czy rysowac jak zaczepiony sprzeg*/ - double CoupleDist; /*ABu: optymalizacja - liczenie odleglosci raz na klatk, bez iteracji*/ + double CoupleDist; /*ABu: optymalizacja - liczenie odleglosci raz na klatkę, bez iteracji*/ TMoverParameters* Connected; /*co jest podlaczone*/ - int ConnectedNr; //Ra: od ktrej strony podczony do (Connected): 0=przd, 1=ty + int ConnectedNr; //Ra: od której strony podłączony do (Connected): 0=przód, 1=tył double CForce; /*sila z jaka dzialal*/ - double Dist; /*strzalka ugiecia zderzakw*/ + double Dist; /*strzalka ugiecia zderzaków*/ bool CheckCollision; /*czy sprawdzac sile czy pedy*/ }; class TMoverParameters -{ // Ra: wrapper na kod pascalowy, przejmujcy jego funkcje Q: 20160824 - juz nie wrapper a klasa bazowa :) +{ // Ra: wrapper na kod pascalowy, przejmujący jego funkcje Q: 20160824 - juz nie wrapper a klasa bazowa :) public: double dMoveLen; @@ -600,7 +600,7 @@ public: /*--sekcja stalych typowych parametrow*/ std::string TypeName; /*nazwa serii/typu*/ //TrainType: string; {typ: EZT/elektrowoz - Winger 040304} - int TrainType; /*Ra: powinno by szybciej ni string*/ + int TrainType; /*Ra: powinno być szybciej niż string*/ TEngineTypes EngineType; /*typ napedu*/ TPowerParameters EnginePowerSource; /*zrodlo mocy dla silnikow*/ TPowerParameters SystemPowerSource; /*zrodlo mocy dla systemow sterowania/przetwornic/sprezarek*/ @@ -609,7 +609,7 @@ public: TPowerParameters LightPowerSource; /*zrodlo mocy dla oswietlenia*/ TPowerParameters AlterLightPowerSource;/*alternatywne mocy dla oswietlenia*/ double Vmax; double Mass; double Power; /*max. predkosc kontrukcyjna, masa wlasna, moc*/ - double Mred; /*Ra: zredukowane masy wirujce; potrzebne do oblicze hamowania*/ + double Mred; /*Ra: zredukowane masy wirujące; potrzebne do obliczeń hamowania*/ double TotalMass; /*wyliczane przez ComputeMass*/ double HeatingPower; double LightPower; /*moc pobierana na ogrzewanie/oswietlenie*/ double BatteryVoltage; /*Winger - baterie w elektrykach*/ @@ -621,7 +621,7 @@ public: double NominalBatteryVoltage; /*Winger - baterie w elektrykach*/ TDimension Dim; /*wymiary*/ double Cx; /*wsp. op. aerodyn.*/ - double Floor; //poziom podogi dla adunkw + double Floor; //poziom podłogi dla ładunków double WheelDiameter; /*srednica kol napednych*/ double WheelDiameterL; //Ra: srednica kol tocznych przednich double WheelDiameterT; //Ra: srednica kol tocznych tylnych @@ -649,7 +649,7 @@ public: TLocalBrake LocalBrake; /*rodzaj hamulca indywidualnego*/ TBrakePressureTable BrakePressureTable; /*wyszczegolnienie cisnien w rurze*/ - TBrakePressure BrakePressureActual; //wartoci waone dla aktualnej pozycji kranu + TBrakePressure BrakePressureActual; //wartości ważone dla aktualnej pozycji kranu int ASBType; /*0: brak hamulca przeciwposlizgowego, 1: reczny, 2: automat*/ int TurboTest; double MaxBrakeForce; /*maksymalna sila nacisku hamulca*/ @@ -660,7 +660,7 @@ public: /*max. cisnienie w cyl. ham., stala proporcjonalnosci p-K*/ double HighPipePress; double LowPipePress; double DeltaPipePress; /*max. i min. robocze cisnienie w przewodzie glownym oraz roznica miedzy nimi*/ - double CntrlPipePress; //cinienie z zbiorniku sterujcym + double CntrlPipePress; //ciśnienie z zbiorniku sterującym double BrakeVolume; double BrakeVVolume; double VeselVolume; /*pojemnosc powietrza w ukladzie hamulcowym, w ukladzie glownej sprezarki [m^3] */ int BrakeCylNo; /*ilosc cylindrow ham.*/ @@ -684,7 +684,7 @@ public: int ScndCtrlPosNo; int LightsPosNo; int LightsDefPos; bool LightsWrap; - int Lights[2][17]; // pozycje wiate, przd - ty, 1 .. 16 + int Lights[2][17]; // pozycje świateł, przód - tył, 1 .. 16 bool ScndInMain; /*zaleznosc bocznika od nastawnika*/ bool MBrake; /*Czy jest hamulec reczny*/ double StopBrakeDecc; @@ -721,7 +721,7 @@ public: double RVentCutOff; /*rezystancja wylaczania wentylatorow dla RVentType=2*/ int CompressorPower; /*0: bezp. z obwodow silnika, 1: z przetwornicy, reczne, 2: w przetwornicy, stale, 5: z silnikowego*/ int SmallCompressorPower; /*Winger ZROBIC*/ - bool Trafo; /*pojazd wyposaony w transformator*/ + bool Trafo; /*pojazd wyposażony w transformator*/ /*-sekcja parametrow dla lokomotywy spalinowej z przekladnia mechaniczna*/ double dizel_Mmax; double dizel_nMmax; double dizel_Mnmax; double dizel_nmax; double dizel_nominalfill; @@ -767,7 +767,7 @@ public: bool DoorClosureWarning; /*czy jest ostrzeganie przed zamknieciem*/ double DoorOpenSpeed; double DoorCloseSpeed; /*predkosc otwierania i zamykania w j.u. */ double DoorMaxShiftL; double DoorMaxShiftR; double DoorMaxPlugShift;/*szerokosc otwarcia lub kat*/ - int DoorOpenMethod; /*sposob otwarcia - 1: przesuwne, 2: obrotowe, 3: trjelementowe*/ + int DoorOpenMethod; /*sposob otwarcia - 1: przesuwne, 2: obrotowe, 3: trójelementowe*/ double PlatformSpeed; /*szybkosc stopnia*/ double PlatformMaxShift; /*wysuniecie stopnia*/ int PlatformOpenMethod; /*sposob animacji stopnia*/ @@ -775,7 +775,7 @@ public: /*--sekcja zmiennych*/ /*--opis konkretnego egzemplarza taboru*/ - TLocation Loc; //pozycja pojazdw do wyznaczenia odlegoci pomidzy sprzgami + TLocation Loc; //pozycja pojazdów do wyznaczenia odległości pomiędzy sprzęgami TRotation Rot; std::string Name; /*nazwa wlasna*/ TCoupling Couplers[2]; //urzadzenia zderzno-sprzegowe, polaczenia miedzy wagonami @@ -784,9 +784,9 @@ public: bool EventFlag; /*!o true jesli cos nietypowego sie wydarzy*/ int SoundFlag; /*!o patrz stale sound_ */ double DistCounter; /*! licznik kilometrow */ - double V; //predkosc w [m/s] wzgldem sprzgw (dodania gdy jedzie w stron 0) - double Vel; //modu prdkoci w [km/h], uywany przez AI - double AccS; //efektywne przyspieszenie styczne w [m/s^2] (wszystkie siy) + double V; //predkosc w [m/s] względem sprzęgów (dodania gdy jedzie w stronę 0) + double Vel; //moduł prędkości w [km/h], używany przez AI + double AccS; //efektywne przyspieszenie styczne w [m/s^2] (wszystkie siły) double AccN; //przyspieszenie normalne w [m/s^2] double AccV; double nrot; @@ -795,8 +795,8 @@ public: double dL; double Fb; double Ff; /*przesuniecie, sila hamowania i tarcia*/ double FTrain; double FStand; /*! sila pociagowa i oporow ruchu*/ double FTotal; /*! calkowita sila dzialajaca na pojazd*/ - double UnitBrakeForce; /*!s sia hamowania przypadajca na jeden element*/ - double Ntotal; /*!s sia nacisku klockow*/ + double UnitBrakeForce; /*!s siła hamowania przypadająca na jeden element*/ + double Ntotal; /*!s siła nacisku klockow*/ bool SlippingWheels; bool SandDose; /*! poslizg kol, sypanie piasku*/ double Sand; /*ilosc piasku*/ double BrakeSlippingTimer; /*pomocnicza zmienna do wylaczania przeciwposlizgu*/ @@ -845,8 +845,8 @@ public: /*komenda przekazywana przez PutCommand*/ /*i wykonywana przez RunInternalCommand*/ std::string CommandOut; /*komenda przekazywana przez ExternalCommand*/ - std::string CommandLast; //Ra: ostatnio wykonana komenda do podgldu - double ValueOut; /*argument komendy ktra ma byc przekazana na zewnatrz*/ + std::string CommandLast; //Ra: ostatnio wykonana komenda do podglądu + double ValueOut; /*argument komendy która ma byc przekazana na zewnatrz*/ TTrackShape RunningShape;/*geometria toru po ktorym jedzie pojazd*/ TTrackParam RunningTrack;/*parametry toru po ktorym jedzie pojazd*/ @@ -858,10 +858,10 @@ public: int ScndCtrlPos; /*polozenie dodatkowego nastawnika*/ int LightsPos; int ActiveDir; //czy lok. jest wlaczona i w ktorym kierunku: - //wzgldem wybranej kabiny: -1 - do tylu, +1 - do przodu, 0 - wylaczona - int CabNo; //numer kabiny, z ktrej jest sterowanie: 1 lub -1; w przeciwnym razie brak sterowania - rozrzad - int DirAbsolute; //zadany kierunek jazdy wzgldem sprzgw (1=w strone 0,-1=w stron 1) - int ActiveCab; //numer kabiny, w ktorej jest obsada (zwykle jedna na skad) + //względem wybranej kabiny: -1 - do tylu, +1 - do przodu, 0 - wylaczona + int CabNo; //numer kabiny, z której jest sterowanie: 1 lub -1; w przeciwnym razie brak sterowania - rozrzad + int DirAbsolute; //zadany kierunek jazdy względem sprzęgów (1=w strone 0,-1=w stronę 1) + int ActiveCab; //numer kabiny, w ktorej jest obsada (zwykle jedna na skład) double LastSwitchingTime; /*czas ostatniego przelaczania czegos*/ //WarningSignal: byte; {0: nie trabi, 1,2: trabi} bool DepartureSignal; /*sygnal odjazdu*/ @@ -870,14 +870,14 @@ public: TTractionParam RunningTraction;/*parametry sieci trakcyjnej najblizej lokomotywy*/ double enrot; double Im; double Itot; double IHeating; double ITraction; double TotalCurrent; double Mm; double Mw; double Fw; double Ft; /*ilosc obrotow, prad silnika i calkowity, momenty, sily napedne*/ - //Ra: Im jest ujemny, jeli lok jedzie w stron sprzgu 1 - //a ujemne powinien by przy odwrconej polaryzacji sieci... - //w wielu miejscach jest uywane abs(Im) + //Ra: Im jest ujemny, jeśli lok jedzie w stronę sprzęgu 1 + //a ujemne powinien być przy odwróconej polaryzacji sieci... + //w wielu miejscach jest używane abs(Im) int Imin; int Imax; /*prad przelaczania automatycznego rozruchu, prad bezpiecznika*/ double Voltage; /*aktualne napiecie sieci zasilajacej*/ int MainCtrlActualPos; /*wskaznik RList*/ int ScndCtrlActualPos; /*wskaznik MotorParam*/ - bool DelayCtrlFlag; //czy czekanie na 1. pozycji na zaczenie? + bool DelayCtrlFlag; //czy czekanie na 1. pozycji na załączenie? double LastRelayTime; /*czas ostatniego przelaczania stycznikow*/ bool AutoRelayFlag; /*mozna zmieniac jesli AutoRelayType=2*/ bool FuseFlag; /*!o bezpiecznik nadmiarowy*/ @@ -912,8 +912,8 @@ public: /*-dla wagonow*/ long Load; /*masa w T lub ilosc w sztukach - zaladowane*/ std::string LoadType; /*co jest zaladowane*/ - int LoadStatus; //+1=trwa rozladunek,+2=trwa zaladunek,+4=zakoczono,0=zaktualizowany model - double LastLoadChangeTime; //raz (roz)adowania + int LoadStatus; //+1=trwa rozladunek,+2=trwa zaladunek,+4=zakończono,0=zaktualizowany model + double LastLoadChangeTime; //raz (roz)ładowania bool DoorBlocked; //Czy jest blokada drzwi bool DoorLeftOpened; //stan drzwi @@ -940,20 +940,20 @@ public: double FrictConst2d; double TotalMassxg; /*TotalMass*g*/ - vector3 vCoulpler[2]; // powtrzenie wsprzdnych sprzgw z DynObj :/ - vector3 DimHalf; // poowy rozmiarw do oblicze geometrycznych - // int WarningSignal; //0: nie trabi, 1,2: trabi syren o podanym numerze - int WarningSignal; // tymczasowo 8bit, ze wzgldu na funkcje w MTools - double fBrakeCtrlPos; // pynna nastawa hamulca zespolonego - bool bPantKurek3; // kurek trjdrogowy (pantografu): true=poczenie z ZG, false=poczenie z ma sprark - int iProblem; // flagi problemw z taborem, aby AI nie musiao porwnywa; 0=moe jecha - int iLights[2]; // bity zapalonych wiate tutaj, eby dao si liczy pobr prdu + vector3 vCoulpler[2]; // powtórzenie współrzędnych sprzęgów z DynObj :/ + vector3 DimHalf; // połowy rozmiarów do obliczeń geometrycznych + // int WarningSignal; //0: nie trabi, 1,2: trabi syreną o podanym numerze + int WarningSignal; // tymczasowo 8bit, ze względu na funkcje w MTools + double fBrakeCtrlPos; // płynna nastawa hamulca zespolonego + bool bPantKurek3; // kurek trójdrogowy (pantografu): true=połączenie z ZG, false=połączenie z małą sprężarką + int iProblem; // flagi problemów z taborem, aby AI nie musiało porównywać; 0=może jechać + int iLights[2]; // bity zapalonych świateł tutaj, żeby dało się liczyć pobór prądu private: double CouplerDist(int Coupler); public: TMoverParameters(double VelInitial, std::string TypeNameInit, std::string NameInit, int LoadInitial, std::string LoadTypeInitial, int Cab); - // obsuga sprzgw + // obsługa sprzęgów double Distance(const TLocation &Loc1, const TLocation &Loc2, const TDimension &Dim1, const TDimension &Dim2); /* double Distance(const vector3 &Loc1, const vector3 &Loc2, const vector3 &Dim1, const vector3 &Dim2); */ //bool AttachA(int ConnectNo, int ConnectToNr, TMoverParameters *ConnectTo, int CouplingType, bool Forced = false); @@ -964,7 +964,7 @@ public: bool DirectionForward(); void BrakeLevelSet(double b); bool BrakeLevelAdd(double b); - bool IncBrakeLevel(); // wersja na uytek AI + bool IncBrakeLevel(); // wersja na użytek AI bool DecBrakeLevel(); bool ChangeCab(int direction); bool CurrentSwitch(int direction); diff --git a/McZapkie/Mover.cpp b/McZapkie/Mover.cpp index 9dea436c..cc9fa18e 100644 --- a/McZapkie/Mover.cpp +++ b/McZapkie/Mover.cpp @@ -14,11 +14,11 @@ http://mozilla.org/MPL/2.0/. #include "Oerlikon_ESt.h" //--------------------------------------------------------------------------- -// Ra: tu naley przenosi funcje z mover.pas, ktre nie s z niego wywoywane. -// Jeli jakie zmienne nie s uywane w mover.pas, te mona je przenosi. -// Przeniesienie wszystkiego na raz zrobio by zbyt wielki chaos do ogarnicia. +// Ra: tu należy przenosić funcje z mover.pas, które nie są z niego wywoływane. +// Jeśli jakieś zmienne nie są używane w mover.pas, też można je przenosić. +// Przeniesienie wszystkiego na raz zrobiło by zbyt wielki chaos do ogarnięcia. -const double dEpsilon = 0.01; // 1cm (zaley od typu sprzgu...) +const double dEpsilon = 0.01; // 1cm (zależy od typu sprzęgu...) const double CouplerTune = 0.1; // skalowanie tlumiennosci inline long Trunc(float f) @@ -71,7 +71,7 @@ int DirF(int CouplerN) // ************************************************************************************************* // Q: 20160716 -// Obliczanie natenie prdu w silnikach +// Obliczanie natężenie prądu w silnikach // ************************************************************************************************* double TMoverParameters::current(double n, double U) { @@ -83,7 +83,7 @@ double TMoverParameters::current(double n, double U) double R, MotorCurrent; double Rz, Delta, Isf; - double Mn; // przujmuje int, ale dla poprawnosci oblicze + double Mn; // przujmuje int, ale dla poprawnosci obliczeń double Bn; int SP; double U1; // napiecie z korekta @@ -260,7 +260,7 @@ double TMoverParameters::current(double n, double U) } // ************************************************************************************************* -// gwny konstruktor +// główny konstruktor // ************************************************************************************************* TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit, std::string NameInit, int LoadInitial, @@ -274,17 +274,17 @@ TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit, WriteLog("init default physic values for " + NameInit + ", [" + TypeNameInit + "], [" + LoadTypeInitial + "]"); Dim = TDimension(); - DimHalf.x = 0.5 * Dim.W; // poowa szerokoci, OX jest w bok? - DimHalf.y = 0.5 * Dim.L; // poowa dugoci, OY jest do przodu? - DimHalf.z = 0.5 * Dim.H; // poowa wysokoci, OZ jest w gr? + DimHalf.x = 0.5 * Dim.W; // połowa szerokości, OX jest w bok? + DimHalf.y = 0.5 * Dim.L; // połowa długości, OY jest do przodu? + DimHalf.z = 0.5 * Dim.H; // połowa wysokości, OZ jest w górę? Cx = 0.0; - Floor = 0.960; // standardowa wysoko podogi + Floor = 0.960; // standardowa wysokość podłogi - // BrakeLevelSet(-2); //Pascal ustawia na 0, przestawimy na odcicie (CHK jest jeszcze nie + // BrakeLevelSet(-2); //Pascal ustawia na 0, przestawimy na odcięcie (CHK jest jeszcze nie // wczytane!) - bPantKurek3 = true; // domylnie zbiornik pantografu poczony jest ze zbiornikiem gwnym - iProblem = 0; // pojazd w peni gotowy do ruchu - iLights[0] = iLights[1] = 0; //wiata zgaszone + bPantKurek3 = true; // domyślnie zbiornik pantografu połączony jest ze zbiornikiem głównym + iProblem = 0; // pojazd w pełni gotowy do ruchu + iLights[0] = iLights[1] = 0; //światła zgaszone // inicjalizacja stalych dMoveLen = 0.0; @@ -341,7 +341,7 @@ TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit, DynamicBrakeType = 0; ASBType = 0; AutoRelayType = 0; - for (b = 0; b < 2; b++) // Ra: kto tu zrobi "for b:=1 to 2 do" ??? + for (b = 0; b < 2; b++) // Ra: kto tu zrobił "for b:=1 to 2 do" ??? { Couplers[b].CouplerType = NoCoupler; Couplers[b].SpringKB = 1.0; @@ -495,15 +495,15 @@ TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit, Ftmax = 0.0; ScndS = false; // inicjalizacja zmiennych} - // Loc:=LocInitial; //Ra: to i tak trzeba potem przesun, po ustaleniu pozycji na torze - // (potrzebna dugo) + // Loc:=LocInitial; //Ra: to i tak trzeba potem przesunąć, po ustaleniu pozycji na torze + // (potrzebna długość) // Rot:=RotInitial; for (b = 0; b < 2; b++) { - Couplers[b].AllowedFlag = 3; // domylnie hak i hamulec, inne trzeba wczy jawnie w FIZ + Couplers[b].AllowedFlag = 3; // domyślnie hak i hamulec, inne trzeba włączyć jawnie w FIZ Couplers[b].CouplingFlag = 0; Couplers[b].Connected = NULL; - Couplers[b].ConnectedNr = 0; // Ra: to nie ma znaczenia jak nie podczony + Couplers[b].ConnectedNr = 0; // Ra: to nie ma znaczenia jak nie podłączony Couplers[b].Render = false; Couplers[b].CForce = 0.0; Couplers[b].Dist = 0.0; @@ -573,7 +573,7 @@ TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit, UnBrake = false; // Winger 160204 PantVolume = - 0.48; // aby podniesione pantografy opady w krtkim czasie przy wyczonej sprarce + 0.48; // aby podniesione pantografy opadły w krótkim czasie przy wyłączonej sprężarce PantFrontUp = false; PantRearUp = false; PantFrontStart = 0; @@ -695,7 +695,7 @@ TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit, SecuritySystem.SystemBrakeSHPTimer = 0.0; // hunter-091012 SecuritySystem.VelocityAllowed = -1.0; SecuritySystem.NextVelocityAllowed = -1.0; - SecuritySystem.RadioStop = false; // domylnie nie ma + SecuritySystem.RadioStop = false; // domyślnie nie ma SecuritySystem.AwareMinSpeed = 0.1 * Vmax; s_CAtestebrake = false; // ABu 240105: @@ -721,7 +721,7 @@ TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit, // } Name = NameInit; - DerailReason = 0; // Ra: powd wykolejenia + DerailReason = 0; // Ra: powód wykolejenia TotalCurrent = 0.0; ShuntModeAllow = false; ShuntMode = false; @@ -734,90 +734,90 @@ TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit, double TMoverParameters::Distance(const TLocation &Loc1, const TLocation &Loc2, const TDimension &Dim1, const TDimension &Dim2) -{ // zwraca odlego pomidzy pojazdami (Loc1) i (Loc2) z uwzgldnieneim ich dugoci (kule!) +{ // zwraca odległość pomiędzy pojazdami (Loc1) i (Loc2) z uwzględnieneim ich długości (kule!) return hypot(Loc2.X - Loc1.X, Loc1.Y - Loc2.Y) - 0.5 * (Dim2.L + Dim1.L); }; /* double TMoverParameters::Distance(const vector3 &s1, const vector3 &s2, const vector3 &d1, const vector3 &d2){ - // obliczenie odlegoci prostopadocianw o rodkach (s1) i (s2) i wymiarach (d1) i (d2) - // return 0.0; //bdzie zgasza warning - funkcja do usunicia, chyba e si przyda... + // obliczenie odległości prostopadłościanów o środkach (s1) i (s2) i wymiarach (d1) i (d2) + // return 0.0; //będzie zgłaszać warning - funkcja do usunięcia, chyba że się przyda... }; */ double TMoverParameters::CouplerDist(int Coupler) -{ // obliczenie odlegoci pomidzy sprzgami (kula!) +{ // obliczenie odległości pomiędzy sprzęgami (kula!) return Couplers[Coupler].CoupleDist = Distance(Loc, Couplers[Coupler].Connected->Loc, Dim, - Couplers[Coupler].Connected->Dim); // odlego pomidzy sprzgami (kula!) + Couplers[Coupler].Connected->Dim); // odległość pomiędzy sprzęgami (kula!) }; bool TMoverParameters::Attach(int ConnectNo, int ConnectToNr, TMoverParameters *ConnectTo, int CouplingType, bool Forced) -{ //czenie do swojego sprzgu (ConnectNo) pojazdu (ConnectTo) stron (ConnectToNr) - // Ra: zwykle wykonywane dwukrotnie, dla kadego pojazdu oddzielnie - // Ra: trzeba by odrni wymg docinicia od uszkodzenia sprzgu przy podczepianiu AI do - // skadu - if (ConnectTo) // jeli nie pusty +{ //łączenie do swojego sprzęgu (ConnectNo) pojazdu (ConnectTo) stroną (ConnectToNr) + // Ra: zwykle wykonywane dwukrotnie, dla każdego pojazdu oddzielnie + // Ra: trzeba by odróżnić wymóg dociśnięcia od uszkodzenia sprzęgu przy podczepianiu AI do + // składu + if (ConnectTo) // jeśli nie pusty { if (ConnectToNr != 2) - Couplers[ConnectNo].ConnectedNr = ConnectToNr; // 2=nic nie podczone + Couplers[ConnectNo].ConnectedNr = ConnectToNr; // 2=nic nie podłączone TCouplerType ct = ConnectTo->Couplers[Couplers[ConnectNo].ConnectedNr] - .CouplerType; // typ sprzgu podczanego pojazdu + .CouplerType; // typ sprzęgu podłączanego pojazdu Couplers[ConnectNo].Connected = - ConnectTo; // tak podpi (do siebie) zawsze mona, najwyej bdzie wirtualny - CouplerDist(ConnectNo); // przeliczenie odlegoci pomidzy sprzgami + ConnectTo; // tak podpiąć (do siebie) zawsze można, najwyżej będzie wirtualny + CouplerDist(ConnectNo); // przeliczenie odległości pomiędzy sprzęgami if (CouplingType == ctrain_virtual) - return false; // wirtualny wicej nic nie robi + return false; // wirtualny więcej nic nie robi if (Forced ? true : ((Couplers[ConnectNo].CoupleDist <= dEpsilon) && (Couplers[ConnectNo].CouplerType != NoCoupler) && (Couplers[ConnectNo].CouplerType == ct))) - { // stykaja sie zderzaki i kompatybilne typy sprzegow, chyba e czenie na starcie + { // stykaja sie zderzaki i kompatybilne typy sprzegow, chyba że łączenie na starcie if (Couplers[ConnectNo].CouplingFlag == - ctrain_virtual) // jeli wczeniej nie byo poczone - { // ustalenie z ktrej strony rysowa sprzg - Couplers[ConnectNo].Render = true; // tego rysowa + ctrain_virtual) // jeśli wcześniej nie było połączone + { // ustalenie z której strony rysować sprzęg + Couplers[ConnectNo].Render = true; // tego rysować ConnectTo->Couplers[Couplers[ConnectNo].ConnectedNr].Render = false; // a tego nie }; - Couplers[ConnectNo].CouplingFlag = CouplingType; // ustawienie typu sprzgu - // if (CouplingType!=ctrain_virtual) //Ra: wirtualnego nie czymy zwrotnie! - //{//jeli czenie sprzgiem niewirtualnym, ustawiamy poczenie zwrotne + Couplers[ConnectNo].CouplingFlag = CouplingType; // ustawienie typu sprzęgu + // if (CouplingType!=ctrain_virtual) //Ra: wirtualnego nie łączymy zwrotnie! + //{//jeśli łączenie sprzęgiem niewirtualnym, ustawiamy połączenie zwrotne ConnectTo->Couplers[Couplers[ConnectNo].ConnectedNr].CouplingFlag = CouplingType; ConnectTo->Couplers[Couplers[ConnectNo].ConnectedNr].Connected = this; ConnectTo->Couplers[Couplers[ConnectNo].ConnectedNr].CoupleDist = Couplers[ConnectNo].CoupleDist; return true; //} - // podczenie nie udao si - jest wirtualne + // podłączenie nie udało się - jest wirtualne } } - return false; // brak podczanego pojazdu, zbyt dua odlego, niezgodny typ sprzgu, brak - // sprzgu, brak haka + return false; // brak podłączanego pojazdu, zbyt duża odległość, niezgodny typ sprzęgu, brak + // sprzęgu, brak haka }; -// to jest ju niepotrzebne bo nie ma Delphi +// to jest już niepotrzebne bo nie ma Delphi //bool TMoverParameters::Attach(int ConnectNo, int ConnectToNr, TMoverParameters *ConnectTo, // int CouplingType, bool Forced) -//{ //czenie do (ConnectNo) pojazdu (ConnectTo) stron (ConnectToNr) +//{ //łączenie do (ConnectNo) pojazdu (ConnectTo) stroną (ConnectToNr) // return Attach(ConnectNo, ConnectToNr, (TMoverParameters *)ConnectTo, CouplingType, Forced); //}; int TMoverParameters::DettachStatus(int ConnectNo) -{ // Ra: sprawdzenie, czy odlego jest dobra do rozczania - // powinny by 3 informacje: =0 sprzg ju rozczony, <0 da si rozczy. >0 nie da si - // rozczy +{ // Ra: sprawdzenie, czy odległość jest dobra do rozłączania + // powinny być 3 informacje: =0 sprzęg już rozłączony, <0 da się rozłączyć. >0 nie da się + // rozłączyć if (!Couplers[ConnectNo].Connected) - return 0; // nie ma nic, to rozczanie jest OK + return 0; // nie ma nic, to rozłączanie jest OK if ((Couplers[ConnectNo].CouplingFlag & ctrain_coupler) == 0) - return -Couplers[ConnectNo].CouplingFlag; // hak nie poczony - rozczanie jest OK + return -Couplers[ConnectNo].CouplingFlag; // hak nie połączony - rozłączanie jest OK if (TestFlag(DamageFlag, dtrain_coupling)) - return -Couplers[ConnectNo].CouplingFlag; // hak urwany - rozczanie jest OK + return -Couplers[ConnectNo].CouplingFlag; // hak urwany - rozłączanie jest OK // ABu021104: zakomentowane 'and (CouplerType<>Articulated)' w warunku, nie wiem co to bylo, ale // za to teraz dziala odczepianie... :) } - // if (CouplerType==Articulated) return false; //sprzg nie do rozpicia - moe by tylko urwany + // if (CouplerType==Articulated) return false; //sprzęg nie do rozpięcia - może być tylko urwany // Couplers[ConnectNo].CoupleDist=Distance(Loc,Couplers[ConnectNo].Connected->Loc,Dim,Couplers[ConnectNo].Connected->Dim); CouplerDist(ConnectNo); if (Couplers[ConnectNo].CouplerType == Screw ? Couplers[ConnectNo].CoupleDist < 0.0 : true) - return -Couplers[ConnectNo].CouplingFlag; // mona rozcza, jeli docinity + return -Couplers[ConnectNo].CouplingFlag; // można rozłączać, jeśli dociśnięty return (Couplers[ConnectNo].CoupleDist > 0.2) ? -Couplers[ConnectNo].CouplingFlag : Couplers[ConnectNo].CouplingFlag; }; @@ -827,40 +827,40 @@ bool TMoverParameters::Dettach(int ConnectNo) if (!Couplers[ConnectNo].Connected) return true; // nie ma nic, to odczepiono // with Couplers[ConnectNo] do - int i = DettachStatus(ConnectNo); // stan sprzgu + int i = DettachStatus(ConnectNo); // stan sprzęgu if (i < 0) { // gdy scisniete zderzaki, chyba ze zerwany sprzeg (wirtualnego nie odpinamy z drugiej strony) // Couplers[ConnectNo].Connected=NULL; //lepiej zostawic bo przeciez trzeba kontrolowac // zderzenia odczepionych Couplers[ConnectNo].Connected->Couplers[Couplers[ConnectNo].ConnectedNr].CouplingFlag = - 0; // pozostaje sprzg wirtualny - Couplers[ConnectNo].CouplingFlag = 0; // pozostaje sprzg wirtualny + 0; // pozostaje sprzęg wirtualny + Couplers[ConnectNo].CouplingFlag = 0; // pozostaje sprzęg wirtualny return true; } else if (i > 0) - { // odczamy we i reszt, pozostaje sprzg fizyczny, ktry wymaga docinicia (z wirtualnym + { // odłączamy węże i resztę, pozostaje sprzęg fizyczny, który wymaga dociśnięcia (z wirtualnym // nic) Couplers[ConnectNo].CouplingFlag &= ctrain_coupler; Couplers[ConnectNo].Connected->Couplers[Couplers[ConnectNo].ConnectedNr].CouplingFlag = Couplers[ConnectNo].CouplingFlag; } - return false; // jeszcze nie rozczony + return false; // jeszcze nie rozłączony }; void TMoverParameters::SetCoupleDist() -{ // przeliczenie odlegoci sprzgw +{ // przeliczenie odległości sprzęgów if (Couplers[0].Connected) { CouplerDist(0); if (CategoryFlag & 2) - { // Ra: dla samochodw zderzanie kul to za mao + { // Ra: dla samochodów zderzanie kul to za mało } } if (Couplers[1].Connected) { CouplerDist(1); if (CategoryFlag & 2) - { // Ra: dla samochodw zderzanie kul to za mao + { // Ra: dla samochodów zderzanie kul to za mało } } }; @@ -872,8 +872,8 @@ bool TMoverParameters::DirectionForward() ++ActiveDir; DirAbsolute = ActiveDir * CabNo; if (DirAbsolute) - if (Battery) // jeli bateria jest ju zaczona - BatterySwitch(true); // to w ten oto durny sposb aktywuje si CA/SHP + if (Battery) // jeśli bateria jest już załączona + BatterySwitch(true); // to w ten oto durny sposób aktywuje się CA/SHP SendCtrlToNext("Direction", ActiveDir, CabNo); return true; } @@ -882,42 +882,42 @@ bool TMoverParameters::DirectionForward() return false; }; -// Nastawianie hamulcw +// Nastawianie hamulców void TMoverParameters::BrakeLevelSet(double b) -{ // ustawienie pozycji hamulca na warto (b) w zakresie od -2 do BrakeCtrlPosNo - // jedyny dopuszczalny sposb przestawienia hamulca zasadniczego +{ // ustawienie pozycji hamulca na wartość (b) w zakresie od -2 do BrakeCtrlPosNo + // jedyny dopuszczalny sposób przestawienia hamulca zasadniczego if (fBrakeCtrlPos == b) - return; // nie przelicza, jak nie ma zmiany + return; // nie przeliczać, jak nie ma zmiany fBrakeCtrlPos = b; BrakeCtrlPosR = b; if (fBrakeCtrlPos < Handle->GetPos(bh_MIN)) - fBrakeCtrlPos = Handle->GetPos(bh_MIN); // odcicie + fBrakeCtrlPos = Handle->GetPos(bh_MIN); // odcięcie else if (fBrakeCtrlPos > Handle->GetPos(bh_MAX)) fBrakeCtrlPos = Handle->GetPos(bh_MAX); - int x = floor(fBrakeCtrlPos); // jeli odwoujemy si do BrakeCtrlPos w porednich, to musi by - // obcite a nie zaokrgone - while ((x > BrakeCtrlPos) && (BrakeCtrlPos < BrakeCtrlPosNo)) // jeli zwikszyo si o 1 + int x = floor(fBrakeCtrlPos); // jeśli odwołujemy się do BrakeCtrlPos w pośrednich, to musi być + // obcięte a nie zaokrągone + while ((x > BrakeCtrlPos) && (BrakeCtrlPos < BrakeCtrlPosNo)) // jeśli zwiększyło się o 1 if (!IncBrakeLevelOld()) // T_MoverParameters:: - break; // wyjcie awaryjne - while ((x < BrakeCtrlPos) && (BrakeCtrlPos >= -1)) // jeli zmniejszyo si o 1 + break; // wyjście awaryjne + while ((x < BrakeCtrlPos) && (BrakeCtrlPos >= -1)) // jeśli zmniejszyło się o 1 if (!DecBrakeLevelOld()) // T_MoverParameters:: break; BrakePressureActual = BrakePressureTable[BrakeCtrlPos]; // skopiowanie pozycji /* //youBy: obawiam sie, ze tutaj to nie dziala :P - //Ra 2014-03: byo tak zrobione, e dziaao - po kadej zmianie pozycji bya wywoywana ta + //Ra 2014-03: było tak zrobione, że działało - po każdej zmianie pozycji była wywoływana ta funkcja - // if (BrakeSystem==Pneumatic?BrakeSubsystem==Oerlikon:false) //tylko Oerlikon akceptuje uamki + // if (BrakeSystem==Pneumatic?BrakeSubsystem==Oerlikon:false) //tylko Oerlikon akceptuje ułamki if(false) if (fBrakeCtrlPos>0.0) - {//wartoci porednie wyliczamy tylko dla hamowania - double u=fBrakeCtrlPos-double(x); //uamek ponad warto cakowit + {//wartości pośrednie wyliczamy tylko dla hamowania + double u=fBrakeCtrlPos-double(x); //ułamek ponad wartość całkowitą if (u>0.0) - {//wyliczamy wartoci waone + {//wyliczamy wartości ważone BrakePressureActual.PipePressureVal+=-u*BrakePressureActual.PipePressureVal+u*BrakePressureTable[BrakeCtrlPos+1+2].PipePressureVal; //BrakePressureActual.BrakePressureVal+=-u*BrakePressureActual.BrakePressureVal+u*BrakePressureTable[BrakeCtrlPos+1].BrakePressureVal; - //to chyba nie bdzie tak dziaa, zwaszcza w EN57 + //to chyba nie będzie tak działać, zwłaszcza w EN57 BrakePressureActual.FlowSpeedVal+=-u*BrakePressureActual.FlowSpeedVal+u*BrakePressureTable[BrakeCtrlPos+1+2].FlowSpeedVal; } } @@ -925,22 +925,22 @@ void TMoverParameters::BrakeLevelSet(double b) }; bool TMoverParameters::BrakeLevelAdd(double b) -{ // dodanie wartoci (b) do pozycji hamulca (w tym ujemnej) - // zwraca false, gdy po dodaniu byo by poza zakresem +{ // dodanie wartości (b) do pozycji hamulca (w tym ujemnej) + // zwraca false, gdy po dodaniu było by poza zakresem BrakeLevelSet(fBrakeCtrlPos + b); return b > 0.0 ? (fBrakeCtrlPos < BrakeCtrlPosNo) : - (BrakeCtrlPos > -1.0); // true, jeli mona kontynuowa + (BrakeCtrlPos > -1.0); // true, jeśli można kontynuować }; bool TMoverParameters::IncBrakeLevel() -{ // nowa wersja na uytek AI, false gdy osignito pozycj BrakeCtrlPosNo +{ // nowa wersja na użytek AI, false gdy osiągnięto pozycję BrakeCtrlPosNo return BrakeLevelAdd(1.0); }; bool TMoverParameters::DecBrakeLevel() { return BrakeLevelAdd(-1.0); -}; // nowa wersja na uytek AI, false gdy osignito pozycj -1 +}; // nowa wersja na użytek AI, false gdy osiągnięto pozycję -1 bool TMoverParameters::ChangeCab(int direction) { // zmiana kabiny i resetowanie ustawien @@ -950,7 +950,7 @@ bool TMoverParameters::ChangeCab(int direction) ActiveCab = ActiveCab + direction; if ((BrakeSystem == Pneumatic) && (BrakeCtrlPosNo > 0)) { - // if (BrakeHandle==FV4a) //!!!POBIERA WARTO Z KLASY ZAWORU!!! + // if (BrakeHandle==FV4a) //!!!POBIERAĆ WARTOŚĆ Z KLASY ZAWORU!!! // BrakeLevelSet(-2); //BrakeCtrlPos=-2; // else if ((BrakeHandle==FVel6)||(BrakeHandle==St113)) // BrakeLevelSet(2); @@ -970,7 +970,7 @@ bool TMoverParameters::ChangeCab(int direction) // BrakeStatus:=b_off; //z Megapacka MainCtrlPos = 0; ScndCtrlPos = 0; - // Ra: to poniej jest bez sensu - mona przej nie wyczajc + // Ra: to poniżej jest bez sensu - można przejść nie wyłączając // if ((EngineType!=DieselEngine)&&(EngineType!=DieselElectric)) //{ // Mains=false; @@ -986,7 +986,7 @@ bool TMoverParameters::ChangeCab(int direction) bool TMoverParameters::CurrentSwitch(int direction) { // rozruch wysoki (true) albo niski (false) - // Ra: przeniosem z Train.cpp, nie wiem czy ma to sens + // Ra: przeniosłem z Train.cpp, nie wiem czy ma to sens if (MaxCurrentSwitch(direction)) { if (TrainType != dt_EZT) @@ -1000,68 +1000,68 @@ bool TMoverParameters::CurrentSwitch(int direction) }; void TMoverParameters::UpdatePantVolume(double dt) -{ // KURS90 - sprarka pantografw; Ra 2014-07: teraz jest to zbiornik rozrzdu, chocia to jeszcze +{ // KURS90 - sprężarka pantografów; Ra 2014-07: teraz jest to zbiornik rozrządu, chociaż to jeszcze // nie tak - if (EnginePowerSource.SourceType == CurrentCollector) // tylko jeli pantografujcy + if (EnginePowerSource.SourceType == CurrentCollector) // tylko jeśli pantografujący { - // Ra 2014-07: zasadniczo, to istnieje zbiornik rozrzdu i zbiornik pantografw - na razie + // Ra 2014-07: zasadniczo, to istnieje zbiornik rozrządu i zbiornik pantografów - na razie // mamy razem - // Ra 2014-07: kurek trjdrogowy czy spr.pom. z pantografami i wycznikiem cinieniowym + // Ra 2014-07: kurek trójdrogowy łączy spr.pom. z pantografami i wyłącznikiem ciśnieniowym // WS - // Ra 2014-07: zbiornika rozrzdu nie pompuje si tu, tylko pantografy; potem mona zamkn - // WS i odpali reszt + // Ra 2014-07: zbiornika rozrządu nie pompuje się tu, tylko pantografy; potem można zamknąć + // WS i odpalić resztę if ((TrainType == dt_EZT) ? (PantPress < ScndPipePress) : - bPantKurek3) // kurek zamyka poczenie z ZG - { // zbiornik pantografu poczony ze zbiornikiem gwnym - ma sprark si tego nie + bPantKurek3) // kurek zamyka połączenie z ZG + { // zbiornik pantografu połączony ze zbiornikiem głównym - małą sprężarką się tego nie // napompuje - // Ra 2013-12: Niebugocaw mwi, e w EZT nie ma potrzeby odcina kurkiem + // Ra 2013-12: Niebugocław mówi, że w EZT nie ma potrzeby odcinać kurkiem PantPress = EnginePowerSource.CollectorParameters - .MaxPress; // ograniczenie cinienia do MaxPress (tylko w pantografach!) + .MaxPress; // ograniczenie ciśnienia do MaxPress (tylko w pantografach!) if (PantPress > ScndPipePress) PantPress = ScndPipePress; // oraz do ScndPipePress - PantVolume = (PantPress + 1.0) * 0.1; // objto, na wypadek odcicia kurkiem + PantVolume = (PantPress + 1.0) * 0.1; // objętość, na wypadek odcięcia kurkiem } else - { // zbiornik gwny odcity, mona pompowa pantografy - if (PantCompFlag && Battery) // wczona bateria i maa sprarka + { // zbiornik główny odcięty, można pompować pantografy + if (PantCompFlag && Battery) // włączona bateria i mała sprężarka PantVolume += dt * (TrainType == dt_EZT ? 0.003 : 0.005) * (2.0 * 0.45 - ((0.1 / PantVolume / 10) - 0.1)) / - 0.45; // napenianie zbiornika pantografw - // Ra 2013-12: Niebugocaw mwi, e w EZT nabija 1.5 raz wolniej ni jak byo 0.005 - PantPress = (10.0 * PantVolume) - 1.0; // tu by si przydaa objto zbiornika + 0.45; // napełnianie zbiornika pantografów + // Ra 2013-12: Niebugocław mówi, że w EZT nabija 1.5 raz wolniej niż jak było 0.005 + PantPress = (10.0 * PantVolume) - 1.0; // tu by się przydała objętość zbiornika } if (!PantCompFlag && (PantVolume > 0.1)) - PantVolume -= dt * 0.0003; // nieszczelnoci: 0.0003=0.3l/s - if (Mains) // nie wchodzi w funkcj bez potrzeby - if (EngineType == ElectricSeriesMotor) // nie dotyczy... czego waciwie? + PantVolume -= dt * 0.0003; // nieszczelności: 0.0003=0.3l/s + if (Mains) // nie wchodzić w funkcję bez potrzeby + if (EngineType == ElectricSeriesMotor) // nie dotyczy... czego właściwie? if (PantPress < EnginePowerSource.CollectorParameters.MinPress) if ((TrainType & (dt_EZT | dt_ET40 | dt_ET41 | dt_ET42)) ? (GetTrainsetVoltage() < EnginePowerSource.CollectorParameters.MinV) : - true) // to jest troch proteza; zasilanie czonu moe by przez sprzg + true) // to jest trochę proteza; zasilanie członu może być przez sprzęg // WN if (MainSwitch(false)) - EventFlag = true; // wywalenie szybkiego z powodu niskiego cinienia - if (TrainType != dt_EZT) // w EN57 pompuje si tylko w silnikowym - // pierwotnie w CHK pantografy miay rwnie rozrzdcze EZT + EventFlag = true; // wywalenie szybkiego z powodu niskiego ciśnienia + if (TrainType != dt_EZT) // w EN57 pompuje się tylko w silnikowym + // pierwotnie w CHK pantografy miały również rozrządcze EZT for (int b = 0; b <= 1; ++b) if (TestFlag(Couplers[b].CouplingFlag, ctrain_controll)) if (Couplers[b].Connected->PantVolume < - PantVolume) // bo inaczej trzeba w obydwu czonach przestawia + PantVolume) // bo inaczej trzeba w obydwu członach przestawiać Couplers[b].Connected->PantVolume = - PantVolume; // przekazanie cinienia do ssiedniego czonu - // czy np. w ET40, ET41, ET42 pantografy czonw maj poczenie pneumatyczne? - // Ra 2014-07: raczej nie - najpierw si zacza jeden czon, a potem mona podnie w + PantVolume; // przekazanie ciśnienia do sąsiedniego członu + // czy np. w ET40, ET41, ET42 pantografy członów mają połączenie pneumatyczne? + // Ra 2014-07: raczej nie - najpierw się załącza jeden człon, a potem można podnieść w // drugim } else - { // a tu co dla SM42 i SM31, aby pokazywa na manometrze + { // a tu coś dla SM42 i SM31, aby pokazywać na manometrze PantPress = CntrlPipePress; } }; void TMoverParameters::UpdateBatteryVoltage(double dt) -{ // przeliczenie obcienia baterii - double sn1, sn2, sn3, sn4, sn5; // Ra: zrobi z tego amperomierz NN +{ // przeliczenie obciążenia baterii + double sn1, sn2, sn3, sn4, sn5; // Ra: zrobić z tego amperomierz NN if ((BatteryVoltage > 0) && (EngineType != DieselEngine) && (EngineType != WheelsDriven) && (NominalBatteryVoltage > 0)) { @@ -1079,12 +1079,12 @@ void TMoverParameters::UpdateBatteryVoltage(double dt) sn3 = (dt * 0.05); else sn3 = 0; - if (iLights[0] & 63) // 64=blachy, nie cign prdu //rozpisa na poszczeglne - // arwki... + if (iLights[0] & 63) // 64=blachy, nie ciągną prądu //rozpisać na poszczególne + // żarówki... sn4 = dt * 0.003; else sn4 = 0; - if (iLights[1] & 63) // 64=blachy, nie cign prdu + if (iLights[1] & 63) // 64=blachy, nie ciągną prądu sn5 = dt * 0.001; else sn5 = 0; @@ -1103,11 +1103,11 @@ void TMoverParameters::UpdateBatteryVoltage(double dt) sn3 = (dt * 0.001); else sn3 = 0; - if (iLights[0] & 63) // 64=blachy, nie cign prdu + if (iLights[0] & 63) // 64=blachy, nie ciągną prądu sn4 = (dt * 0.0030); else sn4 = 0; - if (iLights[1] & 63) // 64=blachy, nie cign prdu + if (iLights[1] & 63) // 64=blachy, nie ciągną prądu sn5 = (dt * 0.0010); else sn5 = 0; @@ -1121,14 +1121,14 @@ void TMoverParameters::UpdateBatteryVoltage(double dt) sn2 = dt * 0.000001; sn3 = dt * 0.000001; sn4 = dt * 0.000001; - sn5 = dt * 0.000001; // bardzo powolny spadek przy wyczonych bateriach + sn5 = dt * 0.000001; // bardzo powolny spadek przy wyłączonych bateriach }; BatteryVoltage -= (sn1 + sn2 + sn3 + sn4 + sn5); if (NominalBatteryVoltage / BatteryVoltage > 1.57) if (MainSwitch(false) && (EngineType != DieselEngine) && (EngineType != WheelsDriven)) EventFlag = true; // wywalanie szybkiego z powodu zbyt niskiego napiecia if (BatteryVoltage > NominalBatteryVoltage) - BatteryVoltage = NominalBatteryVoltage; // wstrzymanie adowania pow. 110V + BatteryVoltage = NominalBatteryVoltage; // wstrzymanie ładowania pow. 110V if (BatteryVoltage < 0.01) BatteryVoltage = 0.01; } @@ -1139,13 +1139,13 @@ void TMoverParameters::UpdateBatteryVoltage(double dt) }; /* Ukrotnienie EN57: -1 //ukad szeregowy -2 //ukad rwnolegy +1 //układ szeregowy +2 //układ równoległy 3 //bocznik 1 4 //bocznik 2 5 //bocznik 3 6 //do przodu -7 //do tyu +7 //do tyłu 8 //1 przyspieszenie 9 //minus obw. 2 przyspieszenia 10 //jazda na oporach @@ -1153,26 +1153,26 @@ void TMoverParameters::UpdateBatteryVoltage(double dt) 12A //podnoszenie pantografu przedniego 12B //podnoszenie pantografu tylnego 13A //opuszczanie pantografu przedniego -13B //opuszczanie wszystkich pantografw -14 //zaczenie WS -15 //rozrzd (WS, PSR, wa kuakowy) +13B //opuszczanie wszystkich pantografów +14 //załączenie WS +15 //rozrząd (WS, PSR, wał kułakowy) 16 //odblok PN -18 //sygnalizacja przetwornicy gwnej +18 //sygnalizacja przetwornicy głównej 19 //luzowanie EP 20 //hamowanie EP 21 //rezerwa** (1900+: zamykanie drzwi prawych) -22 //za. przetwornicy gwnej -23 //wy. przetwornicy gwnej -24 //za. przetw. owietlenia -25 //wy. przetwornicy owietlenia +22 //zał. przetwornicy głównej +23 //wył. przetwornicy głównej +24 //zał. przetw. oświetlenia +25 //wył. przetwornicy oświetlenia 26 //sygnalizacja WS -28 //sprarka +28 //sprężarka 29 //ogrzewanie 30 //rezerwa* (1900+: zamykanie drzwi lewych) 31 //otwieranie drzwi prawych -32H //zadziaanie PN siln. trakcyjnych -33 //sygna odjazdu -34 //rezerwa (sygnalizacja polizgu) +32H //zadziałanie PN siln. trakcyjnych +33 //sygnał odjazdu +34 //rezerwa (sygnalizacja poślizgu) 35 //otwieranie drzwi lewych ZN //masa */ @@ -1203,7 +1203,7 @@ double TMoverParameters::LocalBrakeRatio(void) // ***************************************************************************** // Q: 20160714 -// Oblicza iloraz aktualnej pozycji do maksymalnej hamulca rcznego +// Oblicza iloraz aktualnej pozycji do maksymalnej hamulca ręcznego // ***************************************************************************** double TMoverParameters::ManualBrakeRatio(void) { @@ -1218,7 +1218,7 @@ double TMoverParameters::ManualBrakeRatio(void) // ***************************************************************************** // Q: 20160713 -// Zwraca objto +// Zwraca objętość // ***************************************************************************** double TMoverParameters::BrakeVP(void) { @@ -1230,7 +1230,7 @@ double TMoverParameters::BrakeVP(void) // ***************************************************************************** // Q: 20160713 -// Zwraca iloraz rnicy midzy przewodem kontrolnym i gwnym oraz DeltaPipePress +// Zwraca iloraz różnicy między przewodem kontrolnym i głównym oraz DeltaPipePress // ***************************************************************************** double TMoverParameters::RealPipeRatio(void) { @@ -1245,7 +1245,7 @@ double TMoverParameters::RealPipeRatio(void) // ***************************************************************************** // Q: 20160713 -// Zwraca iloraz cinienia w przewodzie do DeltaPipePress +// Zwraca iloraz ciśnienia w przewodzie do DeltaPipePress // ***************************************************************************** double TMoverParameters::PipeRatio(void) { @@ -1315,7 +1315,7 @@ void TMoverParameters::CollisionDetect(int CouplerN, double dt) (dt); break; // czemu tu jest +0.01?? } - AccS = AccS + (V - Vprev) / dt; // korekta przyspieszenia o siy wynikajce ze zderze? + AccS = AccS + (V - Vprev) / dt; // korekta przyspieszenia o siły wynikające ze zderzeń? Couplers[CouplerN].Connected->AccS += (Couplers[CouplerN].Connected->V - VprevC) / dt; if ((Couplers[CouplerN].Dist > 0) && (!VirtualCoupling)) if (FuzzyLogic(abs(CCF), 5.0 * (Couplers[CouplerN].FmaxC + 1.0), p_coupldmg)) @@ -1381,7 +1381,7 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap { HVCouplers[b][0] = Couplers[b].Connected->HVCouplers[1 - Couplers[b].ConnectedNr][0] + - Itot * HVCouplers[b][1] / hvc; // obcienie rozkladane stosownie do napiec + Itot * HVCouplers[b][1] / hvc; // obciążenie rozkladane stosownie do napiec } else // pierwszy pojazd { @@ -1416,7 +1416,7 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap // RunningTraction.TractionVoltage = // ElectricTraction.TractionVoltage /*- // abs(ElectricTraction.TractionResistivity * Itot * - // 0)*/; // zasadniczo ED oporowe nie zmienia napicia w sieci + // 0)*/; // zasadniczo ED oporowe nie zmienia napięcia w sieci } if (CategoryFlag == 4) @@ -1441,7 +1441,7 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap // dt:=ActualTime-LastUpdatedTime; //przyrost czasu // przyspieszenie styczne AccS = (FTotal / TotalMass + AccSprev) / - 2.0; // prawo Newtona ale z wygladzaniem (rednia z poprzednim) + 2.0; // prawo Newtona ale z wygladzaniem (średnia z poprzednim) if (TestFlag(DamageFlag, dtrain_out)) AccS = -Sign(V) * g * 1; // random(0.0, 0.1) @@ -1454,7 +1454,7 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap // szarpanie if (FuzzyLogic((10.0 + Track.DamageFlag) * Mass * Vel / Vmax, 500000.0, - p_accn)) // Ra: czemu tu masa bez adunku? + p_accn)) // Ra: czemu tu masa bez ładunku? AccV = sqrt((1.0 + Track.DamageFlag) * Random(floor(50.0 * Mass / 1000000.0)) * Vel / (Vmax * (10.0 + (Track.QualityFlag & 31)))); else @@ -1475,9 +1475,9 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap Mains = false; RunningShape.R = 0; if (TestFlag(Track.DamageFlag, dtrack_norail)) - DerailReason = 1; // Ra: powd wykolejenia: brak szyn + DerailReason = 1; // Ra: powód wykolejenia: brak szyn else - DerailReason = 2; // Ra: powd wykolejenia: przewrcony na uku + DerailReason = 2; // Ra: powód wykolejenia: przewrócony na łuku } // wykolejanie na poszerzeniu toru if (FuzzyLogic(abs(Track.Width - TrackW), TrackW / 10.0, 1)) @@ -1486,7 +1486,7 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap EventFlag = true; Mains = false; RunningShape.R = 0; - DerailReason = 3; // Ra: powd wykolejenia: za szeroki tor + DerailReason = 3; // Ra: powód wykolejenia: za szeroki tor } } // wykolejanie wkutek niezgodnosci kategorii toru i pojazdu @@ -1495,7 +1495,7 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap { EventFlag = true; Mains = false; - DerailReason = 4; // Ra: powd wykolejenia: nieodpowiednia trajektoria + DerailReason = 4; // Ra: powód wykolejenia: nieodpowiednia trajektoria } V += (3.0 * AccS - AccSprev) * dt / 2.0; // przyrost predkosci @@ -1510,7 +1510,7 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap if ((V * Vprev <= 0) && (abs(FStand) > abs(FTrain))) // tlumienie predkosci przy hamowaniu { // zahamowany V = 0; - // AccS:=0; //Ra 2014-03: ale sia grawitacji dziaa, wic nie moe by zerowe + // AccS:=0; //Ra 2014-03: ale siła grawitacji działa, więc nie może być zerowe } // { dL:=(V+AccS*dt/2)*dt; //przyrost dlugosci czyli @@ -1523,8 +1523,8 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap } // liczone dL, predkosc i przyspieszenie - if (Power > 1.0) // w rozrzdczym nie (jest bd w FIZ!) - Ra 2014-07: teraz we wszystkich - UpdatePantVolume(dt); // Ra 2014-07: obsuga zbiornika rozrzdu oraz pantografw + if (Power > 1.0) // w rozrządczym nie (jest błąd w FIZ!) - Ra 2014-07: teraz we wszystkich + UpdatePantVolume(dt); // Ra 2014-07: obsługa zbiornika rozrządu oraz pantografów if (EngineType == WheelsDriven) d = (double)CabNo * dL; // na chwile dla testu @@ -1535,9 +1535,9 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap // koniec procedury, tu nastepuja dodatkowe procedury pomocnicze - // sprawdzanie i ewentualnie wykonywanie->kasowanie polece - if (LoadStatus > 0) // czas doliczamy tylko jeli trwa (roz)adowanie - LastLoadChangeTime += dt; // czas (roz)adunku + // sprawdzanie i ewentualnie wykonywanie->kasowanie poleceń + if (LoadStatus > 0) // czas doliczamy tylko jeśli trwa (roz)ładowanie + LastLoadChangeTime += dt; // czas (roz)ładunku RunInternalCommand(); @@ -1559,18 +1559,18 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap CompressorFlag = false; }; ConverterCheck(); - if (CompressorSpeed > 0.0) // sprarka musi mie jak niezerow wydajno - CompressorCheck(dt); //eby rozwaa jej zaczenie i prac + if (CompressorSpeed > 0.0) // sprężarka musi mieć jakąś niezerową wydajność + CompressorCheck(dt); //żeby rozważać jej załączenie i pracę UpdateBrakePressure(dt); UpdatePipePressure(dt); UpdateBatteryVoltage(dt); UpdateScndPipePressure(dt); // druga rurka, youBy - // hamulec antypolizgowy - wyczanie + // hamulec antypoślizgowy - wyłączanie if ((BrakeSlippingTimer > 0.8) && (ASBType != 128)) // ASBSpeed=0.8 Hamulec->ASB(0); // SetFlag(BrakeStatus,-b_antislip); BrakeSlippingTimer += dt; - // sypanie piasku - wyczone i piasek si nie koczy - bdy AI + // sypanie piasku - wyłączone i piasek się nie kończy - błędy AI // if AIControllFlag then // if SandDose then // if Sand>0 then @@ -1616,7 +1616,7 @@ double TMoverParameters::FastComputeMovement(double dt, const TTrackShape &Shape // dt =ActualTime-LastUpdatedTime; //przyrost czasu // przyspieszenie styczne AccS = (FTotal / TotalMass + AccSprev) / - 2.0; // prawo Newtona ale z wygladzaniem (rednia z poprzednim) + 2.0; // prawo Newtona ale z wygladzaniem (średnia z poprzednim) if (TestFlag(DamageFlag, dtrain_out)) AccS = -Sign(V) * g * 1; // * random(0.0, 0.1) @@ -1672,7 +1672,7 @@ double TMoverParameters::FastComputeMovement(double dt, const TTrackShape &Shape if (Vel < 1) { V = 0; - AccS = 0; // Ra 2014-03: ale sia grawitacji dziaa, wic nie moe by zerowe + AccS = 0; // Ra 2014-03: ale siła grawitacji działa, więc nie może być zerowe } if ((V * Vprev <= 0) && (abs(FStand) > abs(FTrain))) // tlumienie predkosci przy hamowaniu @@ -1687,8 +1687,8 @@ double TMoverParameters::FastComputeMovement(double dt, const TTrackShape &Shape CollisionDetect(b, dt); // zmienia niejawnie AccS, V !!! } // liczone dL, predkosc i przyspieszenie // QQQ - if (Power > 1.0) // w rozrzdczym nie (jest bd w FIZ!) - UpdatePantVolume(dt); // Ra 2014-07: obsuga zbiornika rozrzdu oraz pantografw + if (Power > 1.0) // w rozrządczym nie (jest błąd w FIZ!) + UpdatePantVolume(dt); // Ra 2014-07: obsługa zbiornika rozrządu oraz pantografów if (EngineType == WheelsDriven) d = (double)CabNo * dL; // na chwile dla testu else @@ -1698,9 +1698,9 @@ double TMoverParameters::FastComputeMovement(double dt, const TTrackShape &Shape // koniec procedury, tu nastepuja dodatkowe procedury pomocnicze - // sprawdzanie i ewentualnie wykonywanie->kasowanie polece - if (LoadStatus > 0) // czas doliczamy tylko jeli trwa (roz)adowanie - LastLoadChangeTime += dt; // czas (roz)adunku + // sprawdzanie i ewentualnie wykonywanie->kasowanie poleceń + if (LoadStatus > 0) // czas doliczamy tylko jeśli trwa (roz)ładowanie + LastLoadChangeTime += dt; // czas (roz)ładunku RunInternalCommand(); @@ -1716,13 +1716,13 @@ double TMoverParameters::FastComputeMovement(double dt, const TTrackShape &Shape CompressorFlag = false; }; ConverterCheck(); - if (CompressorSpeed > 0.0) // sprarka musi mie jak niezerow wydajno - CompressorCheck(dt); //eby rozwaa jej zaczenie i prac + if (CompressorSpeed > 0.0) // sprężarka musi mieć jakąś niezerową wydajność + CompressorCheck(dt); //żeby rozważać jej załączenie i pracę UpdateBrakePressure(dt); UpdatePipePressure(dt); UpdateScndPipePressure(dt); // druga rurka, youBy UpdateBatteryVoltage(dt); - // hamulec antyposlizgowy - wyczanie + // hamulec antyposlizgowy - wyłączanie if ((BrakeSlippingTimer > 0.8) && (ASBType != 128)) // ASBSpeed=0.8 Hamulec->ASB(0); BrakeSlippingTimer += dt; @@ -1730,7 +1730,7 @@ double TMoverParameters::FastComputeMovement(double dt, const TTrackShape &Shape }; double TMoverParameters::ShowEngineRotation(int VehN) -{ // Zwraca warto prdkoci obrotowej silnika wybranego pojazdu. Do 3 pojazdw (3SN61). +{ // Zwraca wartość prędkości obrotowej silnika wybranego pojazdu. Do 3 pojazdów (3×SN61). int b; switch (VehN) { // numer obrotomierza @@ -1742,7 +1742,7 @@ double TMoverParameters::ShowEngineRotation(int VehN) if (Couplers[b].Connected->Power > 0.01) return fabs(Couplers[b].Connected->enrot); break; - case 3: // to nie uwzgldnia ewentualnego odwrcenia pojazdu w rodku + case 3: // to nie uwzględnia ewentualnego odwrócenia pojazdu w środku for (b = 0; b <= 1; ++b) if (TestFlag(Couplers[b].CouplingFlag, ctrain_controll)) if (Couplers[b].Connected->Power > 0.01) @@ -1763,7 +1763,7 @@ void TMoverParameters::ConverterCheck() }; int TMoverParameters::ShowCurrent(int AmpN) -{ // Odczyt poboru prdu na podanym amperomierzu +{ // Odczyt poboru prądu na podanym amperomierzu switch (EngineType) { case ElectricInductionMotor: @@ -1791,7 +1791,7 @@ int TMoverParameters::ShowCurrent(int AmpN) // ************************************************************************************************* // Q: 20160710 -// zwikszenie nastawinika +// zwiększenie nastawinika // ************************************************************************************************* bool TMoverParameters::IncMainCtrl(int CtrlSpeed) @@ -1804,7 +1804,7 @@ bool TMoverParameters::IncMainCtrl(int CtrlSpeed) if ((TrainType != dt_ET22) || ((TrainType == dt_ET22) && (ScndCtrlPos == - 0))) // w ET22 nie da si krci nastawnikiem przy wczonym boczniku + 0))) // w ET22 nie da się kręcić nastawnikiem przy włączonym boczniku switch (EngineType) { case None: @@ -1814,7 +1814,7 @@ bool TMoverParameters::IncMainCtrl(int CtrlSpeed) { if (((CtrlSpeed == 1) && (TrainType != dt_EZT)) || ((CtrlSpeed == 1) && (TrainType == dt_EZT) && (ActiveDir != 0))) - { // w EZT nie da si zaczy pozycji bez ustawienia kierunku + { // w EZT nie da się załączyć pozycji bez ustawienia kierunku MainCtrlPos++; OK = true; } @@ -1849,7 +1849,7 @@ bool TMoverParameters::IncMainCtrl(int CtrlSpeed) } if ((CtrlSpeed == 1) && (ActiveDir == -1) && (RList[MainCtrlPos].Bn > 1) && (TrainType != dt_PseudoDiesel)) - { // blokada wejcia na rwnoleg podczas jazdy do tyu + { // blokada wejścia na równoległą podczas jazdy do tyłu MainCtrlPos--; OK = false; } @@ -1870,12 +1870,12 @@ bool TMoverParameters::IncMainCtrl(int CtrlSpeed) } } else if ((CtrlSpeed > 1) && (ActiveDir != 0) && (TrainType != dt_ET40)) - { // szybkie przejcie na bezoporow + { // szybkie przejście na bezoporową while ((RList[MainCtrlPos].R > 0) && IncMainCtrl(1)) - ; // tutaj ma by ptla na "pusto" - // OK:=true ; {takie chamskie, potem poprawie} <-Ra: kto mia to - // poprawi i po co? + ; // tutaj ma być pętla na "pusto" + // OK:=true ; {takie chamskie, potem poprawie} <-Ra: kto miał to + // poprawić i po co? if (ActiveDir == -1) while ((RList[MainCtrlPos].Bn > 1) && IncMainCtrl(1)) MainCtrlPos--; @@ -1925,7 +1925,7 @@ bool TMoverParameters::IncMainCtrl(int CtrlSpeed) } // switch EngineType of } else // MainCtrlPos>=MainCtrlPosNo - if (CoupledCtrl) // wsplny wa nastawnika jazdy i bocznikowania + if (CoupledCtrl) // wspólny wał nastawnika jazdy i bocznikowania { if (ScndCtrlPos < ScndCtrlPosNo) // 3<3 -> false { @@ -2074,7 +2074,7 @@ bool TMoverParameters::DecMainCtrl(int CtrlSpeed) // ************************************************************************************************* // Q: 20160710 -// zwikszenie bocznika +// zwiększenie bocznika // ************************************************************************************************* bool TMoverParameters::IncScndCtrl(int CtrlSpeed) { @@ -2140,7 +2140,7 @@ bool TMoverParameters::DecScndCtrl(int CtrlSpeed) if ((MainCtrlPos == 0) && (CabNo != 0) && (TrainType == dt_ET42) && (ScndCtrlPos == 0) && !(DynamicBrakeFlag) && (CtrlSpeed == 1)) { - // Ra: AI wywouje z CtrlSpeed=2 albo gdy ScndCtrlPos>0 + // Ra: AI wywołuje z CtrlSpeed=2 albo gdy ScndCtrlPos>0 OK = DynamicBrakeSwitch(true); } else if ((ScndCtrlPosNo > 0) && (CabNo != 0)) @@ -2182,16 +2182,16 @@ bool TMoverParameters::DecScndCtrl(int CtrlSpeed) // ************************************************************************************************* // Q: 20160710 -// zaczenie rozrzdu +// załączenie rozrządu // ************************************************************************************************* bool TMoverParameters::CabActivisation(void) { bool OK = false; - OK = (CabNo == 0); // numer kabiny, z ktrej jest sterowanie + OK = (CabNo == 0); // numer kabiny, z której jest sterowanie if (OK) { - CabNo = ActiveCab; // sterowanie jest z kabiny z obsad + CabNo = ActiveCab; // sterowanie jest z kabiny z obsadą DirAbsolute = ActiveDir * CabNo; SendCtrlToNext("CabActivisation", 1, CabNo); } @@ -2200,7 +2200,7 @@ bool TMoverParameters::CabActivisation(void) // ************************************************************************************************* // Q: 20160710 -// wyczenie rozrzdu +// wyłączenie rozrządu // ************************************************************************************************* bool TMoverParameters::CabDeactivisation(void) { @@ -2211,7 +2211,7 @@ bool TMoverParameters::CabDeactivisation(void) { CabNo = 0; DirAbsolute = ActiveDir * CabNo; - DepartureSignal = false; // nie bucze z nieaktywnej kabiny + DepartureSignal = false; // nie buczeć z nieaktywnej kabiny SendCtrlToNext("CabActivisation", 0, ActiveCab); // CabNo==0! } return OK; @@ -2219,7 +2219,7 @@ bool TMoverParameters::CabDeactivisation(void) // ************************************************************************************************* // Q: 20160710 -// Sia napdzajca drezyn po naciniciu wajhy +// Siła napędzająca drezynę po naciśnięciu wajhy // ************************************************************************************************* bool TMoverParameters::AddPulseForce(int Multipler) { @@ -2308,7 +2308,7 @@ bool TMoverParameters::SecuritySystemReset(void) // zbijanie czuwaka/SHP { SSR = true; if ((TrainType == dt_EZT) || - (ActiveDir != 0)) // Ra 2014-03: w EZT nie trzeba ustawia kierunku + (ActiveDir != 0)) // Ra 2014-03: w EZT nie trzeba ustawiać kierunku if (!TestFlag(SecuritySystem.Status, s_CAebrake) || !TestFlag(SecuritySystem.Status, s_SHPebrake)) SSReset(); @@ -2328,26 +2328,26 @@ bool TMoverParameters::SecuritySystemReset(void) // zbijanie czuwaka/SHP // ************************************************************************************************* void TMoverParameters::SecuritySystemCheck(double dt) { - // Ra: z CA/SHP w EZT jest ten problem, e w rozrzdczym nie ma kierunku, a w silnikowym nie ma + // Ra: z CA/SHP w EZT jest ten problem, że w rozrządczym nie ma kierunku, a w silnikowym nie ma // obsady - // poza tym jest zdefiniowany we wszystkich 3 czonach EN57 + // poza tym jest zdefiniowany we wszystkich 3 członach EN57 if ((!Radio)) EmergencyBrakeSwitch(false); if ((SecuritySystem.SystemType > 0) && (SecuritySystem.Status > 0) && - (Battery)) // Ra: EZT ma teraz czuwak w rozrzdczym + (Battery)) // Ra: EZT ma teraz czuwak w rozrządczym { // CA if (Vel >= SecuritySystem - .AwareMinSpeed) // domylnie predko wiksza od 10% Vmax, albo podanej jawnie w FIZ + .AwareMinSpeed) // domyślnie predkość większa od 10% Vmax, albo podanej jawnie w FIZ { SecuritySystem.SystemTimer += dt; if (TestFlag(SecuritySystem.SystemType, 1) && - TestFlag(SecuritySystem.Status, s_aware)) // jeli wieci albo miga + TestFlag(SecuritySystem.Status, s_aware)) // jeśli świeci albo miga SecuritySystem.SystemSoundCATimer += dt; if (TestFlag(SecuritySystem.SystemType, 1) && - TestFlag(SecuritySystem.Status, s_CAalarm)) // jeli buczy + TestFlag(SecuritySystem.Status, s_CAalarm)) // jeśli buczy SecuritySystem.SystemBrakeCATimer += dt; if (TestFlag(SecuritySystem.SystemType, 1)) if ((SecuritySystem.SystemTimer > SecuritySystem.AwareDelay) && @@ -2364,10 +2364,10 @@ void TMoverParameters::SecuritySystemCheck(double dt) // SHP if (TestFlag(SecuritySystem.SystemType, 2) && - TestFlag(SecuritySystem.Status, s_active)) // jeli wieci albo miga + TestFlag(SecuritySystem.Status, s_active)) // jeśli świeci albo miga SecuritySystem.SystemSoundSHPTimer += dt; if (TestFlag(SecuritySystem.SystemType, 2) && - TestFlag(SecuritySystem.Status, s_SHPalarm)) // jeli buczy + TestFlag(SecuritySystem.Status, s_SHPalarm)) // jeśli buczy SecuritySystem.SystemBrakeSHPTimer += dt; if (TestFlag(SecuritySystem.SystemType, 2) && TestFlag(SecuritySystem.Status, s_active)) if ((Vel > SecuritySystem.VelocityAllowed) && (SecuritySystem.VelocityAllowed >= 0)) @@ -2386,7 +2386,7 @@ void TMoverParameters::SecuritySystemCheck(double dt) } // else SystemTimer:=0; // TEST CA - if (TestFlag(SecuritySystem.Status, s_CAtest)) // jeli wieci albo miga + if (TestFlag(SecuritySystem.Status, s_CAtest)) // jeśli świeci albo miga SecuritySystem.SystemBrakeCATestTimer += dt; if (TestFlag(SecuritySystem.SystemType, 1)) if (TestFlag(SecuritySystem.Status, s_CAtest)) // juz wlaczony sygnal swietlny @@ -2400,7 +2400,7 @@ void TMoverParameters::SecuritySystemCheck(double dt) // EmergencyBrakeFlag:=true; //YB-HN } else if (!Battery) - { // wyczenie baterii deaktywuje sprzt + { // wyłączenie baterii deaktywuje sprzęt EmergencyBrakeSwitch(false); // SecuritySystem.Status = 0; //deaktywacja czuwaka } @@ -2408,12 +2408,12 @@ void TMoverParameters::SecuritySystemCheck(double dt) // ************************************************************************************************* // Q: 20160710 -// wczenie / wyczenie baterii +// włączenie / wyłączenie baterii // ************************************************************************************************* bool TMoverParameters::BatterySwitch(bool State) { bool BS = false; - // Ra: ukrotnienie zaczania baterii jest jak fikcj... + // Ra: ukrotnienie załączania baterii jest jakąś fikcją... if (Battery != State) { Battery = State; @@ -2427,14 +2427,14 @@ bool TMoverParameters::BatterySwitch(bool State) if ((Battery) && (ActiveCab != 0)) /*|| (TrainType==dt_EZT)*/ SecuritySystem.Status = (SecuritySystem.Status | s_waiting); // aktywacja czuwaka else - SecuritySystem.Status = 0; // wyczenie czuwaka + SecuritySystem.Status = 0; // wyłączenie czuwaka return BS; } // ************************************************************************************************* // Q: 20160710 -// wczenie / wyczenie hamulca elektro-pneumatycznego +// włączenie / wyłączenie hamulca elektro-pneumatycznego // ************************************************************************************************* bool TMoverParameters::EpFuseSwitch(bool State) { @@ -2451,7 +2451,7 @@ bool TMoverParameters::EpFuseSwitch(bool State) // ************************************************************************************************* // Q: 20160710 -// kierunek do tyu +// kierunek do tyłu // ************************************************************************************************* bool TMoverParameters::DirectionBackward(void) { @@ -2470,8 +2470,8 @@ bool TMoverParameters::DirectionBackward(void) ActiveDir--; DirAbsolute = ActiveDir * CabNo; if (DirAbsolute != 0) - if (Battery) // jeli bateria jest ju zaczona - BatterySwitch(true); // to w ten oto durny sposb aktywuje si CA/SHP + if (Battery) // jeśli bateria jest już załączona + BatterySwitch(true); // to w ten oto durny sposób aktywuje się CA/SHP DB = true; SendCtrlToNext("Direction", ActiveDir, CabNo); } @@ -2482,7 +2482,7 @@ bool TMoverParameters::DirectionBackward(void) // ************************************************************************************************* // Q: 20160710 -// zaczenie przycisku przeciwpolizgowego +// załączenie przycisku przeciwpoślizgowego // ************************************************************************************************* bool TMoverParameters::AntiSlippingButton(void) { @@ -2491,13 +2491,13 @@ bool TMoverParameters::AntiSlippingButton(void) // ************************************************************************************************* // Q: 20160713 -// wczenie / wyczenie obwodu gownego +// włączenie / wyłączenie obwodu głownego // ************************************************************************************************* bool TMoverParameters::MainSwitch(bool State) { bool MS; - MS = false; // Ra: przeniesione z koca + MS = false; // Ra: przeniesione z końca if ((Mains != State) && (MainCtrlPosNo > 0)) { if ((State == false) || @@ -2505,14 +2505,14 @@ bool TMoverParameters::MainSwitch(bool State) (LastSwitchingTime > CtrlDelay) && !TestFlag(DamageFlag, dtrain_out) && !TestFlag(EngDmgFlag, 1))) { - if (Mains) // jeli by zaczony + if (Mains) // jeśli był załączony SendCtrlToNext("MainSwitch", int(State), - CabNo); // wysanie wyczenia do pozostaych? + CabNo); // wysłanie wyłączenia do pozostałych? Mains = State; - if (Mains) // jeli zosta zaczony + if (Mains) // jeśli został załączony SendCtrlToNext("MainSwitch", int(State), CabNo); // wyslanie po wlaczeniu albo przed wylaczeniem - MS = true; // warto zwrotna + MS = true; // wartość zwrotna LastSwitchingTime = 0; if ((EngineType == DieselEngine) && Mains) { @@ -2520,12 +2520,12 @@ bool TMoverParameters::MainSwitch(bool State) } if (((TrainType == dt_EZT) && (!State))) ConvOvldFlag = true; - // if (State=false) then //jeli wyczony + // if (State=false) then //jeśli wyłączony // begin // SetFlag(SoundFlag,sound_relay); //hunter-091012: przeniesione do Train.cpp, zeby sie // nie zapetlal // if (SecuritySystem.Status<>12) then - // SecuritySystem.Status:=0; //deaktywacja czuwaka; Ra: a nie bateri? + // SecuritySystem.Status:=0; //deaktywacja czuwaka; Ra: a nie baterią? // end // else // if (SecuritySystem.Status<>12) then @@ -2538,7 +2538,7 @@ bool TMoverParameters::MainSwitch(bool State) // ************************************************************************************************* // Q: 20160713 -// wczenie / wyczenie przetwornicy +// włączenie / wyłączenie przetwornicy // ************************************************************************************************* bool TMoverParameters::ConverterSwitch(bool State) { @@ -2560,7 +2560,7 @@ bool TMoverParameters::ConverterSwitch(bool State) // ************************************************************************************************* // Q: 20160713 -// wczenie / wyczenie sprarki +// włączenie / wyłączenie sprężarki // ************************************************************************************************* bool TMoverParameters::CompressorSwitch(bool State) { @@ -2583,7 +2583,7 @@ bool TMoverParameters::CompressorSwitch(bool State) // ************************************************************************************************* // Q: 20160711 -// zwikszenie nastawy hamulca +// zwiększenie nastawy hamulca // ************************************************************************************************* bool TMoverParameters::IncBrakeLevelOld(void) { @@ -2619,7 +2619,7 @@ bool TMoverParameters::IncBrakeLevelOld(void) (BrakePressureTable[BrakeCtrlPos - 1].PipePressureVal > 0)) LimPipePress = PipePress; - //ten kawaek jest bez sensu gdy nic nie robi. Zakomntowaem. GF 20161124 + //ten kawałek jest bez sensu gdyż nic nie robił. Zakomntowałem. GF 20161124 //if (BrakeSystem == ElectroPneumatic) // if (BrakeSubsystem != ss_K) // { @@ -2693,7 +2693,7 @@ bool TMoverParameters::DecBrakeLevelOld(void) // (BrakePressureTable[BrakeCtrlPos+1].PipePressureVal > 0)) // LimPipePress:=PipePress; - // to nic nie robi. Zakomentowaem. GF 20161124 + // to nic nie robi. Zakomentowałem. GF 20161124 //if (BrakeSystem == ElectroPneumatic) // if (BrakeSubsystem != ss_K) // { @@ -2725,7 +2725,7 @@ bool TMoverParameters::DecBrakeLevelOld(void) // ************************************************************************************************* // Q: 20160711 -// zwikszenie nastawy hamulca pomocnicznego +// zwiększenie nastawy hamulca pomocnicznego // ************************************************************************************************* bool TMoverParameters::IncLocalBrakeLevel(int CtrlSpeed) { @@ -2771,7 +2771,7 @@ bool TMoverParameters::DecLocalBrakeLevel(int CtrlSpeed) // ************************************************************************************************* // Q: 20160711 -// ustawienie pozycji kranu pomocniczego na masymaln warto +// ustawienie pozycji kranu pomocniczego na masymalną wartość // ************************************************************************************************* bool TMoverParameters::IncLocalBrakeLevelFAST(void) { @@ -2789,7 +2789,7 @@ bool TMoverParameters::IncLocalBrakeLevelFAST(void) // ************************************************************************************************* // Q: 20160711 -// ustawienie pozycji hamulca pomocniczego na minimaln +// ustawienie pozycji hamulca pomocniczego na minimalną // ************************************************************************************************* bool TMoverParameters::DecLocalBrakeLevelFAST(void) { @@ -2807,7 +2807,7 @@ bool TMoverParameters::DecLocalBrakeLevelFAST(void) // ************************************************************************************************* // Q: 20160711 -// zwikszenie nastawy hamulca rcznego +// zwiększenie nastawy hamulca ręcznego // ************************************************************************************************* bool TMoverParameters::IncManualBrakeLevel(int CtrlSpeed) { @@ -2829,7 +2829,7 @@ bool TMoverParameters::IncManualBrakeLevel(int CtrlSpeed) // ************************************************************************************************* // Q: 20160711 -// zmniejszenie nastawy hamulca rcznego +// zmniejszenie nastawy hamulca ręcznego // ************************************************************************************************* bool TMoverParameters::DecManualBrakeLevel(int CtrlSpeed) { @@ -2878,7 +2878,7 @@ bool TMoverParameters::DynamicBrakeSwitch(bool Switch) // ************************************************************************************************* // Q: 20160711 -// wczenie / wyczenie hamowania awaryjnego +// włączenie / wyłączenie hamowania awaryjnego // ************************************************************************************************* bool TMoverParameters::EmergencyBrakeSwitch(bool Switch) { @@ -2910,11 +2910,11 @@ bool TMoverParameters::EmergencyBrakeSwitch(bool Switch) // ************************************************************************************************* // Q: 20160710 -// hamowanie przeciwpolizgowe +// hamowanie przeciwpoślizgowe // ************************************************************************************************* bool TMoverParameters::AntiSlippingBrake(void) { - bool ASB = false; // Ra: przeniesione z koca + bool ASB = false; // Ra: przeniesione z końca if (ASBType == 1) { ASB = true; // SPKS!! @@ -2926,20 +2926,20 @@ bool TMoverParameters::AntiSlippingBrake(void) // ************************************************************************************************* // Q: 20160711 -// wczenie / wyczenie odluniacza +// włączenie / wyłączenie odluźniacza // ************************************************************************************************* bool TMoverParameters::BrakeReleaser(int state) { - bool OK = true; //false tylko jeli nie uda si wysa, GF 20161124 + bool OK = true; //false tylko jeśli nie uda się wysłać, GF 20161124 Hamulec->Releaser(state); - if (CabNo != 0) // rekurencyjne wysanie do nastpnego + if (CabNo != 0) // rekurencyjne wysłanie do następnego OK = SendCtrlToNext("BrakeReleaser", state, CabNo); return OK; } // ************************************************************************************************* // Q: 20160711 -// wczenie / wyczenie hamulca elektro-pneumatycznego +// włączenie / wyłączenie hamulca elektro-pneumatycznego // ************************************************************************************************* bool TMoverParameters::SwitchEPBrake(int state) { @@ -2963,7 +2963,7 @@ bool TMoverParameters::SwitchEPBrake(int state) // ************************************************************************************************* // Q: 20160711 -// zwikszenie cinienia hamowania +// zwiększenie ciśnienia hamowania // ************************************************************************************************* bool TMoverParameters::IncBrakePress(double &brake, double PressLimit, double dp) { @@ -2972,7 +2972,7 @@ bool TMoverParameters::IncBrakePress(double &brake, double PressLimit, double dp // ((BrakePress>2.0) or (PipePress<3.7{(LowPipePress+0.5)})) then if ((DynamicBrakeType != dbrake_switch) && (DynamicBrakeType != dbrake_none) && (BrakePress > 2.0) && - (TrainType != dt_EZT)) // yB radzi nie sprawdza cinienia w przewodzie + (TrainType != dt_EZT)) // yB radzi nie sprawdzać ciśnienia w przewodzie // hunter-301211: dla EN57 silnikow nie odlaczamy { DynamicBrakeFlag = true; // uruchamianie hamulca ED albo odlaczanie silnikow @@ -2995,7 +2995,7 @@ bool TMoverParameters::IncBrakePress(double &brake, double PressLimit, double dp // ************************************************************************************************* // Q: 20160711 -// zmniejszenie cinienia hamowania +// zmniejszenie ciśnienia hamowania // ************************************************************************************************* bool TMoverParameters::DecBrakePress(double &brake, double PressLimit, double dp) { @@ -3014,7 +3014,7 @@ bool TMoverParameters::DecBrakePress(double &brake, double PressLimit, double dp // if ((DynamicBrakeType != dbrake_switch) && ((BrakePress < 0.1) && (PipePress > 0.45 // /*(LowPipePress+0.06)*/ ))) if ((DynamicBrakeType != dbrake_switch) && - (BrakePress < 0.1)) // yB radzi nie sprawdza cinienia w przewodzie + (BrakePress < 0.1)) // yB radzi nie sprawdzać ciśnienia w przewodzie DynamicBrakeFlag = false; // wylaczanie hamulca ED i/albo zalaczanie silnikow return DBP; @@ -3022,7 +3022,7 @@ bool TMoverParameters::DecBrakePress(double &brake, double PressLimit, double dp // ************************************************************************************************* // Q: 20160711 -// przeczenie nastawy hamulca O/P/T +// przełączenie nastawy hamulca O/P/T // ************************************************************************************************* bool TMoverParameters::BrakeDelaySwitch(int BDS) { @@ -3043,7 +3043,7 @@ bool TMoverParameters::BrakeDelaySwitch(int BDS) BrakeDelayFlag = BDS; rBDS = true; BrakeStatus = (BrakeStatus & 191); - // kopowanie nastawy hamulca do kolejnego czlonu - do przemylenia + // kopowanie nastawy hamulca do kolejnego czlonu - do przemyślenia if (CabNo != 0) SendCtrlToNext("BrakeDelay", BrakeDelayFlag, CabNo); } @@ -3054,7 +3054,7 @@ bool TMoverParameters::BrakeDelaySwitch(int BDS) // ************************************************************************************************* // Q: 20160712 -// zwikszenie przeoenia hamulca +// zwiększenie przełożenia hamulca // ************************************************************************************************* bool TMoverParameters::IncBrakeMult(void) { @@ -3078,7 +3078,7 @@ bool TMoverParameters::IncBrakeMult(void) // ************************************************************************************************* // Q: 20160712 -// zmniejszenie przeoenia hamulca +// zmniejszenie przełożenia hamulca // ************************************************************************************************* bool TMoverParameters::DecBrakeMult(void) { @@ -3101,7 +3101,7 @@ bool TMoverParameters::DecBrakeMult(void) // ************************************************************************************************* // Q: 20160712 -// zaktualizowanie cinienia w hamulcach +// zaktualizowanie ciśnienia w hamulcach // ************************************************************************************************* void TMoverParameters::UpdateBrakePressure(double dt) { @@ -3118,11 +3118,11 @@ void TMoverParameters::UpdateBrakePressure(double dt) // ************************************************************************************************* // Q: 20160712 -// Obliczanie pracy sprarki +// Obliczanie pracy sprężarki // ************************************************************************************************* void TMoverParameters::CompressorCheck(double dt) { - // if (CompressorSpeed>0.0) then //ten warunek zosta sprawdzony przy wywoaniu funkcji + // if (CompressorSpeed>0.0) then //ten warunek został sprawdzony przy wywołaniu funkcji if (VeselVolume > 0) { if (MaxCompressor - MinCompressor < 0.0001) @@ -3140,7 +3140,7 @@ void TMoverParameters::CompressorCheck(double dt) CompressedVolume += dt * CompressorSpeed * (2.0 * MaxCompressor - Compressor) / MaxCompressor; TotalCurrent += 0.0015 - * Voltage; // tymczasowo tylko obcienie sprarki, tak z 5A na sprark + * Voltage; // tymczasowo tylko obciążenie sprężarki, tak z 5A na sprężarkę } else { @@ -3152,60 +3152,60 @@ void TMoverParameters::CompressorCheck(double dt) } else { - if (CompressorFlag) // jeli sprarka zaczona - { // sprawdzi moliwe warunki wyczenia sprarki - if (CompressorPower == 5) // jeli zasilanie z ssiedniego czonu - { // zasilanie sprarki w czonie ra z czonu silnikowego (sprzg 1) + if (CompressorFlag) // jeśli sprężarka załączona + { // sprawdzić możliwe warunki wyłączenia sprężarki + if (CompressorPower == 5) // jeśli zasilanie z sąsiedniego członu + { // zasilanie sprężarki w członie ra z członu silnikowego (sprzęg 1) if (Couplers[1].Connected != NULL) CompressorFlag = (Couplers[1].Connected->CompressorAllow && Couplers[1].Connected->ConverterFlag && Couplers[1].Connected->Mains); else - CompressorFlag = false; // bez tamtego czonu nie zadziaa + CompressorFlag = false; // bez tamtego członu nie zadziała } - else if (CompressorPower == 4) // jeli zasilanie z poprzedniego czonu - { // zasilanie sprarki w czonie ra z czonu silnikowego (sprzg 1) + else if (CompressorPower == 4) // jeśli zasilanie z poprzedniego członu + { // zasilanie sprężarki w członie ra z członu silnikowego (sprzęg 1) if (Couplers[0].Connected != NULL) CompressorFlag = (Couplers[0].Connected->CompressorAllow && Couplers[0].Connected->ConverterFlag && Couplers[0].Connected->Mains); else - CompressorFlag = false; // bez tamtego czonu nie zadziaa + CompressorFlag = false; // bez tamtego członu nie zadziała } else CompressorFlag = (CompressorAllow) && ((ConverterFlag) || (CompressorPower == 0)) && (Mains); if (Compressor > - MaxCompressor) // wycznik cinieniowy jest niezaleny od sposobu zasilania + MaxCompressor) // wyłącznik ciśnieniowy jest niezależny od sposobu zasilania CompressorFlag = false; } - else // jeli nie zaczona + else // jeśli nie załączona if ((Compressor < MinCompressor) && - (LastSwitchingTime > CtrlDelay)) // jeli nie zaczona, a cinienie za mae - { // zaczenie przy maym cinieniu - if (CompressorPower == 5) // jeli zasilanie z nastpnego czonu - { // zasilanie sprarki w czonie ra z czonu silnikowego (sprzg 1) + (LastSwitchingTime > CtrlDelay)) // jeśli nie załączona, a ciśnienie za małe + { // załączenie przy małym ciśnieniu + if (CompressorPower == 5) // jeśli zasilanie z następnego członu + { // zasilanie sprężarki w członie ra z członu silnikowego (sprzęg 1) if (Couplers[1].Connected != NULL) CompressorFlag = (Couplers[1].Connected->CompressorAllow && Couplers[1].Connected->ConverterFlag && Couplers[1].Connected->Mains); else - CompressorFlag = false; // bez tamtego czonu nie zadziaa + CompressorFlag = false; // bez tamtego członu nie zadziała } - else if (CompressorPower == 4) // jeli zasilanie z poprzedniego czonu - { // zasilanie sprarki w czonie ra z czonu silnikowego (sprzg 1) + else if (CompressorPower == 4) // jeśli zasilanie z poprzedniego członu + { // zasilanie sprężarki w członie ra z członu silnikowego (sprzęg 1) if (Couplers[0].Connected != NULL) CompressorFlag = (Couplers[0].Connected->CompressorAllow && Couplers[0].Connected->ConverterFlag && Couplers[0].Connected->Mains); else - CompressorFlag = false; // bez tamtego czonu nie zadziaa + CompressorFlag = false; // bez tamtego członu nie zadziała } else CompressorFlag = (CompressorAllow) && ((ConverterFlag) || (CompressorPower == 0)) && (Mains); - if (CompressorFlag) // jeli zostaa zaczona - LastSwitchingTime = 0; // to trzeba ograniczy ponowne wczenie + if (CompressorFlag) // jeśli została załączona + LastSwitchingTime = 0; // to trzeba ograniczyć ponowne włączenie } // for b:=0 to 1 do //z Megapacka // with Couplers[b] do @@ -3222,17 +3222,17 @@ void TMoverParameters::CompressorCheck(double dt) dt * CompressorSpeed * (2.0 * MaxCompressor - Compressor) / MaxCompressor; if ((CompressorPower == 5) && (Couplers[1].Connected != NULL)) Couplers[1].Connected->TotalCurrent += - 0.0015 * Couplers[1].Connected->Voltage; // tymczasowo tylko obcienie - // sprarki, tak z 5A na - // sprark + 0.0015 * Couplers[1].Connected->Voltage; // tymczasowo tylko obciążenie + // sprężarki, tak z 5A na + // sprężarkę else if ((CompressorPower == 4) && (Couplers[0].Connected != NULL)) Couplers[0].Connected->TotalCurrent += - 0.0015 * Couplers[0].Connected->Voltage; // tymczasowo tylko obcienie - // sprarki, tak z 5A na - // sprark + 0.0015 * Couplers[0].Connected->Voltage; // tymczasowo tylko obciążenie + // sprężarki, tak z 5A na + // sprężarkę else TotalCurrent += 0.0015 * - Voltage; // tymczasowo tylko obcienie sprarki, tak z 5A na sprark + Voltage; // tymczasowo tylko obciążenie sprężarki, tak z 5A na sprężarkę } } } @@ -3240,7 +3240,7 @@ void TMoverParameters::CompressorCheck(double dt) // ************************************************************************************************* // Q: 20160712 -// aktualizacja cinienia w przewodzie gwnym +// aktualizacja ciśnienia w przewodzie głównym // ************************************************************************************************* void TMoverParameters::UpdatePipePressure(double dt) { @@ -3306,7 +3306,7 @@ void TMoverParameters::UpdatePipePressure(double dt) // Pipe.Flow(PF(PipePress, 0, d2A(12)) * dt); dpMainValve = dpMainValve / (Dim.L * Spg * 20); - CntrlPipePress = Hamulec->GetVRP(); // cinienie komory wstpnej rozdzielacza + CntrlPipePress = Hamulec->GetVRP(); // ciśnienie komory wstępnej rozdzielacza // if (Hamulec is typeid(TWest)) return 0; @@ -3336,8 +3336,8 @@ void TMoverParameters::UpdatePipePressure(double dt) LocBrakePress = LocHandle->GetCP(); for (int b = 0; b < 2; b++) if (((TrainType & (dt_ET41 | dt_ET42)) != 0) && - (Couplers[b].Connected != NULL)) // nie podoba mi si to rozwizanie, chyba trzeba - // doda jaki wpis do fizyki na to + (Couplers[b].Connected != NULL)) // nie podoba mi się to rozwiązanie, chyba trzeba + // dodać jakiś wpis do fizyki na to if (((Couplers[b].Connected->TrainType & (dt_ET41 | dt_ET42)) != 0) && ((Couplers[b].CouplingFlag & 36) == 36)) LocBrakePress = Max0R(Couplers[b].Connected->LocHandle->GetCP(), LocBrakePress); @@ -3414,15 +3414,15 @@ void TMoverParameters::UpdatePipePressure(double dt) temp = 0; Hamulec->SetEPS(temp); SendCtrlToNext("Brake", temp, - CabNo); // Ra 2014-11: na tym si wysypuje, ale nie wiem, w jakich warunkach + CabNo); // Ra 2014-11: na tym się wysypuje, ale nie wiem, w jakich warunkach } Pipe->Act(); PipePress = Pipe->P(); - if ((BrakeStatus & 128) == 128) // jesli hamulec wyczony + if ((BrakeStatus & 128) == 128) // jesli hamulec wyłączony temp = 0; // odetnij else - temp = 1; // pocz + temp = 1; // połącz Pipe->Flow(temp * Hamulec->GetPF(temp * PipePress, dt, Vel) + GetDVc(dt)); if (ASBType == 128) @@ -3449,7 +3449,7 @@ void TMoverParameters::UpdatePipePressure(double dt) // ************************************************************************************************* // Q: 20160713 -// Aktualizacja cinienia w przewodzie zasilajcym +// Aktualizacja ciśnienia w przewodzie zasilającym // ************************************************************************************************* void TMoverParameters::UpdateScndPipePressure(double dt) { @@ -3513,7 +3513,7 @@ void TMoverParameters::UpdateScndPipePressure(double dt) // ************************************************************************************************* // Q: 20160715 -// oblicza i zwraca przepyw powietrza pomidzy pojazdami +// oblicza i zwraca przepływ powietrza pomiędzy pojazdami // ************************************************************************************************* double TMoverParameters::GetDVc(double dt) { @@ -3549,7 +3549,7 @@ double TMoverParameters::GetDVc(double dt) // { // dV = 0.05 * dt * PF(Couplers[0].Connected->PipePress, Couplers[1].Connected->PipePress, // (Spg * 0.85) / (1 + 0.03 * Dim.L)) * - // 0; // kto mi powie jaki jest sens tego bloku jeli przepyw mnoony przez zero? + // 0; // ktoś mi powie jaki jest sens tego bloku jeśli przepływ mnożony przez zero? // Couplers[0].Connected->Pipe->Flow(+dV); // Couplers[1].Connected->Pipe->Flow(-dV); // } @@ -3559,14 +3559,14 @@ double TMoverParameters::GetDVc(double dt) // ************************************************************************************************* // Q: 20160713 -// Obliczenie staych potrzebnych do dalszych oblicze +// Obliczenie stałych potrzebnych do dalszych obliczeń // ************************************************************************************************* void TMoverParameters::ComputeConstans(void) { double BearingF, RollF, HideModifier; - double Curvature; // Ra 2014-07: odwrotno promienia + double Curvature; // Ra 2014-07: odwrotność promienia - TotalCurrent = 0; // Ra 2014-04: tu zerowanie, aby EZT mogo pobiera prd innemu czonowi + TotalCurrent = 0; // Ra 2014-04: tu zerowanie, aby EZT mogło pobierać prąd innemu członowi TotalMass = ComputeMass(); TotalMassxg = TotalMass * g; // TotalMass*g BearingF = 2.0 * (DamageFlag && dtrain_bearing); @@ -3591,10 +3591,10 @@ void TMoverParameters::ComputeConstans(void) Ff = TotalMassxg * (BearingF + RollF * V * V / 10.0) / 1000.0; // dorobic liczenie temperatury lozyska! FrictConst1 = ((TotalMassxg * RollF) / 10000.0) + (Cx * Dim.W * Dim.H); - Curvature = abs(RunningShape.R); // zero oznacza nieskoczony promie + Curvature = abs(RunningShape.R); // zero oznacza nieskończony promień if (Curvature > 0.0) Curvature = 1.0 / Curvature; - // opr skadu na uku (youBy): +(500*TrackW/R)*TotalMassxg*0.001 do FrictConst2s/d + // opór składu na łuku (youBy): +(500*TrackW/R)*TotalMassxg*0.001 do FrictConst2s/d FrictConst2s = (TotalMassxg * ((500.0 * TrackW * Curvature) + 2.5 - HideModifier + 2 * BearingF / dtrain_bearing)) * 0.001; @@ -3605,14 +3605,14 @@ void TMoverParameters::ComputeConstans(void) // ************************************************************************************************* // Q: 20160713 -// Oblicza mas adunku +// Oblicza masę ładunku // ************************************************************************************************* double TMoverParameters::ComputeMass(void) { double M; - LoadType = ToLower(LoadType); // po co zakada jak mona mie na pewno + LoadType = ToLower(LoadType); // po co zakładać jak można mieć na pewno if (Load > 0) - { // zakadamy, e adunek jest pisany maymi literami + { // zakładamy, że ładunek jest pisany małymi literami if (ToLower(LoadQuantity) == "tonns") M = Load * 1000; else if (LoadType == "passengers") @@ -3620,7 +3620,7 @@ double TMoverParameters::ComputeMass(void) else if (LoadType == "luggage") M = Load * 100; else if (LoadType == "cars") - M = Load * 1200; // 800 kilo to mia maluch + M = Load * 1200; // 800 kilo to miał maluch else if (LoadType == "containers") M = Load * 8000; else if (LoadType == "transformers") @@ -3630,13 +3630,13 @@ double TMoverParameters::ComputeMass(void) } else M = 0; - // Ra: na razie tak, ale nie wszdzie masy wirujce si wliczaj + // Ra: na razie tak, ale nie wszędzie masy wirujące się wliczają return Mass + M + Mred; } // ************************************************************************************************* // Q: 20160713 -// Obliczanie wypadkowej siy z wszystkich dziaajcych si +// Obliczanie wypadkowej siły z wszystkich działających sił // ************************************************************************************************* void TMoverParameters::ComputeTotalForce(double dt, double dt1, bool FullVer) { @@ -3651,14 +3651,14 @@ void TMoverParameters::ComputeTotalForce(double dt, double dt1, bool FullVer) // to powinno byc zerowane na zewnatrz // juz zoptymalizowane: - FStand = FrictionForce(RunningShape.R, RunningTrack.DamageFlag); // sia oporw ruchu - Vel = abs(V) * 3.6; // prdko w km/h - nrot = v2n(); // przeliczenie prdkoci liniowej na obrotow + FStand = FrictionForce(RunningShape.R, RunningTrack.DamageFlag); // siła oporów ruchu + Vel = abs(V) * 3.6; // prędkość w km/h + nrot = v2n(); // przeliczenie prędkości liniowej na obrotową if (TestFlag(BrakeMethod, bp_MHS) && (PipePress < 3.0) && (Vel > 45) && TestFlag(BrakeDelayFlag, bdelay_M)) // ustawione na sztywno na 3 bar FStand += TrackBrakeForce; // doliczenie hamowania hamulcem szynowym - // w charakterystykach jest warto siy hamowania zamiast nacisku + // w charakterystykach jest wartość siły hamowania zamiast nacisku // if(FullVer=true) then // ABu: to dla optymalizacji, bo chyba te rzeczy wystarczy sprawdzac 1 raz na // klatke? @@ -3667,7 +3667,7 @@ void TMoverParameters::ComputeTotalForce(double dt, double dt1, bool FullVer) LastRelayTime += dt1; if (Mains && /*(abs(CabNo) < 2) &&*/ (EngineType == ElectricSeriesMotor)) // potem ulepszyc! pantogtrafy! - { // Ra 2014-03: uwzgldnienie kierunku jazdy w napiciu na silnikach, a powinien by + { // Ra 2014-03: uwzględnienie kierunku jazdy w napięciu na silnikach, a powinien być // zdefiniowany nawrotnik if (CabNo == 0) Voltage = RunningTraction.TractionVoltage * ActiveDir; @@ -3707,7 +3707,7 @@ void TMoverParameters::ComputeTotalForce(double dt, double dt1, bool FullVer) for (b = 0; b < 2; b++) if (Couplers[b].Connected != NULL) /*and (Couplers[b].CouplerType<>Bare) and (Couplers[b].CouplerType<>Articulated)*/ - { // doliczenie si z innych pojazdw + { // doliczenie sił z innych pojazdów Couplers[b].CForce = CouplerForce(b, dt); FTrain += Couplers[b].CForce; } @@ -3716,7 +3716,7 @@ void TMoverParameters::ComputeTotalForce(double dt, double dt1, bool FullVer) // FStand:=Fb+FrictionForce(RunningShape.R,RunningTrack.DamageFlag); FStand += Fb; FTrain += - TotalMassxg * RunningShape.dHtrack; // doliczenie skadowej stycznej grawitacji + TotalMassxg * RunningShape.dHtrack; // doliczenie składowej stycznej grawitacji //!niejawne przypisanie zmiennej! FTotal = FTrain - Sign(V) * FStand; } @@ -3749,7 +3749,7 @@ void TMoverParameters::ComputeTotalForce(double dt, double dt1, bool FullVer) // ************************************************************************************************* // Q: 20160713 -// oblicza si na styku koa i szyny +// oblicza siłę na styku koła i szyny // ************************************************************************************************* double TMoverParameters::BrakeForce(const TTrackParam &Track) { @@ -3820,8 +3820,8 @@ double TMoverParameters::BrakeForce(const TTrackParam &Track) //{ SlippingWheels:=false;} // if (LocalBrake=ManualBrake)or(MBrake=true)) and (BrakePress<0.3) then // Fb:=UnitBrakeForce*NBpA {ham. reczny dziala na jedna os} - // else //yB: to nie do konca ma sens, poniewa rczny w wagonie dziaa na jeden cylinder - // hamulcowy/wzek, dlatego potrzebne s oddzielnie liczone osie + // else //yB: to nie do konca ma sens, ponieważ ręczny w wagonie działa na jeden cylinder + // hamulcowy/wózek, dlatego potrzebne są oddzielnie liczone osie Fb = UnitBrakeForce * NBrakeAxles * Max0R(1, NBpA); // u:=((BrakePress*P2FTrans)-BrakeCylSpring*BrakeCylMult[BCMFlag]/BrakeCylNo-0.83*BrakeSlckAdj/(BrakeCylNo))*BrakeCylNo; @@ -3831,7 +3831,7 @@ double TMoverParameters::BrakeForce(const TTrackParam &Track) // ************************************************************************************************* // Q: 20160713 -// Obliczanie siy tarcia +// Obliczanie siły tarcia // ************************************************************************************************* double TMoverParameters::FrictionForce(double R, int TDamage) { @@ -3846,7 +3846,7 @@ double TMoverParameters::FrictionForce(double R, int TDamage) // ************************************************************************************************* // Q: 20160713 -// Oblicza przyczepno +// Oblicza przyczepność // ************************************************************************************************* double TMoverParameters::Adhesive(double staticfriction) { @@ -3900,11 +3900,11 @@ double DirF(int CouplerN) // ************************************************************************************************* // Q: 20160713 -// Obliczanie si dzialajcych na sprzgach +// Obliczanie sił dzialających na sprzęgach // ************************************************************************************************* double TMoverParameters::CouplerForce(int CouplerN, double dt) { - // wyliczenie siy na sprzgu + // wyliczenie siły na sprzęgu double tempdist = 0, newdist = 0, distDelta = 0, CF = 0, dV = 0, absdV = 0, Fmax = 0; double BetaAvg = 0; int CNext = 0; @@ -3917,7 +3917,7 @@ double TMoverParameters::CouplerForce(int CouplerN, double dt) // if (Couplers[CouplerN].CForce == 0) //nie bylo uzgadniane wiec policz Couplers[CouplerN].CheckCollision = false; - newdist = Couplers[CouplerN].CoupleDist; // odlego od sprzgu ssiada + newdist = Couplers[CouplerN].CoupleDist; // odległość od sprzęgu sąsiada // newdist:=Distance(Loc,Connected^.Loc,Dim,Connected^.Dim); if (CouplerN == 0) { @@ -3947,7 +3947,7 @@ double TMoverParameters::CouplerForce(int CouplerN, double dt) if ((newdist > MaxDist) || ((ScanCounter > MaxCount) && (newdist > MinDist))) //***if (tempdist>MaxDist) or ((ScanCounter>MaxCount)and(tempdist>MinDist)) then { // zerwij kontrolnie wirtualny sprzeg - // Connected.Couplers[CNext].Connected:=nil; //Ra: ten podczony niekoniecznie jest + // Connected.Couplers[CNext].Connected:=nil; //Ra: ten podłączony niekoniecznie jest // wirtualny Couplers[CouplerN].Connected = NULL; ScanCounter = Random(500); // Q: TODO: cy dobrze przetlumaczone? @@ -4086,7 +4086,7 @@ double TMoverParameters::TractionForce(double dt) enrot = Transmision.Ratio * nrot; else // dla DieselEngine { - if (ShuntMode) // dodatkowa przekadnia np. dla 2Ls150 + if (ShuntMode) // dodatkowa przekładnia np. dla 2Ls150 dtrans = AnPos * Transmision.Ratio * MotorParam[ScndCtrlActualPos].mIsat; else dtrans = Transmision.Ratio * MotorParam[ScndCtrlActualPos].mIsat; @@ -4202,10 +4202,10 @@ double TMoverParameters::TractionForce(double dt) Mm = MomentumF(Im, Vadd, 0); } - if ((TrainType == dt_ET22) && (DelayCtrlFlag)) // szarpanie przy zmianie ukadu w byku + if ((TrainType == dt_ET22) && (DelayCtrlFlag)) // szarpanie przy zmianie układu w byku Mm = Mm * RList[MainCtrlActualPos].Bn / (RList[MainCtrlActualPos].Bn + - 1); // zrobione w momencie, eby nie dawac elektryki w przeliczaniu si + 1); // zrobione w momencie, żeby nie dawac elektryki w przeliczaniu sił if (abs(Im) > Imax) Vhyp += dt; //*(abs(Im) / Imax - 0.9) * 10; // zwieksz czas oddzialywania na PN @@ -4214,12 +4214,12 @@ double TMoverParameters::TractionForce(double dt) if (Vhyp > CtrlDelay / 2) // jesli czas oddzialywania przekroczony FuseOff(); // wywalanie bezpiecznika z powodu przetezenia silnikow - if ((Mains)) // nie wchodzi w funkcj bez potrzeby + if ((Mains)) // nie wchodzić w funkcję bez potrzeby if ((abs(Voltage) < EnginePowerSource.CollectorParameters.MinV) || (abs(Voltage) * EnginePowerSource.CollectorParameters.OVP > EnginePowerSource.CollectorParameters.MaxV)) if (MainSwitch(false)) - EventFlag = true; // wywalanie szybkiego z powodu niewaciwego napicia + EventFlag = true; // wywalanie szybkiego z powodu niewłaściwego napięcia if (((DynamicBrakeType == dbrake_automatic) || (DynamicBrakeType == dbrake_switch)) && (DynamicBrakeFlag)) @@ -4452,7 +4452,7 @@ double TMoverParameters::TractionForce(double dt) case ElectricInductionMotor: { - if ((Mains)) // nie wchodzi w funkcj bez potrzeby + if ((Mains)) // nie wchodzić w funkcję bez potrzeby if ((abs(Voltage) < EnginePowerSource.CollectorParameters.MinV) || (abs(Voltage) > EnginePowerSource.CollectorParameters.MaxV + 200)) { @@ -4519,7 +4519,7 @@ double TMoverParameters::TractionForce(double dt) // if SlippingWheels then begin PosRatio:=0; tmp:=10; SandDoseOn; // end;//przeciwposlizg - // if(Flat)then //PRZECIWPOLIZG + // if(Flat)then //PRZECIWPOŚLIZG dmoment = eimv[eimv_Fful]; // else // dmoment:=eimc[eimc_p_F0]*0.99; @@ -4547,7 +4547,7 @@ double TMoverParameters::TractionForce(double dt) dizel_fill += Max0R(Min0R(PosRatio - dizel_fill, 0.1), -0.1) * 2 * (tmp /*2{+4*byte(PosRatio 0) && (CabNo == 0) && (EngineType == ElectricSeriesMotor)) { if (SetFlag(DamageFlag, -dtrain_engine)) @@ -4831,7 +4831,7 @@ bool TMoverParameters::CutOffEngine(void) // ************************************************************************************************* // Q: 20160713 -// Przeczenie wysoki / niski prd rozruchu +// Przełączenie wysoki / niski prąd rozruchu // ************************************************************************************************* bool TMoverParameters::MaxCurrentSwitch(bool State) { @@ -4862,7 +4862,7 @@ bool TMoverParameters::MaxCurrentSwitch(bool State) // ************************************************************************************************* // Q: 20160713 -// Przeczenie wysoki / niski prd rozruchu automatycznego +// Przełączenie wysoki / niski prąd rozruchu automatycznego // ************************************************************************************************* bool TMoverParameters::MinCurrentSwitch(bool State) { @@ -4889,7 +4889,7 @@ bool TMoverParameters::MinCurrentSwitch(bool State) // ************************************************************************************************* // Q: 20160713 -// Sprawdzenie wskanika jazdy na oporach +// Sprawdzenie wskaźnika jazdy na oporach // ************************************************************************************************* bool TMoverParameters::ResistorsFlagCheck(void) { @@ -4909,7 +4909,7 @@ bool TMoverParameters::ResistorsFlagCheck(void) // ************************************************************************************************* // Q: 20160713 -// Wczenie / wyczenie automatycznego rozruchu +// Włączenie / wyłączenie automatycznego rozruchu // ************************************************************************************************* bool TMoverParameters::AutoRelaySwitch(bool State) { @@ -4928,7 +4928,7 @@ bool TMoverParameters::AutoRelaySwitch(bool State) // ************************************************************************************************* // Q: 20160724 -// Sprawdzenie warunkw pracy automatycznego rozruchu +// Sprawdzenie warunków pracy automatycznego rozruchu // ************************************************************************************************* bool TMoverParameters::AutoRelayCheck(void) @@ -4938,7 +4938,7 @@ bool TMoverParameters::AutoRelayCheck(void) bool ARFASI2 = false; // sprawdzenie wszystkich warunkow (AutoRelayFlag, AutoSwitch, Im 2.1) && (TrainType != dt_EZT)) || @@ -4959,12 +4959,12 @@ bool TMoverParameters::AutoRelayCheck(void) ARFASI = (!AutoRelayFlag) || ((RList[MainCtrlActualPos].AutoSwitch) && (abs(Im) < Imin)) || ((!RList[MainCtrlActualPos].AutoSwitch) && (RList[MainCtrlActualPos].Relay < MainCtrlPos)); // wszystkie warunki w jednym - // brak PSR na tej pozycji dziaa PSR i prd poniej progu - // na tej pozycji nie dziaa PSR i pozycja walu ponizej - // chodzi w tym wszystkim o to, eby mona byo zatrzyma rozruch na - // jakiej pozycji wpisujc Autoswitch=0 i wymusza - // przejcie dalej przez danie nastawnika na dalsz pozycj - tak to do - // tej pory dziaao i na tym si opiera fizyka ET22-2k + // brak PSR na tej pozycji działa PSR i prąd poniżej progu + // na tej pozycji nie działa PSR i pozycja walu ponizej + // chodzi w tym wszystkim o to, żeby można było zatrzymać rozruch na + // jakiejś pozycji wpisując Autoswitch=0 i wymuszać + // przejście dalej przez danie nastawnika na dalszą pozycję - tak to do + // tej pory działało i na tym się opiera fizyka ET22-2k { if (StLinFlag) { @@ -4998,7 +4998,7 @@ bool TMoverParameters::AutoRelayCheck(void) if (RList[MainCtrlActualPos + 1].Bn > 1) { return false; // nie poprawiamy przy konwersji - // return ARC;// bbylo exit; //Ra: to powoduje, e EN57 nie wycza si przy + // return ARC;// bbylo exit; //Ra: to powoduje, że EN57 nie wyłącza się przy // IminLo } // main bez samoczynnego rozruchu @@ -5037,7 +5037,7 @@ bool TMoverParameters::AutoRelayCheck(void) } else ; - else // nie ET22 z waem grupowym + else // nie ET22 z wałem grupowym { MainCtrlActualPos++; OK = true; @@ -5071,7 +5071,7 @@ bool TMoverParameters::AutoRelayCheck(void) } else if (LastRelayTime > CtrlDownDelay) { - if (TrainType != dt_EZT) // tutaj powinien by tryb sterowania waem + if (TrainType != dt_EZT) // tutaj powinien być tryb sterowania wałem { MainCtrlActualPos--; OK = true; @@ -5195,7 +5195,7 @@ bool TMoverParameters::PantFront(bool State) PF = false; PantFrontStart = 1; SendCtrlToNext("PantFront", 0, CabNo); - //{Ra: nie ma potrzeby opuszcza obydwu na raz, jak mozemy kady osobno + //{Ra: nie ma potrzeby opuszczać obydwu na raz, jak mozemy każdy osobno // if (TrainType == dt_EZT) && (ActiveCab == 1) // { // PantRearUp = false; @@ -5250,7 +5250,7 @@ bool TMoverParameters::PantRear(bool State) // ************************************************************************************************* // Q: 20160715 -// Zmienia parametr do ktrego dy sprzgo +// Zmienia parametr do którego dąży sprzęgło // ************************************************************************************************* bool TMoverParameters::dizel_EngageSwitch(double state) { @@ -5266,7 +5266,7 @@ bool TMoverParameters::dizel_EngageSwitch(double state) // ************************************************************************************************* // Q: 20160715 -// Zmienia parametr do ktrego dy sprzgo +// Zmienia parametr do którego dąży sprzęgło // ************************************************************************************************* bool TMoverParameters::dizel_EngageChange(double dt) { @@ -5289,7 +5289,7 @@ bool TMoverParameters::dizel_EngageChange(double dt) DEC = true; dizel_engage = dizel_engagestate; } - // else OK:=false; //ju jest false + // else OK:=false; //już jest false } else { @@ -5302,7 +5302,7 @@ bool TMoverParameters::dizel_EngageChange(double dt) // ************************************************************************************************* // Q: 20160715 -// Automatyczna zmiana biegw gdy prdko przekroczy wideki +// Automatyczna zmiana biegów gdy prędkość przekroczy widełki // ************************************************************************************************* bool TMoverParameters::dizel_AutoGearCheck(void) { @@ -5449,7 +5449,7 @@ double TMoverParameters::dizel_fillcheck(int mcp) // ************************************************************************************************* // Q: 20160715 -// Oblicza moment siy wytwarzany przez silnik spalinowy +// Oblicza moment siły wytwarzany przez silnik spalinowy // ************************************************************************************************* double TMoverParameters::dizel_Momentum(double dizel_fill, double n, double dt) { // liczy moment sily wytwarzany przez silnik spalinowy} @@ -5511,61 +5511,61 @@ double TMoverParameters::dizel_Momentum(double dizel_fill, double n, double dt) // ************************************************************************************************* // Q: 20160713 -// Test zakoczenia zaadunku / rozadunku +// Test zakończenia załadunku / rozładunku // ************************************************************************************************* bool TMoverParameters::LoadingDone(double LSpeed, std::string LoadInit) { - // test zakoczenia zaadunku/rozadunku + // test zakończenia załadunku/rozładunku long LoadChange = 0; bool LD = false; // ClearPendingExceptions; // zabezpieczenie dla Trunc() - // LoadingDone:=false; //nie zakoczone - if (!LoadInit.empty()) // nazwa adunku niepusta + // LoadingDone:=false; //nie zakończone + if (!LoadInit.empty()) // nazwa ładunku niepusta { if (Load > MaxLoad) - LoadChange = abs(long(LSpeed * LastLoadChangeTime / 2.0)); // przeadowanie? + LoadChange = abs(long(LSpeed * LastLoadChangeTime / 2.0)); // przeładowanie? else LoadChange = abs(long(LSpeed * LastLoadChangeTime)); - if (LSpeed < 0) // gdy rozadunek + if (LSpeed < 0) // gdy rozładunek { - LoadStatus = 2; // trwa rozadunek (wczenie naliczania czasu) - if (LoadChange != 0) // jeli co przeadowano + LoadStatus = 2; // trwa rozładunek (włączenie naliczania czasu) + if (LoadChange != 0) // jeśli coś przeładowano { - LastLoadChangeTime = 0; // naliczony czas zosta zuyty - Load -= LoadChange; // zmniejszenie iloci adunku + LastLoadChangeTime = 0; // naliczony czas został zużyty + Load -= LoadChange; // zmniejszenie ilości ładunku CommandIn.Value1 = - CommandIn.Value1 - LoadChange; // zmniejszenie iloci do rozadowania + CommandIn.Value1 - LoadChange; // zmniejszenie ilości do rozładowania if (Load < 0) - Load = 0; //adunek nie moe by ujemny - if ((Load == 0) || (CommandIn.Value1 < 0)) // pusto lub rozadowano dan ilo - LoadStatus = 4; // skoczony rozadunek + Load = 0; //ładunek nie może być ujemny + if ((Load == 0) || (CommandIn.Value1 < 0)) // pusto lub rozładowano żądaną ilość + LoadStatus = 4; // skończony rozładunek if (Load == 0) - LoadType.clear(); // jak nic nie ma, to nie ma te nazwy + LoadType.clear(); // jak nic nie ma, to nie ma też nazwy } } - else if (LSpeed > 0) // gdy zaadunek + else if (LSpeed > 0) // gdy załadunek { - LoadStatus = 1; // trwa zaadunek (wczenie naliczania czasu) - if (LoadChange != 0) // jeli co przeadowano + LoadStatus = 1; // trwa załadunek (włączenie naliczania czasu) + if (LoadChange != 0) // jeśli coś przeładowano { - LastLoadChangeTime = 0; // naliczony czas zosta zuyty + LastLoadChangeTime = 0; // naliczony czas został zużyty LoadType = LoadInit; // nazwa - Load += LoadChange; // zwikszenie adunku + Load += LoadChange; // zwiększenie ładunku CommandIn.Value1 = CommandIn.Value1 - LoadChange; if ((Load >= MaxLoad * (1.0 + OverLoadFactor)) || (CommandIn.Value1 < 0)) - LoadStatus = 4; // skoczony zaadunek + LoadStatus = 4; // skończony załadunek } } else - LoadStatus = 4; // zerowa prdko zmiany, to koniec + LoadStatus = 4; // zerowa prędkość zmiany, to koniec } return (LoadStatus >= 4); } // ************************************************************************************************* // Q: 20160713 -// Zwraca informacje o dziaajcej blokadzie drzwi +// Zwraca informacje o działającej blokadzie drzwi // ************************************************************************************************* bool TMoverParameters::DoorBlockedFlag(void) { @@ -5644,7 +5644,7 @@ bool TMoverParameters::DoorRight(bool State) // ************************************************************************************************* // Q: 20160713 -// Przesuwa pojazd o podan warto w bok wzgldem toru (dla samochodw) +// Przesuwa pojazd o podaną wartość w bok względem toru (dla samochodów) // ************************************************************************************************* bool TMoverParameters::ChangeOffsetH(double DeltaOffset) { @@ -5654,7 +5654,7 @@ bool TMoverParameters::ChangeOffsetH(double DeltaOffset) OffsetTrackH = OffsetTrackH + DeltaOffset; // if (abs(OffsetTrackH) > (RunningTrack.Width / 1.95 - TrackW / 2.0)) if (abs(OffsetTrackH) > - (0.5 * (RunningTrack.Width - Dim.W) - 0.05)) // Ra: moe p pojazdu od brzegu? + (0.5 * (RunningTrack.Width - Dim.W) - 0.05)) // Ra: może pół pojazdu od brzegu? COH = false; // kola na granicy drogi else COH = true; @@ -5667,7 +5667,7 @@ bool TMoverParameters::ChangeOffsetH(double DeltaOffset) // ************************************************************************************************* // Q: 20160713 -// Testuje zmienn (narazie tylko 0) i na podstawie uszkodzenia zwraca informacj tekstow +// Testuje zmienną (narazie tylko 0) i na podstawie uszkodzenia zwraca informację tekstową // ************************************************************************************************* std::string TMoverParameters::EngineDescription(int what) { @@ -6015,7 +6015,7 @@ bool TMoverParameters::readRLIST(int ln, std::string line) RList[k].Bn = atoi(x[2].c_str()); // int RList[k].Mn = atoi(x[3].c_str()); // int RList[k].AutoSwitch = (bool)atoi(x[4].c_str()); // p4.ToInt(); - RList[k].ScndAct = s == 6 ? atoi(x[5].c_str()) : 0; //jeli ma boczniki w nastawniku + RList[k].ScndAct = s == 6 ? atoi(x[5].c_str()) : 0; //jeśli ma boczniki w nastawniku //--WriteLog("RLIST: " + p0 + "," + p1 + "," + p2 + "," + p3 + "," + p4); } delete[] xxx; @@ -6257,28 +6257,28 @@ void TMoverParameters::PowerParamDecode(std::string lines, std::string prefix, PowerParamDecode.CollectorParameters.CollectorsNo = (jCollectorsNo); PowerParamDecode.CollectorParameters.MinH = (jMinH); PowerParamDecode.CollectorParameters.MaxH = (jMaxH); - PowerParamDecode.CollectorParameters.CSW = (jCSW); // szeroko czci roboczej + PowerParamDecode.CollectorParameters.CSW = (jCSW); // szerokość części roboczej PowerParamDecode.CollectorParameters.MaxV = (jMaxVoltage); - // s:=jMinV; //napicie rozczajce WS + // s:=jMinV; //napięcie rozłączające WS if (jMinV == 0) PowerParamDecode.CollectorParameters.MinV = 0.5 * PowerParamDecode.CollectorParameters.MaxV; // gdyby parametr nie podany else PowerParamDecode.CollectorParameters.MinV = (jMinV); - //-s:=ExtractKeyWord(lines,'InsetV='); //napicie wymagane do zaczenia WS + //-s:=ExtractKeyWord(lines,'InsetV='); //napięcie wymagane do załączenia WS //-if s='' then //- InsetV:=0.6*MaxV //gdyby parametr nie podany //-else //- InsetV:=s2rE(DUE(s)); - // s:=ExtractKeyWord(lines,'MinPress='); //cinienie rozczajce WS + // s:=ExtractKeyWord(lines,'MinPress='); //ciśnienie rozłączające WS if (jMinPress == 0) - PowerParamDecode.CollectorParameters.MinPress = 2.0; // domylnie 2 bary do zaczenia + PowerParamDecode.CollectorParameters.MinPress = 2.0; // domyślnie 2 bary do załączenia // WS else PowerParamDecode.CollectorParameters.MinPress = (jMinPress); - // s:=ExtractKeyWord(lines,'MaxPress='); //maksymalne cinienie za reduktorem + // s:=ExtractKeyWord(lines,'MaxPress='); //maksymalne ciśnienie za reduktorem if (jMaxPress == 0) PowerParamDecode.CollectorParameters.MaxPress = 5.0 + 0.001 * (Random(50) - Random(50)); else @@ -6715,7 +6715,7 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) IminHi = 2; Imin = 1; } - else // wirtualne wartoci dla rozrzdczego + else // wirtualne wartości dla rozrządczego if (aType == "ET41") TrainType = dt_ET41; else if (aType == "ET42") @@ -6750,9 +6750,9 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) if (cFloor == -1) { if (Dim.H <= 2.0) - Floor = Dim.H; // gdyby nie byo parametru, lepsze to ni zero + Floor = Dim.H; // gdyby nie było parametru, lepsze to niż zero else - Floor = 0.0; // zgodno wsteczna + Floor = 0.0; // zgodność wsteczna } else Floor = cFloor; @@ -6771,12 +6771,12 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) ADist = dAd; BDist = dBd; - if (WheelDiameterL == -1) // gdyby nie byo parametru... - WheelDiameterL = WheelDiameter; //... lepsze to ni zero + if (WheelDiameterL == -1) // gdyby nie było parametru... + WheelDiameterL = WheelDiameter; //... lepsze to niż zero else WheelDiameterL = dDl; - if (WheelDiameterT == -1) // gdyby nie byo parametru... - WheelDiameterT = WheelDiameter; //... lepsze to ni zero + if (WheelDiameterT == -1) // gdyby nie było parametru... + WheelDiameterT = WheelDiameter; //... lepsze to niż zero else WheelDiameterT = dDt; @@ -6888,7 +6888,7 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) CntrlPipePress = eHiPP; else CntrlPipePress = - 5.0 + 0.001 * (Random(10) - Random(10)); // Ra 2014-07: troch niedokadnoci + 5.0 + 0.001 * (Random(10) - Random(10)); // Ra 2014-07: trochę niedokładności HighPipePress = CntrlPipePress; if (eHiPP != 0) @@ -6912,10 +6912,10 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) CompressorPower = 3; else if (eCompressorPower == "Coupler1") CompressorPower = 4; - else // wczana w silnikowym EZT z przodu + else // włączana w silnikowym EZT z przodu if (eCompressorPower == "Coupler2") CompressorPower = 5; - else // wczana w silnikowym EZT z tyu + else // włączana w silnikowym EZT z tyłu if (eCompressorPower == "Main") CompressorPower = 0; @@ -7155,7 +7155,7 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) if (hAwareMinSpeed > 0) SecuritySystem.AwareMinSpeed = hAwareMinSpeed; else - SecuritySystem.AwareMinSpeed = 0.1 * Vmax; // domylnie 10% Vmax + SecuritySystem.AwareMinSpeed = 0.1 * Vmax; // domyślnie 10% Vmax if (hSoundSignalDelay > 0) SecuritySystem.SoundSignalDelay = hSoundSignalDelay; if (hEmergencyBrakeDelay > 0) @@ -7181,7 +7181,7 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) if ((EnginePowerSource.SourceType == Generator) && (EnginePowerSource.GeneratorEngine == WheelsDriven)) ConversionError = -666; // perpetuum mobile?} - if (Power == 0) // jeli nie ma mocy, np. rozrzdcze EZT + if (Power == 0) // jeśli nie ma mocy, np. rozrządcze EZT EnginePowerSource.SourceType = NotDefined; // to silnik nie ma zasilania } else @@ -7347,7 +7347,7 @@ bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir) if ((TestFlag(BrakeDelays, bdelay_G)) && ((!TestFlag(BrakeDelays, bdelay_R)) || - (Power > 1))) // ustalanie srednicy przewodu glownego (lokomotywa lub napdowy + (Power > 1))) // ustalanie srednicy przewodu glownego (lokomotywa lub napędowy Spg = 0.792; else Spg = 0.507; @@ -7552,8 +7552,8 @@ bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir) PantFront(true); PantRear(true); MainSwitch(true); - ActiveDir = 0; // Dir; //nastawnik kierunkowy - musi by ustawiane osobno! - DirAbsolute = ActiveDir * CabNo; // kierunek jazdy wzgldem sprzgw + ActiveDir = 0; // Dir; //nastawnik kierunkowy - musi być ustawiane osobno! + DirAbsolute = ActiveDir * CabNo; // kierunek jazdy względem sprzęgów LimPipePress = CntrlPipePress; } else @@ -7601,12 +7601,12 @@ bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir) // ************************************************************************************************* // Q: 20160714 -// Wstawia komend z parametrem, od sprzgu i w lokalizacji do pojazdu +// Wstawia komendę z parametrem, od sprzęgu i w lokalizacji do pojazdu // ************************************************************************************************* void TMoverParameters::PutCommand(std::string NewCommand, double NewValue1, double NewValue2, const TLocation &NewLocation) { - CommandLast = NewCommand; // zapamitanie komendy + CommandLast = NewCommand; // zapamiętanie komendy CommandIn.Command = NewCommand; CommandIn.Value1 = NewValue1; @@ -7617,7 +7617,7 @@ void TMoverParameters::PutCommand(std::string NewCommand, double NewValue1, doub // ************************************************************************************************* // Q: 20160714 -// Pobiera komend z parametru funkcji oraz warto zmiennej jako return +// Pobiera komendę z parametru funkcji oraz wartość zmiennej jako return // ************************************************************************************************* double TMoverParameters::GetExternalCommand(std::string &Command) { @@ -7628,7 +7628,7 @@ double TMoverParameters::GetExternalCommand(std::string &Command) // ************************************************************************************************* // Q: 20160714 // GF: 20161117 -// rozsyanie komend do caego skadu +// rozsyłanie komend do całego składu // ************************************************************************************************* bool TMoverParameters::SendCtrlBroadcast(std::string CtrlCommand, double ctrlvalue) { @@ -7662,7 +7662,7 @@ bool TMoverParameters::SetInternalCommand(std::string NewCommand, double NewValu CommandIn.Value1 = NewValue1; CommandIn.Value2 = NewValue2; SIC = true; - LastLoadChangeTime = 0; // zerowanie czasu (roz)adowania + LastLoadChangeTime = 0; // zerowanie czasu (roz)ładowania } return SIC; @@ -7670,25 +7670,25 @@ bool TMoverParameters::SetInternalCommand(std::string NewCommand, double NewValu // ************************************************************************************************* // Q: 20160714 -// wysyanie komendy w kierunku dir (1=przd, -1=ty) do kolejnego pojazdu (jednego) +// wysyłanie komendy w kierunku dir (1=przód, -1=tył) do kolejnego pojazdu (jednego) // ************************************************************************************************* bool TMoverParameters::SendCtrlToNext(std::string CtrlCommand, double ctrlvalue, double dir) { bool OK; - int d; // numer sprzgu w kierunku ktrego wysyamy + int d; // numer sprzęgu w kierunku którego wysyłamy - // Ra: by problem z propagacj, jeli w skadzie jest pojazd wstawiony odwrotnie - // Ra: problem jest rwnie, jeli AI bdzie na kocu skadu + // Ra: był problem z propagacją, jeśli w składzie jest pojazd wstawiony odwrotnie + // Ra: problem jest również, jeśli AI będzie na końcu składu OK = (dir != 0); // and Mains; - d = (1 + Sign(dir)) / 2; // dir=-1=>d=0, dir=1=>d=1 - wysyanie tylko w ty - if (OK) // musi by wybrana niezerowa kabina + d = (1 + Sign(dir)) / 2; // dir=-1=>d=0, dir=1=>d=1 - wysyłanie tylko w tył + if (OK) // musi być wybrana niezerowa kabina if (TestFlag(Couplers[d].CouplingFlag, ctrain_controll)) - if (Couplers[d].ConnectedNr != d) // jeli ten nastpny jest zgodny z aktualnym + if (Couplers[d].ConnectedNr != d) // jeśli ten nastpęny jest zgodny z aktualnym { if (Couplers[d].Connected->SetInternalCommand(CtrlCommand, ctrlvalue, dir)) OK = (Couplers[d].Connected->RunInternalCommand() && OK); // tu jest rekurencja } - else // jeli nastpny jest ustawiony przeciwnie, zmieniamy kierunek + else // jeśli następny jest ustawiony przeciwnie, zmieniamy kierunek if (Couplers[d].Connected->SetInternalCommand(CtrlCommand, ctrlvalue, -dir)) OK = (Couplers[d].Connected->RunInternalCommand() && OK); // tu jest rekurencja return OK; @@ -7697,14 +7697,14 @@ bool TMoverParameters::SendCtrlToNext(std::string CtrlCommand, double ctrlvalue, // ************************************************************************************************* // Q: 20160723 // ************************************************************************************************* -// wysanie komendy otrzymanej z kierunku CValue2 (wzgldem sprzgw: 1=przod,-1=ty) -// Ra: Jest tu problem z rekurencj. Trzeba by oddzieli wykonywanie komend od mechanizmu -// ich propagacji w skadzie. Osobnym problemem moe by propagacja tylko w jedn stron. -// Jeli jaki czon jest wstawiony odwrotnie, to rwnie odwrotnie musi wykonywa -// komendy zwizane z kierunkami (PantFront, PantRear, DoorLeft, DoorRight). -// Komenda musi by zdefiniowana tutaj, a jeli si wywouje funkcj, to ona nie moe -// sama przesya do kolejnych pojazdw. Naley te si zastanowi, czy dla uzyskania -// jakiej zmiany (np. IncMainCtrl) lepiej wywoa funkcj, czy od razu wysa komend. +// wysłanie komendy otrzymanej z kierunku CValue2 (względem sprzęgów: 1=przod,-1=tył) +// Ra: Jest tu problem z rekurencją. Trzeba by oddzielić wykonywanie komend od mechanizmu +// ich propagacji w składzie. Osobnym problemem może być propagacja tylko w jedną stronę. +// Jeśli jakiś człon jest wstawiony odwrotnie, to również odwrotnie musi wykonywać +// komendy związane z kierunkami (PantFront, PantRear, DoorLeft, DoorRight). +// Komenda musi być zdefiniowana tutaj, a jeśli się wywołuje funkcję, to ona nie może +// sama przesyłać do kolejnych pojazdów. Należy też się zastanowić, czy dla uzyskania +// jakiejś zmiany (np. IncMainCtrl) lepiej wywołać funkcję, czy od razu wysłać komendę. bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CValue2) { bool OK; @@ -7742,14 +7742,14 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV else if (Command == "Brake") // youBy - jak sie EP hamuje, to trza sygnal wyslac... { Hamulec->SetEPS(CValue1); - // fBrakeCtrlPos:=BrakeCtrlPos; //to powinnno by w jednym miejscu, aktualnie w C++!!! + // fBrakeCtrlPos:=BrakeCtrlPos; //to powinnno być w jednym miejscu, aktualnie w C++!!! BrakePressureActual = BrakePressureTable[BrakeCtrlPos]; OK = SendCtrlToNext(Command, CValue1, CValue2); } // youby - odluzniacz hamulcow, przyda sie else if (Command == "BrakeReleaser") { - OK = BrakeReleaser(Round(CValue1)); // samo si przesya dalej - // OK:=SendCtrlToNext(command,CValue1,CValue2); //to robio kaskad 2^n + OK = BrakeReleaser(Round(CValue1)); // samo się przesyła dalej + // OK:=SendCtrlToNext(command,CValue1,CValue2); //to robiło kaskadę 2^n } else if (Command == "MainSwitch") { @@ -7773,7 +7773,7 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV { // OK:=Power>0.01; switch (static_cast(CValue1 * CValue2)) - { // CValue2 ma zmieniany znak przy niezgodnoci sprzgw + { // CValue2 ma zmieniany znak przy niezgodności sprzęgów case 1: CabNo = 1; case -1: @@ -7821,7 +7821,7 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV if ((Battery) && (ActiveCab != 0) /*or (TrainType=dt_EZT)*/) SecuritySystem.Status = SecuritySystem.Status || s_waiting; // aktywacja czuwaka else - SecuritySystem.Status = 0; // wyczenie czuwaka + SecuritySystem.Status = 0; // wyłączenie czuwaka OK = SendCtrlToNext(Command, CValue1, CValue2); } // else if command='EpFuseSwitch' then {NBMX} @@ -7839,7 +7839,7 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV OK = SendCtrlToNext(Command, CValue1, CValue2); } else if (Command == "DoorOpen") /*NBMX*/ - { // Ra: uwzgldni trzeba jeszcze zgodno sprzgw + { // Ra: uwzględnić trzeba jeszcze zgodność sprzęgów if ((CValue2 > 0)) { // normalne ustawienie pojazdu if ((CValue1 == 1) || (CValue1 == 3)) @@ -7857,7 +7857,7 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV OK = SendCtrlToNext(Command, CValue1, CValue2); } else if (Command == "DoorClose") /*NBMX*/ - { // Ra: uwzgldni trzeba jeszcze zgodno sprzgw + { // Ra: uwzględnić trzeba jeszcze zgodność sprzęgów if ((CValue2 > 0)) { // normalne ustawienie pojazdu if ((CValue1 == 1) || (CValue1 == 3)) @@ -7875,8 +7875,8 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV OK = SendCtrlToNext(Command, CValue1, CValue2); } else if (Command == "PantFront") /*Winger 160204*/ - { // Ra: uwzgldni trzeba jeszcze zgodno sprzgw - // Czemu EZT ma by traktowane inaczej? Ukrotnienie ma, a czon moe by odwrcony + { // Ra: uwzględnić trzeba jeszcze zgodność sprzęgów + // Czemu EZT ma być traktowane inaczej? Ukrotnienie ma, a człon może być odwrócony if ((TrainType == dt_EZT)) { //'ezt' if ((CValue1 == 1)) @@ -7891,7 +7891,7 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV } } else - { // nie 'ezt' - odwrotne ustawienie pantografw: ^-.-^ zamiast ^-.^- + { // nie 'ezt' - odwrotne ustawienie pantografów: ^-.-^ zamiast ^-.^- if ((CValue1 == 1)) if ((TestFlag(Couplers[1].CouplingFlag, ctrain_controll) && (CValue2 == 1)) || (TestFlag(Couplers[0].CouplingFlag, ctrain_controll) && (CValue2 == -1))) @@ -7920,7 +7920,7 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV OK = SendCtrlToNext(Command, CValue1, CValue2); } else if (Command == "PantRear") /*Winger 160204, ABu 310105 i 030305*/ - { // Ra: uwzgldni trzeba jeszcze zgodno sprzgw + { // Ra: uwzględnić trzeba jeszcze zgodność sprzęgów if ((TrainType == dt_EZT)) { /*'ezt'*/ if ((CValue1 == 1)) @@ -8000,10 +8000,10 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV OK = false; } else if (Command == "CabSignal") /*SHP,Indusi*/ - { // Ra: to powinno dziaa tylko w czonie obsadzonym + { // Ra: to powinno działać tylko w członie obsadzonym if (/*(TrainType=dt_EZT)or*/ (ActiveCab != 0) && (Battery) && TestFlag(SecuritySystem.SystemType, - 2)) // jeli kabina jest obsadzona (silnikowy w EZT?) + 2)) // jeśli kabina jest obsadzona (silnikowy w EZT?) /*?*/ /* WITH SecuritySystem */ { SecuritySystem.VelocityAllowed = floor(CValue1); @@ -8012,14 +8012,14 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV SetFlag(SecuritySystem.Status, s_active); } // else OK:=false; - OK = true; // true, gdy mona usun komend + OK = true; // true, gdy można usunąć komendę } /*naladunek/rozladunek*/ else if (Pos("Load=", Command) == 1) { - OK = false; // bdzie powtarzane a si zaaduje + OK = false; // będzie powtarzane aż się załaduje if ((Vel == 0) && (MaxLoad > 0) && - (Load < MaxLoad * (1.0 + OverLoadFactor))) // czy mona adowac? + (Load < MaxLoad * (1.0 + OverLoadFactor))) // czy można ładowac? if (Distance(Loc, CommandIn.Location, Dim, Dim) < 10) // ten peron/rampa { testload = ToLower(DUE(Command)); @@ -8030,23 +8030,23 @@ bool TMoverParameters::RunCommand(std::string Command, double CValue1, double CV } else if (Pos("UnLoad=", Command) == 1) { - OK = false; // bdzie powtarzane a si rozaduje + OK = false; // będzie powtarzane aż się rozładuje if ((Vel == 0) && (Load > 0)) // czy jest co rozladowac? if (Distance(Loc, CommandIn.Location, Dim, Dim) < 10) // ten peron { - testload = DUE(Command); // zgodno nazwy adunku z CHK + testload = DUE(Command); // zgodność nazwy ładunku z CHK if (LoadType == testload) /*mozna to rozladowac*/ OK = LoadingDone(-Min0R(CValue2, LoadSpeed), testload); } // if OK then LoadStatus:=0; } - return OK; // dla true komenda bdzie usunita, dla false wykonana ponownie + return OK; // dla true komenda będzie usunięta, dla false wykonana ponownie } // ************************************************************************************************* // Q: 20160714 -// Uruchamia funkcj RunCommand a do skutku. Jeli bdzie pozytywny to kasuje komend. +// Uruchamia funkcję RunCommand aż do skutku. Jeśli będzie pozytywny to kasuje komendę. // ************************************************************************************************* bool TMoverParameters::RunInternalCommand(void) { @@ -8075,7 +8075,7 @@ bool TMoverParameters::RunInternalCommand(void) // ************************************************************************************************* // Q: 20160714 -// Zwraca warto natenia prdu na wybranym amperomierzu. Podfunkcja do ShowCurrent. +// Zwraca wartość natężenia prądu na wybranym amperomierzu. Podfunkcja do ShowCurrent. // ************************************************************************************************* int TMoverParameters::ShowCurrentP(int AmpN) { @@ -8084,20 +8084,20 @@ int TMoverParameters::ShowCurrentP(int AmpN) // ClearPendingExceptions; Grupowy = ((DelayCtrlFlag) && (TrainType == dt_ET22)); // przerzucanie walu grupowego w ET22; - Bn = RList[MainCtrlActualPos].Bn; // ile rwnolegych gazi silnikw + Bn = RList[MainCtrlActualPos].Bn; // ile równoległych gałęzi silników if ((DynamicBrakeType == dbrake_automatic) && (DynamicBrakeFlag)) Bn = 2; if (Power > 0.01) { - if (AmpN > 0) // poda prd w gazi + if (AmpN > 0) // podać prąd w gałęzi { if ((Bn < AmpN) || ((Grupowy) && (AmpN == Bn - 1))) return 0; else // normalne podawanie pradu return floor(abs(Im)); } - else // poda cakowity + else // podać całkowity return floor(abs(Itot)); } else // pobor pradu jezeli niema mocy diff --git a/McZapkie/Oerlikon_ESt.cpp b/McZapkie/Oerlikon_ESt.cpp index 467aebda..3aedf38a 100644 --- a/McZapkie/Oerlikon_ESt.cpp +++ b/McZapkie/Oerlikon_ESt.cpp @@ -129,7 +129,7 @@ void TRapid::Update(double dt) BrakeRes->Flow(-dV); } -// ------ PRZEKADNIK CIGY ------ +// ------ PRZEKŁADNIK CIĄGŁY ------ void TPrzekCiagly::SetMult(double m) { @@ -157,7 +157,7 @@ void TPrzekCiagly::Update(double dt) BrakeRes->Flow(-dV); } -// ------ PRZEKADNIK CIGY ------ +// ------ PRZEKŁADNIK CIĄGŁY ------ void TPrzek_PZZ::SetLBP(double P) { @@ -514,7 +514,7 @@ void TNESt3::SetSize(int size, std::string params) // ustawianie dysz (rozmiaru Przekladniki[3] = new TPrzeciwposlizg(); if (params.find("-ED") != std::string::npos) { - delete Przekladniki[3]; // tutaj ma by destruktor + delete Przekladniki[3]; // tutaj ma być destruktor Przekladniki[1]->SetRapidParams(2, 18); Przekladniki[3] = new TPrzekED(); } diff --git a/McZapkie/Oerlikon_ESt.h b/McZapkie/Oerlikon_ESt.h index 90bc6d18..c55ac251 100644 --- a/McZapkie/Oerlikon_ESt.h +++ b/McZapkie/Oerlikon_ESt.h @@ -189,7 +189,7 @@ class TNESt3 : public TBrake { private: double Nozzles[dMAX]; // dysze - TReservoir *CntrlRes; // zbiornik sterujcy + TReservoir *CntrlRes; // zbiornik sterujący double BVM; // przelozenie PG-CH // ValveFlag: byte; //polozenie roznych zaworkow bool Zamykajacy; // pamiec zaworka zamykajacego diff --git a/McZapkie/hamulce.cpp b/McZapkie/hamulce.cpp index 1cba8862..0c766e48 100644 --- a/McZapkie/hamulce.cpp +++ b/McZapkie/hamulce.cpp @@ -180,7 +180,7 @@ double TBrakeCyl::pa() return P() * 0.1; } -/* NOWSZA WERSJA - maksymalne cinienie to ok. 4,75 bar, co powoduje +/* NOWSZA WERSJA - maksymalne ciśnienie to ok. 4,75 bar, co powoduje // problemy przy rapidzie w lokomotywach, gdyz jest3 // osiagany wierzcholek paraboli function TBrakeCyl.P:real; @@ -328,7 +328,7 @@ double TBrake::GetBCP() return BrakeCyl->P(); } -// cinienie sterujce hamowaniem elektro-dynamicznym +// ciśnienie sterujące hamowaniem elektro-dynamicznym double TBrake::GetEDBCP() { return 0; @@ -1280,7 +1280,7 @@ double TLSt::GetPF(double PP, double dt, double Vel) if (EDFlag > 0.2) temp = 10000; - // powtarzacz podwojny zawor zwrotny + // powtarzacz — podwojny zawor zwrotny temp = Max0R(((CVP - BCP) * BVM + ASBP * int((BrakeStatus & b_asb) == b_asb)) / temp, LBP); // luzowanie CH if ((BrakeCyl->P() > temp + 0.005) || (temp < 0.28)) @@ -1461,7 +1461,7 @@ double TEStED::GetPF(double PP, double dt, double Vel) // if EDFlag then temp:=1000; // temp:=temp/(1-); - // powtarzacz podwojny zawor zwrotny + // powtarzacz — podwojny zawor zwrotny temp = Max0R(LoadC * BCP / temp * Min0R(Max0R(1 - EDFlag, 0), 1), LBP); if ((BrakeCyl->P() > temp)) diff --git a/McZapkie/hamulce.h b/McZapkie/hamulce.h index 160085a6..175bd258 100644 --- a/McZapkie/hamulce.h +++ b/McZapkie/hamulce.h @@ -25,13 +25,13 @@ moze jeszcze jakis SW /* Zrobione: ESt3, ESt3AL2, ESt4R, LSt, FV4a, FD1, EP2, prosty westinghouse -duzo wersji eliwa +duzo wersji żeliwa KE Tarcze od 152A Magnetyki (implementacja w mover.pas) Matrosow 394 H14K1 (zasadniczy), H1405 (pomocniczy), St113 (ep) -Knorr/West EP - eby by +Knorr/West EP - żeby był */ #include "friction.h" // Pascal unit @@ -77,7 +77,7 @@ static int const s_fv4a_t = 4; // wyplyw z czasowego /*pary cierne*/ static int const bp_P10 = 0; -static int const bp_P10Bg = 2; //eliwo fosforowe P10 +static int const bp_P10Bg = 2; //żeliwo fosforowe P10 static int const bp_P10Bgu = 1; static int const bp_LLBg = 4; // komp. b.n.t. static int const bp_LLBgu = 3; @@ -89,10 +89,10 @@ static int const bp_D1 = 9; // tarcze static int const bp_D2 = 10; static int const bp_FR513 = 11; // Frenoplast FR513 static int const bp_Cosid = 12; // jakistam kompozyt :D -static int const bp_PKPBg = 13; //eliwo PKP +static int const bp_PKPBg = 13; //żeliwo PKP static int const bp_PKPBgu = 14; static int const bp_MHS = 128; // magnetyczny hamulec szynowy -static int const bp_P10yBg = 15; //eliwo fosforowe P10 +static int const bp_P10yBg = 15; //żeliwo fosforowe P10 static int const bp_P10yBgu = 16; static int const bp_FR510 = 17; // Frenoplast FR510 @@ -111,10 +111,10 @@ static int const bh_NP = 4; // odciecie - podwojna trakcja static int const bh_MB = 5; // odciecie - utrzymanie stopnia hamowania/pierwszy 1 stopien hamowania static int const bh_FB = 6; // pelne static int const bh_EB = 7; // nagle -static int const bh_EPR = 8; // ep - luzowanie //pelny luz dla ep ktowego +static int const bh_EPR = 8; // ep - luzowanie //pelny luz dla ep kątowego static int const bh_EPN = 9; // ep - utrzymanie //jesli rowne luzowaniu, wtedy sterowanie // przyciskiem -static int const bh_EPB = 10; // ep - hamowanie //pelne hamowanie dla ep ktowego +static int const bh_EPB = 10; // ep - hamowanie //pelne hamowanie dla ep kątowego static double const SpgD = 0.7917; static double const SpO = 0.5067; // przekroj przewodu 1" w l/m @@ -265,7 +265,7 @@ class TESt : public TBrake { private: protected: - TReservoir *CntrlRes; // zbiornik sterujcy + TReservoir *CntrlRes; // zbiornik sterujący double BVM; // przelozenie PG-CH public: @@ -357,7 +357,7 @@ class TLSt : public TESt4R { private: - // double CylFlowSpeed[2][2]; // zmienna nie uywana + // double CylFlowSpeed[2][2]; // zmienna nie używana protected: double LBP; // cisnienie hamulca pomocniczego @@ -447,7 +447,7 @@ class TCV1 : public TBrake double BVM; // przelozenie PG-CH protected: - TReservoir *CntrlRes; // zbiornik sterujcy + TReservoir *CntrlRes; // zbiornik sterujący public: void Init(double PP, double HPP, double LPP, double BP, int BDF) /*override*/; @@ -508,13 +508,13 @@ class TCV1L_TR : public TCV1 } }; -class TKE : public TBrake // Knorr Einheitsbauart jeden do wszystkiego +class TKE : public TBrake // Knorr Einheitsbauart — jeden do wszystkiego { private: bool RapidStatus; TReservoir *ImplsRes; // komora impulsowa - TReservoir *CntrlRes; // zbiornik sterujcy + TReservoir *CntrlRes; // zbiornik sterujący TReservoir *Brak2Res; // zbiornik pomocniczy 2 double BVM; // przelozenie PG-CH double TareM; @@ -577,7 +577,7 @@ class TFV4a : public TDriverHandle private: double CP; double TP; - double RP; // zbiornik sterujcy, czasowy, redukcyjny + double RP; // zbiornik sterujący, czasowy, redukcyjny public: double GetPF(double i_bcp, double PP, double HP, double dt, double ep) /*override*/; @@ -594,8 +594,8 @@ class TFV4aM : public TDriverHandle private: double CP; double TP; - double RP; // zbiornik sterujcy, czasowy, redukcyjny - double XP; // komora powietrzna w reduktorze jest potrzebna do odwzorowania fali + double RP; // zbiornik sterujący, czasowy, redukcyjny + double XP; // komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali double RedAdj; // dostosowanie reduktora cisnienia (krecenie kapturkiem) // Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow bool Fala; @@ -623,7 +623,7 @@ class TMHZ_EN57 : public TDriverHandle private: double CP; double TP; - double RP; // zbiornik sterujcy, czasowy, redukcyjny + double RP; // zbiornik sterujący, czasowy, redukcyjny double RedAdj; // dostosowanie reduktora cisnienia (krecenie kapturkiem) bool Fala; // const double pos_table[11] = { -2, 10, -1, 0, 0, 2, 9, 10, 0, 0, 0 }; @@ -647,8 +647,8 @@ class TMHZ_EN57 : public TDriverHandle /* FBS2= class(TTDriverHandle) private - CP, TP, RP: real; //zbiornik sterujcy, czasowy, redukcyjny - XP: real; //komora powietrzna w reduktorze jest potrzebna do + CP, TP, RP: real; //zbiornik sterujący, czasowy, redukcyjny + XP: real; //komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali RedAdj: real; //dostosowanie reduktora cisnienia (krecenie kapturkiem) // Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow @@ -663,8 +663,8 @@ odwzorowania fali /* TD2= class(TTDriverHandle) private - CP, TP, RP: real; //zbiornik sterujcy, czasowy, redukcyjny - XP: real; //komora powietrzna w reduktorze jest potrzebna do + CP, TP, RP: real; //zbiornik sterujący, czasowy, redukcyjny + XP: real; //komora powietrzna w reduktorze — jest potrzebna do odwzorowania fali RedAdj: real; //dostosowanie reduktora cisnienia (krecenie kapturkiem) // Sounds: array[0..4] of real; //wielkosci przeplywow dla dzwiekow @@ -681,7 +681,7 @@ class TM394 : public TDriverHandle { private: - double CP; // zbiornik sterujcy, czasowy, redukcyjny + double CP; // zbiornik sterujący, czasowy, redukcyjny double RedAdj; // dostosowanie reduktora cisnienia (krecenie kapturkiem) // double const pos_table[11] = { -1, 5, -1, 0, 1, 2, 4, 5, 0, 0, 0 }; static double pos_table[11]; // = { 0, 6, 0, 1, 2, 3, 5, 6, 1, 1, 1 }; @@ -706,7 +706,7 @@ class TH14K1 : public TDriverHandle // double const table[11] = { -1, 4, -1, 0, 1, 2, 3, 4, 0, 0, 0 }; double static pos_table[11]; // = { 0, 5, 0, 1, 2, 3, 4, 5, 1, 1, 1 }; protected: - double CP; // zbiornik sterujcy, czasowy, redukcyjny + double CP; // zbiornik sterujący, czasowy, redukcyjny double RedAdj; // dostosowanie reduktora cisnienia (krecenie kapturkiem) public: diff --git a/McZapkie/mctools.cpp b/McZapkie/mctools.cpp index 5e0dfec6..501875fc 100644 --- a/McZapkie/mctools.cpp +++ b/McZapkie/mctools.cpp @@ -112,7 +112,7 @@ bool iSetFlag(int &Flag, int Value) if ((Flag & Value) == 0) { Flag |= Value; - return true; // true, gdy byo wczeniej 0 i zostao ustawione + return true; // true, gdy było wcześniej 0 i zostało ustawione } } else if (Value < 0) @@ -121,7 +121,7 @@ bool iSetFlag(int &Flag, int Value) if ((Flag & Value) == Value) { Flag &= ~Value; // Value jest ujemne, czyli zerowanie flagi - return true; // true, gdy byo wczeniej 1 i zostao wyzerowane + return true; // true, gdy było wcześniej 1 i zostało wyzerowane } } return false; @@ -330,7 +330,7 @@ std::vector Split(const std::string &s, char delim) } std::vector Split(const std::string &s) -{ // dzieli tekst na wektor tekstow po biaych znakach +{ // dzieli tekst na wektor tekstow po białych znakach std::vector elems; std::stringstream ss(s); std::string item; @@ -548,7 +548,7 @@ long Vert(double Y) // NOTE: this now does nothing. void ClearPendingExceptions() -// resetuje bdy FPU, wymagane dla Trunc() +// resetuje błędy FPU, wymagane dla Trunc() { ; /*?*/ /* ASM FNCLEX diff --git a/McZapkie/mctools.h b/McZapkie/mctools.h index 7e7835b7..3ea1c3b2 100644 --- a/McZapkie/mctools.h +++ b/McZapkie/mctools.h @@ -19,12 +19,12 @@ http://mozilla.org/MPL/2.0/. #include #include -/*Ra: te stae nie s uywane... +/*Ra: te stałe nie są używane... _FileName = ['a'..'z','A'..'Z',':','\','.','*','?','0'..'9','_','-']; _RealNum = ['0'..'9','-','+','.','E','e']; - _Integer = ['0'..'9','-']; //Ra: to si gryzie z STLport w Builder 6 + _Integer = ['0'..'9','-']; //Ra: to się gryzie z STLport w Builder 6 _Plus_Int = ['0'..'9']; - _All = [' '..'']; + _All = [' '..'ţ']; _Delimiter= [',',';']+_EOL; _Delimiter_Space=_Delimiter+[' ']; */ diff --git a/MdlMngr.cpp b/MdlMngr.cpp index a60ecf41..f3663e10 100644 --- a/MdlMngr.cpp +++ b/MdlMngr.cpp @@ -68,80 +68,80 @@ TModel3d * TModelsManager::LoadModel(std::string const &Name, bool dynamic) { mdl = Models[Count].LoadModel(Name, dynamic); if (mdl) - Count++; // jeli bd wczytania modelu, to go nie wliczamy + Count++; // jeśli błąd wczytania modelu, to go nie wliczamy } return mdl; } TModel3d * TModelsManager::GetModel(std::string const &Name, bool dynamic) -{ // model moe by we wpisie "node...model" albo "node...dynamic", a take by dodatkowym w dynamic - // (kabina, wntrze, adunek) - // dla "node...dynamic" mamy podan ciek w "\dynamic\" i musi by co najmniej 1 poziom, zwkle - // s 2 - // dla "node...model" moe by typowy model statyczny ze ciek, domylnie w "\scenery\" albo +{ // model może być we wpisie "node...model" albo "node...dynamic", a także być dodatkowym w dynamic + // (kabina, wnętrze, ładunek) + // dla "node...dynamic" mamy podaną ścieżkę w "\dynamic\" i musi być co najmniej 1 poziom, zwkle + // są 2 + // dla "node...model" może być typowy model statyczny ze ścieżką, domyślnie w "\scenery\" albo // "\models" - // albo moe by model z "\dynamic\", jeli potrzebujemy wstawi auto czy wagon nieruchomo - // - ze cieki z ktrej jest wywoany, np. dir="scenery\bud\" albo dir="dynamic\pkp\st44_v1\" + // albo może być model z "\dynamic\", jeśli potrzebujemy wstawić auto czy wagon nieruchomo + // - ze ścieżki z której jest wywołany, np. dir="scenery\bud\" albo dir="dynamic\pkp\st44_v1\" // plus name="model.t3d" - // - z domylnej cieki dla modeli, np. "scenery\" albo "models\" plus name="bud\dombale.t3d" + // - z domyślnej ścieżki dla modeli, np. "scenery\" albo "models\" plus name="bud\dombale.t3d" // (dir="") - // - konkretnie podanej cieki np. name="\scenery\bud\dombale.t3d" (dir="") - // wywoania: - // - konwersja wszystkiego do E3D, podawana dokadna cieka, tekstury tam, gdzie plik - // - wczytanie kabiny, dokadna cieka, tekstury z katalogu modelu - // - wczytanie adunku, cieka dokadna, tekstury z katalogu modelu - // - wczytanie modelu, cieka dokadna, tekstury z katalogu modelu - // - wczytanie przedsionkw, cieka dokadna, tekstury z katalogu modelu - // - wczytanie uproszczonego wntrza, cieka dokadna, tekstury z katalogu modelu - // - niebo animowane, cieka brana ze wpisu, tekstury nieokrelone - // - wczytanie modelu animowanego - Init() - sprawdzi + // - konkretnie podanej ścieżki np. name="\scenery\bud\dombale.t3d" (dir="") + // wywołania: + // - konwersja wszystkiego do E3D, podawana dokładna ścieżka, tekstury tam, gdzie plik + // - wczytanie kabiny, dokładna ścieżka, tekstury z katalogu modelu + // - wczytanie ładunku, ścieżka dokładna, tekstury z katalogu modelu + // - wczytanie modelu, ścieżka dokładna, tekstury z katalogu modelu + // - wczytanie przedsionków, ścieżka dokładna, tekstury z katalogu modelu + // - wczytanie uproszczonego wnętrza, ścieżka dokładna, tekstury z katalogu modelu + // - niebo animowane, ścieżka brana ze wpisu, tekstury nieokreślone + // - wczytanie modelu animowanego - Init() - sprawdzić std::string buf; - std::string buftp = Global::asCurrentTexturePath; // zapamitanie aktualnej cieki do tekstur, - // bo bdzie tyczmasowo zmieniana + std::string buftp = Global::asCurrentTexturePath; // zapamiętanie aktualnej ścieżki do tekstur, + // bo będzie tyczmasowo zmieniana /* - // Ra: niby tak jest lepiej, ale dziaa gorzej, wic przywrcone jest oryginalne - //nawet jeli model bdzie pobrany z tablicy, to trzeba ustali ciek dla tekstur - if (dynamic) //na razie tak, bo nie wiadomo, jaki moe mie wpyw na pozostae modele - {//dla pojazdw podana jest zawsze pena cieka do modelu + // Ra: niby tak jest lepiej, ale działa gorzej, więc przywrócone jest oryginalne + //nawet jeśli model będzie pobrany z tablicy, to trzeba ustalić ścieżkę dla tekstur + if (dynamic) //na razie tak, bo nie wiadomo, jaki może mieć wpływ na pozostałe modele + {//dla pojazdów podana jest zawsze pełna ścieżka do modelu strcpy(buf,Name); if (strchr(Name,'/')!=NULL) - {//pobieranie tekstur z katalogu, w ktrym jest model + {//pobieranie tekstur z katalogu, w którym jest model Global::asCurrentTexturePath=Global::asCurrentTexturePath+AnsiString(Name); Global::asCurrentTexturePath.Delete(Global::asCurrentTexturePath.Pos("/")+1,Global::asCurrentTexturePath.Length()); } } else - {//dla modeli scenerii trzeba ustali ciek + {//dla modeli scenerii trzeba ustalić ścieżkę if (strchr(Name,'\\')==NULL) - {//jeli nie ma lewego ukonika w ciece, a jest prawy, to zmieni ciek dla tekstur na t + {//jeśli nie ma lewego ukośnika w ścieżce, a jest prawy, to zmienić ścieżkę dla tekstur na tę z modelem - strcpy(buf,"models\\"); //Ra: byo by lepiej katalog doda w parserze - //strcpy(buf,"scenery\\"); //Ra: byo by lepiej katalog doda w parserze + strcpy(buf,"models\\"); //Ra: było by lepiej katalog dodać w parserze + //strcpy(buf,"scenery\\"); //Ra: było by lepiej katalog dodać w parserze strcat(buf,Name); if (strchr(Name,'/')!=NULL) - {//jeszcze musi by prawy ukonik + {//jeszcze musi być prawy ukośnik Global::asCurrentTexturePath=Global::asCurrentTexturePath+AnsiString(Name); Global::asCurrentTexturePath.Delete(Global::asCurrentTexturePath.Pos("/")+1,Global::asCurrentTexturePath.Length()); } } else - {//jeli jest lewy ukonik, to ciek do tekstur zmieni tylko dla pojazdw + {//jeśli jest lewy ukośnik, to ścieżkę do tekstur zmienić tylko dla pojazdów strcpy(buf,Name); } } StrLower(buf); for (int i=0;igetTokens(1, false); // case sensitive *parser >> token; SafeDeleteArray(szText); - szText = new char[256]; // musi by bufor do czenia tekstw + szText = new char[256]; // musi być bufor do łączenia tekstów strcpy(szText, token.c_str()); parser->getTokens(); *parser >> fValue1; @@ -123,7 +123,7 @@ bool TMemCell::Load(cParser *parser) *parser >> fValue2; parser->getTokens(); *parser >> token; - if (token.compare("none") != 0) // gdy rne od "none" + if (token.compare("none") != 0) // gdy różne od "none" asTrackName = token; // sprawdzane przez IsEmpty() parser->getTokens(); *parser >> token; @@ -134,26 +134,26 @@ bool TMemCell::Load(cParser *parser) } void TMemCell::PutCommand(TController *Mech, vector3 *Loc) -{ // wysanie zawartoci komrki do AI +{ // wysłanie zawartości komórki do AI if (Mech) Mech->PutCommand(szText, fValue1, fValue2, Loc); } bool TMemCell::Compare(char *szTestText, double fTestValue1, double fTestValue2, int CheckMask) -{ // porwnanie zawartoci komrki pamici z podanymi wartociami +{ // porównanie zawartości komórki pamięci z podanymi wartościami if (TestFlag(CheckMask, conditional_memstring)) - { // porwna teksty -/* char *pos = std::strstr(szTestText, "*"); // zwraca wskanik na pozycj albo NULL - if( nullptr != pos ) { // porwnanie fragmentu acucha - int i = pos - szTestText; // ilo porwnywanych znakw - if( i ) { // jeli nie jest pierwszym znakiem + { // porównać teksty +/* char *pos = std::strstr(szTestText, "*"); // zwraca wskaźnik na pozycję albo NULL + if( nullptr != pos ) { // porównanie fragmentu łańcucha + int i = pos - szTestText; // ilość porównywanych znaków + if( i ) { // jeśli nie jest pierwszym znakiem if( std::string( szTestText ).substr( 0, i ) != std::string( szText ).substr( 0, i ) ) { - return false; // pocztki o dugoci (i) s rne + return false; // początki o długości (i) są różne } } } else if( std::string( szTestText ) != std::string( szText ) ) { - return false; //cuchy s rne + return false; //łąńcuchy są różne } */ std::string source( szText ), @@ -172,7 +172,7 @@ bool TMemCell::Compare(char *szTestText, double fTestValue1, double fTestValue2, } } } - // tekst zgodny, porwna reszt + // tekst zgodny, porównać resztę return ((!TestFlag(CheckMask, conditional_memval1) || (fValue1 == fTestValue1)) && (!TestFlag(CheckMask, conditional_memval2) || (fValue2 == fTestValue2))); }; @@ -183,7 +183,7 @@ bool TMemCell::Render() } bool TMemCell::IsVelocity() -{ // sprawdzenie, czy event odczytu tej komrki ma by do skanowania, czy do kolejkowania +{ // sprawdzenie, czy event odczytu tej komórki ma być do skanowania, czy do kolejkowania if (eCommand == cm_SetVelocity) return true; if (eCommand == cm_ShuntVelocity) @@ -196,11 +196,11 @@ void TMemCell::StopCommandSent() if (!bCommand) return; bCommand = false; - if (OnSent) // jeli jest event + if (OnSent) // jeśli jest event Global::AddToQuery(OnSent, NULL); }; void TMemCell::AssignEvents(TEvent *e) -{ // powizanie eventu +{ // powiązanie eventu OnSent = e; }; diff --git a/MemCell.h b/MemCell.h index 080bef0b..72f002c7 100644 --- a/MemCell.h +++ b/MemCell.h @@ -23,8 +23,8 @@ class TMemCell double fValue1; double fValue2; TCommandType eCommand; - bool bCommand; // czy zawiera komend dla zatrzymanego AI - TEvent *OnSent; // event dodawany do kolejki po wysaniu komendy zatrzymujcej skad + bool bCommand; // czy zawiera komendę dla zatrzymanego AI + TEvent *OnSent; // event dodawany do kolejki po wysłaniu komendy zatrzymującej skład public: string asTrackName; // McZapkie-100302 - zeby nazwe toru na ktory jest Putcommand wysylane pamietac diff --git a/Model3d.cpp b/Model3d.cpp index c2a62f2f..e8390d38 100644 --- a/Model3d.cpp +++ b/Model3d.cpp @@ -30,35 +30,35 @@ double TSubModel::fSquareDist = 0; int TSubModel::iInstance; // numer renderowanego egzemplarza obiektu GLuint *TSubModel::ReplacableSkinId = NULL; int TSubModel::iAlpha = 0x30300030; // maska do testowania flag tekstur wymiennych -TModel3d *TSubModel::pRoot; // Ra: tymczasowo wskanik na model widoczny z submodelu +TModel3d *TSubModel::pRoot; // Ra: tymczasowo wskaźnik na model widoczny z submodelu std::string *TSubModel::pasText; -// przykady dla TSubModel::iAlpha: -// 0x30300030 - wszystkie bez kanau alfa -// 0x31310031 - tekstura -1 uywana w danym cyklu, pozostae nie -// 0x32320032 - tekstura -2 uywana w danym cyklu, pozostae nie -// 0x34340034 - tekstura -3 uywana w danym cyklu, pozostae nie -// 0x38380038 - tekstura -4 uywana w danym cyklu, pozostae nie -// 0x3F3F003F - wszystkie wymienne tekstury uywane w danym cyklu -// Ale w TModel3d okerla przezroczysto tekstur wymiennych! +// przykłady dla TSubModel::iAlpha: +// 0x30300030 - wszystkie bez kanału alfa +// 0x31310031 - tekstura -1 używana w danym cyklu, pozostałe nie +// 0x32320032 - tekstura -2 używana w danym cyklu, pozostałe nie +// 0x34340034 - tekstura -3 używana w danym cyklu, pozostałe nie +// 0x38380038 - tekstura -4 używana w danym cyklu, pozostałe nie +// 0x3F3F003F - wszystkie wymienne tekstury używane w danym cyklu +// Ale w TModel3d okerśla przezroczystość tekstur wymiennych! -int TSubModelInfo::iTotalTransforms = 0; // ilo transformw -int TSubModelInfo::iTotalNames = 0; // dugo obszaru nazw -int TSubModelInfo::iTotalTextures = 0; // dugo obszaru tekstur +int TSubModelInfo::iTotalTransforms = 0; // ilość transformów +int TSubModelInfo::iTotalNames = 0; // długość obszaru nazw +int TSubModelInfo::iTotalTextures = 0; // długość obszaru tekstur int TSubModelInfo::iCurrent = 0; // aktualny obiekt -TSubModelInfo *TSubModelInfo::pTable = NULL; // tabele obiektw pomocniczych +TSubModelInfo *TSubModelInfo::pTable = NULL; // tabele obiektów pomocniczych char *TStringPack::String(int n) -{ // zwraca wskanik do acucha o podanym numerze +{ // zwraca wskaźnik do łańcucha o podanym numerze if (index ? n < (index[1] >> 2) - 2 : false) - return data + 8 + index[n + 2]; // indeks upraszcza kwesti wyszukiwania - // jak nie ma indeksu, to trzeba szuka - int max = *((int *)(data + 4)); // dugo obszaru acuchw - char *ptr = data + 8; // poczek obszaru acuchw + return data + 8 + index[n + 2]; // indeks upraszcza kwestię wyszukiwania + // jak nie ma indeksu, to trzeba szukać + int max = *((int *)(data + 4)); // długość obszaru łańcuchów + char *ptr = data + 8; // począek obszaru łańcuchów for (int i = 0; i < n; ++i) - { // wyszukiwanie acuchw nie jest zbyt optymalne, ale nie musi by + { // wyszukiwanie łańcuchów nie jest zbyt optymalne, ale nie musi być while (*ptr) ++ptr; // wyszukiwanie zera - ++ptr; // pominicie zera + ++ptr; // pominięcie zera if (ptr > data + max) return NULL; // zbyt wysoki numer } @@ -78,7 +78,7 @@ void TSubModel::FirstInit() uiDisplayList = 0; iNumVerts = -1; // do sprawdzenia iVboPtr = -1; - fLight = -1.0; //wietcenie wyczone + fLight = -1.0; //świetcenie wyłączone v_RotateAxis = float3(0, 0, 0); v_TransVector = float3(0, 0, 0); f_Angle = 0; @@ -91,13 +91,13 @@ void TSubModel::FirstInit() Child = NULL; TextureID = 0; // TexAlpha=false; - iFlags = 0x0200; // bit 9=1: submodel zosta utworzony a nie ustawiony na + iFlags = 0x0200; // bit 9=1: submodel został utworzony a nie ustawiony na // wczytany plik // TexHash=false; // Hits=NULL; // CollisionPts=NULL; // CollisionPtsCount=0; - Opacity = 1.0; // przy wczytywaniu modeli byo dzielone przez 100... + Opacity = 1.0; // przy wczytywaniu modeli było dzielone przez 100... bWire = false; fWireSize = 0; fNearAttenStart = 40; @@ -105,8 +105,8 @@ void TSubModel::FirstInit() bUseNearAtten = false; iFarAttenDecay = 0; fFarDecayRadius = 100; - fCosFalloffAngle = 0.5; // 120? - fCosHotspotAngle = 0.3; // 145? + fCosFalloffAngle = 0.5; // 120°? + fCosHotspotAngle = 0.3; // 145°? fCosViewAngle = 0; fSquareMaxDist = 10000 * 10000; // 10km fSquareMinDist = 0; @@ -120,7 +120,7 @@ void TSubModel::FirstInit() f4Specular[0] = f4Specular[1] = f4Specular[2] = 0.0; f4Specular[3] = 1.0; //{0,0,0,1}; f4Emision[0] = f4Emision[1] = f4Emision[2] = f4Emision[3] = 1.0; - smLetter = NULL; // uywany tylko roboczo dla TP_TEXT, do przyspieszenia wywietlania + smLetter = NULL; // używany tylko roboczo dla TP_TEXT, do przyspieszenia wyświetlania }; TSubModel::~TSubModel() @@ -128,30 +128,30 @@ TSubModel::~TSubModel() if (uiDisplayList) glDeleteLists(uiDisplayList, 1); if (iFlags & 0x0200) - { // wczytany z pliku tekstowego musi sam posprzta + { // wczytany z pliku tekstowego musi sam posprzątać // SafeDeleteArray(Indices); SafeDelete(Next); SafeDelete(Child); - delete fMatrix; // wasny transform trzeba usun (zawsze jeden) + delete fMatrix; // własny transform trzeba usunąć (zawsze jeden) delete[] Vertices; delete[] pTexture; delete[] pName; } /* else - {//wczytano z pliku binarnego (nie jest wacicielem tablic) + {//wczytano z pliku binarnego (nie jest właścicielem tablic) } */ - delete[] smLetter; // uywany tylko roboczo dla TP_TEXT, do przyspieszenia - // wywietlania + delete[] smLetter; // używany tylko roboczo dla TP_TEXT, do przyspieszenia + // wyświetlania }; void TSubModel::TextureNameSet(const char *n) { // ustawienie nazwy submodelu, o // ile nie jest wczytany z E3D if (iFlags & 0x0200) - { // tylko jeeli submodel zosta utworzony przez new - delete[] pTexture; // usunicie poprzedniej + { // tylko jeżeli submodel zosta utworzony przez new + delete[] pTexture; // usunięcie poprzedniej int i = strlen(n); if (i) { // utworzenie nowej @@ -167,8 +167,8 @@ void TSubModel::NameSet(const char *n) { // ustawienie nazwy submodelu, o ile // nie jest wczytany z E3D if (iFlags & 0x0200) - { // tylko jeeli submodel zosta utworzony przez new - delete[] pName; // usunicie poprzedniej + { // tylko jeżeli submodel zosta utworzony przez new + delete[] pName; // usunięcie poprzedniej int i = strlen(n); if (i) { // utworzenie nowej @@ -186,12 +186,12 @@ void TSubModel::NameSet(const char *n) int TSubModel::SeekFaceNormal(unsigned int *Masks, int f, unsigned int dwMask, float3 *pt, float8 *Vertices) { // szukanie punktu stycznego // do (pt), zwraca numer - // wierzchoka, a nie trjkta - int iNumFaces = iNumVerts / 3; // bo maska powierzchni jest jedna na trjkt - // GLVERTEX *p; //roboczy wskanik - float8 *p; // roboczy wskanik - for (int i = f; i < iNumFaces; ++i) // ptla po trjktach, od trjkta (f) - if (Masks[i] & dwMask) // jeli wsplna maska powierzchni + // wierzchołka, a nie trójkąta + int iNumFaces = iNumVerts / 3; // bo maska powierzchni jest jedna na trójkąt + // GLVERTEX *p; //roboczy wskaźnik + float8 *p; // roboczy wskaźnik + for (int i = f; i < iNumFaces; ++i) // pętla po trójkątach, od trójkąta (f) + if (Masks[i] & dwMask) // jeśli wspólna maska powierzchni { p = Vertices + 3 * i; if (p->Point == *pt) @@ -201,7 +201,7 @@ int TSubModel::SeekFaceNormal(unsigned int *Masks, int f, unsigned int dwMask, f if ((++p)->Point == *pt) return 3 * i + 2; } - return -1; // nie znaleziono stycznego wierzchoka + return -1; // nie znaleziono stycznego wierzchołka } float emm1[] = {1, 1, 1, 0}; @@ -263,40 +263,40 @@ int TSubModel::Load(cParser &parser, TModel3d *Model, int Pos, bool dynamic) { std::string type = parser.getToken(); if (type == "mesh") - eType = GL_TRIANGLES; // submodel - trjkaty + eType = GL_TRIANGLES; // submodel - trójkaty else if (type == "point") eType = GL_POINTS; // co to niby jest? else if (type == "freespotlight") - eType = TP_FREESPOTLIGHT; //wiateko + eType = TP_FREESPOTLIGHT; //światełko else if (type == "text") - eType = TP_TEXT; // wywietlacz tekstowy (generator napisw) + eType = TP_TEXT; // wyświetlacz tekstowy (generator napisów) else if (type == "stars") - eType = TP_STARS; // wiele punktw wietlnych + eType = TP_STARS; // wiele punktów świetlnych }; parser.ignoreToken(); std::string token; - // parser.getToken(token1); //ze zmian na mae! - parser.getTokens(1, false); // nazwa submodelu bez zmieny na mae + // parser.getToken(token1); //ze zmianą na małe! + parser.getTokens(1, false); // nazwa submodelu bez zmieny na małe parser >> token; NameSet(token.c_str()); if (dynamic) - { // dla pojazdu, blokujemy zaczone submodele, ktre mog by - // nieobsugiwane - if (token.find("_on") + 3 == token.length()) // jeli nazwa koczy si na "_on" - iVisible = 0; // to domylnie wyczy, eby si nie nakadao z obiektem "_off" + { // dla pojazdu, blokujemy załączone submodele, które mogą być + // nieobsługiwane + if (token.find("_on") + 3 == token.length()) // jeśli nazwa kończy się na "_on" + iVisible = 0; // to domyślnie wyłączyć, żeby się nie nakładało z obiektem "_off" } - else // dla pozostaych modeli blokujemy zapalone wiata, ktre mog by - // nieobsugiwane - if (token.compare(0, 8, "Light_On") == 0) // jeli nazwa zaczyna si od "Light_On" - iVisible = 0; // to domylnie wyczy, eby si nie nakadao z obiektem + else // dla pozostałych modeli blokujemy zapalone światła, które mogą być + // nieobsługiwane + if (token.compare(0, 8, "Light_On") == 0) // jeśli nazwa zaczyna się od "Light_On" + iVisible = 0; // to domyślnie wyłączyć, żeby się nie nakładało z obiektem // "Light_Off" - if (parser.expectToken("anim:")) // Ra: ta informacja by si przydaa! + if (parser.expectToken("anim:")) // Ra: ta informacja by się przydała! { // rodzaj animacji std::string type = parser.getToken(); if (type != "false") { - iFlags |= 0x4000; // jak animacja, to trzeba przechowywa macierz zawsze + iFlags |= 0x4000; // jak animacja, to trzeba przechowywać macierz zawsze if (type == "seconds_jump") b_Anim = b_aAnim = at_SecondsJump; // sekundy z przeskokiem else if (type == "minutes_jump") @@ -306,21 +306,21 @@ int TSubModel::Load(cParser &parser, TModel3d *Model, int Pos, bool dynamic) else if (type == "hours24_jump") b_Anim = b_aAnim = at_Hours24Jump; // godziny z przeskokiem else if (type == "seconds") - b_Anim = b_aAnim = at_Seconds; // minuty pynnie + b_Anim = b_aAnim = at_Seconds; // minuty płynnie else if (type == "minutes") - b_Anim = b_aAnim = at_Minutes; // minuty pynnie + b_Anim = b_aAnim = at_Minutes; // minuty płynnie else if (type == "hours") - b_Anim = b_aAnim = at_Hours; // godziny pynnie + b_Anim = b_aAnim = at_Hours; // godziny płynnie else if (type == "hours24") - b_Anim = b_aAnim = at_Hours24; // godziny pynnie + b_Anim = b_aAnim = at_Hours24; // godziny płynnie else if (type == "billboard") - b_Anim = b_aAnim = at_Billboard; // obrt w pionie do kamery + b_Anim = b_aAnim = at_Billboard; // obrót w pionie do kamery else if (type == "wind") - b_Anim = b_aAnim = at_Wind; // ruch pod wpywem wiatru + b_Anim = b_aAnim = at_Wind; // ruch pod wpływem wiatru else if (type == "sky") b_Anim = b_aAnim = at_Sky; // aniamacja nieba else if (type == "ik") - b_Anim = b_aAnim = at_IK; // IK: zadajcy + b_Anim = b_aAnim = at_IK; // IK: zadający else if (type == "ik11") b_Anim = b_aAnim = at_IK11; // IK: kierunkowany else if (type == "ik21") @@ -344,7 +344,7 @@ int TSubModel::Load(cParser &parser, TModel3d *Model, int Pos, bool dynamic) { std::string light = parser.getToken(); if (light == "true") - fLight = 2.0; // zawsze wieci + fLight = 2.0; // zawsze świeci else if (light == "false") fLight = -1.0; // zawsze ciemy else @@ -366,14 +366,14 @@ int TSubModel::Load(cParser &parser, TModel3d *Model, int Pos, bool dynamic) >> discard >> fFarDecayRadius >> discard - >> fCosFalloffAngle // kt liczony dla rednicy, a nie promienia + >> fCosFalloffAngle // kąt liczony dla średnicy, a nie promienia >> discard - >> fCosHotspotAngle; // kt liczony dla rednicy, a nie promienia + >> fCosHotspotAngle; // kąt liczony dla średnicy, a nie promienia fCosFalloffAngle = cos( DegToRad( 0.5 * fCosFalloffAngle ) ); fCosHotspotAngle = cos( DegToRad( 0.5 * fCosHotspotAngle ) ); iNumVerts = 1; iFlags |= 0x4010; // rysowane w cyklu nieprzezroczystych, macierz musi - // zosta bez zmiany + // zostać bez zmiany } else if (eType < TP_ROTATOR) { @@ -387,9 +387,9 @@ int TSubModel::Load(cParser &parser, TModel3d *Model, int Pos, bool dynamic) >> discard; Opacity = readIntAsDouble(parser, 100.0f); // wymagane jest 0 dla szyb, 100 idzie w nieprzezroczyste if (Opacity > 1.0) - Opacity *= 0.01; // w 2013 by bd i aby go obej, trzeba byo wpisa 10000.0 - if ((Global::iConvertModels & 1) == 0) // dla zgodnoci wstecz - Opacity = 0.0; // wszystko idzie w przezroczyste albo zalenie od tekstury + Opacity *= 0.01; // w 2013 był błąd i aby go obejść, trzeba było wpisać 10000.0 + if ((Global::iConvertModels & 1) == 0) // dla zgodności wstecz + Opacity = 0.0; // wszystko idzie w przezroczyste albo zależnie od tekstury if (!parser.expectToken("map:")) Error("Model map parse failure!"); std::string texture = parser.getToken(); @@ -424,8 +424,8 @@ int TSubModel::Load(cParser &parser, TModel3d *Model, int Pos, bool dynamic) iFlags |= (Opacity < 1.0) ? 8 : 0x10; // zmienna tekstura 4 } else - { // jeli tylko nazwa pliku, to dawa biec ciek do tekstur - // asTexture=AnsiString(texture.c_str()); //zapamitanie nazwy tekstury + { // jeśli tylko nazwa pliku, to dawać bieżącą ścieżkę do tekstur + // asTexture=AnsiString(texture.c_str()); //zapamiętanie nazwy tekstury TextureNameSet(texture.c_str()); if (texture.find_first_of("/\\") == texture.npos) texture.insert(0, Global::asCurrentTexturePath.c_str()); @@ -433,16 +433,16 @@ int TSubModel::Load(cParser &parser, TModel3d *Model, int Pos, bool dynamic) szTexturePath, const_cast(Global::asCurrentTexturePath.c_str()), texture); // TexAlpha=TTexturesManager::GetAlpha(TextureID); // iFlags|=TexAlpha?0x20:0x10; //0x10-nieprzezroczysta, 0x20-przezroczysta - if (Opacity < 1.0) // przezroczysto z tekstury brana tylko dla Opacity + if (Opacity < 1.0) // przezroczystość z tekstury brana tylko dla Opacity // 0! iFlags |= TTexturesManager::GetAlpha(TextureID) ? 0x20 : 0x10; // 0x10-nieprzezroczysta, 0x20-przezroczysta else iFlags |= 0x10; // normalnie nieprzezroczyste - // renderowanie w cyklu przezroczystych tylko jeli: - // 1. Opacity=0 (przejciowo <1, czy tam <100) oraz - // 2. tekstura ma przezroczysto + // renderowanie w cyklu przezroczystych tylko jeśli: + // 1. Opacity=0 (przejściowo <1, czy tam <100) oraz + // 2. tekstura ma przezroczystość }; } else @@ -458,34 +458,34 @@ int TSubModel::Load(cParser &parser, TModel3d *Model, int Pos, bool dynamic) >> discard; if( fSquareMaxDist >= 0.0 ) { fSquareMaxDist *= fSquareMaxDist; } - else { fSquareMaxDist = 15000 * 15000; }// 15km to wicej, ni si obecnie wywietla + else { fSquareMaxDist = 15000 * 15000; }// 15km to więcej, niż się obecnie wyświetla fSquareMinDist *= fSquareMinDist; fMatrix = new float4x4(); readMatrix(parser, *fMatrix); // wczytanie transform if (!fMatrix->IdentityIs()) - iFlags |= 0x8000; // transform niejedynkowy - trzeba go przechowa - int iNumFaces; // ilo trjktw - unsigned int *sg; // maski przynalenoci trjktw do powierzchni + iFlags |= 0x8000; // transform niejedynkowy - trzeba go przechować + int iNumFaces; // ilość trójkątów + unsigned int *sg; // maski przynależności trójkątów do powierzchni if (eType < TP_ROTATOR) - { // wczytywanie wierzchokw + { // wczytywanie wierzchołków parser.getTokens( 2, false ); parser >> discard >> token; - // Ra 15-01: to wczyta jako tekst - jeli pierwszy znak zawiera "*", to - // dalej bdzie nazwa wczeniejszego submodelu, z ktrego naley wzi - // wierzchoki - // zapewni to jak zgodno wstecz, bo zamiast liczby bdzie cig, ktrego - // warto powinna by uznana jako zerowa + // Ra 15-01: to wczytać jako tekst - jeśli pierwszy znak zawiera "*", to + // dalej będzie nazwa wcześniejszego submodelu, z którego należy wziąć + // wierzchołki + // zapewni to jakąś zgodność wstecz, bo zamiast liczby będzie ciąg, którego + // wartość powinna być uznana jako zerowa // parser.getToken(iNumVerts); if (token[0] == '*') - { // jeli pierwszy znak jest gwiazdk, poszuka - // submodelu o nazwie bez tej gwiazdki i wzi z - // niego wierzchoki + { // jeśli pierwszy znak jest gwiazdką, poszukać + // submodelu o nazwie bez tej gwiazdki i wziąć z + // niego wierzchołki Error("Verticles reference not yet supported!"); } else - { // normalna lista wierzchokw + { // normalna lista wierzchołków iNumVerts = atoi(token.c_str()); if (iNumVerts % 3) { @@ -499,22 +499,22 @@ int TSubModel::Load(cParser &parser, TModel3d *Model, int Pos, bool dynamic) Vertices = new float8[iNumVerts]; iNumFaces = iNumVerts / 3; sg = new unsigned int[iNumFaces]; // maski powierzchni: 0 oznacza brak - // uredniania wektorw normalnych - int *wsp = new int[iNumVerts]; // z ktrego wierzchoka kopiowa wektor + // użredniania wektorów normalnych + int *wsp = new int[iNumVerts]; // z którego wierzchołka kopiować wektor // normalny int maska = 0; for (int i = 0; i < iNumVerts; i++) - { // Ra: z konwersj na ukad scenerii - bdzie wydajniejsze - // wywietlanie - wsp[i] = -1; // wektory normalne nie s policzone dla tego wierzchoka + { // Ra: z konwersją na układ scenerii - będzie wydajniejsze + // wyświetlanie + wsp[i] = -1; // wektory normalne nie są policzone dla tego wierzchołka if ((i % 3) == 0) - { // jeli bdzie maska -1, to dalej bd - // wierzchoki z wektorami normalnymi, podanymi + { // jeśli będzie maska -1, to dalej będą + // wierzchołki z wektorami normalnymi, podanymi // jawnie - maska = parser.getToken(false); // maska powierzchni trjkta - sg[i / 3] = (maska == -1) ? 0 : maska; // dla maski -1 bdzie 0, - // czyli nie ma wsplnych - // wektorw normalnych + maska = parser.getToken(false); // maska powierzchni trójkąta + sg[i / 3] = (maska == -1) ? 0 : maska; // dla maski -1 będzie 0, + // czyli nie ma wspólnych + // wektorów normalnych } parser.getTokens( 3, false ); parser @@ -522,95 +522,95 @@ int TSubModel::Load(cParser &parser, TModel3d *Model, int Pos, bool dynamic) >> Vertices[i].Point.y >> Vertices[i].Point.z; if (maska == -1) - { // jeli wektory normalne podane jawnie + { // jeśli wektory normalne podane jawnie parser.getTokens( 3, false ); parser >> Vertices[i].Normal.x >> Vertices[i].Normal.y >> Vertices[i].Normal.z; - wsp[i] = i; // wektory normalne "s ju policzone" + wsp[i] = i; // wektory normalne "są już policzone" } parser.getTokens( 2, false ); parser >> Vertices[i].tu >> Vertices[i].tv; - if (i % 3 == 2) // jeeli wczytano 3 punkty + if (i % 3 == 2) // jeżeli wczytano 3 punkty { if (Vertices[i].Point == Vertices[i - 1].Point || Vertices[i - 1].Point == Vertices[i - 2].Point || Vertices[i - 2].Point == Vertices[i].Point) - { // jeeli punkty si nakadaj na siebie - --iNumFaces; // o jeden trjkt mniej - iNumVerts -= 3; // czyli o 3 wierzchoki + { // jeżeli punkty się nakładają na siebie + --iNumFaces; // o jeden trójkąt mniej + iNumVerts -= 3; // czyli o 3 wierzchołki i -= 3; // wczytanie kolejnego w to miejsce WriteLog(std::string("Degenerated triangle ignored in: \"") + pName + "\", verticle " + std::to_string(i)); } - if (i > 0) // jeli pierwszy trjkt bdzie zdegenerowany, to - // zostanie usunity i nie ma co sprawdza + if (i > 0) // jeśli pierwszy trójkąt będzie zdegenerowany, to + // zostanie usunięty i nie ma co sprawdzać if (((Vertices[i].Point - Vertices[i - 1].Point).Length() > 1000.0) || ((Vertices[i - 1].Point - Vertices[i - 2].Point).Length() > 1000.0) || ((Vertices[i - 2].Point - Vertices[i].Point).Length() > 1000.0)) - { // jeeli s dalej ni 2km od siebie //Ra 15-01: - // obiekt wstawiany nie powinien by wikszy ni - // 300m (trjkty terenu w E3D mog mie 1.5km) - --iNumFaces; // o jeden trjkt mniej - iNumVerts -= 3; // czyli o 3 wierzchoki + { // jeżeli są dalej niż 2km od siebie //Ra 15-01: + // obiekt wstawiany nie powinien być większy niż + // 300m (trójkąty terenu w E3D mogą mieć 1.5km) + --iNumFaces; // o jeden trójkąt mniej + iNumVerts -= 3; // czyli o 3 wierzchołki i -= 3; // wczytanie kolejnego w to miejsce WriteLog( std::string("Too large triangle ignored in: \"") + pName + "\""); } } } - int i; // indeks dla trjktw - float3 *n = new float3[iNumFaces]; // tablica wektorw normalnych dla trjktw - for (i = 0; i < iNumFaces; i++) // ptla po trjktach - bdzie - // szybciej, jak wstpnie przeliczymy - // normalne trjktw + int i; // indeks dla trójkątów + float3 *n = new float3[iNumFaces]; // tablica wektorów normalnych dla trójkątów + for (i = 0; i < iNumFaces; i++) // pętla po trójkątach - będzie + // szybciej, jak wstępnie przeliczymy + // normalne trójkątów n[i] = SafeNormalize( CrossProduct(Vertices[i * 3].Point - Vertices[i * 3 + 1].Point, Vertices[i * 3].Point - Vertices[i * 3 + 2].Point)); - int v; // indeks dla wierzchokw - int f; // numer trjkta stycznego + int v; // indeks dla wierzchołków + int f; // numer trójkąta stycznego float3 norm; // roboczy wektor normalny for (v = 0; v < iNumVerts; v++) - { // ptla po wierzchokach trjktw - if (wsp[v] >= 0) // jeli ju by liczony wektor normalny z uyciem - // tego wierzchoka + { // pętla po wierzchołkach trójkątów + if (wsp[v] >= 0) // jeśli już był liczony wektor normalny z użyciem + // tego wierzchołka Vertices[v].Normal = - Vertices[wsp[v]].Normal; // to wystarczy skopiowa policzony wczeniej + Vertices[wsp[v]].Normal; // to wystarczy skopiować policzony wcześniej else - { // inaczej musimy dopiero policzy - i = v / 3; // numer trjkta + { // inaczej musimy dopiero policzyć + i = v / 3; // numer trójkąta norm = float3(0, 0, 0); // liczenie zaczynamy od zera - f = v; // zaczynamy dodawanie wektorw normalnych od wasnego + f = v; // zaczynamy dodawanie wektorów normalnych od własnego while (f >= 0) - { // sumowanie z wektorem normalnym ssiada (wcznie - // ze sob) - wsp[f] = v; // informacja, e w tym wierzchoku jest ju policzony + { // sumowanie z wektorem normalnym sąsiada (włącznie + // ze sobą) + wsp[f] = v; // informacja, że w tym wierzchołku jest już policzony // wektor normalny norm += n[f / 3]; f = SeekFaceNormal(sg, f / 3 + 1, sg[i], &Vertices[v].Point, - Vertices); // i szukanie od kolejnego trjkta + Vertices); // i szukanie od kolejnego trójkąta } - // Ra 15-01: naleao by jeszcze uwzgldni skalowanie wprowadzane - // przez transformy, aby normalne po przeskalowaniu byy jednostkowe + // Ra 15-01: należało by jeszcze uwzględnić skalowanie wprowadzane + // przez transformy, aby normalne po przeskalowaniu były jednostkowe Vertices[v].Normal = - SafeNormalize(norm); // przepisanie do wierzchoka trjkta + SafeNormalize(norm); // przepisanie do wierzchołka trójkąta } } delete[] wsp; delete[] n; delete[] sg; } - else // gdy brak wierzchokw + else // gdy brak wierzchołków { - eType = TP_ROTATOR; // submodel pomocniczy, ma tylko macierz przeksztacenia - iVboPtr = iNumVerts = 0; // dla formalnoci + eType = TP_ROTATOR; // submodel pomocniczy, ma tylko macierz przekształcenia + iVboPtr = iNumVerts = 0; // dla formalności } - } // obsuga submodelu z wasn list wierzchokw + } // obsługa submodelu z własną listą wierzchołków } else if (eType == TP_STARS) - { // punkty wiecce dooklnie - skadnia jak + { // punkty świecące dookólnie - składnia jak // dla smt_Mesh std::string discard; parser.getTokens( 2, false ); @@ -623,7 +623,7 @@ int TSubModel::Load(cParser &parser, TModel3d *Model, int Pos, bool dynamic) for (i = 0; i < iNumVerts; i++) { if( i % 3 == 0 ) { - parser.ignoreToken(); // maska powierzchni trjkta + parser.ignoreToken(); // maska powierzchni trójkąta } parser.getTokens( 5, false ); parser @@ -637,15 +637,15 @@ int TSubModel::Load(cParser &parser, TModel3d *Model, int Pos, bool dynamic) Vertices[i].Normal.z = ((j >> 16) & 0xFF) / 255.0; // B } } - // Visible=true; //si potem wyczy w razie potrzeby - // iFlags|=0x0200; //wczytano z pliku tekstowego (jest wacicielem tablic) + // Visible=true; //się potem wyłączy w razie potrzeby + // iFlags|=0x0200; //wczytano z pliku tekstowego (jest właścicielem tablic) if (iNumVerts < 1) - iFlags &= ~0x3F; // cykl renderowania uzaleniony od potomnych - return iNumVerts; // do okrelenia wielkoci VBO + iFlags &= ~0x3F; // cykl renderowania uzależniony od potomnych + return iNumVerts; // do określenia wielkości VBO }; int TSubModel::TriangleAdd(TModel3d *m, int tex, int tri) -{ // dodanie trjktw do submodelu, uywane +{ // dodanie trójkątów do submodelu, używane // przy tworzeniu E3D terenu TSubModel *s = this; while (s ? (s->TextureID != tex) : false) @@ -658,7 +658,7 @@ int TSubModel::TriangleAdd(TModel3d *m, int tex, int tri) if (!s) { if (TextureID <= 0) - s = this; // uycie gwnego + s = this; // użycie głównego else { // dodanie nowego submodelu do listy potomnych s = new TSubModel(); @@ -668,17 +668,17 @@ int TSubModel::TriangleAdd(TModel3d *m, int tex, int tri) s->TextureNameSet(TTexturesManager::GetName(tex).c_str()); s->TextureID = tex; s->eType = GL_TRIANGLES; - // iAnimOwner=0; //roboczy wskanik na wierzchoek + // iAnimOwner=0; //roboczy wskaźnik na wierzchołek } if (s->iNumVerts < 0) - s->iNumVerts = tri; // bo na pocztku jest -1, czyli e nie wiadomo + s->iNumVerts = tri; // bo na początku jest -1, czyli że nie wiadomo else - s->iNumVerts += tri; // aktualizacja iloci wierzchokw - return s->iNumVerts - tri; // zwraca pozycj tych trjktw w submodelu + s->iNumVerts += tri; // aktualizacja ilości wierzchołków + return s->iNumVerts - tri; // zwraca pozycję tych trójkątów w submodelu }; float8 * TSubModel::TrianglePtr(int tex, int pos, int *la, int *ld, int *ls) -{ // zwraca wskanik do wypenienia tabeli wierzchokw, uywane +{ // zwraca wskaźnik do wypełnienia tabeli wierzchołków, używane // przy tworzeniu E3D terenu TSubModel *s = this; while (s ? s->TextureID != tex : false) @@ -689,25 +689,25 @@ float8 * TSubModel::TrianglePtr(int tex, int pos, int *la, int *ld, int *ls) s = s->Next; } if (!s) - return NULL; // co nie tak poszo + return NULL; // coś nie tak poszło if (!s->Vertices) - { // utworznie tabeli trjktw + { // utworznie tabeli trójkątów s->Vertices = new float8[s->iNumVerts]; - // iVboPtr=pos; //pozycja submodelu w tabeli wierzchokw + // iVboPtr=pos; //pozycja submodelu w tabeli wierzchołków // pos+=iNumVerts; //rezerwacja miejsca w tabeli - s->iVboPtr = iInstance; // pozycja submodelu w tabeli wierzchokw - iInstance += s->iNumVerts; // pozycja dla nastpnego + s->iVboPtr = iInstance; // pozycja submodelu w tabeli wierzchołków + iInstance += s->iNumVerts; // pozycja dla następnego } - s->ColorsSet(la, ld, ls); // ustawienie kolorw wiate - return s->Vertices + pos; // wskanik na wolne miejsce w tabeli wierzchokw + s->ColorsSet(la, ld, ls); // ustawienie kolorów świateł + return s->Vertices + pos; // wskaźnik na wolne miejsce w tabeli wierzchołków }; void TSubModel::DisplayLists() -{ // utworznie po jednej skompilowanej licie dla - // kadego submodelu +{ // utworznie po jednej skompilowanej liście dla + // każdego submodelu if (Global::bUseVBO) - return; // Ra: przy VBO to si nie przyda - // iFlags|=0x4000; //wyczenie przeliczania wierzchokw, bo nie s zachowane + return; // Ra: przy VBO to się nie przyda + // iFlags|=0x4000; //wyłączenie przeliczania wierzchołków, bo nie są zachowane if (eType < TP_ROTATOR) { if (iNumVerts > 0) @@ -763,7 +763,7 @@ void TSubModel::DisplayLists() glEndList(); } else if (eType == TP_STARS) - { // punkty wiecce dooklnie + { // punkty świecące dookólnie uiDisplayList = glGenLists(1); glNewList(uiDisplayList, GL_COMPILE); glBindTexture(GL_TEXTURE_2D, 0); // tekstury nie ma @@ -782,7 +782,7 @@ void TSubModel::DisplayLists() glMaterialfv(GL_FRONT, GL_EMISSION, emm2); glEndList(); } - // SafeDeleteArray(Vertices); //przy VBO musz zosta do zaadowania caego + // SafeDeleteArray(Vertices); //przy VBO muszą zostać do załadowania całego // modelu if (Child) Child->DisplayLists(); @@ -791,27 +791,27 @@ void TSubModel::DisplayLists() }; void TSubModel::InitialRotate(bool doit) -{ // konwersja ukadu wsprzdnych na zgodny ze sceneri - if (iFlags & 0xC000) // jeli jest animacja albo niejednostkowy transform - { // niejednostkowy transform jest mnoony i wystarczy zabawy +{ // konwersja układu współrzędnych na zgodny ze scenerią + if (iFlags & 0xC000) // jeśli jest animacja albo niejednostkowy transform + { // niejednostkowy transform jest mnożony i wystarczy zabawy if (doit) - { // obrt lewostronny - if (!fMatrix) // macierzy moe nie by w dodanym "bananie" + { // obrót lewostronny + if (!fMatrix) // macierzy może nie być w dodanym "bananie" { - fMatrix = new float4x4(); // tworzy macierz o przypadkowej zawartoci + fMatrix = new float4x4(); // tworzy macierz o przypadkowej zawartości fMatrix->Identity(); // a zaczynamy obracanie od jednostkowej } - iFlags |= 0x8000; // po obrceniu bdzie raczej niejedynkowy matrix + iFlags |= 0x8000; // po obróceniu będzie raczej niejedynkowy matrix fMatrix->InitialRotate(); // zmiana znaku X oraz zamiana Y i Z if (fMatrix->IdentityIs()) - iFlags &= ~0x8000; // jednak jednostkowa po obrceniu + iFlags &= ~0x8000; // jednak jednostkowa po obróceniu } if (Child) - Child->InitialRotate(false); // potomnych nie obracamy ju, tylko + Child->InitialRotate(false); // potomnych nie obracamy już, tylko // ewentualnie optymalizujemy else if (Global::iConvertModels & 2) // optymalizacja jest opcjonalna if ((iFlags & 0xC000) == 0x8000) // o ile nie ma animacji - { // jak nie ma potomnych, mona wymnoy przez transform i wyjedynkowa + { // jak nie ma potomnych, można wymnożyć przez transform i wyjedynkować // go float4x4 *mat = GetMatrix(); // transform submodelu if (Vertices) @@ -819,20 +819,20 @@ void TSubModel::InitialRotate(bool doit) for (int i = 0; i < iNumVerts; ++i) Vertices[i].Point = (*mat) * Vertices[i].Point; (*mat)(3)[0] = (*mat)(3)[1] = (*mat)(3)[2] = - 0.0; // zerujemy przesunicie przed obracaniem normalnych - if (eType != TP_STARS) // gwiazdki maj kolory zamiast normalnych, to + 0.0; // zerujemy przesunięcie przed obracaniem normalnych + if (eType != TP_STARS) // gwiazdki mają kolory zamiast normalnych, to // ich wtedy nie ruszamy for (int i = 0; i < iNumVerts; ++i) Vertices[i].Normal = SafeNormalize((*mat) * Vertices[i].Normal); } - mat->Identity(); // jedynkowanie transformu po przeliczeniu wierzchokw + mat->Identity(); // jedynkowanie transformu po przeliczeniu wierzchołków iFlags &= ~0x8000; // transform jedynkowy } } else // jak jest jednostkowy i nie ma animacji if (doit) - { // jeli jest jednostkowy transform, to przeliczamy - // wierzchoki, a mnoenie podajemy dalej + { // jeśli jest jednostkowy transform, to przeliczamy + // wierzchołki, a mnożenie podajemy dalej double t; if (Vertices) for (int i = 0; i < iNumVerts; ++i) @@ -841,30 +841,30 @@ void TSubModel::InitialRotate(bool doit) t = Vertices[i].Point.y; // zamiana Y i Z Vertices[i].Point.y = Vertices[i].Point.z; Vertices[i].Point.z = t; - // wektory normalne rwnie trzeba przeksztaci, bo si le owietlaj + // wektory normalne również trzeba przekształcić, bo się źle oświetlają Vertices[i].Normal.x = -Vertices[i].Normal.x; // zmiana znaku X t = Vertices[i].Normal.y; // zamiana Y i Z Vertices[i].Normal.y = Vertices[i].Normal.z; Vertices[i].Normal.z = t; } if (Child) - Child->InitialRotate(doit); // potomne ewentualnie obrcimy + Child->InitialRotate(doit); // potomne ewentualnie obrócimy } if (Next) Next->InitialRotate(doit); }; void TSubModel::ChildAdd(TSubModel *SubModel) -{ // dodanie submodelu potemnego (uzalenionego) - // Ra: zmiana kolejnoci, eby kolejne mc renderowa po aktualnym (byo +{ // dodanie submodelu potemnego (uzależnionego) + // Ra: zmiana kolejności, żeby kolejne móc renderować po aktualnym (było // przed) if (SubModel) - SubModel->NextAdd(Child); // Ra: zmiana kolejnoci renderowania + SubModel->NextAdd(Child); // Ra: zmiana kolejności renderowania Child = SubModel; }; void TSubModel::NextAdd(TSubModel *SubModel) -{ // dodanie submodelu kolejnego (wsplny przodek) +{ // dodanie submodelu kolejnego (wspólny przodek) if (Next) Next->NextAdd(SubModel); else @@ -872,21 +872,21 @@ void TSubModel::NextAdd(TSubModel *SubModel) }; int TSubModel::FlagsCheck() -{ // analiza koniecznych zmian pomidzy submodelami - // samo pomijanie glBindTexture() nie poprawi wydajnoci - // ale mona sprawdzi, czy mona w ogle pomin kod do tekstur (sprawdzanie +{ // analiza koniecznych zmian pomiędzy submodelami + // samo pomijanie glBindTexture() nie poprawi wydajności + // ale można sprawdzić, czy można w ogóle pominąć kod do tekstur (sprawdzanie // replaceskin) int i = 0; if (Child) { // Child jest renderowany po danym submodelu - if (Child->TextureID) // o ile ma tekstur - if (Child->TextureID != TextureID) // i jest ona inna ni rodzica - Child->iFlags |= 0x80; // to trzeba sprawdza, jak z teksturami jest + if (Child->TextureID) // o ile ma teksturę + if (Child->TextureID != TextureID) // i jest ona inna niż rodzica + Child->iFlags |= 0x80; // to trzeba sprawdzać, jak z teksturami jest i = Child->FlagsCheck(); - iFlags |= 0x00FF0000 & ((i << 16) | (i) | (i >> 8)); // potomny, rodzestwo i dzieci + iFlags |= 0x00FF0000 & ((i << 16) | (i) | (i >> 8)); // potomny, rodzeństwo i dzieci if (eType == TP_TEXT) - { // wyczenie renderowania Next dla znakw - // wywietlacza tekstowego + { // wyłączenie renderowania Next dla znaków + // wyświetlacza tekstowego TSubModel *p = Child; while (p) { @@ -896,23 +896,23 @@ int TSubModel::FlagsCheck() } } if (Next) - { // Next jest renderowany po danym submodelu (kolejno odwrcona + { // Next jest renderowany po danym submodelu (kolejność odwrócona // po wczytaniu T3D) - if (TextureID) // o ile dany ma tekstur + if (TextureID) // o ile dany ma teksturę if ((TextureID != Next->TextureID) || - (i & 0x00800000)) // a ma inn albo dzieci zmieniaj - iFlags |= 0x80; // to dany submodel musi sobie j ustawia + (i & 0x00800000)) // a ma inną albo dzieci zmieniają + iFlags |= 0x80; // to dany submodel musi sobie ją ustawiać i = Next->FlagsCheck(); - iFlags |= 0xFF000000 & ((i << 24) | (i << 8) | (i)); // nastpny, kolejne i ich dzieci + iFlags |= 0xFF000000 & ((i << 24) | (i << 8) | (i)); // następny, kolejne i ich dzieci // tekstury nie ustawiamy tylko wtedy, gdy jest taka sama jak Next i jego - // dzieci nie zmieniaj + // dzieci nie zmieniają } return iFlags; }; void TSubModel::SetRotate(float3 vNewRotateAxis, float fNewAngle) -{ // obrcenie submodelu wg podanej - // osi (np. wskazwki w kabinie) +{ // obrócenie submodelu wg podanej + // osi (np. wskazówki w kabinie) v_RotateAxis = vNewRotateAxis; f_Angle = fNewAngle; if (fNewAngle != 0.0) @@ -920,55 +920,55 @@ void TSubModel::SetRotate(float3 vNewRotateAxis, float fNewAngle) b_Anim = at_Rotate; b_aAnim = at_Rotate; } - iAnimOwner = iInstance; // zapamitanie czyja jest animacja + iAnimOwner = iInstance; // zapamiętanie czyja jest animacja } void TSubModel::SetRotateXYZ(float3 vNewAngles) -{ // obrcenie submodelu o - // podane kty wok osi - // lokalnego ukadu +{ // obrócenie submodelu o + // podane kąty wokół osi + // lokalnego układu v_Angles = vNewAngles; b_Anim = at_RotateXYZ; b_aAnim = at_RotateXYZ; - iAnimOwner = iInstance; // zapamitanie czyja jest animacja + iAnimOwner = iInstance; // zapamiętanie czyja jest animacja } void TSubModel::SetRotateXYZ(vector3 vNewAngles) -{ // obrcenie submodelu o - // podane kty wok osi - // lokalnego ukadu +{ // obrócenie submodelu o + // podane kąty wokół osi + // lokalnego układu v_Angles.x = vNewAngles.x; v_Angles.y = vNewAngles.y; v_Angles.z = vNewAngles.z; b_Anim = at_RotateXYZ; b_aAnim = at_RotateXYZ; - iAnimOwner = iInstance; // zapamitanie czyja jest animacja + iAnimOwner = iInstance; // zapamiętanie czyja jest animacja } void TSubModel::SetTranslate(float3 vNewTransVector) -{ // przesunicie submodelu (np. w kabinie) +{ // przesunięcie submodelu (np. w kabinie) v_TransVector = vNewTransVector; b_Anim = at_Translate; b_aAnim = at_Translate; - iAnimOwner = iInstance; // zapamitanie czyja jest animacja + iAnimOwner = iInstance; // zapamiętanie czyja jest animacja } void TSubModel::SetTranslate(vector3 vNewTransVector) -{ // przesunicie submodelu (np. w kabinie) +{ // przesunięcie submodelu (np. w kabinie) v_TransVector.x = vNewTransVector.x; v_TransVector.y = vNewTransVector.y; v_TransVector.z = vNewTransVector.z; b_Anim = at_Translate; b_aAnim = at_Translate; - iAnimOwner = iInstance; // zapamitanie czyja jest animacja + iAnimOwner = iInstance; // zapamiętanie czyja jest animacja } void TSubModel::SetRotateIK1(float3 vNewAngles) -{ // obrcenie submodelu o - // podane kty wok osi - // lokalnego ukadu +{ // obrócenie submodelu o + // podane kąty wokół osi + // lokalnego układu v_Angles = vNewAngles; - iAnimOwner = iInstance; // zapamitanie czyja jest animacja + iAnimOwner = iInstance; // zapamiętanie czyja jest animacja } struct ToLower @@ -1013,15 +1013,15 @@ TSubModel * TSubModel::GetFromName(char const *search, bool i) // WORD hbIndices[18]={3,0,1,5,4,2,1,0,4,1,5,3,2,3,5,2,4,0}; void TSubModel::RaAnimation(TAnimType a) -{ // wykonanie animacji niezalenie od renderowania +{ // wykonanie animacji niezależnie od renderowania switch (a) - { // korekcja pooenia, jeli submodel jest animowany - case at_Translate: // Ra: byo "true" + { // korekcja położenia, jeśli submodel jest animowany + case at_Translate: // Ra: było "true" if (iAnimOwner != iInstance) break; // cudza animacja glTranslatef(v_TransVector.x, v_TransVector.y, v_TransVector.z); break; - case at_Rotate: // Ra: byo "true" + case at_Rotate: // Ra: było "true" if (iAnimOwner != iInstance) break; // cudza animacja glRotatef(f_Angle, v_RotateAxis.x, v_RotateAxis.y, v_RotateAxis.z); @@ -1040,60 +1040,60 @@ void TSubModel::RaAnimation(TAnimType a) case at_MinutesJump: // minuty z przeskokiem glRotatef(GlobalTime->mm * 6.0, 0.0, 1.0, 0.0); break; - case at_HoursJump: // godziny skokowo 12h/360 + case at_HoursJump: // godziny skokowo 12h/360° glRotatef(GlobalTime->hh * 30.0 * 0.5, 0.0, 1.0, 0.0); break; - case at_Hours24Jump: // godziny skokowo 24h/360 + case at_Hours24Jump: // godziny skokowo 24h/360° glRotatef(GlobalTime->hh * 15.0 * 0.25, 0.0, 1.0, 0.0); break; - case at_Seconds: // sekundy pynnie + case at_Seconds: // sekundy płynnie glRotatef(GlobalTime->mr * 6.0, 0.0, 1.0, 0.0); break; - case at_Minutes: // minuty pynnie + case at_Minutes: // minuty płynnie glRotatef(GlobalTime->mm * 6.0 + GlobalTime->mr * 0.1, 0.0, 1.0, 0.0); break; - case at_Hours: // godziny pynnie 12h/360 + case at_Hours: // godziny płynnie 12h/360° // glRotatef(GlobalTime->hh*30.0+GlobalTime->mm*0.5+GlobalTime->mr/120.0,0.0,1.0,0.0); glRotatef(2.0 * Global::fTimeAngleDeg, 0.0, 1.0, 0.0); break; - case at_Hours24: // godziny pynnie 24h/360 + case at_Hours24: // godziny płynnie 24h/360° // glRotatef(GlobalTime->hh*15.0+GlobalTime->mm*0.25+GlobalTime->mr/240.0,0.0,1.0,0.0); glRotatef(Global::fTimeAngleDeg, 0.0, 1.0, 0.0); break; - case at_Billboard: // obrt w pionie do kamery + case at_Billboard: // obrót w pionie do kamery { - matrix4x4 mat; // potrzebujemy wsprzdne przesunicia rodka ukadu - // wsprzdnych submodelu + matrix4x4 mat; // potrzebujemy współrzędne przesunięcia środka układu + // współrzędnych submodelu glGetDoublev(GL_MODELVIEW_MATRIX, mat.getArray()); // pobranie aktualnej matrycy float3 gdzie = float3(mat[3][0], mat[3][1], - mat[3][2]); // pocztek ukadu wsprzdnych submodelu wzgldem kamery + mat[3][2]); // początek układu współrzędnych submodelu względem kamery glLoadIdentity(); // macierz jedynkowa - glTranslatef(gdzie.x, gdzie.y, gdzie.z); // pocztek ukadu zostaje bez + glTranslatef(gdzie.x, gdzie.y, gdzie.z); // początek układu zostaje bez // zmian glRotated(atan2(gdzie.x, gdzie.z) * 180.0 / M_PI, 0.0, 1.0, - 0.0); // jedynie obracamy w pionie o kt + 0.0); // jedynie obracamy w pionie o kąt } break; - case at_Wind: // ruch pod wpywem wiatru (wiatr bdziemy liczy potem...) + case at_Wind: // ruch pod wpływem wiatru (wiatr będziemy liczyć potem...) glRotated(1.5 * sin(M_PI * GlobalTime->mr / 6.0), 0.0, 1.0, 0.0); break; case at_Sky: // animacja nieba - glRotated(Global::fLatitudeDeg, 1.0, 0.0, 0.0); // ustawienie osi OY na pnoc - // glRotatef(Global::fTimeAngleDeg,0.0,1.0,0.0); //obrt dobowy osi OX - glRotated(-fmod(Global::fTimeAngleDeg, 360.0), 0.0, 1.0, 0.0); // obrt dobowy osi OX + glRotated(Global::fLatitudeDeg, 1.0, 0.0, 0.0); // ustawienie osi OY na północ + // glRotatef(Global::fTimeAngleDeg,0.0,1.0,0.0); //obrót dobowy osi OX + glRotated(-fmod(Global::fTimeAngleDeg, 360.0), 0.0, 1.0, 0.0); // obrót dobowy osi OX break; case at_IK11: // ostatni element animacji szkieletowej (podudzie, stopa) - glRotatef(v_Angles.z, 0.0, 1.0, 0.0); // obrt wzgldem osi pionowej + glRotatef(v_Angles.z, 0.0, 1.0, 0.0); // obrót względem osi pionowej // (azymut) - glRotatef(v_Angles.x, 1.0, 0.0, 0.0); // obrt wzgldem poziomu (deklinacja) + glRotatef(v_Angles.x, 1.0, 0.0, 0.0); // obrót względem poziomu (deklinacja) break; case at_DigiClk: // animacja zegara cyfrowego { // ustawienie animacji w submodelach potomnych TSubModel *sm = ChildGet(); do - { // ptla po submodelach potomnych i obracanie ich o kt zaley od czasu + { // pętla po submodelach potomnych i obracanie ich o kąt zależy od czasu if (sm->pName) - { // musi mie niepust nazw + { // musi mieć niepustą nazwę if ((sm->pName[0]) >= '0') if ((sm->pName[0]) <= '5') // zegarek ma 6 cyfr maksymalnie sm->SetRotate(float3(0, 1, 0), @@ -1104,15 +1104,15 @@ void TSubModel::RaAnimation(TAnimType a) } break; } - if (mAnimMatrix) // mona by to da np. do at_Translate + if (mAnimMatrix) // można by to dać np. do at_Translate { glMultMatrixf(mAnimMatrix->readArray()); - mAnimMatrix = NULL; // jak animator bdzie potrzebowa, to ustawi ponownie + mAnimMatrix = NULL; // jak animator będzie potrzebował, to ustawi ponownie } }; void TSubModel::RenderDL() -{ // gwna procedura renderowania przez DL +{ // główna procedura renderowania przez DL if (iVisible && (fSquareDist >= fSquareMinDist) && (fSquareDist < fSquareMaxDist)) { if (iFlags & 0xC000) @@ -1124,16 +1124,16 @@ void TSubModel::RenderDL() RaAnimation(b_Anim); } if (eType < TP_ROTATOR) - { // renderowanie obiektw OpenGL + { // renderowanie obiektów OpenGL if (iAlpha & iFlags & 0x1F) // rysuj gdy element nieprzezroczysty { if (TextureID < 0) // && (ReplacableSkinId!=0)) - { // zmienialne skry + { // zmienialne skóry glBindTexture(GL_TEXTURE_2D, ReplacableSkinId[-TextureID]); // TexAlpha=!(iAlpha&1); //zmiana tylko w przypadku wymienej tekstury } else - glBindTexture(GL_TEXTURE_2D, TextureID); // rwnie 0 + glBindTexture(GL_TEXTURE_2D, TextureID); // również 0 if (Global::fLuminance < fLight) { glMaterialfv(GL_FRONT, GL_EMISSION, f4Diffuse); // zeby swiecilo na kolorowo @@ -1146,16 +1146,16 @@ void TSubModel::RenderDL() } else if (eType == TP_FREESPOTLIGHT) { // wersja DL - matrix4x4 mat; // macierz opisuje ukad renderowania wzgldem kamery + matrix4x4 mat; // macierz opisuje układ renderowania względem kamery glGetDoublev(GL_MODELVIEW_MATRIX, mat.getArray()); - // kt midzy kierunkiem wiata a wsprzdnymi kamery - vector3 gdzie = mat * vector3(0, 0, 0); // pozycja punktu wieccego wzgldem kamery + // kąt między kierunkiem światła a współrzędnymi kamery + vector3 gdzie = mat * vector3(0, 0, 0); // pozycja punktu świecącego względem kamery fCosViewAngle = DotProduct(Normalize(mat * vector3(0, 0, 1) - gdzie), Normalize(gdzie)); - if (fCosViewAngle > fCosFalloffAngle) // kt wikszy ni maksymalny stoek swiata + if (fCosViewAngle > fCosFalloffAngle) // kąt większy niż maksymalny stożek swiatła { double Distdimm = 1.0; if (fCosViewAngle < - fCosHotspotAngle) // zmniejszona jasno midzy Hotspot a Falloff + fCosHotspotAngle) // zmniejszona jasność między Hotspot a Falloff if (fCosFalloffAngle < fCosHotspotAngle) Distdimm = 1.0 - (fCosHotspotAngle - fCosViewAngle) / @@ -1181,7 +1181,7 @@ void TSubModel::RenderDL() */ // glPopMatrix(); // return; - glCallList(uiDisplayList); // wywietlenie warunkowe + glCallList(uiDisplayList); // wyświetlenie warunkowe } } else if (eType == TP_STARS) @@ -1202,7 +1202,7 @@ void TSubModel::RenderDL() glPopMatrix(); } if (b_Anim < at_SecondsJump) - b_Anim = at_None; // wyczenie animacji dla kolejnego uycia subm + b_Anim = at_None; // wyłączenie animacji dla kolejnego użycia subm if (Next) if (iAlpha & iFlags & 0x1F000000) Next->RenderDL(); // dalsze rekurencyjnie @@ -1221,16 +1221,16 @@ void TSubModel::RenderAlphaDL() RaAnimation(b_aAnim); } if (eType < TP_ROTATOR) - { // renderowanie obiektw OpenGL + { // renderowanie obiektów OpenGL if (iAlpha & iFlags & 0x2F) // rysuj gdy element przezroczysty { if (TextureID < 0) // && (ReplacableSkinId!=0)) - { // zmienialne skry + { // zmienialne skóry glBindTexture(GL_TEXTURE_2D, ReplacableSkinId[-TextureID]); // TexAlpha=iAlpha&1; //zmiana tylko w przypadku wymienej tekstury } else - glBindTexture(GL_TEXTURE_2D, TextureID); // rwnie 0 + glBindTexture(GL_TEXTURE_2D, TextureID); // również 0 if (Global::fLuminance < fLight) { glMaterialfv(GL_FRONT, GL_EMISSION, f4Diffuse); // zeby swiecilo na kolorowo @@ -1243,22 +1243,22 @@ void TSubModel::RenderAlphaDL() } else if (eType == TP_FREESPOTLIGHT) { - // dorobi aureol! + // dorobić aureolę! } if (Child != NULL) if (eType == TP_TEXT) - { // tekst renderujemy w specjalny sposb, zamiast - // submodeli z acucha Child + { // tekst renderujemy w specjalny sposób, zamiast + // submodeli z łańcucha Child int i, j = pasText->size(); TSubModel *p; char c; if (!smLetter) - { // jeli nie ma tablicy, to j stworzy; miejsce + { // jeśli nie ma tablicy, to ją stworzyć; miejsce // nieodpowiednie, ale tymczasowo - // moe by - smLetter = new TSubModel *[256]; // tablica wskanikw submodeli dla - // wywietlania tekstu - ZeroMemory(smLetter, 256 * sizeof(TSubModel *)); // wypenianie zerami + // może być + smLetter = new TSubModel *[256]; // tablica wskaźników submodeli dla + // wyświetlania tekstu + ZeroMemory(smLetter, 256 * sizeof(TSubModel *)); // wypełnianie zerami p = Child; while (p) { @@ -1268,7 +1268,7 @@ void TSubModel::RenderAlphaDL() } for (i = 1; i <= j; ++i) { - p = smLetter[(*pasText)[i]]; // znak do wywietlenia + p = smLetter[(*pasText)[i]]; // znak do wyświetlenia if (p) { // na razie tylko jako przezroczyste p->RenderAlphaDL(); @@ -1283,14 +1283,14 @@ void TSubModel::RenderAlphaDL() glPopMatrix(); } if (b_aAnim < at_SecondsJump) - b_aAnim = at_None; // wyczenie animacji dla kolejnego uycia submodelu + b_aAnim = at_None; // wyłączenie animacji dla kolejnego użycia submodelu if (Next != NULL) if (iAlpha & iFlags & 0x2F000000) Next->RenderAlphaDL(); }; // RenderAlpha void TSubModel::RenderVBO() -{ // gwna procedura renderowania przez VBO +{ // główna procedura renderowania przez VBO if (iVisible && (fSquareDist >= fSquareMinDist) && (fSquareDist < fSquareMaxDist)) { if (iFlags & 0xC000) @@ -1302,16 +1302,16 @@ void TSubModel::RenderVBO() RaAnimation(b_Anim); } if (eType < TP_ROTATOR) - { // renderowanie obiektw OpenGL + { // renderowanie obiektów OpenGL if (iAlpha & iFlags & 0x1F) // rysuj gdy element nieprzezroczysty { if (TextureID < 0) // && (ReplacableSkinId!=0)) - { // zmienialne skry + { // zmienialne skóry glBindTexture(GL_TEXTURE_2D, ReplacableSkinId[-TextureID]); // TexAlpha=!(iAlpha&1); //zmiana tylko w przypadku wymienej tekstury } else - glBindTexture(GL_TEXTURE_2D, TextureID); // rwnie 0 + glBindTexture(GL_TEXTURE_2D, TextureID); // również 0 glColor3fv(f4Diffuse); // McZapkie-240702: zamiast ub // glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,f4Diffuse); //to samo, // co glColor @@ -1319,26 +1319,26 @@ void TSubModel::RenderVBO() { glMaterialfv(GL_FRONT, GL_EMISSION, f4Diffuse); // zeby swiecilo na kolorowo glDrawArrays(eType, iVboPtr, - iNumVerts); // narysuj naraz wszystkie trjkty z VBO + iNumVerts); // narysuj naraz wszystkie trójkąty z VBO glMaterialfv(GL_FRONT, GL_EMISSION, emm2); } else glDrawArrays(eType, iVboPtr, - iNumVerts); // narysuj naraz wszystkie trjkty z VBO + iNumVerts); // narysuj naraz wszystkie trójkąty z VBO } } else if (eType == TP_FREESPOTLIGHT) { // wersja VBO - matrix4x4 mat; // macierz opisuje ukad renderowania wzgldem kamery + matrix4x4 mat; // macierz opisuje układ renderowania względem kamery glGetDoublev(GL_MODELVIEW_MATRIX, mat.getArray()); - // kt midzy kierunkiem wiata a wsprzdnymi kamery - vector3 gdzie = mat * vector3(0, 0, 0); // pozycja punktu wieccego wzgldem kamery + // kąt między kierunkiem światła a współrzędnymi kamery + vector3 gdzie = mat * vector3(0, 0, 0); // pozycja punktu świecącego względem kamery fCosViewAngle = DotProduct(Normalize(mat * vector3(0, 0, 1) - gdzie), Normalize(gdzie)); - if (fCosViewAngle > fCosFalloffAngle) // kt wikszy ni maksymalny stoek swiata + if (fCosViewAngle > fCosFalloffAngle) // kąt większy niż maksymalny stożek swiatła { double Distdimm = 1.0; if (fCosViewAngle < - fCosHotspotAngle) // zmniejszona jasno midzy Hotspot a Falloff + fCosHotspotAngle) // zmniejszona jasność między Hotspot a Falloff if (fCosFalloffAngle < fCosHotspotAngle) Distdimm = 1.0 - (fCosHotspotAngle - fCosViewAngle) / @@ -1378,7 +1378,7 @@ void TSubModel::RenderVBO() Distdimm=1; */ - glBindTexture(GL_TEXTURE_2D, 0); // nie teksturowa + glBindTexture(GL_TEXTURE_2D, 0); // nie teksturować // glColor3f(f4Diffuse[0],f4Diffuse[1],f4Diffuse[2]); // glColorMaterial(GL_FRONT,GL_EMISSION); float color[4] = {f4Diffuse[0] * Distdimm, f4Diffuse[1] * Distdimm, @@ -1387,13 +1387,13 @@ void TSubModel::RenderVBO() glColorMaterial(GL_FRONT, GL_EMISSION); glDisable(GL_LIGHTING); // Tolaris-030603: bo mu punkty swiecace sie // blendowaly - glColor3fv(color); // inaczej s biae + glColor3fv(color); // inaczej są białe glMaterialfv(GL_FRONT, GL_EMISSION, color); - glDrawArrays(GL_POINTS, iVboPtr, iNumVerts); // narysuj wierzchoek z + glDrawArrays(GL_POINTS, iVboPtr, iNumVerts); // narysuj wierzchołek z // VBO glEnable(GL_LIGHTING); - glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); // co ma ustawia glColor - glMaterialfv(GL_FRONT, GL_EMISSION, emm2); // bez tego supy si wiec + glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); // co ma ustawiać glColor + glMaterialfv(GL_FRONT, GL_EMISSION, emm2); // bez tego słupy się świecą } } else if (eType == TP_STARS) @@ -1401,12 +1401,12 @@ void TSubModel::RenderVBO() // glDisable(GL_LIGHTING); //Tolaris-030603: bo mu punkty swiecace sie // blendowaly if (Global::fLuminance < fLight) - { // Ra: pewnie mona by to zrobi + { // Ra: pewnie można by to zrobić // lepiej, bez powtarzania StartVBO() - pRoot->EndVBO(); // Ra: to te nie jest zbyt adne + pRoot->EndVBO(); // Ra: to też nie jest zbyt ładne if (pRoot->StartColorVBO()) - { // wywietlanie kolorowych punktw zamiast - // trjktw + { // wyświetlanie kolorowych punktów zamiast + // trójkątów glBindTexture(GL_TEXTURE_2D, 0); // tekstury nie ma glColorMaterial(GL_FRONT, GL_EMISSION); glDisable(GL_LIGHTING); // Tolaris-030603: bo mu punkty swiecace sie @@ -1423,7 +1423,7 @@ void TSubModel::RenderVBO() } } } - /*Ra: tu co jest bez sensu... + /*Ra: tu coś jest bez sensu... else { glBindTexture(GL_TEXTURE_2D, 0); @@ -1440,7 +1440,7 @@ void TSubModel::RenderVBO() swiecace sie blendowaly //glBegin(GL_POINTS); glDrawArrays(GL_POINTS,iVboPtr,iNumVerts); //narysuj - wierzchoek z VBO + wierzchołek z VBO // glVertex3f(0,0,0); //glEnd(); glEnable(GL_LIGHTING); @@ -1456,7 +1456,7 @@ void TSubModel::RenderVBO() glPopMatrix(); } if (b_Anim < at_SecondsJump) - b_Anim = at_None; // wyczenie animacji dla kolejnego uycia submodelu + b_Anim = at_None; // wyłączenie animacji dla kolejnego użycia submodelu if (Next) if (iAlpha & iFlags & 0x1F000000) Next->RenderVBO(); // dalsze rekurencyjnie @@ -1468,7 +1468,7 @@ void TSubModel::RenderAlphaVBO() { if (iFlags & 0xC000) { - glPushMatrix(); // zapamitanie matrycy + glPushMatrix(); // zapamiętanie matrycy if (fMatrix) glMultMatrixf(fMatrix->readArray()); if (b_aAnim) @@ -1476,7 +1476,7 @@ void TSubModel::RenderAlphaVBO() } glColor3fv(f4Diffuse); if (eType < TP_ROTATOR) - { // renderowanie obiektw OpenGL + { // renderowanie obiektów OpenGL if (iAlpha & iFlags & 0x2F) // rysuj gdy element przezroczysty { if (TextureID < 0) // && (ReplacableSkinId!=0)) @@ -1485,22 +1485,22 @@ void TSubModel::RenderAlphaVBO() // TexAlpha=iAlpha&1; //zmiana tylko w przypadku wymienej tekstury } else - glBindTexture(GL_TEXTURE_2D, TextureID); // rwnie 0 + glBindTexture(GL_TEXTURE_2D, TextureID); // również 0 if (Global::fLuminance < fLight) { glMaterialfv(GL_FRONT, GL_EMISSION, f4Diffuse); // zeby swiecilo na kolorowo glDrawArrays(eType, iVboPtr, - iNumVerts); // narysuj naraz wszystkie trjkty z VBO + iNumVerts); // narysuj naraz wszystkie trójkąty z VBO glMaterialfv(GL_FRONT, GL_EMISSION, emm2); } else glDrawArrays(eType, iVboPtr, - iNumVerts); // narysuj naraz wszystkie trjkty z VBO + iNumVerts); // narysuj naraz wszystkie trójkąty z VBO } } else if (eType == TP_FREESPOTLIGHT) { - // dorobi aureol! + // dorobić aureolę! } if (Child) if (iAlpha & iFlags & 0x002F0000) @@ -1509,7 +1509,7 @@ void TSubModel::RenderAlphaVBO() glPopMatrix(); } if (b_aAnim < at_SecondsJump) - b_aAnim = at_None; // wyczenie animacji dla kolejnego uycia submodelu + b_aAnim = at_None; // wyłączenie animacji dla kolejnego użycia submodelu if (Next) if (iAlpha & iFlags & 0x2F000000) Next->RenderAlphaVBO(); @@ -1518,7 +1518,7 @@ void TSubModel::RenderAlphaVBO() //--------------------------------------------------------------------------- void TSubModel::RaArrayFill(CVertNormTex *Vert) -{ // wypenianie tablic VBO +{ // wypełnianie tablic VBO if (Child) Child->RaArrayFill(Vert); if ((eType < TP_ROTATOR) || (eType == TP_STARS)) @@ -1544,17 +1544,17 @@ void TSubModel::Info() // pomocniczego TSubModelInfo *info = TSubModelInfo::pTable + TSubModelInfo::iCurrent; info->pSubModel = this; - if (fMatrix && (iFlags & 0x8000)) // ma matryc i jest ona niejednostkowa + if (fMatrix && (iFlags & 0x8000)) // ma matrycę i jest ona niejednostkowa info->iTransform = info->iTotalTransforms++; if (TextureID > 0) - { // jeli ma tekstur niewymienn + { // jeśli ma teksturę niewymienną for (int i = 0; i < info->iCurrent; ++i) - if (TextureID == info->pTable[i].pSubModel->TextureID) // porwnanie z wczeniejszym + if (TextureID == info->pTable[i].pSubModel->TextureID) // porównanie z wcześniejszym { - info->iTexture = info->pTable[i].iTexture; // taki jaki ju by + info->iTexture = info->pTable[i].iTexture; // taki jaki już był break; // koniec sprawdzania } - if (info->iTexture < 0) // jeli nie znaleziono we wczeniejszych + if (info->iTexture < 0) // jeśli nie znaleziono we wcześniejszych { info->iTexture = ++info->iTotalTextures; // przydzielenie numeru tekstury // w pliku (od 1) @@ -1563,11 +1563,11 @@ void TSubModel::Info() if( t.substr( t.rfind( '.' ) ) == ".tga" ) { t.erase( t.rfind( '.' ) ); } else if( t.substr( t.rfind( '.' ) ) == ".dds" ) { t.erase( t.rfind( '.' ) ); } if (t != std::string(pTexture)) - { // jeli si zmienio - // pName=new char[token.length()+1]; //nie ma sensu skraca tabeli + { // jeśli się zmieniło + // pName=new char[token.length()+1]; //nie ma sensu skracać tabeli strcpy(pTexture, t.c_str()); } - info->iTextureLen = t.size() + 1; // przygotowanie do zapisania, z zerem na kocu + info->iTextureLen = t.size() + 1; // przygotowanie do zapisania, z zerem na końcu } } else @@ -1576,9 +1576,9 @@ void TSubModel::Info() if (pName) { info->iName = info->iTotalNames++; // przydzielenie numeru nazwy w pliku (od 0) - info->iNameLen = strlen(pName) + 1; // z zerem na kocu + info->iNameLen = strlen(pName) + 1; // z zerem na końcu } - ++info->iCurrent; // przejcie do kolejnego obiektu pomocniczego + ++info->iCurrent; // przejście do kolejnego obiektu pomocniczego if (Child) { info->iChild = info->iCurrent; @@ -1595,14 +1595,14 @@ void TSubModel::InfoSet(TSubModelInfo *info) { // ustawienie danych wg obiektu // pomocniczego do zapisania w // pliku - int ile = (char *)&uiDisplayList - (char *)&eType; // ilo bajtw pomidzy tymi zmiennymi - ZeroMemory(this, sizeof(TSubModel)); // zerowaie caoci - CopyMemory(this, info->pSubModel, ile); // skopiowanie pamici 1:1 + int ile = (char *)&uiDisplayList - (char *)&eType; // ilość bajtów pomiędzy tymi zmiennymi + ZeroMemory(this, sizeof(TSubModel)); // zerowaie całości + CopyMemory(this, info->pSubModel, ile); // skopiowanie pamięci 1:1 iTexture = info->iTexture; // numer nazwy tekstury, a nie numer w OpenGL TextureID = info->iTexture; // numer tekstury w OpenGL iName = info->iName; // numer nazwy w obszarze nazw iMatrix = info->iTransform; // numer macierzy - Next = (TSubModel *)info->iNext; // numer nastpnego + Next = (TSubModel *)info->iNext; // numer następnego Child = (TSubModel *)info->iChild; // numer potomnego iFlags &= ~0x200; // nie jest wczytany z tekstowego // asTexture=asName=""; @@ -1611,10 +1611,10 @@ void TSubModel::InfoSet(TSubModelInfo *info) void TSubModel::BinInit(TSubModel *s, float4x4 *m, float8 *v, TStringPack *t, TStringPack *n, bool dynamic) -{ // ustawienie wskanikw w submodelu - iVisible = 1; // tymczasowo uywane - Child = ((int)Child > 0) ? s + (int)Child : NULL; // zerowy nie moe by potomnym - Next = ((int)Next > 0) ? s + (int)Next : NULL; // zerowy nie moe by nastpnym +{ // ustawienie wskaźników w submodelu + iVisible = 1; // tymczasowo używane + Child = ((int)Child > 0) ? s + (int)Child : NULL; // zerowy nie może być potomnym + Next = ((int)Next > 0) ? s + (int)Next : NULL; // zerowy nie może być następnym fMatrix = ((iMatrix >= 0) && m) ? m + iMatrix : NULL; // if (n&&(iName>=0)) asName=AnsiString(n->String(iName)); else asName=""; if (n && (iName >= 0)) @@ -1622,15 +1622,15 @@ void TSubModel::BinInit(TSubModel *s, float4x4 *m, float8 *v, TStringPack *t, TS pName = n->String(iName); std::string name(pName); if( false == name.empty() ) - { // jeli dany submodel jest zgaszonym wiatem, to - // domylnie go ukrywamy - if( (name.size() >= 8) && (name.substr( 0, 8 ) == "Light_On") ) {// jeli jest wiatem numerowanym - iVisible = 0; // to domylnie wyczy, eby si nie nakadao z + { // jeśli dany submodel jest zgaszonym światłem, to + // domyślnie go ukrywamy + if( (name.size() >= 8) && (name.substr( 0, 8 ) == "Light_On") ) {// jeśli jest światłem numerowanym + iVisible = 0; // to domyślnie wyłączyć, żeby się nie nakładało z } // obiektem "Light_Off" - else if( dynamic ) {// inaczej wyczao smug w latarniach - if( (name.size() >= 3) && (name.substr( name.size() - 3, 3 ) == "_on") ) {// jeli jest kontrolk w stanie zapalonym - iVisible = 0; // to domylnie wyczy, eby si nie nakadao z + else if( dynamic ) {// inaczej wyłączało smugę w latarniach + if( (name.size() >= 3) && (name.substr( name.size() - 3, 3 ) == "_on") ) {// jeśli jest kontrolką w stanie zapalonym + iVisible = 0; // to domyślnie wyłączyć, żeby się nie nakładało z } } // obiektem "_off" @@ -1639,7 +1639,7 @@ void TSubModel::BinInit(TSubModel *s, float4x4 *m, float8 *v, TStringPack *t, TS else pName = NULL; if (iTexture > 0) - { // obsuga staej tekstury + { // obsługa stałej tekstury // TextureID=TTexturesManager::GetTextureID(t->String(TextureID)); // asTexture=AnsiString(t->String(iTexture)); pTexture = t->String(iTexture); @@ -1649,11 +1649,11 @@ void TSubModel::BinInit(TSubModel *s, float4x4 *m, float8 *v, TStringPack *t, TS TextureID = TTexturesManager::GetTextureID( szTexturePath, const_cast(Global::asCurrentTexturePath.c_str()), tex); // TexAlpha=TTexturesManager::GetAlpha(TextureID); //zmienna robocza - // ustawienie cyklu przezroczyste/nieprzezroczyste zalenie od wasnoci - // staej tekstury + // ustawienie cyklu przezroczyste/nieprzezroczyste zależnie od własności + // stałej tekstury // iFlags=(iFlags&~0x30)|(TTexturesManager::GetAlpha(TextureID)?0x20:0x10); // //0x10-nieprzezroczysta, 0x20-przezroczysta - if (Opacity < 1.0) // przezroczysto z tekstury brana tylko dla Opacity 0! + if (Opacity < 1.0) // przezroczystość z tekstury brana tylko dla Opacity 0! iFlags |= TTexturesManager::GetAlpha(TextureID) ? 0x20 : 0x10; // 0x10-nieprzezroczysta, 0x20-przezroczysta @@ -1661,15 +1661,15 @@ void TSubModel::BinInit(TSubModel *s, float4x4 *m, float8 *v, TStringPack *t, TS iFlags |= 0x10; // normalnie nieprzezroczyste } b_aAnim = b_Anim; // skopiowanie animacji do drugiego cyklu - iFlags &= ~0x0200; // wczytano z pliku binarnego (nie jest wacicielem + iFlags &= ~0x0200; // wczytano z pliku binarnego (nie jest właścicielem // tablic) Vertices = v + iVboPtr; - // if (!iNumVerts) eType=-1; //tymczasowo zmiana typu, eby si nie - // renderowao na si + // if (!iNumVerts) eType=-1; //tymczasowo zmiana typu, żeby się nie + // renderowało na siłę }; void TSubModel::AdjustDist() -{ // aktualizacja odlegoci faz LoD, zalena od - // rozdzielczoci pionowej oraz multisamplingu +{ // aktualizacja odległości faz LoD, zależna od + // rozdzielczości pionowej oraz multisamplingu if (fSquareMaxDist > 0.0) fSquareMaxDist *= Global::fDistanceFactor; if (fSquareMinDist > 0.0) @@ -1683,7 +1683,7 @@ void TSubModel::AdjustDist() }; void TSubModel::ColorsSet(int *a, int *d, int *s) -{ // ustawienie kolorw dla modelu terenu +{ // ustawienie kolorów dla modelu terenu int i; if (a) for (i = 0; i < 4; ++i) @@ -1696,27 +1696,27 @@ void TSubModel::ColorsSet(int *a, int *d, int *s) f4Specular[i] = s[i] / 255.0; }; void TSubModel::ParentMatrix(float4x4 *m) -{ // pobranie transformacji wzgldem wstawienia modelu - // jeli nie zostao wykonane Init() (tzn. zaraz po wczytaniu T3D), to - // dodatkowy obrt - // obrt T3D jest wymagany np. do policzenia wysokoci pantografw - *m = float4x4(*fMatrix); // skopiowanie, bo bdziemy mnoy - // m(3)[1]=m[3][1]+0.054; //w gr o wysoko lizgu (na razie tak) +{ // pobranie transformacji względem wstawienia modelu + // jeśli nie zostało wykonane Init() (tzn. zaraz po wczytaniu T3D), to + // dodatkowy obrót + // obrót T3D jest wymagany np. do policzenia wysokości pantografów + *m = float4x4(*fMatrix); // skopiowanie, bo będziemy mnożyć + // m(3)[1]=m[3][1]+0.054; //w górę o wysokość ślizgu (na razie tak) TSubModel *sm = this; while (sm->Parent) - { // przenie t funkcj do modelu + { // przenieść tę funkcję do modelu if (sm->Parent->GetMatrix()) *m = *sm->Parent->GetMatrix() * *m; sm = sm->Parent; } - // dla ostatniego moe by potrzebny dodatkowy obrt, jeli wczytano z T3D, a - // nie obrcono jeszcze + // dla ostatniego może być potrzebny dodatkowy obrót, jeśli wczytano z T3D, a + // nie obrócono jeszcze }; float TSubModel::MaxY(const float4x4 &m) -{ // obliczenie maksymalnej wysokoci, - // na pocztek lizgu w pantografie +{ // obliczenie maksymalnej wysokości, + // na początek ślizgu w pantografie if (eType != 4) - return 0; // tylko dla trjktw liczymy + return 0; // tylko dla trójkątów liczymy if (iNumVerts < 1) return 0; if (!Vertices) @@ -1742,7 +1742,7 @@ TModel3d::TModel3d() iFlags = 0; iSubModelsCount = 0; iModel = NULL; // tylko jak wczytany model binarny - iNumVerts = 0; // nie ma jeszcze wierzchokw + iNumVerts = 0; // nie ma jeszcze wierzchołków }; /* TModel3d::TModel3d(char *FileName) @@ -1760,41 +1760,41 @@ TModel3d::~TModel3d() { // SafeDeleteArray(Materials); if (iFlags & 0x0200) - { // wczytany z pliku tekstowego, submodele sprztaj + { // wczytany z pliku tekstowego, submodele sprzątają // same - SafeDelete(Root); // submodele si usun rekurencyjnie + SafeDelete(Root); // submodele się usuną rekurencyjnie } else - { // wczytano z pliku binarnego (jest wacicielem tablic) - m_pVNT = NULL; // nie usuwa tego, bo wskazuje na iModel + { // wczytano z pliku binarnego (jest właścicielem tablic) + m_pVNT = NULL; // nie usuwać tego, bo wskazuje na iModel Root = NULL; - delete[] iModel; // usuwamy cay wczytany plik i to wystarczy + delete[] iModel; // usuwamy cały wczytany plik i to wystarczy } - // pniej si jeszcze usuwa obiekt z ktrego dziedziczymy tabel VBO + // później się jeszcze usuwa obiekt z którego dziedziczymy tabelę VBO }; TSubModel * TModel3d::AddToNamed(const char *Name, TSubModel *SubModel) { TSubModel *sm = Name ? GetFromName(Name) : NULL; - AddTo(sm, SubModel); // szukanie nadrzdnego - return sm; // zwracamy wskanik do nadrzdnego submodelu + AddTo(sm, SubModel); // szukanie nadrzędnego + return sm; // zwracamy wskaźnik do nadrzędnego submodelu }; void TModel3d::AddTo(TSubModel *tmp, TSubModel *SubModel) -{ // jedyny poprawny sposb dodawania - // submodeli, inaczej mog zgin +{ // jedyny poprawny sposób dodawania + // submodeli, inaczej mogą zginąć // przy zapisie E3D if (tmp) - { // jeli znaleziony, podczamy mu jako potomny + { // jeśli znaleziony, podłączamy mu jako potomny tmp->ChildAdd(SubModel); } else - { // jeli nie znaleziony, podczepiamy do acucha gwnego - SubModel->NextAdd(Root); // Ra: zmiana kolejnoci renderowania wymusza zmian tu + { // jeśli nie znaleziony, podczepiamy do łańcucha głównego + SubModel->NextAdd(Root); // Ra: zmiana kolejności renderowania wymusza zmianę tu Root = SubModel; } - ++iSubModelsCount; // teraz jest o 1 submodel wicej - iFlags |= 0x0200; // submodele s oddzielne + ++iSubModelsCount; // teraz jest o 1 submodel więcej + iFlags |= 0x0200; // submodele są oddzielne }; TSubModel * TModel3d::GetFromName(const char *sName) @@ -1803,7 +1803,7 @@ TSubModel * TModel3d::GetFromName(const char *sName) return Root; // potrzebne do terenu z E3D if (iFlags & 0x0200) // wczytany z pliku tekstowego, wyszukiwanie rekurencyjne return Root ? Root->GetFromName(sName) : NULL; - else // wczytano z pliku binarnego, mona wyszuka iteracyjnie + else // wczytano z pliku binarnego, można wyszukać iteracyjnie { // for (int i=0;iGetFromName(sName) : NULL; @@ -1832,7 +1832,7 @@ bool TModel3d::LoadFromFile(std::string const &FileName, bool dynamic) { if (FileExists(asBinary)) { LoadFromBinFile(asBinary, dynamic); - asBinary = ""; // wyczenie zapisu + asBinary = ""; // wyłączenie zapisu Init(); } else @@ -1854,93 +1854,93 @@ void TModel3d::LoadFromBinFile(std::string const &FileName, bool dynamic) /* TFileStream *fs = new TFileStream(AnsiString(FileName), fmOpenRead); size = fs->Size >> 2; - iModel = new int[size]; // ten wskanik musi by w modelu, aby zwolni pami + iModel = new int[size]; // ten wskaźnik musi być w modelu, aby zwolnić pamięć fs->Read(iModel, fs->Size); // wczytanie pliku delete fs; */ { std::ifstream file( FileName, std::ios::binary | std::ios::ate ); file.unsetf( std::ios::skipws ); size = file.tellg(); // ios::ate already positioned us at the end of the file - iModel = new int[ size >> 2 ]; // ten wskanik musi by w modelu, aby zwolni pami + iModel = new int[ size >> 2 ]; // ten wskaźnik musi być w modelu, aby zwolnić pamięć file.seekg( 0, std::ios::beg ); // rewind the caret afterwards file.read( reinterpret_cast(iModel), size ); } float4x4 *m = NULL; // transformy // zestaw kromek: - while ((i << 2) < size) // w pliku moe by kilka modeli + while ((i << 2) < size) // w pliku może być kilka modeli { ch = iModel[i]; // nazwa kromki - j = i + (iModel[i + 1] >> 2); // pocztek nastpnej kromki - if( ch == MAKE_ID4('E','3','D','0')) // gwna: 'E3D0',len,pod-kromki - { // tylko t kromk znamy, moe kiedy jeszcze DOF si zrobi + j = i + (iModel[i + 1] >> 2); // początek następnej kromki + if( ch == MAKE_ID4('E','3','D','0')) // główna: 'E3D0',len,pod-kromki + { // tylko tę kromkę znamy, może kiedyś jeszcze DOF się zrobi i += 2; while (i < j) - { // przetwarzanie kromek wewntrznych + { // przetwarzanie kromek wewnętrznych ch = iModel[ i ]; // nazwa kromki - k = (iModel[i + 1] >> 2); // dugo aktualnej kromki + k = (iModel[i + 1] >> 2); // długość aktualnej kromki switch (ch) { case MAKE_ID4('M','D','L','0'): // zmienne modelu: 'E3D0',len,(informacje o modelu) break; - case MAKE_ID4('V','N','T','0'): // wierzchoki: 'VNT0',len,(32 bajty na wierzchoek) + case MAKE_ID4('V','N','T','0'): // wierzchołki: 'VNT0',len,(32 bajty na wierzchołek) iNumVerts = (k - 2) >> 3; m_nVertexCount = iNumVerts; m_pVNT = (CVertNormTex *)(iModel + i + 2); break; - case MAKE_ID4('S','U','B','0'): // submodele: 'SUB0',len,(256 bajtw na submodel) + case MAKE_ID4('S','U','B','0'): // submodele: 'SUB0',len,(256 bajtów na submodel) iSubModelsCount = (k - 2) / 64; Root = - (TSubModel *)(iModel + i + 2); // numery na wskaniki przetworzymy pniej + (TSubModel *)(iModel + i + 2); // numery na wskaźniki przetworzymy później break; - case MAKE_ID4('S','U','B','1'): // submodele: 'SUB1',len,(320 bajtw na submodel) + case MAKE_ID4('S','U','B','1'): // submodele: 'SUB1',len,(320 bajtów na submodel) iSubModelsCount = (k - 2) / 80; Root = - (TSubModel *)(iModel + i + 2); // numery na wskaniki przetworzymy pniej + (TSubModel *)(iModel + i + 2); // numery na wskaźniki przetworzymy później for (ch = 1; ch < iSubModelsCount; - ++ch) // trzeba przesun bliej, bo 256 wystarczy + ++ch) // trzeba przesunąć bliżej, bo 256 wystarczy MoveMemory(((char *)Root) + 256 * ch, ((char *)Root) + 320 * ch, 256); break; case MAKE_ID4('T','R','A','0'): // transformy: 'TRA0',len,(64 bajty na transform) - m = (float4x4 *)(iModel + i + 2); // tabela transformw + m = (float4x4 *)(iModel + i + 2); // tabela transformów break; - case MAKE_ID4('T','R','A','1'): // transformy: 'TRA1',len,(128 bajtw na transform) - m = (float4x4 *)(iModel + i + 2); // tabela transformw + case MAKE_ID4('T','R','A','1'): // transformy: 'TRA1',len,(128 bajtów na transform) + m = (float4x4 *)(iModel + i + 2); // tabela transformów for (ch = 0; ch < ((k - 2) >> 1); ++ch) *(((float *)m) + ch) = *(((double *)m) + ch); // przepisanie double do float break; - case MAKE_ID4('I','D','X','1'): // indeksy 1B: 'IDX2',len,(po bajcie na numer wierzchoka) + case MAKE_ID4('I','D','X','1'): // indeksy 1B: 'IDX2',len,(po bajcie na numer wierzchołka) break; - case MAKE_ID4('I','D','X','2'): // indeksy 2B: 'IDX2',len,(po 2 bajty na numer wierzchoka) + case MAKE_ID4('I','D','X','2'): // indeksy 2B: 'IDX2',len,(po 2 bajty na numer wierzchołka) break; - case MAKE_ID4('I','D','X','4'): // indeksy 4B: 'IDX4',len,(po 4 bajty na numer wierzchoka) + case MAKE_ID4('I','D','X','4'): // indeksy 4B: 'IDX4',len,(po 4 bajty na numer wierzchołka) break; - case MAKE_ID4('T','E','X','0'): // tekstury: 'TEX0',len,(acuchy zakoczone zerem - pliki + case MAKE_ID4('T','E','X','0'): // tekstury: 'TEX0',len,(łańcuchy zakończone zerem - pliki // tekstur) - Textures.Init((char *)(iModel + i)); //cznie z nagwkiem + Textures.Init((char *)(iModel + i)); //łącznie z nagłówkiem break; case MAKE_ID4('T','I','X','0'): // indeks nazw tekstur - Textures.InitIndex((int *)(iModel + i)); //cznie z nagwkiem + Textures.InitIndex((int *)(iModel + i)); //łącznie z nagłówkiem break; - case MAKE_ID4('N','A','M','0'): // nazwy: 'NAM0',len,(acuchy zakoczone zerem - nazwy + case MAKE_ID4('N','A','M','0'): // nazwy: 'NAM0',len,(łańcuchy zakończone zerem - nazwy // submodeli) - Names.Init((char *)(iModel + i)); //cznie z nagwkiem + Names.Init((char *)(iModel + i)); //łącznie z nagłówkiem break; case MAKE_ID4('N','I','X','0'): // indeks nazw submodeli - Names.InitIndex((int *)(iModel + i)); //cznie z nagwkiem + Names.InitIndex((int *)(iModel + i)); //łącznie z nagłówkiem break; } - i += k; // przejcie do kolejnej kromki + i += k; // przejście do kolejnej kromki } } i = j; } for (i = 0; i < iSubModelsCount; ++i) - { // aktualizacja wskanikw w submodelach + { // aktualizacja wskaźników w submodelach Root[i].BinInit(Root, m, (float8 *)m_pVNT, &Textures, &Names, dynamic); if (Root[i].ChildGet()) - Root[i].ChildGet()->Parent = Root + i; // wpisanie wskanika nadrzdnego do potmnego + Root[i].ChildGet()->Parent = Root + i; // wpisanie wskaźnika nadrzędnego do potmnego if (Root[i].NextGet()) Root[i].NextGet()->Parent = - Root[i].Parent; // skopiowanie wskanika nadrzdnego do kolejnego + Root[i].Parent; // skopiowanie wskaźnika nadrzędnego do kolejnego } iFlags &= ~0x0200; return; @@ -1949,8 +1949,8 @@ void TModel3d::LoadFromBinFile(std::string const &FileName, bool dynamic) void TModel3d::LoadFromTextFile(std::string const &FileName, bool dynamic) { // wczytanie submodelu z pliku tekstowego WriteLog("Loading - text model: " + FileName); - iFlags |= 0x0200; // wczytano z pliku tekstowego (wacicielami tablic s submodle) - cParser parser(FileName, cParser::buffer_FILE); // Ra: tu powinno by "models\\"... + iFlags |= 0x0200; // wczytano z pliku tekstowego (właścicielami tablic są submodle) + cParser parser(FileName, cParser::buffer_FILE); // Ra: tu powinno być "models\\"... TSubModel *SubModel; std::string token = parser.getToken(); iNumVerts = 0; // w konstruktorze to jest @@ -1958,89 +1958,89 @@ void TModel3d::LoadFromTextFile(std::string const &FileName, bool dynamic) { std::string parent; // parser.getToken(parent); - parser.getTokens(1, false); // nazwa submodelu nadrzdnego bez zmieny na mae + parser.getTokens(1, false); // nazwa submodelu nadrzędnego bez zmieny na małe parser >> parent; if (parent == "") break; SubModel = new TSubModel(); iNumVerts += SubModel->Load(parser, this, iNumVerts, dynamic); SubModel->Parent = - AddToNamed(parent.c_str(), SubModel); // bdzie potrzebne do wyliczenia pozycji, np. pantografu + AddToNamed(parent.c_str(), SubModel); // będzie potrzebne do wyliczenia pozycji, np. pantografu // iSubModelsCount++; parser.getTokens(); parser >> token; } - // Ra: od wersji 334 przechylany jest cay model, a nie tylko pierwszy + // Ra: od wersji 334 przechylany jest cały model, a nie tylko pierwszy // submodel - // ale bujanie kabiny nadal uywa bananw :( od 393 przywrcone, ale z + // ale bujanie kabiny nadal używa bananów :( od 393 przywrócone, ale z // dodatkowym warunkiem if (Global::iConvertModels & 4) - { // automatyczne banany czasem psuy przechylanie kabin... + { // automatyczne banany czasem psuły przechylanie kabin... if (dynamic && Root) { - if (Root->NextGet()) // jeli ma jakiekolwiek kolejne - { // dynamic musi mie "banana", bo tylko pierwszy obiekt jest animowany, - // a nastpne nie + if (Root->NextGet()) // jeśli ma jakiekolwiek kolejne + { // dynamic musi mieć "banana", bo tylko pierwszy obiekt jest animowany, + // a następne nie SubModel = new TSubModel(); // utworzenie pustego SubModel->ChildAdd(Root); Root = SubModel; ++iSubModelsCount; } - Root->WillBeAnimated(); // bo z tym jest duo problemw + Root->WillBeAnimated(); // bo z tym jest dużo problemów } } } void TModel3d::Init() -{ // obrcenie pocztkowe ukadu wsprzdnych, dla - // pojazdw wykonywane po analizie animacji +{ // obrócenie początkowe układu współrzędnych, dla + // pojazdów wykonywane po analizie animacji if (iFlags & 0x8000) - return; // operacje zostay ju wykonane + return; // operacje zostały już wykonane if (Root) { - if (iFlags & 0x0200) // jeli wczytano z pliku tekstowego - { // jest jaki dziwny bd, e obkrcany ma by tylko ostatni submodel - // gwnego acucha + if (iFlags & 0x0200) // jeśli wczytano z pliku tekstowego + { // jest jakiś dziwny błąd, że obkręcany ma być tylko ostatni submodel + // głównego łańcucha // TSubModel *p=Root; // do - //{p->InitialRotate(true); //ostatniemu naley si konwersja ukadu - // wsprzdnych + //{p->InitialRotate(true); //ostatniemu należy się konwersja układu + // współrzędnych // p=p->NextGet(); //} // while (p->NextGet()) // Root->InitialRotate(false); //a poprzednim tylko optymalizacja - Root->InitialRotate(true); // argumet okrela, czy wykona pierwotny obrt + Root->InitialRotate(true); // argumet określa, czy wykonać pierwotny obrót } - iFlags |= Root->FlagsCheck() | 0x8000; // flagi caego modelu - if (false == asBinary.empty()) // jeli jest podana nazwa + iFlags |= Root->FlagsCheck() | 0x8000; // flagi całego modelu + if (false == asBinary.empty()) // jeśli jest podana nazwa { - if (Global::iConvertModels) // i wczony zapis - SaveToBinFile(asBinary.c_str()); // utworzy tablic (m_pVNT) - asBinary = ""; // zablokowanie powtrnego zapisu + if (Global::iConvertModels) // i włączony zapis + SaveToBinFile(asBinary.c_str()); // utworzy tablicę (m_pVNT) + asBinary = ""; // zablokowanie powtórnego zapisu } if (iNumVerts) { if (Global::fDistanceFactor != - 1.0) // troch zaoszczdzi czasu na modelach z wieloma submocelami - Root->AdjustDist(); // aktualizacja odlegoci faz LoD, zalenie od - // rozdzielczoci pionowej oraz multisamplingu + 1.0) // trochę zaoszczędzi czasu na modelach z wieloma submocelami + Root->AdjustDist(); // aktualizacja odległości faz LoD, zależnie od + // rozdzielczości pionowej oraz multisamplingu if (Global::bUseVBO) { - if (!m_pVNT) // jeli nie ma jeszcze tablicy (wczytano z pliku + if (!m_pVNT) // jeśli nie ma jeszcze tablicy (wczytano z pliku // tekstowego) - { // tworzenie tymczasowej tablicy z wierzchokami caego modelu + { // tworzenie tymczasowej tablicy z wierzchołkami całego modelu MakeArray(iNumVerts); // tworzenie tablic dla VBO - Root->RaArrayFill(m_pVNT); // wypenianie tablicy - BuildVBOs(); // tworzenie VBO i usuwanie tablicy z pamici + Root->RaArrayFill(m_pVNT); // wypełnianie tablicy + BuildVBOs(); // tworzenie VBO i usuwanie tablicy z pamięci } else - BuildVBOs(false); // tworzenie VBO bez usuwania tablicy z pamici + BuildVBOs(false); // tworzenie VBO bez usuwania tablicy z pamięci } else { // przygotowanie skompilowanych siatek dla DisplayLists Root->DisplayLists(); // tworzenie skompilowanej listy dla submodelu } - // if (Root->TextureID) //o ile ma tekstur - // Root->iFlags|=0x80; //konieczno ustawienia tekstury + // if (Root->TextureID) //o ile ma teksturę + // Root->iFlags|=0x80; //konieczność ustawienia tekstury } } }; @@ -2052,12 +2052,12 @@ void TModel3d::SaveToBinFile(char const *FileName) TSubModelInfo *info = new TSubModelInfo[iSubModelsCount]; info->Reset(); Root->Info(); // zebranie informacji o submodelach - int len; //czna dugo pliku - int sub; // ilo submodeli (w bajtach) - int tra; // wielko obszaru transformw - int vnt; // wielko obszaru wierzchokw - int tex = 0; // wielko obszaru nazw tekstur - int nam = 0; // wielko obszaru nazw submodeli + int len; //łączna długość pliku + int sub; // ilość submodeli (w bajtach) + int tra; // wielkość obszaru transformów + int vnt; // wielkość obszaru wierzchołków + int tex = 0; // wielkość obszaru nazw tekstur + int nam = 0; // wielkość obszaru nazw submodeli sub = 8 + sizeof(TSubModel) * iSubModelsCount; tra = info->iTotalTransforms ? 8 + 64 * info->iTotalTransforms : 0; vnt = 8 + 32 * iNumVerts; @@ -2067,17 +2067,17 @@ void TModel3d::SaveToBinFile(char const *FileName) nam += info[i].iNameLen; } if (tex) - tex += 9; // 8 na nagwek i jeden cig pusty (tylko znacznik koca) + tex += 9; // 8 na nagłówek i jeden ciąg pusty (tylko znacznik końca) if (nam) nam += 8; len = 8 + sub + tra + vnt + tex + ((-tex) & 3) + nam + ((-nam) & 3); - TSubModel *roboczy = new TSubModel(); // bufor uywany do zapisywania + TSubModel *roboczy = new TSubModel(); // bufor używany do zapisywania // AnsiString *asN=&roboczy->asName,*asT=&roboczy->asTexture; - // roboczy->FirstInit(); //eby delete nie usuwao czego nie powinno + // roboczy->FirstInit(); //żeby delete nie usuwało czego nie powinno /* TFileStream *fs = new TFileStream(AnsiString(FileName), fmCreate); */ { std::ofstream file( FileName, std::ios::binary ); file.unsetf( std::ios::skipws ); - file.write( "E3D0", 4 ); // kromka gwna + file.write( "E3D0", 4 ); // kromka główna file.write( reinterpret_cast( &len ), 4 ); file.write( "SUB0", 4 ); // dane submodeli @@ -2086,46 +2086,46 @@ void TModel3d::SaveToBinFile(char const *FileName) roboczy->InfoSet( info + i ); file.write( reinterpret_cast( roboczy ), sizeof( TSubModel ) ); // zapis jednego submodelu } - if( tra ) { // zapis transformw + if( tra ) { // zapis transformów file.write( "TRA0", 4 ); // transformy file.write( reinterpret_cast( &tra ), 4 ); for( i = 0; i < iSubModelsCount; ++i ) if( info[ i ].iTransform >= 0 ) file.write( reinterpret_cast( info[ i ].pSubModel->GetMatrix() ), 16 * 4 ); } - { // zapis wierzchokw + { // zapis wierzchołków MakeArray( iNumVerts ); // tworzenie tablic dla VBO - Root->RaArrayFill( m_pVNT ); // wypenianie tablicy - file.write( "VNT0", 4 ); // wierzchoki + Root->RaArrayFill( m_pVNT ); // wypełnianie tablicy + file.write( "VNT0", 4 ); // wierzchołki file.write( reinterpret_cast( &vnt ), 4 ); file.write( reinterpret_cast( m_pVNT ), 32 * iNumVerts ); } - if( tex ) // moe by jeden submodel ze zmienn tekstur i nazwy nie bdzie + if( tex ) // może być jeden submodel ze zmienną teksturą i nazwy nie będzie { // zapis nazw tekstur file.write( "TEX0", 4 ); // nazwy tekstur - i = ( tex + 3 ) & ~3; // zaokrglenie w gr + i = ( tex + 3 ) & ~3; // zaokrąglenie w górę file.write( reinterpret_cast( &i ), 4 ); - file.write( reinterpret_cast( &zero ), 1 ); // cig o numerze zero nie jest uywany, ma tylko znacznik koca + file.write( reinterpret_cast( &zero ), 1 ); // ciąg o numerze zero nie jest używany, ma tylko znacznik końca for( i = 0; i < iSubModelsCount; ++i ) if( info[ i ].iTextureLen ) file.write( info[ i ].pSubModel->pTexture, info[ i ].iTextureLen ); if( ( -tex ) & 3 ) - file.write( reinterpret_cast( &zero ), ( ( -tex ) & 3 ) ); // wyrwnanie do wielokrotnoci 4 bajtw + file.write( reinterpret_cast( &zero ), ( ( -tex ) & 3 ) ); // wyrównanie do wielokrotności 4 bajtów } - if( nam ) // moe by jeden anonimowy submodel w modelu + if( nam ) // może być jeden anonimowy submodel w modelu { // zapis nazw submodeli file.write( "NAM0", 4 ); // nazwy submodeli - i = ( nam + 3 ) & ~3; // zaokrglenie w gr + i = ( nam + 3 ) & ~3; // zaokrąglenie w górę file.write( reinterpret_cast( &i ), 4 ); for( i = 0; i < iSubModelsCount; ++i ) if( info[ i ].iNameLen ) file.write( info[ i ].pSubModel->pName, info[ i ].iNameLen ); if( ( -nam ) & 3 ) - file.write( reinterpret_cast( &zero ), ( ( -nam ) & 3 ) ); // wyrwnanie do wielokrotnoci 4 bajtw + file.write( reinterpret_cast( &zero ), ( ( -nam ) & 3 ) ); // wyrównanie do wielokrotności 4 bajtów } } // file autocloses on getting out of scope - // roboczy->FirstInit(); //eby delete nie usuwao czego nie powinno - // roboczy->iFlags=0; //eby delete nie usuwao czego nie powinno + // roboczy->FirstInit(); //żeby delete nie usuwało czego nie powinno + // roboczy->iFlags=0; //żeby delete nie usuwało czego nie powinno // roboczy->asName)=asN; //&roboczy->asTexture=asT; delete roboczy; @@ -2172,8 +2172,8 @@ ReplacableSkinId,int iAlpha) void TModel3d::Render(double fSquareDistance, GLuint *ReplacableSkinId, int iAlpha) { - iAlpha ^= 0x0F0F000F; // odwrcenie flag tekstur, aby wyapa nieprzezroczyste - if (iAlpha & iFlags & 0x1F1F001F) // czy w ogle jest co robi w tym cyklu? + iAlpha ^= 0x0F0F000F; // odwrócenie flag tekstur, aby wyłapać nieprzezroczyste + if (iAlpha & iFlags & 0x1F1F001F) // czy w ogóle jest co robić w tym cyklu? { TSubModel::fSquareDist = fSquareDistance; // zmienna globalna! Root->ReplacableSet(ReplacableSkinId, iAlpha); @@ -2198,7 +2198,7 @@ iAlpha) { // glColor3f(1.0f,1.0f,1.0f); // glColor3f(0.0f,0.0f,0.0f); - glPushMatrix(); //zapamitanie matrycy przeksztacenia + glPushMatrix(); //zapamiętanie matrycy przekształcenia glTranslated(pPosition.x,pPosition.y,pPosition.z); if (fAngle!=0) glRotatef(fAngle,0,1,0); @@ -2216,23 +2216,23 @@ iAlpha) fSquareDist=SquareMagnitude(pPosition-Global::GetCameraPosition()); //zmienna globalna! if (StartVBO()) - {//odwrcenie flag, aby wyapa nieprzezroczyste + {//odwrócenie flag, aby wyłapać nieprzezroczyste Root->ReplacableSet(ReplacableSkinId,iAlpha^0x0F0F000F); Root->RaRender(); EndVBO(); } - glPopMatrix(); //przywrcenie ustawie przeksztacenia + glPopMatrix(); //przywrócenie ustawień przekształcenia }; */ void TModel3d::RaRender(double fSquareDistance, GLuint *ReplacableSkinId, int iAlpha) { // renderowanie specjalne, np. kabiny - iAlpha ^= 0x0F0F000F; // odwrcenie flag tekstur, aby wyapa nieprzezroczyste - if (iAlpha & iFlags & 0x1F1F001F) // czy w ogle jest co robi w tym cyklu? + iAlpha ^= 0x0F0F000F; // odwrócenie flag tekstur, aby wyłapać nieprzezroczyste + if (iAlpha & iFlags & 0x1F1F001F) // czy w ogóle jest co robić w tym cyklu? { TSubModel::fSquareDist = fSquareDistance; // zmienna globalna! if (StartVBO()) - { // odwrcenie flag, aby wyapa nieprzezroczyste + { // odwrócenie flag, aby wyłapać nieprzezroczyste Root->ReplacableSet(ReplacableSkinId, iAlpha); Root->pRoot = this; Root->RenderVBO(); @@ -2243,7 +2243,7 @@ void TModel3d::RaRender(double fSquareDistance, GLuint *ReplacableSkinId, int iA void TModel3d::RaRenderAlpha(double fSquareDistance, GLuint *ReplacableSkinId, int iAlpha) { // renderowanie specjalne, np. kabiny - if (iAlpha & iFlags & 0x2F2F002F) // czy w ogle jest co robi w tym cyklu? + if (iAlpha & iFlags & 0x2F2F002F) // czy w ogóle jest co robić w tym cyklu? { TSubModel::fSquareDist = fSquareDistance; // zmienna globalna! if (StartVBO()) @@ -2276,7 +2276,7 @@ globalna! */ //----------------------------------------------------------------------------- -// 2011-03-16 cztery nowe funkcje renderowania z moliwoci pochylania obiektw +// 2011-03-16 cztery nowe funkcje renderowania z możliwością pochylania obiektów //----------------------------------------------------------------------------- void TModel3d::Render(vector3 *vPosition, vector3 *vAngle, GLuint *ReplacableSkinId, int iAlpha) @@ -2291,7 +2291,7 @@ void TModel3d::Render(vector3 *vPosition, vector3 *vAngle, GLuint *ReplacableSki glRotated(vAngle->z, 0.0, 0.0, 1.0); TSubModel::fSquareDist = SquareMagnitude(*vPosition - Global::GetCameraPosition()); // zmienna globalna! - // odwrcenie flag, aby wyapa nieprzezroczyste + // odwrócenie flag, aby wyłapać nieprzezroczyste Root->ReplacableSet(ReplacableSkinId, iAlpha ^ 0x0F0F000F); Root->RenderDL(); glPopMatrix(); @@ -2326,7 +2326,7 @@ void TModel3d::RaRender(vector3 *vPosition, vector3 *vAngle, GLuint *ReplacableS TSubModel::fSquareDist = SquareMagnitude(*vPosition - Global::GetCameraPosition()); // zmienna globalna! if (StartVBO()) - { // odwrcenie flag, aby wyapa nieprzezroczyste + { // odwrócenie flag, aby wyłapać nieprzezroczyste Root->ReplacableSet(ReplacableSkinId, iAlpha ^ 0x0F0F000F); Root->RenderVBO(); EndVBO(); @@ -2360,7 +2360,7 @@ void TModel3d::RaRenderAlpha(vector3 *vPosition, vector3 *vAngle, GLuint *Replac //----------------------------------------------------------------------------- int TModel3d::TerrainCount() -{ // zliczanie kwadratw kilometrowych (gwna +{ // zliczanie kwadratów kilometrowych (główna // linia po Next) do tworznia tablicy int i = 0; TSubModel *r = Root; @@ -2372,7 +2372,7 @@ int TModel3d::TerrainCount() return i; }; TSubModel * TModel3d::TerrainSquare(int n) -{ // pobieranie wskanika do submodelu (n) +{ // pobieranie wskaźnika do submodelu (n) int i = 0; TSubModel *r = Root; while (i < n) @@ -2380,7 +2380,7 @@ TSubModel * TModel3d::TerrainSquare(int n) r = r->NextGet(); ++i; } - r->UnFlagNext(); // blokowanie wywietlania po Next gwnej listy + r->UnFlagNext(); // blokowanie wyświetlania po Next głównej listy return r; }; void TModel3d::TerrainRenderVBO(int n) @@ -2393,14 +2393,14 @@ void TModel3d::TerrainRenderVBO(int n) // TSubModel::fSquareDist=SquareMagnitude(*vPosition-Global::GetCameraPosition()); // //zmienna globalna! if (StartVBO()) - { // odwrcenie flag, aby wyapa nieprzezroczyste + { // odwrócenie flag, aby wyłapać nieprzezroczyste // Root->ReplacableSet(ReplacableSkinId,iAlpha^0x0F0F000F); TSubModel *r = Root; while (r) { if (r->iVisible == - n) // tylko jeli ma by widoczny w danej ramce (problem dla 0==false) - r->RenderVBO(); // sub kolejne (Next) si nie wyrenderuj + n) // tylko jeśli ma być widoczny w danej ramce (problem dla 0==false) + r->RenderVBO(); // sub kolejne (Next) się nie wyrenderują r = r->NextGet(); } EndVBO(); diff --git a/Model3d.h b/Model3d.h index 51ddb63e..0653673b 100644 --- a/Model3d.h +++ b/Model3d.h @@ -29,12 +29,12 @@ class TStringPack { char *data; //+0 - 4 bajty: typ kromki - //+4 - 4 bajty: dugo cznie z nagwkiem - //+8 - obszar acuchw znakowych, kady zakoczony zerem + //+4 - 4 bajty: długość łącznie z nagłówkiem + //+8 - obszar łańcuchów znakowych, każdy zakończony zerem int *index; //+0 - 4 bajty: typ kromki - //+4 - 4 bajty: dugo cznie z nagwkiem - //+8 - tabela indeksw + //+4 - 4 bajty: długość łącznie z nagłówkiem + //+8 - tabela indeksów public: char *String(int n); char *StringAt(int n) @@ -115,14 +115,14 @@ struct THitBoxContainer }; */ -/* Ra: tego nie bdziemy ju uywa, bo mona wycisn wicej +/* Ra: tego nie będziemy już używać, bo można wycisnąć więcej typedef enum {smt_Unknown, //nieznany smt_Mesh, //siatka smt_Point, - smt_FreeSpotLight, //punkt wietlny + smt_FreeSpotLight, //punkt świetlny smt_Text, //generator tekstu - smt_Stars //wiele punktw wietlnych + smt_Stars //wiele punktów świetlnych } TSubModelType; */ // Ra: specjalne typy submodeli, poza tym GL_TRIANGLES itp. @@ -134,74 +134,74 @@ const int TP_TEXT = 259; enum TAnimType // rodzaj animacji { at_None, // brak - at_Rotate, // obrt wzgldem wektora o kt - at_RotateXYZ, // obrt wzgldem osi o kty - at_Translate, // przesunicie + at_Rotate, // obrót względem wektora o kąt + at_RotateXYZ, // obrót względem osi o kąty + at_Translate, // przesunięcie at_SecondsJump, // sekundy z przeskokiem at_MinutesJump, // minuty z przeskokiem - at_HoursJump, // godziny z przeskokiem 12h/360 - at_Hours24Jump, // godziny z przeskokiem 24h/360 - at_Seconds, // sekundy pynnie - at_Minutes, // minuty pynnie - at_Hours, // godziny pynnie 12h/360 - at_Hours24, // godziny pynnie 24h/360 - at_Billboard, // obrt w pionie do kamery - at_Wind, // ruch pod wpywem wiatru + at_HoursJump, // godziny z przeskokiem 12h/360° + at_Hours24Jump, // godziny z przeskokiem 24h/360° + at_Seconds, // sekundy płynnie + at_Minutes, // minuty płynnie + at_Hours, // godziny płynnie 12h/360° + at_Hours24, // godziny płynnie 24h/360° + at_Billboard, // obrót w pionie do kamery + at_Wind, // ruch pod wpływem wiatru at_Sky, // animacja nieba - at_IK = 0x100, // odwrotna kinematyka - submodel sterujcy (np. staw skokowy) - at_IK11 = 0x101, // odwrotna kinematyka - submodel nadrzdny do sterowango (np. stopa) - at_IK21 = 0x102, // odwrotna kinematyka - submodel nadrzdny do sterowango (np. podudzie) - at_IK22 = 0x103, // odwrotna kinematyka - submodel nadrzdny do nadrzdnego sterowango (np. udo) - at_Digital = 0x200, // dziesiciocyfrowy licznik mechaniczny (z cylindrami) - at_DigiClk = 0x201, // zegar cyfrowy jako licznik na dziesiciocianach - at_Undefined = 0x800000FF // animacja chwilowo nieokrelona + at_IK = 0x100, // odwrotna kinematyka - submodel sterujący (np. staw skokowy) + at_IK11 = 0x101, // odwrotna kinematyka - submodel nadrzędny do sterowango (np. stopa) + at_IK21 = 0x102, // odwrotna kinematyka - submodel nadrzędny do sterowango (np. podudzie) + at_IK22 = 0x103, // odwrotna kinematyka - submodel nadrzędny do nadrzędnego sterowango (np. udo) + at_Digital = 0x200, // dziesięciocyfrowy licznik mechaniczny (z cylindrami) + at_DigiClk = 0x201, // zegar cyfrowy jako licznik na dziesięciościanach + at_Undefined = 0x800000FF // animacja chwilowo nieokreślona }; class TModel3d; class TSubModelInfo; class TSubModel -{ // klasa submodelu - pojedyncza siatka, punkt wietlny albo grupa punktw - // Ra: ta klasa ma mie wielko 256 bajtw, aby pokrya si z formatem binarnym - // Ra: nie przestawia zmiennych, bo wczytuj si z pliku binarnego! +{ // klasa submodelu - pojedyncza siatka, punkt świetlny albo grupa punktów + // Ra: ta klasa ma mieć wielkość 256 bajtów, aby pokryła się z formatem binarnym + // Ra: nie przestawiać zmiennych, bo wczytują się z pliku binarnego! private: TSubModel *Next; TSubModel *Child; - int eType; // Ra: modele binarne daj wicej moliwoci ni mesh zoony z trjktw - int iName; // numer acucha z nazw submodelu, albo -1 gdy anonimowy + int eType; // Ra: modele binarne dają więcej możliwości niż mesh złożony z trójkątów + int iName; // numer łańcucha z nazwą submodelu, albo -1 gdy anonimowy public: // chwilowo TAnimType b_Anim; private: int iFlags; // flagi informacyjne: - // bit 0: =1 faza rysowania zaley od wymiennej tekstury 0 - // bit 1: =1 faza rysowania zaley od wymiennej tekstury 1 - // bit 2: =1 faza rysowania zaley od wymiennej tekstury 2 - // bit 3: =1 faza rysowania zaley od wymiennej tekstury 3 - // bit 4: =1 rysowany w fazie nieprzezroczystych (staa tekstura albo brak) - // bit 5: =1 rysowany w fazie przezroczystych (staa tekstura) - // bit 7: =1 ta sama tekstura, co poprzedni albo nadrzdny - // bit 8: =1 wierzchoki wywietlane z indeksw - // bit 9: =1 wczytano z pliku tekstowego (jest wacicielem tablic) - // bit 13: =1 wystarczy przesunicie zamiast mnoenia macierzy (trzy jedynki) + // bit 0: =1 faza rysowania zależy od wymiennej tekstury 0 + // bit 1: =1 faza rysowania zależy od wymiennej tekstury 1 + // bit 2: =1 faza rysowania zależy od wymiennej tekstury 2 + // bit 3: =1 faza rysowania zależy od wymiennej tekstury 3 + // bit 4: =1 rysowany w fazie nieprzezroczystych (stała tekstura albo brak) + // bit 5: =1 rysowany w fazie przezroczystych (stała tekstura) + // bit 7: =1 ta sama tekstura, co poprzedni albo nadrzędny + // bit 8: =1 wierzchołki wyświetlane z indeksów + // bit 9: =1 wczytano z pliku tekstowego (jest właścicielem tablic) + // bit 13: =1 wystarczy przesunięcie zamiast mnożenia macierzy (trzy jedynki) // bit 14: =1 wymagane przechowanie macierzy (animacje) // bit 15: =1 wymagane przechowanie macierzy (transform niejedynkowy) union - { // transform, nie kady submodel musi mie + { // transform, nie każdy submodel musi mieć float4x4 *fMatrix; // pojedyncza precyzja wystarcza - // matrix4x4 *dMatrix; //do testu macierz podwjnej precyzji + // matrix4x4 *dMatrix; //do testu macierz podwójnej precyzji int iMatrix; // w pliku binarnym jest numer matrycy }; - int iNumVerts; // ilo wierzchokw (1 dla FreeSpotLight) - int iVboPtr; // pocztek na licie wierzchokw albo indeksw + int iNumVerts; // ilość wierzchołków (1 dla FreeSpotLight) + int iVboPtr; // początek na liście wierzchołków albo indeksów int iTexture; // numer nazwy tekstury, -1 wymienna, 0 brak - float fVisible; // prg jasnoci wiata do zaczenia submodelu - float fLight; // prg jasnoci wiata do zadziaania selfillum + float fVisible; // próg jasności światła do załączenia submodelu + float fLight; // próg jasności światła do zadziałania selfillum float f4Ambient[4]; - float f4Diffuse[4]; // float ze wzgldu na glMaterialfv() + float f4Diffuse[4]; // float ze względu na glMaterialfv() float f4Specular[4]; float f4Emision[4]; - float fWireSize; // nie uywane, ale wczytywane + float fWireSize; // nie używane, ale wczytywane float fSquareMaxDist; float fSquareMinDist; // McZapkie-050702: parametry dla swiatla: @@ -210,36 +210,36 @@ class TSubModel bool bUseNearAtten; // te 3 zmienne okreslaja rysowanie aureoli wokol zrodla swiatla int iFarAttenDecay; // ta zmienna okresla typ zaniku natezenia swiatla (0:brak, 1,2: potega 1/R) float fFarDecayRadius; // normalizacja j.w. - float fCosFalloffAngle; // cosinus kta stoka pod ktrym wida wiato - float fCosHotspotAngle; // cosinus kta stoka pod ktrym wida aureol i zwikszone natenie - // wiata + float fCosFalloffAngle; // cosinus kąta stożka pod którym widać światło + float fCosHotspotAngle; // cosinus kąta stożka pod którym widać aureolę i zwiększone natężenie + // światła float fCosViewAngle; // cos kata pod jakim sie teraz patrzy - // Ra: dalej s zmienne robocze, mona je przestawia z zachowaniem rozmiaru klasy + // Ra: dalej są zmienne robocze, można je przestawiać z zachowaniem rozmiaru klasy int TextureID; // numer tekstury, -1 wymienna, 0 brak - bool bWire; // nie uywane, ale wczytywane - // short TexAlpha; //Ra: nie uywane ju - GLuint uiDisplayList; // roboczy numer listy wywietlania - float Opacity; // nie uywane, ale wczytywane + bool bWire; // nie używane, ale wczytywane + // short TexAlpha; //Ra: nie używane już + GLuint uiDisplayList; // roboczy numer listy wyświetlania + float Opacity; // nie używane, ale wczytywane // ABu: te same zmienne, ale zdublowane dla Render i RenderAlpha, // bo sie chrzanilo przemieszczanie obiektow. - // Ra: ju si nie chrzani + // Ra: już się nie chrzani float f_Angle; float3 v_RotateAxis; float3 v_Angles; public: // chwilowo float3 v_TransVector; - float8 *Vertices; // roboczy wskanik - wczytanie T3D do VBO - int iAnimOwner; // roboczy numer egzemplarza, ktry ustawi animacj + float8 *Vertices; // roboczy wskaźnik - wczytanie T3D do VBO + int iAnimOwner; // roboczy numer egzemplarza, który ustawił animację TAnimType b_aAnim; // kody animacji oddzielnie, bo zerowane public: - float4x4 *mAnimMatrix; // macierz do animacji kwaternionowych (naley do AnimContainer) - char space[8]; // wolne miejsce na przysze zmienne (zmniejszy w miar potrzeby) + float4x4 *mAnimMatrix; // macierz do animacji kwaternionowych (należy do AnimContainer) + char space[8]; // wolne miejsce na przyszłe zmienne (zmniejszyć w miarę potrzeby) public: TSubModel ** - smLetter; // wskanik na tablic submdeli do generoania tekstu (docelowo zapisa do E3D) - TSubModel *Parent; // nadrzdny, np. do wymnaania macierzy - int iVisible; // roboczy stan widocznoci + smLetter; // wskaźnik na tablicę submdeli do generoania tekstu (docelowo zapisać do E3D) + TSubModel *Parent; // nadrzędny, np. do wymnażania macierzy + int iVisible; // roboczy stan widoczności // AnsiString asTexture; //robocza nazwa tekstury do zapisania w pliku binarnym // AnsiString asName; //robocza nazwa char *pTexture; // robocza nazwa tekstury do zapisania w pliku binarnym @@ -251,12 +251,12 @@ class TSubModel void RaAnimation(TAnimType a); public: - static int iInstance; // identyfikator egzemplarza, ktry aktualnie renderuje model + static int iInstance; // identyfikator egzemplarza, który aktualnie renderuje model static GLuint *ReplacableSkinId; static int iAlpha; // maska bitowa dla danego przebiegu static double fSquareDist; static TModel3d *pRoot; - static std::string *pasText; // tekst dla wywietlacza (!!!! do przemylenia) + static std::string *pasText; // tekst dla wyświetlacza (!!!! do przemyślenia) TSubModel(); ~TSubModel(); void FirstInit(); @@ -348,18 +348,18 @@ class TSubModel class TSubModelInfo { // klasa z informacjami o submodelach, do tworzenia pliku binarnego public: - TSubModel *pSubModel; // wskanik na submodel + TSubModel *pSubModel; // wskaźnik na submodel int iTransform; // numer transformu (-1 gdy brak) int iName; // numer nazwy int iTexture; // numer tekstury - int iNameLen; // dugo nazwy - int iTextureLen; // dugo tekstury - int iNext, iChild; // numer nastpnego i potomnego - static int iTotalTransforms; // ilo transformw - static int iTotalNames; // ilo nazw - static int iTotalTextures; // ilo tekstur + int iNameLen; // długość nazwy + int iTextureLen; // długość tekstury + int iNext, iChild; // numer następnego i potomnego + static int iTotalTransforms; // ilość transformów + static int iTotalNames; // ilość nazw + static int iTotalTextures; // ilość tekstur static int iCurrent; // aktualny obiekt - static TSubModelInfo *pTable; // tabele obiektw pomocniczych + static TSubModelInfo *pTable; // tabele obiektów pomocniczych TSubModelInfo() { pSubModel = NULL; @@ -368,8 +368,8 @@ class TSubModelInfo } void Reset() { - pTable = this; // ustawienie wskanika tabeli obiektw - iTotalTransforms = iTotalNames = iTotalTextures = iCurrent = 0; // zerowanie licznikw + pTable = this; // ustawienie wskaźnika tabeli obiektów + iTotalTransforms = iTotalNames = iTotalTextures = iCurrent = 0; // zerowanie liczników } ~TSubModelInfo(){}; }; @@ -378,24 +378,24 @@ class TModel3d : public CMesh { private: // TMaterial *Materials; - // int MaterialsCount; //Ra: nie uywane - // bool TractionPart; //Ra: nie uywane + // int MaterialsCount; //Ra: nie używane + // bool TractionPart; //Ra: nie używane TSubModel *Root; // drzewo submodeli - int iFlags; // Ra: czy submodele maj przezroczyste tekstury + int iFlags; // Ra: czy submodele mają przezroczyste tekstury public: // Ra: tymczasowo - int iNumVerts; // ilo wierzchokw (gdy nie ma VBO, to m_nVertexCount=0) + int iNumVerts; // ilość wierzchołków (gdy nie ma VBO, to m_nVertexCount=0) private: TStringPack Textures; // nazwy tekstur TStringPack Names; // nazwy submodeli - int *iModel; // zawarto pliku binarnego - int iSubModelsCount; // Ra: uywane do tworzenia binarnych - std::string asBinary; // nazwa pod ktr zapisa model binarny + int *iModel; // zawartość pliku binarnego + int iSubModelsCount; // Ra: używane do tworzenia binarnych + std::string asBinary; // nazwa pod którą zapisać model binarny public: inline TSubModel * GetSMRoot() { return (Root); }; - // double Radius; //Ra: nie uywane + // double Radius; //Ra: nie używane TModel3d(); TModel3d(char *FileName); ~TModel3d(); @@ -415,7 +415,7 @@ class TModel3d : public CMesh void RaRender(double fSquareDistance, GLuint *ReplacableSkinId = NULL, int iAlpha = 0x30300030); void RaRenderAlpha(double fSquareDistance, GLuint *ReplacableSkinId = NULL, int iAlpha = 0x30300030); - // jeden kt obrotu + // jeden kąt obrotu void Render(vector3 pPosition, double fAngle = 0, GLuint *ReplacableSkinId = NULL, int iAlpha = 0x30300030); void RenderAlpha(vector3 pPosition, double fAngle = 0, GLuint *ReplacableSkinId = NULL, @@ -424,7 +424,7 @@ class TModel3d : public CMesh int iAlpha = 0x30300030); void RaRenderAlpha(vector3 pPosition, double fAngle = 0, GLuint *ReplacableSkinId = NULL, int iAlpha = 0x30300030); - // trzy kty obrotu + // trzy kąty obrotu void Render(vector3 *vPosition, vector3 *vAngle, GLuint *ReplacableSkinId = NULL, int iAlpha = 0x30300030); void RenderAlpha(vector3 *vPosition, vector3 *vAngle, GLuint *ReplacableSkinId = NULL, diff --git a/Names.cpp b/Names.cpp index 9aa7ff03..b5eb2786 100644 --- a/Names.cpp +++ b/Names.cpp @@ -13,68 +13,68 @@ http://mozilla.org/MPL/2.0/. //--------------------------------------------------------------------------- /* -Modu zarzdzajcy plikami oraz wyszukiwaniem obiektw wg nazw. -1. Ma przydzielony z gry (EU07.INI) obszar pamici (rzdu 16MB). -2. W przypadku przepenienia dostpnej pamici wystpi bd wczytywania. -3. Obszar ten bdzie zuywany na rekordy obiektw oraz cigi tekstowe z nazwami. -4. Rekordy bd sortowane w ramach typu (tekstury, dwiki, modele, node, eventy). -5. Pierwszy etap wyszukiwania to 5 bitw z pierwszego bajtu i 3 z drugiego (256). -6. Dla plikw istnieje moliwo wczytania ich w innym terminie. -7. Moliwo wczytania plikw w oddzielnym watku (np. tekstur). +Moduł zarządzający plikami oraz wyszukiwaniem obiektów wg nazw. +1. Ma przydzielony z góry (EU07.INI) obszar pamięci (rzędu 16MB). +2. W przypadku przepełnienia dostępnej pamięci wystąpi błąd wczytywania. +3. Obszar ten będzie zużywany na rekordy obiektów oraz ciągi tekstowe z nazwami. +4. Rekordy będą sortowane w ramach typu (tekstury, dźwięki, modele, node, eventy). +5. Pierwszy etap wyszukiwania to 5 bitów z pierwszego bajtu i 3 z drugiego (256). +6. Dla plików istnieje możliwość wczytania ich w innym terminie. +7. Możliwość wczytania plików w oddzielnym watku (np. tekstur). -Obsugiwane pliki: -1. Tekstury, mona wczytywa pniej, rekord przechowuje numer podany przez kart graficzn. -2. Dwiki, mona wczyta pniej. -3. Modele, mona wczyta pniej o ile nie maj animacji eventami i nie dotycz pojazdw. +Obsługiwane pliki: +1. Tekstury, można wczytywać później, rekord przechowuje numer podany przez kartę graficzną. +2. Dźwięki, można wczytać później. +3. Modele, można wczytać później o ile nie mają animacji eventami i nie dotyczą pojazdów. -Obiekty sortowane wg nazw, mona dodawa i usuwa komrki scenerii: -4. Tory, drogi, rzeki - wyszukiwanie w celu sprawdzenia zajetoci. -5. Eventy - wyszukiwane przy zewntrznym wywoaniu oraz podczas wczytywania. -6. Pojazdy - wyszukiwane w celu wysyania komend. -7. Egzemplarze modeli animowanych - wyszukiwanie w celu poczenia z animacjami. +Obiekty sortowane wg nazw, można dodawać i usuwać komórki scenerii: +4. Tory, drogi, rzeki - wyszukiwanie w celu sprawdzenia zajetości. +5. Eventy - wyszukiwane przy zewnętrznym wywołaniu oraz podczas wczytywania. +6. Pojazdy - wyszukiwane w celu wysyłania komend. +7. Egzemplarze modeli animowanych - wyszukiwanie w celu połączenia z animacjami. */ void ItemRecord::TreeAdd(ItemRecord *r, int c) -{ // dodanie rekordu do drzewa - ustalenie w ktrej gazi - // zapisa w (iFlags) ile znakw jest zgodnych z nadrzdnym, eby nie sprawdza wszystkich od +{ // dodanie rekordu do drzewa - ustalenie w której gałęzi + // zapisać w (iFlags) ile znaków jest zgodnych z nadrzędnym, żeby nie sprawdzać wszystkich od // zera if ((cName[c] && r->cName[c]) ? cName[c] == r->cName[c] : false) - TreeAdd(r, c + 1); // ustawi wg kolejnego znaku, chyba e zero + TreeAdd(r, c + 1); // ustawić wg kolejnego znaku, chyba że zero else if ((unsigned char)(cName[c]) < (unsigned char)(r->cName[c])) { // zero jest najmniejsze - doczepiamy jako (rNext) if (!rNext) rNext = r; else - rNext->TreeAdd(r, 0); // doczepi do tej gazi + rNext->TreeAdd(r, 0); // doczepić do tej gałęzi } else { if (!rPrev) rPrev = r; else - rPrev->TreeAdd(r, 0); // doczepi do tej gazi + rPrev->TreeAdd(r, 0); // doczepić do tej gałęzi } }; void ItemRecord::ListGet(ItemRecord *r, int *&n) -{ // rekurencyjne wypenianie posortowanej listy na podstawie drzewa +{ // rekurencyjne wypełnianie posortowanej listy na podstawie drzewa if (rPrev) - rPrev->ListGet(r, n); // dodanie wszystkich wczeniejszych + rPrev->ListGet(r, n); // dodanie wszystkich wcześniejszych *n++ = this - r; // dodanie swojego indeksu do tabeli if (rNext) - rNext->ListGet(r, n); // dodanie wszystkich pniejszych + rNext->ListGet(r, n); // dodanie wszystkich późniejszych }; void * ItemRecord::TreeFind(const char *n) -{ // wyszukanie cigu (n) +{ // wyszukanie ciągu (n) ItemRecord *r = TreeFindRecord(n); return r ? r->pData : NULL; }; ItemRecord * ItemRecord::TreeFindRecord(const char *n) -{ // wyszukanie cigu (n) - ItemRecord *r = this; //eby nie robi rekurencji +{ // wyszukanie ciągu (n) + ItemRecord *r = this; //żeby nie robić rekurencji int i = 0; do { @@ -82,16 +82,16 @@ ItemRecord * ItemRecord::TreeFindRecord(const char *n) if (!r->cName[i]) return r; // znaleziony if (n[i] == r->cName[i]) - ++i; // porwna kolejny znak + ++i; // porównać kolejny znak else if ((unsigned char)(n[i]) < (unsigned char)(r->cName[i])) { - i = 0; // porwnywa od nowa - r = r->rPrev; // wczeniejsza ga drzewa + i = 0; // porównywać od nowa + r = r->rPrev; // wcześniejsza gałąź drzewa } else { - i = 0; // porwnywa od nowa - r = r->rNext; // pniejsza ga drzewa + i = 0; // porównywać od nowa + r = r->rNext; // późniejsza gałąź drzewa } } while (r); return NULL; @@ -101,7 +101,7 @@ TNames::TNames() { // tworzenie bufora iSize = 16 * 1024 * 1024; // rozmiar bufora w bajtach cBuffer = new char[iSize]; - ZeroMemory(cBuffer, iSize); // nie trzyma jaki starych mieci + ZeroMemory(cBuffer, iSize); // nie trzymać jakiś starych śmieci rRecords = (ItemRecord *)cBuffer; cLast = cBuffer + iSize; // bajt za buforem iLast = -1; @@ -110,19 +110,19 @@ TNames::TNames() int TNames::Add(int t, const char *n) { // dodanie obiektu typu (t) o nazwie (n) - int len = strlen(n) + 1; // ze znacznikiem koca + int len = strlen(n) + 1; // ze znacznikiem końca cLast -= len; // rezerwacja miejsca memcpy(cLast, n, len); // przekopiowanie tekstu do bufora // cLast[len-1]='\0'; - rRecords[++iLast].cName = cLast; // poczenie nazwy z rekordem + rRecords[++iLast].cName = cLast; // połączenie nazwy z rekordem rRecords[iLast].iFlags = t; if (!rTypes[t]) - rTypes[t] = rRecords + iLast; // korze drzewa, bo nie byo wczeniej + rTypes[t] = rRecords + iLast; // korzeń drzewa, bo nie było wcześniej else - rTypes[t]->TreeAdd(rRecords + iLast, 0); // doczepienie jako ga - // rTypes[t]=Sort(t); //sortowanie uruchamia rcznie - if ((iLast & 0x3F) == 0) // nie za czsto, bo sortowania zajm wicej czasu ni wyszukiwania - Sort(t); // optymalizacja drzewa co jaki czas + rTypes[t]->TreeAdd(rRecords + iLast, 0); // doczepienie jako gałąź + // rTypes[t]=Sort(t); //sortowanie uruchamiać ręcznie + if ((iLast & 0x3F) == 0) // nie za często, bo sortowania zajmą więcej czasu niż wyszukiwania + Sort(t); // optymalizacja drzewa co jakiś czas return iLast; } int TNames::Add(int t, const char *n, void *d) @@ -133,41 +133,41 @@ int TNames::Add(int t, const char *n, void *d) }; bool TNames::Update(int t, const char *n, void *d) -{ // dodanie jeli nie ma, wymiana (d), gdy jest - ItemRecord *r = FindRecord(t, n); // najpierw sprawdzi, czy ju jest +{ // dodanie jeśli nie ma, wymiana (d), gdy jest + ItemRecord *r = FindRecord(t, n); // najpierw sprawdzić, czy już jest if (r) - { // przy zdublowaniu nazwy podmienia w drzewku na pniejszy + { // przy zdublowaniu nazwy podmieniać w drzewku na późniejszy r->pData = d; return true; // duplikat } // Add(t,n,d); //nazwa unikalna - return false; // zosta dodany nowy + return false; // został dodany nowy }; ItemRecord * TNames::TreeSet(int *n, int d, int u) -{ // rekurencyjne wypenianie drzewa pozycjami od (d) do (u) +{ // rekurencyjne wypełnianie drzewa pozycjami od (d) do (u) if (d == u) { rRecords[n[d]].rPrev = rRecords[n[d]].rNext = NULL; - return rRecords + n[d]; // tej gazi nie ma + return rRecords + n[d]; // tej gałęzi nie ma } else if (d > u) return NULL; - int p = (u + d) >> 1; // poowa - rRecords[n[p]].rPrev = TreeSet(n, d, p - 1); // zapisanie wczeniejszych gazi - rRecords[n[p]].rNext = TreeSet(n, p + 1, u); // zapisanie pniejszych gazi + int p = (u + d) >> 1; // połowa + rRecords[n[p]].rPrev = TreeSet(n, d, p - 1); // zapisanie wcześniejszych gałęzi + rRecords[n[p]].rNext = TreeSet(n, p + 1, u); // zapisanie późniejszych gałęzi return rRecords + n[p]; }; void TNames::Sort(int t) -{ // przebudowa drzewa typu (t), zwraca wierzchoek drzewa +{ // przebudowa drzewa typu (t), zwraca wierzchołek drzewa if (iLast < 3) - return; // jak jest mao, to nie ma sensu sortowa - if (rTypes[t]) // jeli jest jaki rekord danego typu + return; // jak jest mało, to nie ma sensu sortować + if (rTypes[t]) // jeśli jest jakiś rekord danego typu { - int *r = new int[iLast + 1]; // robocza tablica indeksw - numery posortowanych rekordw - int *q = r; // wskanik roboczy, przekazywany przez referencj - rTypes[t]->ListGet(rRecords, q); // drzewo jest ju posortowane - zamieni je na list + int *r = new int[iLast + 1]; // robocza tablica indeksów - numery posortowanych rekordów + int *q = r; // wskaźnik roboczy, przekazywany przez referencję + rTypes[t]->ListGet(rRecords, q); // drzewo jest już posortowane - zamienić je na listę rTypes[t] = TreeSet(r, 0, (q - r) - 1); delete[] r; } @@ -175,6 +175,6 @@ void TNames::Sort(int t) }; ItemRecord * TNames::FindRecord(const int t, const char *n) -{ // poszukiwanie rekordu w celu np. zmiany wskanika +{ // poszukiwanie rekordu w celu np. zmiany wskaźnika return rTypes[t] ? rTypes[t]->TreeFindRecord(n) : NULL; }; diff --git a/Names.h b/Names.h index de38a637..4eb91118 100644 --- a/Names.h +++ b/Names.h @@ -11,15 +11,15 @@ http://mozilla.org/MPL/2.0/. #define NamesH //--------------------------------------------------------------------------- class ItemRecord -{ // rekord opisujcy obiekt; raz utworzony nie przemieszcza si - // rozmiar rekordu mona zmieni w razie potrzeby +{ // rekord opisujący obiekt; raz utworzony nie przemieszcza się + // rozmiar rekordu można zmienić w razie potrzeby public: - char *cName; // wskanik do nazwy umieszczonej w buforze + char *cName; // wskaźnik do nazwy umieszczonej w buforze int iFlags; // flagi bitowe ItemRecord *rPrev, *rNext; // posortowane drzewo (przebudowywane w razie potrzeby) union { - void *pData; // wskanik do obiektu + void *pData; // wskaźnik do obiektu int iData; // albo numer obiektu (tekstury) unsigned int uData; }; @@ -42,17 +42,17 @@ class TNames { public: int iSize; // rozmiar bufora - char *cBuffer; // bufor dla rekordw (na pocztku) i nazw (na kocu) - ItemRecord *rRecords; // rekordy na pocztku bufora - char *cLast; // ostatni uyty bajt na nazwy - ItemRecord *rTypes[20]; // rone typy obiektw (pocztek drzewa) - int iLast; // ostatnio uyty rekord + char *cBuffer; // bufor dla rekordów (na początku) i nazw (na końcu) + ItemRecord *rRecords; // rekordy na początku bufora + char *cLast; // ostatni użyty bajt na nazwy + ItemRecord *rTypes[20]; // rożne typy obiektów (początek drzewa) + int iLast; // ostatnio użyty rekord public: TNames(); int Add(int t, const char *n); // dodanie obiektu typu (t) - int Add(int t, const char *n, void *d); // dodanie obiektu z wskanikiem + int Add(int t, const char *n, void *d); // dodanie obiektu z wskaźnikiem int Add(int t, const char *n, int d); // dodanie obiektu z numerem - bool Update(int t, const char *n, void *d); // dodanie jeli nie ma, wymiana (d), gdy jest + bool Update(int t, const char *n, void *d); // dodanie jeśli nie ma, wymiana (d), gdy jest void TreeSet(); ItemRecord * TreeSet(int *n, int d, int u); void Sort(int t); // przebudowa drzewa typu (t) diff --git a/RealSound.cpp b/RealSound.cpp index d43bcd2c..8878ac0c 100644 --- a/RealSound.cpp +++ b/RealSound.cpp @@ -32,9 +32,9 @@ TRealSound::TRealSound() vSoundPosition.y = 0; vSoundPosition.z = 0; fDistance = fPreviousDistance = 0.0; - fFrequency = 22050.0; // czstotliwo samplowania pliku - iDoppler = 0; // normlanie jest zaczony; !=0 - modyfikacje - bLoopPlay = false; // dwik wyczony + fFrequency = 22050.0; // częstotliwość samplowania pliku + iDoppler = 0; // normlanie jest załączony; !=0 - modyfikacje + bLoopPlay = false; // dźwięk wyłączony } TRealSound::TRealSound(const char *SoundName, double SoundAttenuation, double X, double Y, double Z, bool Dynamic, @@ -55,14 +55,14 @@ void TRealSound::Free() void TRealSound::Init(std::string const &SoundName, double DistanceAttenuation, double X, double Y, double Z, bool Dynamic, bool freqmod, double rmin) { - // Nazwa=SoundName; //to tak raczej nie zadziaa, (SoundName) jest tymczasowe + // Nazwa=SoundName; //to tak raczej nie zadziała, (SoundName) jest tymczasowe pSound = TSoundsManager::GetFromName(SoundName.c_str(), Dynamic, &fFrequency); if (pSound) { if (freqmod) if (fFrequency != 22050.0) - { // dla modulowanych nie moe by zmiany mnonika, bo czstotliwo w nagwku by - // ignorowana, a moga by inna ni 22050 + { // dla modulowanych nie może być zmiany mnożnika, bo częstotliwość w nagłówku byłą + // ignorowana, a mogła być inna niż 22050 fFrequency = 22050.0; ErrorLog("Bad sound: " + std::string(SoundName) + ", as modulated, should have 22.05kHz in header"); @@ -71,7 +71,7 @@ void TRealSound::Init(std::string const &SoundName, double DistanceAttenuation, pSound->SetVolume(DSBVOLUME_MIN); } else - { // nie ma dwiku, to jest wysyp + { // nie ma dźwięku, to jest wysyp AM = 0; ErrorLog("Missed sound: " + std::string(SoundName)); } @@ -82,7 +82,7 @@ void TRealSound::Init(std::string const &SoundName, double DistanceAttenuation, vSoundPosition.y = Y; vSoundPosition.z = Z; if (rmin < 0) - iDoppler = 1; // wyczenie efektu Dopplera, np. dla dwiku ptakw + iDoppler = 1; // wyłączenie efektu Dopplera, np. dla dźwięku ptaków } else dSoundAtt = -1; @@ -119,19 +119,19 @@ void TRealSound::Play(double Volume, int Looping, bool ListenerInside, vector3 N vSoundPosition = NewPosition; dS = dSoundAtt; //*dSoundAtt; //bo odleglosc podawana w kwadracie fDistance = ListenerDistance(Global::pCameraPosition); - if (ListenerInside) // osabianie dwikw z odlegoci + if (ListenerInside) // osłabianie dźwięków z odległością Volume = Volume * dS / (dS + fDistance); else - Volume = Volume * dS / (dS + 2 * fDistance); // podwjne dla ListenerInside=false + Volume = Volume * dS / (dS + 2 * fDistance); // podwójne dla ListenerInside=false } if (iDoppler) // { // Ra 2014-07: efekt Dopplera nie zawsze jest wskazany - // if (FreeFlyModeFlag) //gdy swobodne latanie - nie sprawdza si to - fPreviousDistance = fDistance; // to efektu Dopplera nie bdzie + // if (FreeFlyModeFlag) //gdy swobodne latanie - nie sprawdza się to + fPreviousDistance = fDistance; // to efektu Dopplera nie będzie } - if (Looping) // dwik zaptlony mona wyczy i zostanie wczony w miar potrzeby - bLoopPlay = true; // dwik wyczony - // McZapkie-010302 - babranie tylko z niezbyt odleglymi dwikami + if (Looping) // dźwięk zapętlony można wyłączyć i zostanie włączony w miarę potrzeby + bLoopPlay = true; // dźwięk wyłączony + // McZapkie-010302 - babranie tylko z niezbyt odleglymi dźwiękami if ((dSoundAtt == -1) || (fDistance < 20.0 * dS)) { // vol=2*Volume+1; @@ -152,28 +152,28 @@ void TRealSound::Play(double Volume, int Looping, bool ListenerInside, vector3 N pSound->Play(0, 0, Looping); } else // wylacz dzwiek bo daleko - { // Ra 2014-09: oddalanie si nie moe by powodem do wyczenie dwiku + { // Ra 2014-09: oddalanie się nie może być powodem do wyłączenie dźwięku /* // Ra: stara wersja, ale podobno lepsza pSound->GetStatus(&stat); - if (bLoopPlay) //jeli zaptlony, to zostanie ponownie wczony, o ile znajdzie si - bliej + if (bLoopPlay) //jeśli zapętlony, to zostanie ponownie włączony, o ile znajdzie się + bliżej if (stat&DSBSTATUS_PLAYING) pSound->Stop(); - // Ra: wyczyem, bo podobno jest gorzej ni wczeniej - //ZiomalCl: dwik po wyczeniu sam si nie wczy, gdy wrcimy w rejon odtwarzania - pSound->SetVolume(DSBVOLUME_MIN); //dlatego lepiej go wyciszy na czas oddalenia si + // Ra: wyłączyłem, bo podobno jest gorzej niż wcześniej + //ZiomalCl: dźwięk po wyłączeniu sam się nie włączy, gdy wrócimy w rejon odtwarzania + pSound->SetVolume(DSBVOLUME_MIN); //dlatego lepiej go wyciszyć na czas oddalenia się pSound->GetStatus(&stat); if (!(stat&DSBSTATUS_PLAYING)) - pSound->Play(0,0,Looping); //ZiomalCl: wczenie odtwarzania rownie i tu, gdy - jesli uruchamiamy dwik poza promieniem, nie uruchomi si on w ogle + pSound->Play(0,0,Looping); //ZiomalCl: włączenie odtwarzania rownież i tu, gdyż + jesli uruchamiamy dźwięk poza promieniem, nie uruchomi się on w ogóle */ } } }; void TRealSound::Start(){ - // wczenie dwiku + // włączenie dźwięku }; @@ -183,7 +183,7 @@ void TRealSound::Stop() if (pSound) if ((Global::bSoundEnabled) && (AM != 0)) { - bLoopPlay = false; // dwik wyczony + bLoopPlay = false; // dźwięk wyłączony pSound->GetStatus(&stat); if (stat & DSBSTATUS_PLAYING) pSound->Stop(); @@ -215,7 +215,7 @@ void TRealSound::AdjFreq(double Freq, double dt) // McZapkie TODO: dorobic tu ef } double TRealSound::GetWaveTime() // McZapkie: na razie tylko dla 22KHz/8bps -{ // uywana do pomiaru czasu dla dwikw z pocztkiem i kocem +{ // używana do pomiaru czasu dla dźwięków z początkiem i końcem if (!pSound) return 0.0; double WaveTime; @@ -246,7 +246,7 @@ int TRealSound::GetStatus() void TRealSound::ResetPosition() { - if (pSound) // Ra: znowu jaki badziew! + if (pSound) // Ra: znowu jakiś badziew! pSound->SetCurrentPosition(0); } @@ -263,13 +263,13 @@ void TTextSound::Init(std::string const &SoundName, double SoundAttenuation, dou //TRealSound::Init(SoundName, SoundAttenuation, X, Y, Z, Dynamic, freqmod, rmin); fTime = GetWaveTime(); std::string txt(SoundName); - txt.erase( txt.rfind( '.' ) ); // obcicie rozszerzenia + txt.erase( txt.rfind( '.' ) ); // obcięcie rozszerzenia for (int i = txt.length(); i > 0; --i) if (txt[i] == '/') txt[i] = '\\'; // bo nie rozumi - txt += "-" + Global::asLang + ".txt"; // ju moe by w rnych jzykach + txt += "-" + Global::asLang + ".txt"; // już może być w różnych językach if (!FileExists(txt)) - txt = "sounds\\" + txt; //cieka moe nie by podana + txt = "sounds\\" + txt; //ścieżka może nie być podana if (FileExists(txt)) { // wczytanie /* TFileStream *ts = new TFileStream(txt, fmOpenRead); @@ -283,15 +283,15 @@ void TTextSound::Init(std::string const &SoundName, double SoundAttenuation, dou void TTextSound::Play(double Volume, int Looping, bool ListenerInside, vector3 NewPosition) { if (false == asText.empty()) - { // jeli ma powizany tekst + { // jeśli ma powiązany tekst DWORD stat; pSound->GetStatus(&stat); - if (!(stat & DSBSTATUS_PLAYING)) // jeli nie jest aktualnie odgrywany + if (!(stat & DSBSTATUS_PLAYING)) // jeśli nie jest aktualnie odgrywany { std::string t( asText ); size_t i; do - { // na razie zrobione jakkolwiek, docelowo przenie teksty do tablicy nazw + { // na razie zrobione jakkolwiek, docelowo przenieść teksty do tablicy nazw i = t.find('\r'); // znak nowej linii if( i == std::string::npos ) { Global::tranTexts.Add( t.c_str(), fTime, true ); diff --git a/RealSound.h b/RealSound.h index c62aee22..9df5dfda 100644 --- a/RealSound.h +++ b/RealSound.h @@ -20,8 +20,8 @@ class TRealSound PSound pSound; char *Nazwa; // dla celow odwszawiania double fDistance, fPreviousDistance; // dla liczenia Dopplera - float fFrequency; // czstotliwo samplowania pliku - int iDoppler; // Ra 2014-07: moliwo wyczenia efektu Dopplera np. dla piewu ptakw + float fFrequency; // częstotliwość samplowania pliku + int iDoppler; // Ra 2014-07: możliwość wyłączenia efektu Dopplera np. dla śpiewu ptaków public: vector3 vSoundPosition; // polozenie zrodla dzwieku double dSoundAtt; // odleglosc polowicznego zaniku dzwieku @@ -29,7 +29,7 @@ class TRealSound double AA; // offset amplitudy double FM; // mnoznik czestotliwosci double FA; // offset czestotliwosci - bool bLoopPlay; // czy zaptlony dwik jest odtwarzany + bool bLoopPlay; // czy zapętlony dźwięk jest odtwarzany TRealSound(); TRealSound(const char *SoundName, double SoundAttenuation, double X, double Y, double Z, bool Dynamic, bool freqmod = false, double rmin = 0.0); @@ -50,7 +50,7 @@ class TRealSound }; class TTextSound : public TRealSound -{ // dwik ze stenogramem +{ // dźwięk ze stenogramem std::string asText; float fTime; // czas trwania public: @@ -62,18 +62,18 @@ class TTextSound : public TRealSound }; class TSynthSound -{ // klasa generujca sygna odjazdu (Rp12, Rp13), potem rozbudowa o prac manewrowego... - int iIndex[44]; // indeksy pocztkowe, gdy mamy kilka wariantw dwikw skadowych +{ // klasa generująca sygnał odjazdu (Rp12, Rp13), potem rozbudować o pracę manewrowego... + int iIndex[44]; // indeksy początkowe, gdy mamy kilka wariantów dźwięków składowych // 0..9 - cyfry 0..9 // 10..19 - liczby 10..19 - // 21..29 - dziesitki (*21==*10?) + // 21..29 - dziesiątki (*21==*10?) // 31..39 - setki 100,200,...,800,900 - // 40 - "tysic" - // 41 - "tysice" - // 42 - indeksy pocztkowe dla "odjazd" - // 43 - indeksy pocztkowe dla "gotw" - PSound *sSound; // posortowana tablica dwikw, rozmiar zaleny od liczby znalezionych plikw - // a moe zamiast wielu plikw/dwikw zrobi jeden poczony plik i posugiwa si czasem + // 40 - "tysiąc" + // 41 - "tysiące" + // 42 - indeksy początkowe dla "odjazd" + // 43 - indeksy początkowe dla "gotów" + PSound *sSound; // posortowana tablica dźwięków, rozmiar zależny od liczby znalezionych plików + // a może zamiast wielu plików/dźwięków zrobić jeden połączony plik i posługiwać się czasem // od..do? }; diff --git a/Segment.cpp b/Segment.cpp index 25021f46..4010ec62 100644 --- a/Segment.cpp +++ b/Segment.cpp @@ -19,10 +19,10 @@ http://mozilla.org/MPL/2.0/. //--------------------------------------------------------------------------- // 101206 Ra: trapezoidalne drogi -// 110806 Ra: odwrcone mapowanie wzdu - Point1 == 1.0 +// 110806 Ra: odwrócone mapowanie wzdłuż - Point1 == 1.0 std::string Where(vector3 p) -{ // zamiana wsprzdnych na tekst, uywana w bdach +{ // zamiana współrzędnych na tekst, używana w błędach return std::to_string(p.x) + " " + std::to_string(p.y) + " " + std::to_string(p.z); }; @@ -44,17 +44,17 @@ TSegment::~TSegment() bool TSegment::Init(vector3 NewPoint1, vector3 NewPoint2, double fNewStep, double fNewRoll1, double fNewRoll2) -{ // wersja dla prostego - wyliczanie punktw kontrolnych +{ // wersja dla prostego - wyliczanie punktów kontrolnych vector3 dir; if (fNewRoll1 == fNewRoll2) { // faktyczny prosty - dir = Normalize(NewPoint2 - NewPoint1); // wektor kierunku o dugoci 1 + dir = Normalize(NewPoint2 - NewPoint1); // wektor kierunku o długości 1 return TSegment::Init(NewPoint1, dir, -dir, NewPoint2, fNewStep, fNewRoll1, fNewRoll2, false); } else - { // prosty ze zmienn przechyk musi by segmentowany jak krzywe - dir = (NewPoint2 - NewPoint1) / 3.0; // punkty kontrolne prostego s w 1/3 dugoci + { // prosty ze zmienną przechyłką musi być segmentowany jak krzywe + dir = (NewPoint2 - NewPoint1) / 3.0; // punkty kontrolne prostego są w 1/3 długości return TSegment::Init(NewPoint1, NewPoint1 + dir, NewPoint2 - dir, NewPoint2, fNewStep, fNewRoll1, fNewRoll2, true); } @@ -68,41 +68,41 @@ bool TSegment::Init(vector3 &NewPoint1, vector3 NewCPointOut, vector3 NewCPointI CPointOut = NewCPointOut; CPointIn = NewCPointIn; Point2 = NewPoint2; - // poprawienie przechyki - fRoll1 = DegToRad(fNewRoll1); // Ra: przeliczone jest bardziej przydatne do oblicze + // poprawienie przechyłki + fRoll1 = DegToRad(fNewRoll1); // Ra: przeliczone jest bardziej przydatne do obliczeń fRoll2 = DegToRad(fNewRoll2); if (Global::bRollFix) - { // Ra: poprawianie przechyki - // Przechyka powinna by na rodku wewntrznej szyny, a standardowo jest w osi - // toru. Dlatego trzeba podnie tor oraz odpowiednio podwyszy podsypk. - // Nie wykonywa tej funkcji, jeli podwyszenie zostao uwzgldnione w edytorze. - // Problematyczne mog byc rozjazdy na przechyce - lepiej je modelowa w edytorze. - // Na razie wszystkie scenerie powinny by poprawiane. - // Jedynie problem bdzie z podwjn ramp przechykow, ktra w rodku bdzie - // mie moment wypoziomowania, ale musi on by rwnie podniesiony. + { // Ra: poprawianie przechyłki + // Przechyłka powinna być na środku wewnętrznej szyny, a standardowo jest w osi + // toru. Dlatego trzeba podnieść tor oraz odpowiednio podwyższyć podsypkę. + // Nie wykonywać tej funkcji, jeśli podwyższenie zostało uwzględnione w edytorze. + // Problematyczne mogą byc rozjazdy na przechyłce - lepiej je modelować w edytorze. + // Na razie wszystkie scenerie powinny być poprawiane. + // Jedynie problem będzie z podwójną rampą przechyłkową, która w środku będzie + // mieć moment wypoziomowania, ale musi on być również podniesiony. if (fRoll1 != 0.0) - { // tylko jeli jest przechyka + { // tylko jeśli jest przechyłka double w1 = fabs(sin(fRoll1) * 0.75); // 0.5*w2+0.0325; //0.75m dla 1.435 - Point1.y += w1; // modyfikacja musi by przed policzeniem dalszych parametrw + Point1.y += w1; // modyfikacja musi być przed policzeniem dalszych parametrów if (bCurve) CPointOut.y += w1; // prosty ma wektory jednostkowe - pOwner->MovedUp1(w1); // zwrci trzeba informacj o podwyszeniu podsypki + pOwner->MovedUp1(w1); // zwrócić trzeba informację o podwyższeniu podsypki } if (fRoll2 != 0.0) { double w2 = fabs(sin(fRoll2) * 0.75); // 0.5*w2+0.0325; //0.75m dla 1.435 - Point2.y += w2; // modyfikacja musi by przed policzeniem dalszych parametrw + Point2.y += w2; // modyfikacja musi być przed policzeniem dalszych parametrów if (bCurve) CPointIn.y += w2; // prosty ma wektory jednostkowe - // zwrci trzeba informacj o podwyszeniu podsypki + // zwrócić trzeba informację o podwyższeniu podsypki } } - // Ra: ten kt jeszcze do przemylenia jest + // Ra: ten kąt jeszcze do przemyślenia jest fDirection = -atan2(Point2.x - Point1.x, - Point2.z - Point1.z); // kt w planie, eby nie liczy wielokrotnie + Point2.z - Point1.z); // kąt w planie, żeby nie liczyć wielokrotnie bCurve = bIsCurve; if (bCurve) - { // przeliczenie wspczynnikw wielomianu, bdzie mniej mnoe i mona policzy pochodne + { // przeliczenie współczynników wielomianu, będzie mniej mnożeń i można policzyć pochodne vC = 3.0 * (CPointOut - Point1); // t^1 vB = 3.0 * (CPointIn - CPointOut) - vC; // t^2 vA = Point2 - Point1 - vC - vB; // t^3 @@ -115,17 +115,17 @@ bool TSegment::Init(vector3 &NewPoint1, vector3 NewCPointOut, vector3 NewCPointI { ErrorLog("Bad geometry: Length <= 0 in TSegment::Init at " + Where(Point1)); // MessageBox(0,"Length<=0","TSegment::Init",MB_OK); - return false; // zerowe nie mog by + return false; // zerowe nie mogą być } fStoop = atan2((Point2.y - Point1.y), - fLength); // pochylenie toru prostego, eby nie liczy wielokrotnie + fLength); // pochylenie toru prostego, żeby nie liczyć wielokrotnie SafeDeleteArray(fTsBuffer); if ((bCurve) && (fStep > 0)) - { // Ra: prosty dostanie podzia, jak ma rn przechyk na kocach + { // Ra: prosty dostanie podział, jak ma różną przechyłkę na końcach double s = 0; int i = 0; iSegCount = ceil(fLength / fStep); // potrzebne do VBO - // fStep=fLength/(double)(iSegCount-1); //wyrwnanie podziau + // fStep=fLength/(double)(iSegCount-1); //wyrównanie podziału fTsBuffer = new double[iSegCount + 1]; fTsBuffer[0] = 0; /* TODO : fix fTsBuffer */ while (s < fLength) @@ -138,7 +138,7 @@ bool TSegment::Init(vector3 &NewPoint1, vector3 NewCPointOut, vector3 NewCPointI } } if (fLength > 500) - { // tor ma pojemno 40 pojazdw, wic nie moe by za dugi + { // tor ma pojemność 40 pojazdów, więc nie może być za długi ErrorLog("Bad geometry: Length > 500m at " + Where(Point1)); // MessageBox(0,"Length>500","TSegment::Init",MB_OK); return false; @@ -226,83 +226,83 @@ double TSegment::GetTFromS(double s) }; vector3 TSegment::RaInterpolate(double t) -{ // wyliczenie XYZ na krzywej Beziera z uyciem wspczynnikw - return t * (t * (t * vA + vB) + vC) + Point1; // 9 mnoe, 9 dodawa +{ // wyliczenie XYZ na krzywej Beziera z użyciem współczynników + return t * (t * (t * vA + vB) + vC) + Point1; // 9 mnożeń, 9 dodawań }; vector3 TSegment::RaInterpolate0(double t) -{ // wyliczenie XYZ na krzywej Beziera, na uytek liczenia dugoci nie jest dodawane Point1 - return t * (t * (t * vA + vB) + vC); // 9 mnoe, 6 dodawa +{ // wyliczenie XYZ na krzywej Beziera, na użytek liczenia długości nie jest dodawane Point1 + return t * (t * (t * vA + vB) + vC); // 9 mnożeń, 6 dodawań }; double TSegment::ComputeLength() // McZapkie-150503: dlugosc miedzy punktami krzywej -{ // obliczenie dugoci krzywej Beziera za pomoc interpolacji odcinkami - // Ra: zamieni na liczenie rekurencyjne redniej z ciciwy i amanej po kontrolnych - // Ra: koniec rekurencji jeli po podziale suma dugoci nie rni si wicej ni 0.5mm od +{ // obliczenie długości krzywej Beziera za pomocą interpolacji odcinkami + // Ra: zamienić na liczenie rekurencyjne średniej z cięciwy i łamanej po kontrolnych + // Ra: koniec rekurencji jeśli po podziale suma długości nie różni się więcej niż 0.5mm od // poprzedniej - // Ra: ewentualnie rozpozna uk okrgu paskiego i liczy ze wzoru na dugo uku + // Ra: ewentualnie rozpoznać łuk okręgu płaskiego i liczyć ze wzoru na długość łuku double t, l = 0; - vector3 last = vector3(0, 0, 0); // dugo liczona po przesuniciu odcinka do pocztku ukadu + vector3 last = vector3(0, 0, 0); // długość liczona po przesunięciu odcinka do początku układu vector3 tmp = Point2 - Point1; - int m = 20.0 * tmp.Length(); // byo zawsze do 10000, teraz jest liczone odcinkami po okoo 5cm + int m = 20.0 * tmp.Length(); // było zawsze do 10000, teraz jest liczone odcinkami po około 5cm for (int i = 1; i <= m; i++) { - t = double(i) / double(m); // wyznaczenie parametru na krzywej z przedziau (0,1> + t = double(i) / double(m); // wyznaczenie parametru na krzywej z przedziału (0,1> // tmp=Interpolate(t,p1,cp1,cp2,p2); tmp = RaInterpolate0(t); // obliczenie punktu dla tego parametru - t = vector3(tmp - last).Length(); // obliczenie dugoci wektora - l += t; // zwikszenie wyliczanej dugoci + t = vector3(tmp - last).Length(); // obliczenie długości wektora + l += t; // zwiększenie wyliczanej długości last = tmp; } return (l); } -const double fDirectionOffset = 0.1; // dugo wektora do wyliczenia kierunku +const double fDirectionOffset = 0.1; // długość wektora do wyliczenia kierunku vector3 TSegment::GetDirection(double fDistance) { // takie toporne liczenie pochodnej dla podanego dystansu od Point1 double t1 = GetTFromS(fDistance - fDirectionOffset); if (t1 <= 0.0) - return (CPointOut - Point1); // na zewntrz jako prosta + return (CPointOut - Point1); // na zewnątrz jako prosta double t2 = GetTFromS(fDistance + fDirectionOffset); if (t2 >= 1.0) - return (Point1 - CPointIn); // na zewntrz jako prosta + return (Point1 - CPointIn); // na zewnątrz jako prosta return (FastGetPoint(t2) - FastGetPoint(t1)); } vector3 TSegment::FastGetDirection(double fDistance, double fOffset) -{ // takie toporne liczenie pochodnej dla parametru 0.01.0 +{ // takie toporne liczenie pochodnej dla parametru 0.0÷1.0 double t1 = fDistance - fOffset; if (t1 <= 0.0) - return (CPointOut - Point1); // wektor na pocztku jest stay + return (CPointOut - Point1); // wektor na początku jest stały double t2 = fDistance + fOffset; if (t2 >= 1.0) - return (Point2 - CPointIn); // wektor na kocu jest stay + return (Point2 - CPointIn); // wektor na końcu jest stały return (FastGetPoint(t2) - FastGetPoint(t1)); } vector3 TSegment::GetPoint(double fDistance) -{ // wyliczenie wsprzdnych XYZ na torze w odlegoci (fDistance) od Point1 +{ // wyliczenie współrzędnych XYZ na torze w odległości (fDistance) od Point1 if (bCurve) - { // mona by wprowadzi uproszczony wzr dla okrgw paskich + { // można by wprowadzić uproszczony wzór dla okręgów płaskich double t = GetTFromS(fDistance); // aproksymacja dystansu na krzywej Beziera // return Interpolate(t,Point1,CPointOut,CPointIn,Point2); return RaInterpolate(t); } else { // wyliczenie dla odcinka prostego jest prostsze - double t = fDistance / fLength; // zerowych torw nie ma + double t = fDistance / fLength; // zerowych torów nie ma return ((1.0 - t) * Point1 + (t)*Point2); } }; void TSegment::RaPositionGet(double fDistance, vector3 &p, vector3 &a) -{ // ustalenie pozycji osi na torze, przechyki, pochylenia i kierunku jazdy +{ // ustalenie pozycji osi na torze, przechyłki, pochylenia i kierunku jazdy if (bCurve) - { // mona by wprowadzi uproszczony wzr dla okrgw paskich + { // można by wprowadzić uproszczony wzór dla okręgów płaskich double t = GetTFromS(fDistance); // aproksymacja dystansu na krzywej Beziera na parametr (t) p = RaInterpolate(t); - a.x = (1.0 - t) * fRoll1 + (t)*fRoll2; // przechyka w danym miejscu (zmienia si liniowo) + a.x = (1.0 - t) * fRoll1 + (t)*fRoll2; // przechyłka w danym miejscu (zmienia się liniowo) // pochodna jest 3*A*t^2+2*B*t+C a.y = atan(t * (t * 3.0 * vA.y + vB.y + vB.y) + vC.y); // pochylenie krzywej (w pionie) a.z = -atan2(t * (t * 3.0 * vA.x + vB.x + vB.x) + vC.x, @@ -310,9 +310,9 @@ void TSegment::RaPositionGet(double fDistance, vector3 &p, vector3 &a) } else { // wyliczenie dla odcinka prostego jest prostsze - double t = fDistance / fLength; // zerowych torw nie ma + double t = fDistance / fLength; // zerowych torów nie ma p = ((1.0 - t) * Point1 + (t)*Point2); - a.x = (1.0 - t) * fRoll1 + (t)*fRoll2; // przechyka w danym miejscu (zmienia si liniowo) + a.x = (1.0 - t) * fRoll1 + (t)*fRoll2; // przechyłka w danym miejscu (zmienia się liniowo) a.y = fStoop; // pochylenie toru prostego a.z = fDirection; // kierunek toru w planie } @@ -326,32 +326,32 @@ vector3 TSegment::FastGetPoint(double t) void TSegment::RenderLoft(const vector6 *ShapePoints, int iNumShapePoints, double fTextureLength, int iSkip, int iQualityFactor, vector3 **p, bool bRender) -{ // generowanie trjktw dla odcinka trajektorii ruchu - // standardowo tworzy triangle_strip dla prostego albo ich zestaw dla uku +{ // generowanie trójkątów dla odcinka trajektorii ruchu + // standardowo tworzy triangle_strip dla prostego albo ich zestaw dla łuku // po modyfikacji - dla ujemnego (iNumShapePoints) w dodatkowych polach tabeli - // podany jest przekrj kocowy - // podsypka toru jest robiona za pomoc 6 punktw, szyna 12, drogi i rzeki na 3+2+3 + // podany jest przekrój końcowy + // podsypka toru jest robiona za pomocą 6 punktów, szyna 12, drogi i rzeki na 3+2+3 if (iQualityFactor < 1) - iQualityFactor = 1; // co ktry segment ma by uwzgldniony + iQualityFactor = 1; // co który segment ma być uwzględniony vector3 pos1, pos2, dir, parallel1, parallel2, pt, norm; double s, step, fOffset, tv1, tv2, t; int i, j; - bool trapez = iNumShapePoints < 0; // sygnalizacja trapezowatoci + bool trapez = iNumShapePoints < 0; // sygnalizacja trapezowatości iNumShapePoints = abs(iNumShapePoints); if (bCurve) { - double m1, jmm1, m2, jmm2; // pozycje wzgldne na odcinku 0...1 (ale nie parametr Beziera) - tv1 = 1.0; // Ra: to by mona byo wylicza dla odcinka, wygldao by lepiej + double m1, jmm1, m2, jmm2; // pozycje względne na odcinku 0...1 (ale nie parametr Beziera) + tv1 = 1.0; // Ra: to by można było wyliczać dla odcinka, wyglądało by lepiej step = fStep * iQualityFactor; - s = fStep * iSkip; // iSkip - ile odcinkw z pocztku pomin - i = iSkip; // domylnie 0 + s = fStep * iSkip; // iSkip - ile odcinków z początku pominąć + i = iSkip; // domyślnie 0 if (!fTsBuffer) - return; // prowizoryczne zabezpieczenie przed wysypem - ustali faktyczn przyczyn + return; // prowizoryczne zabezpieczenie przed wysypem - ustalić faktyczną przyczynę if (i > iSegCount) - return; // prowizoryczne zabezpieczenie przed wysypem - ustali faktyczn przyczyn - t = fTsBuffer[i]; // tabela watoci t dla segmentw + return; // prowizoryczne zabezpieczenie przed wysypem - ustalić faktyczną przyczynę + t = fTsBuffer[i]; // tabela watości t dla segmentów fOffset = 0.1 / fLength; // pierwsze 10cm - pos1 = FastGetPoint(t); // wektor pocztku segmentu + pos1 = FastGetPoint(t); // wektor początku segmentu dir = FastGetDirection(t, fOffset); // wektor kierunku // parallel1=Normalize(CrossProduct(dir,vector3(0,1,0))); //wektor poprzeczny parallel1 = Normalize(vector3(-dir.z, 0.0, dir.x)); // wektor poprzeczny @@ -360,23 +360,23 @@ void TSegment::RenderLoft(const vector6 *ShapePoints, int iNumShapePoints, doubl while (s < fLength) { // step=SquareMagnitude(Global::GetCameraPosition()+pos); - i += iQualityFactor; // kolejny punkt amanej - s += step; // kocowa pozycja segmentu [m] + i += iQualityFactor; // kolejny punkt łamanej + s += step; // końcowa pozycja segmentu [m] m1 = m2; jmm1 = jmm2; // stara pozycja m2 = s / fLength; jmm2 = 1.0 - m2; // nowa pozycja - if (s > fLength - 0.5) // Ra: -0.5 eby nie robio cieniasa na kocu - { // gdy przekroczylimy koniec - std dziury w torach... + if (s > fLength - 0.5) // Ra: -0.5 żeby nie robiło cieniasa na końcu + { // gdy przekroczyliśmy koniec - stąd dziury w torach... step -= (s - fLength); // jeszcze do wyliczenia mapowania potrzebny s = fLength; - i = iSegCount; // 20/5 ma dawa 4 + i = iSegCount; // 20/5 ma dawać 4 m2 = 1.0; jmm2 = 0.0; } while (tv1 < 0.0) tv1 += 1.0; // przestawienie mapowania - tv2 = tv1 - step / fTextureLength; // mapowanie na kocu segmentu + tv2 = tv1 - step / fTextureLength; // mapowanie na końcu segmentu t = fTsBuffer[i]; // szybsze od GetTFromS(s); pos2 = FastGetPoint(t); dir = FastGetDirection(t, fOffset); // nowy wektor kierunku @@ -394,21 +394,21 @@ void TSegment::RenderLoft(const vector6 *ShapePoints, int iNumShapePoints, doubl pos1; pt.y += jmm1 * ShapePoints[j].y + m1 * ShapePoints[j + iNumShapePoints].y; if (bRender) - { // skrzyowania podczas czenia siatek mog nie renderowa poboczy, ale - // potrzebowa punktw + { // skrzyżowania podczas łączenia siatek mogą nie renderować poboczy, ale + // potrzebować punktów glNormal3f(norm.x, norm.y, norm.z); glTexCoord2f( jmm1 * ShapePoints[j].z + m1 * ShapePoints[j + iNumShapePoints].z, tv1); - glVertex3f(pt.x, pt.y, pt.z); // pt nie mamy gdzie zapamita? + glVertex3f(pt.x, pt.y, pt.z); // pt nie mamy gdzie zapamiętać? } - if (p) // jeli jest wskanik do tablicy + if (p) // jeśli jest wskaźnik do tablicy if (*p) if (!j) // to dla pierwszego punktu { *(*p) = pt; (*p)++; - } // zapamitanie brzegu jezdni - // dla trapezu drugi koniec ma inne wsprzdne + } // zapamiętanie brzegu jezdni + // dla trapezu drugi koniec ma inne współrzędne norm = (jmm1 * ShapePoints[j].n.x + m1 * ShapePoints[j + iNumShapePoints].n.x) * parallel2; norm.y += jmm1 * ShapePoints[j].n.y + m1 * ShapePoints[j + iNumShapePoints].n.y; @@ -417,39 +417,39 @@ void TSegment::RenderLoft(const vector6 *ShapePoints, int iNumShapePoints, doubl pos2; pt.y += jmm2 * ShapePoints[j].y + m2 * ShapePoints[j + iNumShapePoints].y; if (bRender) - { // skrzyowania podczas czenia siatek mog nie renderowa poboczy, ale - // potrzebowa punktw + { // skrzyżowania podczas łączenia siatek mogą nie renderować poboczy, ale + // potrzebować punktów glNormal3f(norm.x, norm.y, norm.z); glTexCoord2f( jmm2 * ShapePoints[j].z + m2 * ShapePoints[j + iNumShapePoints].z, tv2); glVertex3f(pt.x, pt.y, pt.z); } - if (p) // jeli jest wskanik do tablicy + if (p) // jeśli jest wskaźnik do tablicy if (*p) if (!j) // to dla pierwszego punktu if (i == iSegCount) { *(*p) = pt; (*p)++; - } // zapamitanie brzegu jezdni + } // zapamiętanie brzegu jezdni } else for (j = 0; j < iNumShapePoints; j++) - { //uk z jednym profilem + { //łuk z jednym profilem norm = ShapePoints[j].n.x * parallel1; norm.y += ShapePoints[j].n.y; pt = parallel1 * ShapePoints[j].x + pos1; pt.y += ShapePoints[j].y; glNormal3f(norm.x, norm.y, norm.z); glTexCoord2f(ShapePoints[j].z, tv1); - glVertex3f(pt.x, pt.y, pt.z); // punkt na pocztku odcinka + glVertex3f(pt.x, pt.y, pt.z); // punkt na początku odcinka norm = ShapePoints[j].n.x * parallel2; norm.y += ShapePoints[j].n.y; pt = parallel2 * ShapePoints[j].x + pos2; pt.y += ShapePoints[j].y; glNormal3f(norm.x, norm.y, norm.z); glTexCoord2f(ShapePoints[j].z, tv2); - glVertex3f(pt.x, pt.y, pt.z); // punkt na kocu odcinka + glVertex3f(pt.x, pt.y, pt.z); // punkt na końcu odcinka } glEnd(); pos1 = pos2; @@ -475,11 +475,11 @@ void TSegment::RenderLoft(const vector6 *ShapePoints, int iNumShapePoints, doubl glNormal3f(norm.x, norm.y, norm.z); glTexCoord2f(ShapePoints[j].z, 0); glVertex3f(pt.x, pt.y, pt.z); - // dla trapezu drugi koniec ma inne wsprzdne wzgldne + // dla trapezu drugi koniec ma inne współrzędne względne norm = ShapePoints[j + iNumShapePoints].n.x * parallel1; norm.y += ShapePoints[j + iNumShapePoints].n.y; - pt = parallel1 * ShapePoints[j + iNumShapePoints].x + pos2; // odsunicie - pt.y += ShapePoints[j + iNumShapePoints].y; // wysoko + pt = parallel1 * ShapePoints[j + iNumShapePoints].x + pos2; // odsunięcie + pt.y += ShapePoints[j + iNumShapePoints].y; // wysokość glNormal3f(norm.x, norm.y, norm.z); glTexCoord2f(ShapePoints[j + iNumShapePoints].z, fLength / fTextureLength); glVertex3f(pt.x, pt.y, pt.z); @@ -507,26 +507,26 @@ void TSegment::RenderLoft(const vector6 *ShapePoints, int iNumShapePoints, doubl void TSegment::RenderSwitchRail(const vector6 *ShapePoints1, const vector6 *ShapePoints2, int iNumShapePoints, double fTextureLength, int iSkip, double fOffsetX) -{ // tworzenie siatki trjktw dla iglicy +{ // tworzenie siatki trójkątów dla iglicy vector3 pos1, pos2, dir, parallel1, parallel2, pt; double a1, a2, s, step, offset, tv1, tv2, t, t2, t2step, oldt2, sp, oldsp; int i, j; if (bCurve) { // dla toru odchylonego // t2= 0; - t2step = 1 / double(iSkip); // przesunicie tekstury? + t2step = 1 / double(iSkip); // przesunięcie tekstury? oldt2 = 1; tv1 = 1.0; - step = fStep; // dug segmentu + step = fStep; // długść segmentu s = 0; i = 0; - t = fTsBuffer[i]; // warto t krzywej Beziera dla pocztku + t = fTsBuffer[i]; // wartość t krzywej Beziera dla początku a1 = 0; // step= fStep/fLength; - offset = 0.1 / fLength; // okoo 10cm w sensie parametru t - pos1 = FastGetPoint(t); // wsprzdne dla parmatru t + offset = 0.1 / fLength; // około 10cm w sensie parametru t + pos1 = FastGetPoint(t); // współrzędne dla parmatru t // dir= GetDirection1(); - dir = FastGetDirection(t, offset); // wektor wzduny + dir = FastGetDirection(t, offset); // wektor wzdłużny // parallel1=Normalize(CrossProduct(dir,vector3(0,1,0))); //poprzeczny? parallel1 = Normalize(vector3(-dir.z, 0.0, dir.x)); // wektor poprzeczny @@ -692,31 +692,31 @@ void TSegment::Render() void TSegment::RaRenderLoft(CVertNormTex *&Vert, const vector6 *ShapePoints, int iNumShapePoints, double fTextureLength, int iSkip, int iEnd, double fOffsetX) -{ // generowanie trjktw dla odcinka trajektorii ruchu - // standardowo tworzy triangle_strip dla prostego albo ich zestaw dla uku +{ // generowanie trójkątów dla odcinka trajektorii ruchu + // standardowo tworzy triangle_strip dla prostego albo ich zestaw dla łuku // po modyfikacji - dla ujemnego (iNumShapePoints) w dodatkowych polach tabeli - // podany jest przekrj kocowy - // podsypka toru jest robiona za pomoc 6 punktw, szyna 12, drogi i rzeki na 3+2+3 - // na uytek VBO strip dla ukw jest tworzony wzdu - // dla skrconego odcinka (iEndv = tv1; Vert->x = pt.x; Vert->y = pt.y; - Vert->z = pt.z; // punkt na pocztku odcinka + Vert->z = pt.z; // punkt na początku odcinka Vert++; - // dla trapezu drugi koniec ma inne wsprzdne wzgldne + // dla trapezu drugi koniec ma inne współrzędne względne norm = (jmm1 * ShapePoints[j].n.x + m1 * ShapePoints[j + iNumShapePoints].n.x) * parallel2; norm.y += jmm1 * ShapePoints[j].n.y + m1 * ShapePoints[j + iNumShapePoints].n.y; @@ -781,12 +781,12 @@ void TSegment::RaRenderLoft(CVertNormTex *&Vert, const vector6 *ShapePoints, int Vert->v = tv2; Vert->x = pt.x; Vert->y = pt.y; - Vert->z = pt.z; // punkt na kocu odcinka + Vert->z = pt.z; // punkt na końcu odcinka Vert++; } else for (j = 0; j < iNumShapePoints; j++) - { // wsprzdne pocztku + { // współrzędne początku norm = ShapePoints[j].n.x * parallel1; norm.y += ShapePoints[j].n.y; pt = parallel1 * (ShapePoints[j].x - fOffsetX) + pos1; @@ -798,7 +798,7 @@ void TSegment::RaRenderLoft(CVertNormTex *&Vert, const vector6 *ShapePoints, int Vert->v = tv1; Vert->x = pt.x; Vert->y = pt.y; - Vert->z = pt.z; // punkt na pocztku odcinka + Vert->z = pt.z; // punkt na początku odcinka Vert++; norm = ShapePoints[j].n.x * parallel2; norm.y += ShapePoints[j].n.y; @@ -811,7 +811,7 @@ void TSegment::RaRenderLoft(CVertNormTex *&Vert, const vector6 *ShapePoints, int Vert->v = tv2; Vert->x = pt.x; Vert->y = pt.y; - Vert->z = pt.z; // punkt na kocu odcinka + Vert->z = pt.z; // punkt na końcu odcinka Vert++; } pos1 = pos2; @@ -840,14 +840,14 @@ void TSegment::RaRenderLoft(CVertNormTex *&Vert, const vector6 *ShapePoints, int Vert->v = 0; Vert->x = pt.x; Vert->y = pt.y; - Vert->z = pt.z; // punkt na pocztku odcinka + Vert->z = pt.z; // punkt na początku odcinka Vert++; - // dla trapezu drugi koniec ma inne wsprzdne + // dla trapezu drugi koniec ma inne współrzędne norm = ShapePoints[j + iNumShapePoints].n.x * parallel1; norm.y += ShapePoints[j + iNumShapePoints].n.y; pt = parallel1 * (ShapePoints[j + iNumShapePoints].x - fOffsetX) + - pos2; // odsunicie - pt.y += ShapePoints[j + iNumShapePoints].y; // wysoko + pos2; // odsunięcie + pt.y += ShapePoints[j + iNumShapePoints].y; // wysokość Vert->nx = norm.x; // niekoniecznie tak Vert->ny = norm.y; Vert->nz = norm.z; @@ -855,7 +855,7 @@ void TSegment::RaRenderLoft(CVertNormTex *&Vert, const vector6 *ShapePoints, int Vert->v = fLength / fTextureLength; Vert->x = pt.x; Vert->y = pt.y; - Vert->z = pt.z; // punkt na kocu odcinka + Vert->z = pt.z; // punkt na końcu odcinka Vert++; } else @@ -872,7 +872,7 @@ void TSegment::RaRenderLoft(CVertNormTex *&Vert, const vector6 *ShapePoints, int Vert->v = 0; Vert->x = pt.x; Vert->y = pt.y; - Vert->z = pt.z; // punkt na pocztku odcinka + Vert->z = pt.z; // punkt na początku odcinka Vert++; pt = parallel1 * (ShapePoints[j].x - fOffsetX) + pos2; pt.y += ShapePoints[j].y; @@ -883,7 +883,7 @@ void TSegment::RaRenderLoft(CVertNormTex *&Vert, const vector6 *ShapePoints, int Vert->v = fLength / fTextureLength; Vert->x = pt.x; Vert->y = pt.y; - Vert->z = pt.z; // punkt na kocu odcinka + Vert->z = pt.z; // punkt na końcu odcinka Vert++; } } @@ -891,23 +891,23 @@ void TSegment::RaRenderLoft(CVertNormTex *&Vert, const vector6 *ShapePoints, int void TSegment::RaAnimate(CVertNormTex *&Vert, const vector6 *ShapePoints, int iNumShapePoints, double fTextureLength, int iSkip, int iEnd, double fOffsetX) -{ // jak wyej, tylko z pominiciem mapowania i braku trapezowania +{ // jak wyżej, tylko z pominięciem mapowania i braku trapezowania vector3 pos1, pos2, dir, parallel1, parallel2, pt; double s, step, fOffset, t, fEnd; int i, j; - bool trapez = iNumShapePoints < 0; // sygnalizacja trapezowatoci + bool trapez = iNumShapePoints < 0; // sygnalizacja trapezowatości iNumShapePoints = abs(iNumShapePoints); if (bCurve) { - double m1, jmm1, m2, jmm2; // pozycje wzgldne na odcinku 0...1 (ale nie parametr Beziera) + double m1, jmm1, m2, jmm2; // pozycje względne na odcinku 0...1 (ale nie parametr Beziera) step = fStep; - s = fStep * iSkip; // iSkip - ile odcinkw z pocztku pomin - i = iSkip; // domylnie 0 - t = fTsBuffer[i]; // tabela wattoci t dla segmentw + s = fStep * iSkip; // iSkip - ile odcinków z początku pominąć + i = iSkip; // domyślnie 0 + t = fTsBuffer[i]; // tabela wattości t dla segmentów fOffset = 0.1 / fLength; // pierwsze 10cm - pos1 = FastGetPoint(t); // wektor pocztku segmentu + pos1 = FastGetPoint(t); // wektor początku segmentu dir = FastGetDirection(t, fOffset); // wektor kierunku - // parallel1=Normalize(CrossProduct(dir,vector3(0,1,0))); //wektor prostopady + // parallel1=Normalize(CrossProduct(dir,vector3(0,1,0))); //wektor prostopadły parallel1 = Normalize(vector3(-dir.z, 0.0, dir.x)); // wektor poprzeczny if (iEnd == 0) iEnd = iSegCount; @@ -916,17 +916,17 @@ void TSegment::RaAnimate(CVertNormTex *&Vert, const vector6 *ShapePoints, int iN jmm2 = 1.0 - m2; while (i < iEnd) { - ++i; // kolejny punkt amanej - s += step; // kocowa pozycja segmentu [m] + ++i; // kolejny punkt łamanej + s += step; // końcowa pozycja segmentu [m] m1 = m2; jmm1 = jmm2; // stara pozycja m2 = s / fEnd; jmm2 = 1.0 - m2; // nowa pozycja if (i == iEnd) - { // gdy przekroczylimy koniec - std dziury w torach... + { // gdy przekroczyliśmy koniec - stąd dziury w torach... step -= (s - fEnd); // jeszcze do wyliczenia mapowania potrzebny s = fEnd; - // i=iEnd; //20/5 ma dawa 4 + // i=iEnd; //20/5 ma dawać 4 m2 = 1.0; jmm2 = 0.0; } @@ -937,23 +937,23 @@ void TSegment::RaAnimate(CVertNormTex *&Vert, const vector6 *ShapePoints, int iN parallel2 = Normalize(vector3(-dir.z, 0.0, dir.x)); // wektor poprzeczny if (trapez) for (j = 0; j < iNumShapePoints; j++) - { // wsprzdne pocztku + { // współrzędne początku pt = parallel1 * (jmm1 * (ShapePoints[j].x - fOffsetX) + m1 * ShapePoints[j + iNumShapePoints].x) + pos1; pt.y += jmm1 * ShapePoints[j].y + m1 * ShapePoints[j + iNumShapePoints].y; Vert->x = pt.x; Vert->y = pt.y; - Vert->z = pt.z; // punkt na pocztku odcinka + Vert->z = pt.z; // punkt na początku odcinka Vert++; - // dla trapezu drugi koniec ma inne wsprzdne + // dla trapezu drugi koniec ma inne współrzędne pt = parallel2 * (jmm2 * (ShapePoints[j].x - fOffsetX) + m2 * ShapePoints[j + iNumShapePoints].x) + pos2; pt.y += jmm2 * ShapePoints[j].y + m2 * ShapePoints[j + iNumShapePoints].y; Vert->x = pt.x; Vert->y = pt.y; - Vert->z = pt.z; // punkt na kocu odcinka + Vert->z = pt.z; // punkt na końcu odcinka Vert++; } pos1 = pos2; @@ -974,14 +974,14 @@ void TSegment::RaAnimate(CVertNormTex *&Vert, const vector6 *ShapePoints, int iN pt.y += ShapePoints[j].y; Vert->x = pt.x; Vert->y = pt.y; - Vert->z = pt.z; // punkt na pocztku odcinka + Vert->z = pt.z; // punkt na początku odcinka Vert++; pt = parallel1 * (ShapePoints[j + iNumShapePoints].x - fOffsetX) + - pos2; // odsunicie - pt.y += ShapePoints[j + iNumShapePoints].y; // wysoko + pos2; // odsunięcie + pt.y += ShapePoints[j + iNumShapePoints].y; // wysokość Vert->x = pt.x; Vert->y = pt.y; - Vert->z = pt.z; // punkt na kocu odcinka + Vert->z = pt.z; // punkt na końcu odcinka Vert++; } } diff --git a/Segment.h b/Segment.h index 59f868b3..b194ae1e 100644 --- a/Segment.h +++ b/Segment.h @@ -16,7 +16,7 @@ http://mozilla.org/MPL/2.0/. using namespace Math3D; -// 110405 Ra: klasa punktw przekroju z normalnymi +// 110405 Ra: klasa punktów przekroju z normalnymi class vector6 : public vector3 { // punkt przekroju wraz z wektorem normalnym @@ -36,7 +36,7 @@ class vector6 : public vector3 n.x = 0.0; n.y = 1.0; n.z = 0.0; - }; // Ra: bo na razie s z tym problemy + }; // Ra: bo na razie są z tym problemy vector6(double a, double b, double c) { x = a; @@ -52,29 +52,29 @@ class TSegment { // aproksymacja toru (zwrotnica ma dwa takie, jeden z nich jest aktywny) private: vector3 Point1, CPointOut, CPointIn, Point2; - double fRoll1, fRoll2; // przechyka na kocach - double fLength; // dugo policzona - double *fTsBuffer; // wartoci parametru krzywej dla rwnych odcinkw + double fRoll1, fRoll2; // przechyłka na końcach + double fLength; // długość policzona + double *fTsBuffer; // wartości parametru krzywej dla równych odcinków double fStep; - int iSegCount; // ilo odcinkw do rysowania krzywej - double fDirection; // Ra: kt prostego w planie; dla uku kt od Point1 - double fStoop; // Ra: kt wzniesienia; dla uku od Point1 - vector3 vA, vB, vC; // wspczynniki wielomianw trzeciego stopnia vD==Point1 - // TSegment *pPrev; //odcinek od strony punktu 1 - w segmencie, eby nie skaka na zwrotnicach + int iSegCount; // ilość odcinków do rysowania krzywej + double fDirection; // Ra: kąt prostego w planie; dla łuku kąt od Point1 + double fStoop; // Ra: kąt wzniesienia; dla łuku od Point1 + vector3 vA, vB, vC; // współczynniki wielomianów trzeciego stopnia vD==Point1 + // TSegment *pPrev; //odcinek od strony punktu 1 - w segmencie, żeby nie skakać na zwrotnicach // TSegment *pNext; //odcinek od strony punktu 2 - TTrack *pOwner; // wskanik na waciciela - double fAngle[2]; // kty zakoczenia drogi na przejazdach + TTrack *pOwner; // wskaźnik na właściciela + double fAngle[2]; // kąty zakończenia drogi na przejazdach vector3 GetFirstDerivative(double fTime); double RombergIntegral(double fA, double fB); double GetTFromS(double s); vector3 RaInterpolate(double t); vector3 RaInterpolate0(double t); - // TSegment *segNeightbour[2]; //ssiednie odcinki - musi by przeniesione z Track - // int iNeightbour[2]; //do ktrego koca doczepiony + // TSegment *segNeightbour[2]; //sąsiednie odcinki - musi być przeniesione z Track + // int iNeightbour[2]; //do którego końca doczepiony public: bool bCurve; - // int iShape; //Ra: flagi ksztatu dadz wicej moliwoci optymalizacji - // (0-Bezier,1-prosty,2/3-uk w lewo/prawo,6/7-przejciowa w lewo/prawo) + // int iShape; //Ra: flagi kształtu dadzą więcej możliwości optymalizacji + // (0-Bezier,1-prosty,2/3-łuk w lewo/prawo,6/7-przejściowa w lewo/prawo) TSegment(TTrack *owner); ~TSegment(); bool Init(vector3 NewPoint1, vector3 NewPoint2, double fNewStep, double fNewRoll1 = 0, @@ -113,7 +113,7 @@ class TSegment return ((1.0 - s) * fRoll1 + s * fRoll2); } void GetRolls(double &r1, double &r2) - { // pobranie przechyek (do generowania trjktw) + { // pobranie przechyłek (do generowania trójkątów) r1 = fRoll1; r2 = fRoll2; } @@ -149,7 +149,7 @@ class TSegment { fAngle[i] = a; }; - void Rollment(double w1, double w2); // poprawianie przechyki + void Rollment(double w1, double w2); // poprawianie przechyłki }; //--------------------------------------------------------------------------- diff --git a/Sound.cpp b/Sound.cpp index 223a2a5d..3eced2f1 100644 --- a/Sound.cpp +++ b/Sound.cpp @@ -34,9 +34,9 @@ TSoundContainer *TSoundsManager::First = NULL; TSoundContainer::TSoundContainer(LPDIRECTSOUND pDS, const char *Directory, const char *strFileName, int NConcurrent) -{ // wczytanie pliku dwikowego +{ // wczytanie pliku dźwiękowego int hr = 111; - DSBuffer = NULL; // na pocztek, gdyby uruchomi dwikw si nie udao + DSBuffer = NULL; // na początek, gdyby uruchomić dźwięków się nie udało Concurrent = NConcurrent; @@ -69,8 +69,8 @@ TSoundContainer::TSoundContainer(LPDIRECTSOUND pDS, const char *Directory, const ZeroMemory(&dsbd, sizeof(DSBUFFERDESC)); dsbd.dwSize = sizeof(DSBUFFERDESC); dsbd.dwFlags = DSBCAPS_STATIC | DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY; - if (!Global::bInactivePause) // jeli przeczony w to ma nadal dziaa - dsbd.dwFlags |= DSBCAPS_GLOBALFOCUS; // to dwiki maj by rwnie syszalne + if (!Global::bInactivePause) // jeśli przełączony w tło ma nadal działać + dsbd.dwFlags |= DSBCAPS_GLOBALFOCUS; // to dźwięki mają być również słyszalne dsbd.dwBufferBytes = pWaveSoundRead->m_ckIn.cksize; dsbd.lpwfxFormat = pWaveSoundRead->m_pwfx; fSamplingRate = pWaveSoundRead->m_pwfx->nSamplesPerSec; @@ -166,7 +166,7 @@ LPDIRECTSOUNDBUFFER TSoundContainer::GetUnique(LPDIRECTSOUND pDS) { if (!DSBuffer) return NULL; - // jeli si dobrze zainicjowao + // jeśli się dobrze zainicjowało LPDIRECTSOUNDBUFFER buff; pDS->DuplicateSoundBuffer(DSBuffer, &buff); if (buff) @@ -195,7 +195,7 @@ TSoundContainer * TSoundsManager::LoadFromFile(const char *Dir, const char *Name }; void TSoundsManager::LoadSounds(char *Directory) -{ // wczytanie wszystkich plikw z katalogu - mao elastyczne +{ // wczytanie wszystkich plików z katalogu - mało elastyczne WIN32_FIND_DATA FindFileData; HANDLE handle = FindFirstFile("sounds\\*.wav", &FindFileData); if (handle != INVALID_HANDLE_VALUE) @@ -207,10 +207,10 @@ void TSoundsManager::LoadSounds(char *Directory) }; LPDIRECTSOUNDBUFFER TSoundsManager::GetFromName(const char *Name, bool Dynamic, float *fSamplingRate) -{ // wyszukanie dwiku w pamici albo wczytanie z pliku +{ // wyszukanie dźwięku w pamięci albo wczytanie z pliku std::string file; if (Dynamic) - { // prba wczytania z katalogu pojazdu + { // próba wczytania z katalogu pojazdu file = Global::asCurrentDynamicPath + Name; if (FileExists(file)) Name = file.c_str(); // nowa nazwa @@ -224,7 +224,7 @@ LPDIRECTSOUNDBUFFER TSoundsManager::GetFromName(const char *Name, bool Dynamic, if (strcmp(Name, Next->Name) == 0) { if (fSamplingRate) - *fSamplingRate = Next->fSamplingRate; // czstotliwo + *fSamplingRate = Next->fSamplingRate; // częstotliwość return (Next->GetUnique(pDS)); // DSBuffers. /* @@ -259,7 +259,7 @@ LPDIRECTSOUNDBUFFER TSoundsManager::GetFromName(const char *Name, bool Dynamic, if (Next) { // if (fSamplingRate) - *fSamplingRate = Next->fSamplingRate; // czstotliwo + *fSamplingRate = Next->fSamplingRate; // częstotliwość return Next->GetUnique(pDS); } ErrorLog("Missed sound: " + std::string(Name) ); @@ -352,8 +352,8 @@ void TSoundsManager::Init(HWND hWnd) ZeroMemory(&dsbd, sizeof(DSBUFFERDESC)); dsbd.dwSize = sizeof(DSBUFFERDESC); dsbd.dwFlags = DSBCAPS_PRIMARYBUFFER; - if (!Global::bInactivePause) // jeli przeczony w to ma nadal dziaa - dsbd.dwFlags |= DSBCAPS_GLOBALFOCUS; // to dwiki maj by rwnie syszalne + if (!Global::bInactivePause) // jeśli przełączony w tło ma nadal działać + dsbd.dwFlags |= DSBCAPS_GLOBALFOCUS; // to dźwięki mają być również słyszalne dsbd.dwBufferBytes = 0; dsbd.lpwfxFormat = NULL; diff --git a/Sound.h b/Sound.h index 3ba4d5fd..7eb6c589 100644 --- a/Sound.h +++ b/Sound.h @@ -34,8 +34,8 @@ class TSoundContainer int Oldest; char Name[80]; LPDIRECTSOUNDBUFFER DSBuffer; - float fSamplingRate; // czstotliwo odczytana z pliku - int iBitsPerSample; // ile bitw na prbk + float fSamplingRate; // częstotliwość odczytana z pliku + int iBitsPerSample; // ile bitów na próbkę TSoundContainer *Next; std::stack DSBuffers; LPDIRECTSOUNDBUFFER GetUnique(LPDIRECTSOUND pDS); diff --git a/Texture.cpp b/Texture.cpp index 863d6be2..ce3e36f0 100644 --- a/Texture.cpp +++ b/Texture.cpp @@ -38,7 +38,7 @@ TTexturesManager::Names::iterator TTexturesManager::LoadFromFile(std::string fil std::string realFileName(fileName); std::ifstream file(fileName.c_str()); - // Ra: niby bez tego jest lepiej, ale dziaa gorzej, wic przywrcone jest oryginalne + // Ra: niby bez tego jest lepiej, ale działa gorzej, więc przywrócone jest oryginalne if (!file.is_open()) realFileName.insert(0, szTexturePath); else @@ -47,7 +47,7 @@ TTexturesManager::Names::iterator TTexturesManager::LoadFromFile(std::string fil // char* cFileName = const_cast(fileName.c_str()); message += realFileName; - WriteLog(message.c_str()); // Ra: chybaa miao by z komunikatem z przodu, a nie tylko nazwa + WriteLog(message.c_str()); // Ra: chybaa miało być z komunikatem z przodu, a nie tylko nazwa size_t pos = fileName.rfind('.'); std::string ext(fileName, pos + 1, std::string::npos); @@ -64,7 +64,7 @@ TTexturesManager::Names::iterator TTexturesManager::LoadFromFile(std::string fil texinfo = LoadDDS(realFileName, filter); _alphas.insert( - texinfo); // zapamitanie stanu przezroczystoci tekstury - mona by tylko przezroczyste + texinfo); // zapamiętanie stanu przezroczystości tekstury - można by tylko przezroczyste std::pair ret = _names.insert(std::make_pair(fileName, texinfo.first)); if (!texinfo.first) @@ -91,44 +91,44 @@ struct ReplaceSlash }; GLuint TTexturesManager::GetTextureID(char *dir, char *where, std::string fileName, int filter) -{ // ustalenie numeru tekstury, wczytanie jeli nie jeszcze takiej nie byo +{ // ustalenie numeru tekstury, wczytanie jeśli nie jeszcze takiej nie było /* - // Ra: niby tak jest lepiej, ale dziaa gorzej, wic przywrcone jest oryginalne - //najpierw szukamy w katalogu, z ktrego wywoywana jest tekstura, potem z wyszego - //Ra: przerobi na wyszukiwanie w drzewie nazw, do ktrego zapisywa np. rozmiary, - przezroczysto - //Ra: ustala, ktre tekstury mona wczyta ju w trakcie symulacji + // Ra: niby tak jest lepiej, ale działa gorzej, więc przywrócone jest oryginalne + //najpierw szukamy w katalogu, z którego wywoływana jest tekstura, potem z wyższego + //Ra: przerobić na wyszukiwanie w drzewie nazw, do którego zapisywać np. rozmiary, + przezroczystość + //Ra: ustalać, które tekstury można wczytać już w trakcie symulacji size_t pos=fileName.find(':'); //szukamy dwukropka - if (pos!=std::string::npos) //po dwukropku mog by podane dodatkowe informacje - fileName=fileName.substr(0,pos); //niebdce nazw tekstury + if (pos!=std::string::npos) //po dwukropku mogą być podane dodatkowe informacje + fileName=fileName.substr(0,pos); //niebędące nazwą tekstury std::transform(fileName.begin(),fileName.end(),fileName.begin(),ReplaceSlash()); //zamiana "/" na "\" - //jeli bieaca cieka do tekstur nie zostaa dodana to dodajemy domyln + //jeśli bieżaca ścieżka do tekstur nie została dodana to dodajemy domyślną //if (fileName.find('\\')==std::string::npos) //bz sensu // fileName.insert(0,szDefaultTexturePath); - //najpierw szukamy w podanym katalogu, potem w domylnym + //najpierw szukamy w podanym katalogu, potem w domyślnym Names::iterator iter; std::ifstream file; if ((fileName.find('.')==fileName.npos)?true:(fileName.rfind('.')second; //znalezione! if (dir) - {//moe we wskazanym katalogu? + {//może we wskazanym katalogu? test=fileName; - test.insert(0,dir); //jeszcze prba z dodatkow ciek - test.append(Global::szDefaultExt[i]); //dodanie jednego z kilku rozszerze - iter=_names.find(test); //czy mamy ju w magazynie? + test.insert(0,dir); //jeszcze próba z dodatkową ścieżką + test.append(Global::szDefaultExt[i]); //dodanie jednego z kilku rozszerzeń + iter=_names.find(test); //czy mamy już w magazynie? if (iter!=_names.end()) return iter->second; //znalezione! } @@ -136,19 +136,19 @@ GLuint TTexturesManager::GetTextureID(char *dir, char *where, std::string fileNa //for (int i=0;i<4;++i) //{//w magazynie nie ma, to sprawdzamy na dysku test=fileName; - if (where) test.insert(0,where); //cieka obiektu wywoujcego - test.append(Global::szDefaultExt[i]); //dodanie jednego z kilku rozszerze + if (where) test.insert(0,where); //ścieżka obiektu wywołującego + test.append(Global::szDefaultExt[i]); //dodanie jednego z kilku rozszerzeń file.open(test.c_str()); if (!file.is_open()) {test=fileName; - if (dir) test.insert(0,dir); //prba z dodatkow ciek - test.append(Global::szDefaultExt[i]); //dodanie jednego z kilku rozszerze + if (dir) test.insert(0,dir); //próba z dodatkową ścieżką + test.append(Global::szDefaultExt[i]); //dodanie jednego z kilku rozszerzeń file.open(test.c_str()); } if (file.is_open()) {//jak znaleziony, to plik zostaje otwarty - fileName=test; //zapamitanie znalezionego rozszerzenia - break; //wyjcie z ptli na etapie danego rozszerzenia + fileName=test; //zapamiętanie znalezionego rozszerzenia + break; //wyjście z pętli na etapie danego rozszerzenia } } } @@ -157,23 +157,23 @@ GLuint TTexturesManager::GetTextureID(char *dir, char *where, std::string fileNa std::string test; //zmienna robocza //najpierw szukamy w magazynie test=fileName; - if (where) test.insert(0,where); //cieka obiektu wywoujcego - iter=_names.find(test); //czy mamy ju w magazynie? + if (where) test.insert(0,where); //ścieżka obiektu wywołującego + iter=_names.find(test); //czy mamy już w magazynie? if (iter!=_names.end()) return iter->second; //znalezione! test=fileName; - if (dir) test.insert(0,dir); //jeszcze prba z dodatkow ciek - iter=_names.find(test); //czy mamy ju w magazynie? + if (dir) test.insert(0,dir); //jeszcze próba z dodatkową ścieżką + iter=_names.find(test); //czy mamy już w magazynie? if (iter!=_names.end()) return iter->second; //znalezione! //w magazynie nie ma, to sprawdzamy na dysku test=fileName; - if (where) test.insert(0,where); //cieka obiektu wywoujcego + if (where) test.insert(0,where); //ścieżka obiektu wywołującego file.open(test.c_str()); if (!file.is_open()) {//jak znaleziony, to plik zostaje otwarty test=fileName; - if (dir) test.insert(0,dir); //prba z dodatkow ciek + if (dir) test.insert(0,dir); //próba z dodatkową ścieżką file.open(test.c_str()); if (file.is_open()) fileName=test; //ustalenie nowej nazwy @@ -181,34 +181,34 @@ GLuint TTexturesManager::GetTextureID(char *dir, char *where, std::string fileNa } if (file.is_open()) {//plik pozostaje otwarty, gdy znaleziono na dysku - file.close(); //mona ju zamkn - iter=LoadFromFile(fileName,filter); //doda si do magazynu i zwrci swoj pozycj + file.close(); //można już zamknąć + iter=LoadFromFile(fileName,filter); //doda się do magazynu i zwróci swoją pozycję } */ size_t pos = fileName.find(':'); // szukamy dwukropka - if (pos != std::string::npos) // po dwukropku mog by podane dodatkowe informacje - fileName = fileName.substr(0, pos); // niebdce nazw tekstury + if (pos != std::string::npos) // po dwukropku mogą być podane dodatkowe informacje + fileName = fileName.substr(0, pos); // niebędące nazwą tekstury pos = fileName.find('|'); // szukamy separatora tekstur - if (pos != std::string::npos) // po | moe by nazwa kolejnej tekstury - fileName = fileName.substr(0, pos); // i trzeba to obci + if (pos != std::string::npos) // po | może być nazwa kolejnej tekstury + fileName = fileName.substr(0, pos); // i trzeba to obciąć std::transform(fileName.begin(), fileName.end(), fileName.begin(), ReplaceSlash()); - // jeli bieaca cieka do tekstur nie zostaa dodana to dodajemy domyln + // jeśli bieżaca ścieżka do tekstur nie została dodana to dodajemy domyślną if (fileName.find('\\') == std::string::npos) fileName.insert(0, szTexturePath); Names::iterator iter; if (fileName.find('.') == std::string::npos) - { // Ra: wyprbowanie rozszerze po kolei, zaczynajc od domylnego - fileName.append("."); // kropka bdze na pewno, reszt trzeba prbowa + { // Ra: wypróbowanie rozszerzeń po kolei, zaczynając od domyślnego + fileName.append("."); // kropka będze na pewno, resztę trzeba próbować std::string test; // zmienna robocza for (int i = 0; i < 4; ++i) { // najpierw szukamy w magazynie test = fileName; test.append(Global::szDefaultExt[i]); - iter = _names.find(fileName); // czy mamy ju w magazynie? + iter = _names.find(fileName); // czy mamy już w magazynie? if (iter != _names.end()) return iter->second; // znalezione! - test.insert(0, szTexturePath); // jeszcze prba z dodatkow ciek - iter = _names.find(fileName); // czy mamy ju w magazynie? + test.insert(0, szTexturePath); // jeszcze próba z dodatkową ścieżką + iter = _names.find(fileName); // czy mamy już w magazynie? if (iter != _names.end()) return iter->second; // znalezione! } @@ -226,18 +226,18 @@ GLuint TTexturesManager::GetTextureID(char *dir, char *where, std::string fileNa { fileName.append(Global::szDefaultExt[i]); // dopisanie znalezionego file.close(); - break; // wyjcie z ptli na etapie danego rozszerzenia + break; // wyjście z pętli na etapie danego rozszerzenia } } } - iter = _names.find(fileName); // czy mamy ju w magazynie + iter = _names.find(fileName); // czy mamy już w magazynie if (iter == _names.end()) iter = LoadFromFile(fileName, filter); return (iter != _names.end() ? iter->second : 0); }; bool TTexturesManager::GetAlpha(GLuint id) -{ // atrybut przezroczystoci dla tekstury o podanym numerze (id) +{ // atrybut przezroczystości dla tekstury o podanym numerze (id) Alphas::iterator iter = _alphas.find(id); return (iter != _alphas.end() ? iter->second : false); } @@ -317,7 +317,7 @@ TTexturesManager::AlphaValue TTexturesManager::LoadBMP(std::string fileName) TTexturesManager::AlphaValue TTexturesManager::LoadTGA(std::string fileName, int filter) { AlphaValue fail(0, false); - int writeback = -1; //-1 plik jest OK, >=0 - od ktrego bajtu zapisa poprawiony plik + int writeback = -1; //-1 plik jest OK, >=0 - od którego bajtu zapisać poprawiony plik GLubyte TGACompheader[] = {0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // uncompressed TGA header GLubyte TGAcompare[12]; // used to compare TGA header GLubyte header[6]; // first 6 useful bytes from the header @@ -340,7 +340,7 @@ TTexturesManager::AlphaValue TTexturesManager::LoadTGA(std::string fileName, int file.close(); return fail; }; - { // sprawdzenie prawidowoci rozmiarw + { // sprawdzenie prawidłowości rozmiarów int i, j; for (i = width, j = 0; i; i >>= 1) if (i & 1) @@ -350,7 +350,7 @@ TTexturesManager::AlphaValue TTexturesManager::LoadTGA(std::string fileName, int if (i & 1) ++j; if (j != 1) - WriteLog("Bad texture: " + fileName + " is " + std::to_string(width) + "" + std::to_string(height) ); + WriteLog("Bad texture: " + fileName + " is " + std::to_string(width) + "×" + std::to_string(height) ); } GLuint bpp = header[4]; // grab the TGA's bits per pixel (24 or 32) GLuint bytesPerPixel = bpp / 8; // divide by 8 to get the bytes per pixel @@ -372,46 +372,46 @@ TTexturesManager::AlphaValue TTexturesManager::LoadTGA(std::string fileName, int GLuint filesize; // current byte GLuint colorbuffer[1]; // Storage for 1 pixel file.seekg(0, std::ios::end); // na koniec - filesize = (int)file.tellg() - 18; // rozmiar bez nagwka - file.seekg(18, std::ios::beg); // ponownie za nagwkiem - GLubyte *copyto = imageData; // gdzie wstawia w buforze + filesize = (int)file.tellg() - 18; // rozmiar bez nagłówka + file.seekg(18, std::ios::beg); // ponownie za nagłówkiem + GLubyte *copyto = imageData; // gdzie wstawiać w buforze GLubyte *copyend = imageData + imageSize; // za ostatnim bajtem bufora - GLubyte *copyfrom = imageData + imageSize - filesize; // gdzie jest pocztek - int chunkheader = 0; // Ra: bdziemy wczytywa najmodszy bajt - if (filesize < imageSize) // jeli po kompresji jest mniejszy ni przed - { // Ra: nowe wczytywanie skompresowanych: czytamy cae od razu, dekompresja w pamici + GLubyte *copyfrom = imageData + imageSize - filesize; // gdzie jest początek + int chunkheader = 0; // Ra: będziemy wczytywać najmłodszy bajt + if (filesize < imageSize) // jeśli po kompresji jest mniejszy niż przed + { // Ra: nowe wczytywanie skompresowanych: czytamy całe od razu, dekompresja w pamięci GLuint copybytes; - file.read(reinterpret_cast(copyfrom), filesize); // wczytanie reszty po nagwku - // najpierw trzeba ustali, ile skopiowanych pikseli jest na samym kocu + file.read(reinterpret_cast(copyfrom), filesize); // wczytanie reszty po nagłówku + // najpierw trzeba ustalić, ile skopiowanych pikseli jest na samym końcu copyto = copyfrom; // roboczo przelatujemy wczytane dane - copybytes = 0; // licznik bajtw obrazka + copybytes = 0; // licznik bajtów obrazka while (copybytes < imageSize) { - chunkheader = (unsigned char)*copyto; // jeden bajt, pozostae zawsze zerowe + chunkheader = (unsigned char)*copyto; // jeden bajt, pozostałe zawsze zerowe copyto += 1 + bytesPerPixel; // bajt licznika oraz jeden piksel jest zawsze - copybytes += (1 + (chunkheader & 127)) * bytesPerPixel; // ilo pikseli - if (chunkheader < 128) // jeli kopiowanie, pikseli jest wicej + copybytes += (1 + (chunkheader & 127)) * bytesPerPixel; // ilość pikseli + if (chunkheader < 128) // jeśli kopiowanie, pikseli jest więcej copyto += (chunkheader)*bytesPerPixel; // rozmiar kopiowanego obszaru (bez // jednego piksela) } if (copybytes > imageSize) - { // nie ma prawa by wiksze + { // nie ma prawa być większe WriteLog("Compression error"); delete[] imageData; file.close(); return fail; } - // na kocu mog by mieci - int extraend = copyend - copyto; // dugo mieci na kocu + // na końcu mogą być śmieci + int extraend = copyend - copyto; // długość śmieci na końcu if (extraend > 0) - { // przesuwamy bufor do koca obszaru dekompresji + { // przesuwamy bufor do końca obszaru dekompresji WriteLog("Extra bytes: " + std::to_string(extraend)); memmove(copyfrom + extraend, copyfrom, filesize - extraend); copyfrom += extraend; file.close(); filesize -= extraend; // to chyba nie ma znaczenia - if (Global::iModifyTGA & 2) // flaga obcinania mieci - { // najlepiej by byo obci plik, ale fstream tego nie potrafi + if (Global::iModifyTGA & 2) // flaga obcinania śmieci + { // najlepiej by było obciąć plik, ale fstream tego nie potrafi int handle; for( unsigned int i = 0; i < fileName.length(); ++i ) { if( fileName[ i ] == '/' ) { fileName[ i ] = '\\'; } // bo to Windows } @@ -420,45 +420,45 @@ TTexturesManager::AlphaValue TTexturesManager::LoadTGA(std::string fileName, int // NOTE: this posix code is unsafe, and being deprecated in visual c // TODO: replace with something up to date handle = open(fileName.c_str(), O_RDWR | O_BINARY); - chsize(handle, 18 + filesize); // obcicie mieci + chsize(handle, 18 + filesize); // obcięcie śmieci close(handle); - extraend = 0; // skoro obcity, to si ju nie liczy + extraend = 0; // skoro obcięty, to się już nie liczy } file.open(fileName.c_str(), std::ios::binary | std::ios::in); } - if (chunkheader < 128) // jeli ostatnie piksele s kopiowane + if (chunkheader < 128) // jeśli ostatnie piksele są kopiowane copyend -= (1 + chunkheader) * - bytesPerPixel; // bajty kopiowane na kocu nie podlegajce dekompresji + bytesPerPixel; // bajty kopiowane na końcu nie podlegające dekompresji else - copyend -= bytesPerPixel; // ostatni piksel i tak si nie zmieni - copyto = imageData; // teraz bdzie wypenianie od pocztku obszaru + copyend -= bytesPerPixel; // ostatni piksel i tak się nie zmieni + copyto = imageData; // teraz będzie wypełnianie od początku obszaru while (copyto < copyend) { - chunkheader = (unsigned char)*copyfrom; // jeden bajt, pozostae zawsze zerowe + chunkheader = (unsigned char)*copyfrom; // jeden bajt, pozostałe zawsze zerowe if (copyto > copyfrom) - { // jeli piksele maj by kopiowane, to moliwe jest przesunicie ich o 1 bajt, na + { // jeśli piksele mają być kopiowane, to możliwe jest przesunięcie ich o 1 bajt, na // miejsce licznika filesize = (imageData + imageSize - copyto) / - bytesPerPixel; // ile pikseli pozostao do koca + bytesPerPixel; // ile pikseli pozostało do końca // WriteLog("Decompression buffer overflow at pixel // "+AnsiString((copyto-imageData)/bytesPerPixel)+"+"+AnsiString(filesize)); - // pozycj w pliku trzeba by zapamieta i po wczytaniu reszty pikseli star - // metod - // zapisa od niej dane od (copyto), poprzedzone bajtem o wartoci (filesize-1) + // pozycję w pliku trzeba by zapamietać i po wczytaniu reszty pikseli starą + // metodą + // zapisać od niej dane od (copyto), poprzedzone bajtem o wartości (filesize-1) writeback = imageData + imageSize + extraend - - copyfrom; // ile bajtw skompresowanych zostao do koca + copyfrom; // ile bajtów skompresowanych zostało do końca copyfrom = copyto; // adres piksela do zapisania - file.seekg(-writeback, std::ios::end); // odlego od koca (ujemna) + file.seekg(-writeback, std::ios::end); // odległość od końca (ujemna) if ((filesize > 128) || - !(Global::iModifyTGA & 4)) // gdy za duo pikseli albo wyczone - writeback = -1; // zapis moliwe jeli ilo problematycznych pikseli nie + !(Global::iModifyTGA & 4)) // gdy za dużo pikseli albo wyłączone + writeback = -1; // zapis możliwe jeśli ilość problematycznych pikseli nie // przekaracza 128 - break; // bufor si zatka, dalej w ten sposb si nie da + break; // bufor się zatkał, dalej w ten sposób się nie da } if (chunkheader < 128) - { // dla nagwka < 128 mamy podane ile pikseli przekopiowa minus 1 + { // dla nagłówka < 128 mamy podane ile pikseli przekopiować minus 1 copybytes = (++chunkheader) * bytesPerPixel; // rozmiar kopiowanego obszaru - memcpy(copyto, ++copyfrom, copybytes); // skopiowanie tylu bajtw + memcpy(copyto, ++copyfrom, copybytes); // skopiowanie tylu bajtów copyto += copybytes; copyfrom += copybytes; } @@ -467,12 +467,12 @@ TTexturesManager::AlphaValue TTexturesManager::LoadTGA(std::string fileName, int chunkheader -= 127; // copy the color into the image data as many times as dictated if (bytesPerPixel == 4) - { // przy czterech bajtach powinno by szybsze uywanie int - __int32 *ptr = (__int32 *)(copyto); // wskanik na int - __int32 bgra = *((__int32 *)++copyfrom); // kolor wypeniajcy (4 bajty) + { // przy czterech bajtach powinno być szybsze używanie int + __int32 *ptr = (__int32 *)(copyto); // wskaźnik na int + __int32 bgra = *((__int32 *)++copyfrom); // kolor wypełniający (4 bajty) for (int counter = 0; counter < chunkheader; counter++) *ptr++ = bgra; - copyto = reinterpret_cast(ptr); // rzutowanie, eby nie dodawa + copyto = reinterpret_cast(ptr); // rzutowanie, żeby nie dodawać copyfrom += 4; } else @@ -492,13 +492,13 @@ TTexturesManager::AlphaValue TTexturesManager::LoadTGA(std::string fileName, int { WriteLog("Compressed file is larger than uncompressed!"); if (Global::iModifyTGA & 1) - writeback = 0; // no zapisa ten krtszy zaczynajac od pocztku... + writeback = 0; // no zapisać ten krótszy zaczynajac od początku... } // if (copyto(ptr); // rzutowanie, eby nie dodawa + copyto = reinterpret_cast(ptr); // rzutowanie, żeby nie dodawać } else for (int counter = 0; counter < chunkheader; counter++) @@ -535,18 +535,18 @@ TTexturesManager::AlphaValue TTexturesManager::LoadTGA(std::string fileName, int } // while (copyto= 0) { // zapisanie pliku - file.close(); // tamten zamykamy, bo by tylko do odczytu + file.close(); // tamten zamykamy, bo był tylko do odczytu if (writeback) - { // zapisanie samej kocwki pliku, ktra utrudnia dekompresj w buforze + { // zapisanie samej końcówki pliku, która utrudnia dekompresję w buforze WriteLog("Rewriting end of file..."); chunkheader = filesize - 1; // licznik jest o 1 mniejszy file.open(fileName.c_str(), std::ios::binary | std::ios::out | std::ios::in); - file.seekg(-writeback, std::ios::end); // odlego od koca (ujemna) + file.seekg(-writeback, std::ios::end); // odległość od końca (ujemna) file.write((char *)&chunkheader, 1); // zapisanie licznika file.write(reinterpret_cast(copyfrom), filesize * bytesPerPixel); // piksele bez kompresji } else - { // zapisywanie caoci pliku, bdzie krtszy, wic trzeba usun go w caoci + { // zapisywanie całości pliku, będzie krótszy, więc trzeba usunąć go w całości WriteLog("Writing uncompressed file..."); TGAcompare[2] = 2; // bez kompresji file.open(fileName.c_str(), std::ios::binary | std::ios::out | std::ios::trunc); @@ -556,7 +556,7 @@ TTexturesManager::AlphaValue TTexturesManager::LoadTGA(std::string fileName, int } } }; - file.close(); // plik zamykamy dopiero na samym kocu + file.close(); // plik zamykamy dopiero na samym końcu bool alpha = (bpp == 32); bool hash = (fileName.find('#') != std::string::npos); // true gdy w nazwie jest "#" bool dollar = (fileName.find('$') == std::string::npos); // true gdy w nazwie nie ma "$" @@ -564,24 +564,24 @@ TTexturesManager::AlphaValue TTexturesManager::LoadTGA(std::string fileName, int if (pos != std::string::npos) if (pos < fileName.size()) { - filter = (int)fileName[pos + 1] - '0'; // zamiana cyfry za % na liczb + filter = (int)fileName[pos + 1] - '0'; // zamiana cyfry za % na liczbę if ((filter < 0) || (filter > 10)) - filter = -1; // jeli nie jest cyfr + filter = -1; // jeśli nie jest cyfrą } if (!alpha && !hash && dollar && (filter < 0)) - filter = Global::iDefaultFiltering; // dotyczy tekstur TGA bez kanau alfa + filter = Global::iDefaultFiltering; // dotyczy tekstur TGA bez kanału alfa // ewentualne przeskalowanie tekstury do dopuszczalnego rozumiaru GLint w = width, h = height; if (width > Global::iMaxTextureSize) - width = Global::iMaxTextureSize; // ogranizczenie wielkoci + width = Global::iMaxTextureSize; // ogranizczenie wielkości if (height > Global::iMaxTextureSize) height = Global::iMaxTextureSize; if ((w != width) || (h != height)) - { // przeskalowanie tekstury, eby si nie wywietlaa jako biaa + { // przeskalowanie tekstury, żeby się nie wyświetlała jako biała GLubyte *imgData = new GLubyte[width * height * bytesPerPixel]; // nowy rozmiar gluScaleImage(bytesPerPixel == 3 ? GL_RGB : GL_RGBA, w, h, GL_UNSIGNED_BYTE, imageData, width, height, GL_UNSIGNED_BYTE, imgData); - delete imageData; // usunicie starego + delete imageData; // usunięcie starego imageData = imgData; } GLuint id = CreateTexture(imageData, (alpha ? GL_BGRA : GL_BGR), width, height, alpha, hash, @@ -704,7 +704,7 @@ TTexturesManager::AlphaValue TTexturesManager::LoadDDS(std::string fileName, int data.width = ddsd.dwWidth; data.height = ddsd.dwHeight; data.numMipMaps = ddsd.dwMipMapCount; - { // sprawdzenie prawidowoci rozmiarw + { // sprawdzenie prawidłowości rozmiarów int i, j; for (i = data.width, j = 0; i; i >>= 1) if (i & 1) @@ -714,7 +714,7 @@ TTexturesManager::AlphaValue TTexturesManager::LoadDDS(std::string fileName, int if (i & 1) ++j; if (j != 1) - WriteLog( "Bad texture: " + fileName + " is " + std::to_string(data.width) + "" + std::to_string(data.height) ); + WriteLog( "Bad texture: " + fileName + " is " + std::to_string(data.width) + "×" + std::to_string(data.height) ); } if (ddsd.ddpfPixelFormat.dwFourCC == FOURCC_DXT1) @@ -730,14 +730,14 @@ TTexturesManager::AlphaValue TTexturesManager::LoadDDS(std::string fileName, int if (filter >= 0) SetFiltering(filter); // cyfra po % w nazwie else - // SetFiltering(bHasAlpha&&bDollar,bHash); //znaki #, $ i kana alfa w nazwie + // SetFiltering(bHasAlpha&&bDollar,bHash); //znaki #, $ i kanał alfa w nazwie SetFiltering(data.components == 4, fileName.find('#') != std::string::npos); GLuint offset = 0; int firstMipMap = 0; while ((data.width > Global::iMaxTextureSize) || (data.height > Global::iMaxTextureSize)) - { // pomijanie zbyt duych mipmap, jeli wymagane jest ograniczenie rozmiaru + { // pomijanie zbyt dużych mipmap, jeśli wymagane jest ograniczenie rozmiaru offset += ((data.width + 3) / 4) * ((data.height + 3) / 4) * data.blockSize; data.width /= 2; data.height /= 2; @@ -745,7 +745,7 @@ TTexturesManager::AlphaValue TTexturesManager::LoadDDS(std::string fileName, int }; for (int i = 0; i < data.numMipMaps - firstMipMap; i++) - { // wczytanie kolejnych poziomw mipmap + { // wczytanie kolejnych poziomów mipmap if (!data.width) data.width = 1; if (!data.height) @@ -777,8 +777,8 @@ TTexturesManager::AlphaValue TTexturesManager::LoadDDS(std::string fileName, int void TTexturesManager::SetFiltering(int filter) { - if (filter < 4) // rozmycie przy powikszeniu - { // brak rozmycia z bliska - tych jest 4: 0..3, aby nie byo przeskoku + if (filter < 4) // rozmycie przy powiększeniu + { // brak rozmycia z bliska - tych jest 4: 0..3, aby nie było przeskoku glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); filter += 4; } @@ -786,22 +786,22 @@ void TTexturesManager::SetFiltering(int filter) glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); switch (filter) // rozmycie przy oddaleniu { - case 4: // najbliszy z tekstury + case 4: // najbliższy z tekstury glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); break; - case 5: //rednia z tekstury + case 5: //średnia z tekstury glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); break; - case 6: // najbliszy z mipmapy + case 6: // najbliższy z mipmapy glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST); break; - case 7: //rednia z mipmapy + case 7: //średnia z mipmapy glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); break; - case 8: // najbliszy z dwch mipmap + case 8: // najbliższy z dwóch mipmap glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR); break; - case 9: //rednia z dwch mipmap + case 9: //średnia z dwóch mipmap glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); break; } @@ -831,7 +831,7 @@ void TTexturesManager::SetFiltering(bool alpha, bool hash) glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); } } - else // $: filtruj wszystko - brzydko si zlewa + else // $: filtruj wszystko - brzydko się zlewa { glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); @@ -841,8 +841,8 @@ void TTexturesManager::SetFiltering(bool alpha, bool hash) /////////////////////////////////////////////////////////////////////////////// GLuint TTexturesManager::CreateTexture(GLubyte *buff, GLint bpp, int width, int height, bool bHasAlpha, bool bHash, bool bDollar, int filter) -{ // Ra: uywane tylko dla TGA i TEX - // Ra: dodana obsuga GL_BGR oraz GL_BGRA dla TGA - szybciej si wczytuje +{ // Ra: używane tylko dla TGA i TEX + // Ra: dodana obsługa GL_BGR oraz GL_BGRA dla TGA - szybciej się wczytuje GLuint ID; glGenTextures(1, &ID); glBindTexture(GL_TEXTURE_2D, ID); @@ -851,7 +851,7 @@ GLuint TTexturesManager::CreateTexture(GLubyte *buff, GLint bpp, int width, int if (filter >= 0) SetFiltering(filter); // cyfra po % w nazwie else - SetFiltering(bHasAlpha && bDollar, bHash); // znaki #, $ i kana alfa w nazwie + SetFiltering(bHasAlpha && bDollar, bHash); // znaki #, $ i kanał alfa w nazwie glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); glPixelStorei(GL_UNPACK_SKIP_ROWS, 0); @@ -865,7 +865,7 @@ GLuint TTexturesManager::CreateTexture(GLubyte *buff, GLint bpp, int width, int } void TTexturesManager::Free() -{ // usunicie wszyskich tekstur (bez usuwania struktury) +{ // usunięcie wszyskich tekstur (bez usuwania struktury) // for (Names::iterator iter = _names.begin(); iter != _names.end(); iter++) if( false == _names.empty() ) { for( auto const &texture : _names ) { diff --git a/Texture.h b/Texture.h index c4b2ee30..1ca35246 100644 --- a/Texture.h +++ b/Texture.h @@ -15,11 +15,11 @@ http://mozilla.org/MPL/2.0/. /* //Ra: miejsce umieszczenia tego jest deczko bezsensowne void glDebug() -{//logowanie bdw OpenGL +{//logowanie błędów OpenGL GLenum err; - if (Global::iErorrCounter==326) //tu wpisz o 1 mniej niz warto, przy ktrej si wyoyo - Global::iErorrCounter=Global::iErorrCounter+0; //do zastawiania puapki przed bdnym kodem - while ((err=glGetError())!=GL_NO_ERROR) //dalej jest puapka po wykonaniu bdnego kodu + if (Global::iErorrCounter==326) //tu wpisz o 1 mniej niz wartość, przy której się wyłożyło + Global::iErorrCounter=Global::iErorrCounter+0; //do zastawiania pułapki przed błędnym kodem + while ((err=glGetError())!=GL_NO_ERROR) //dalej jest pułapka po wykonaniu błędnego kodu WriteLog("OpenGL error found: "+AnsiString(err)+", step:"+AnsiString(Global::iErorrCounter)); ++Global::iErorrCounter; }; diff --git a/Timer.cpp b/Timer.cpp index 2c339958..0a78e2ab 100644 --- a/Timer.cpp +++ b/Timer.cpp @@ -33,7 +33,7 @@ double GetDeltaTime() } double GetDeltaRenderTime() -{ // czas renderowania (do poruszania si) +{ // czas renderowania (do poruszania się) return DeltaRenderTime; } @@ -58,7 +58,7 @@ void SetSimulationTime(double t) } bool GetSoundTimer() -{ // Ra: by moe, by dwiki nie modyfikoway si zbyt czsto, po 0.1s zeruje si ten licznik +{ // Ra: być może, by dźwięki nie modyfikowały się zbyt często, po 0.1s zeruje się ten licznik return (fSoundTimer == 0.0f); } @@ -98,7 +98,7 @@ void UpdateTimers(bool pause) DeltaTime = 1; } else - DeltaTime = 0; // wszystko stoi, bo czas nie pynie + DeltaTime = 0; // wszystko stoi, bo czas nie płynie oldCount = count; // Keep track of the time lapse and frame count diff --git a/Track.cpp b/Track.cpp index 6c33572d..0ba37289 100644 --- a/Track.cpp +++ b/Track.cpp @@ -31,40 +31,40 @@ http://mozilla.org/MPL/2.0/. // 110720 Ra: rozprucie zwrotnicy i odcinki izolowane static const double fMaxOffset = 0.1; // double(0.1f)==0.100000001490116 -// const int NextMask[4]={0,1,0,1}; //tor nastpny dla stanw 0, 1, 2, 3 -// const int PrevMask[4]={0,0,1,1}; //tor poprzedni dla stanw 0, 1, 2, 3 -const int iLewo4[4] = {5, 3, 4, 6}; // segmenty (1..6) do skrcania w lewo -const int iPrawo4[4] = {-4, -6, -3, -5}; // segmenty (1..6) do skrcania w prawo +// const int NextMask[4]={0,1,0,1}; //tor następny dla stanów 0, 1, 2, 3 +// const int PrevMask[4]={0,0,1,1}; //tor poprzedni dla stanów 0, 1, 2, 3 +const int iLewo4[4] = {5, 3, 4, 6}; // segmenty (1..6) do skręcania w lewo +const int iPrawo4[4] = {-4, -6, -3, -5}; // segmenty (1..6) do skręcania w prawo const int iProsto4[4] = {1, -1, 2, -2}; // segmenty (1..6) do jazdy prosto const int iEnds4[13] = {3, 0, 2, 1, 2, 0, -1, - 1, 3, 2, 0, 3, 1}; // numer ssiedniego toru na kocu segmentu "-1" -const int iLewo3[4] = {1, 3, 2, 1}; // segmenty do skrcania w lewo -const int iPrawo3[4] = {-2, -1, -3, -2}; // segmenty do skrcania w prawo + 1, 3, 2, 0, 3, 1}; // numer sąsiedniego toru na końcu segmentu "-1" +const int iLewo3[4] = {1, 3, 2, 1}; // segmenty do skręcania w lewo +const int iPrawo3[4] = {-2, -1, -3, -2}; // segmenty do skręcania w prawo const int iProsto3[4] = {1, -1, 2, 1}; // segmenty do jazdy prosto const int iEnds3[13] = {3, 0, 2, 1, 2, 0, -1, - 1, 0, 2, 0, 3, 1}; // numer ssiedniego toru na kocu segmentu "-1" + 1, 0, 2, 0, 3, 1}; // numer sąsiedniego toru na końcu segmentu "-1" TIsolated *TIsolated::pRoot = NULL; TSwitchExtension::TSwitchExtension(TTrack *owner, int what) -{ // na pocztku wszystko puste +{ // na początku wszystko puste CurrentIndex = 0; - pNexts[0] = NULL; // wskaniki do kolejnych odcinkw ruchu + pNexts[0] = NULL; // wskaźniki do kolejnych odcinków ruchu pNexts[1] = NULL; pPrevs[0] = NULL; pPrevs[1] = NULL; - fOffsetSpeed = 0.1; // prdko liniowa iglic + fOffsetSpeed = 0.1; // prędkość liniowa iglic fOffsetDelay = 0.05; // dodatkowy ruch drugiej iglicy po zablokowaniu pierwszej na opornicy - fOffset1 = fOffset = fDesiredOffset = -fOffsetDelay; // pooenie zasadnicze - fOffset2 = 0.0; // w zasadniczym wewntrzna iglica dolega + fOffset1 = fOffset = fDesiredOffset = -fOffsetDelay; // położenie zasadnicze + fOffset2 = 0.0; // w zasadniczym wewnętrzna iglica dolega pOwner = NULL; pNextAnim = NULL; - bMovement = false; // nie potrzeba przelicza fOffset1 + bMovement = false; // nie potrzeba przeliczać fOffset1 Segments[0] = new TSegment(owner); // z punktu 1 do 2 Segments[1] = new TSegment( - owner); // z punktu 3 do 4 (1=3 dla zwrotnic; odwrcony dla skrzyowa, ewentualnie 1=4) + owner); // z punktu 3 do 4 (1=3 dla zwrotnic; odwrócony dla skrzyżowań, ewentualnie 1=4) Segments[2] = (what >= 3) ? new TSegment(owner) : - NULL; // z punktu 2 do 4 skrzyowanie od gry: wersja "-1": + 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[4] = @@ -72,7 +72,7 @@ TSwitchExtension::TSwitchExtension(TTrack *owner, int what) Segments[5] = (what >= 6) ? new TSegment(owner) : NULL; // z punktu 3 do 2 2 2 1 1 evPlus = evMinus = NULL; - fVelocity = -1.0; // maksymalne ograniczenie prdkoci (ustawianej eventem) + fVelocity = -1.0; // maksymalne ograniczenie prędkości (ustawianej eventem) vTrans = vector3(0, 0, 0); // docelowa translacja przesuwnicy } TSwitchExtension::~TSwitchExtension() @@ -96,7 +96,7 @@ TIsolated::TIsolated(const string &n, TIsolated *i) pNext = i; iAxles = 0; evBusy = evFree = NULL; - pMemCell = NULL; // podpi istniejc albo utworzy pust + pMemCell = NULL; // podpiąć istniejącą albo utworzyć pustą }; TIsolated::~TIsolated(){ @@ -116,7 +116,7 @@ TIsolated * TIsolated::Find(const string &n) { // znalezienie obiektu albo utworzenie nowego TIsolated *p = pRoot; while (p) - { // jeli si znajdzie, to poda wskanik + { // jeśli się znajdzie, to podać wskaźnik if (p->asName == n) return p; p = p->pNext; @@ -126,40 +126,40 @@ TIsolated * TIsolated::Find(const string &n) }; void TIsolated::Modify(int i, TDynamicObject *o) -{ // dodanie lub odjcie osi +{ // dodanie lub odjęcie osi if (iAxles) - { // grupa zajta + { // grupa zajęta iAxles += i; if (!iAxles) - { // jeli po zmianie nie ma adnej osi na odcinku izolowanym + { // jeśli po zmianie nie ma żadnej osi na odcinku izolowanym if (evFree) Global::AddToQuery(evFree, o); // dodanie zwolnienia do kolejki - if (Global::iMultiplayer) // jeli multiplayer - Global::pGround->WyslijString(asName, 10); // wysanie pakietu o zwolnieniu - if (pMemCell) // w powizanej komrce + if (Global::iMultiplayer) // jeśli multiplayer + Global::pGround->WyslijString(asName, 10); // wysłanie pakietu o zwolnieniu + if (pMemCell) // w powiązanej komórce pMemCell->UpdateValues(NULL, 0, int(pMemCell->Value2()) & ~0xFF, - update_memval2); //"zerujemy" ostatni warto + update_memval2); //"zerujemy" ostatnią wartość } } else - { // grupa bya wolna + { // grupa była wolna iAxles += i; if (iAxles) { if (evBusy) - Global::AddToQuery(evBusy, o); // dodanie zajtoci do kolejki - if (Global::iMultiplayer) // jeli multiplayer - Global::pGround->WyslijString(asName, 11); // wysanie pakietu o zajciu - if (pMemCell) // w powizanej komrce + Global::AddToQuery(evBusy, o); // dodanie zajętości do kolejki + if (Global::iMultiplayer) // jeśli multiplayer + Global::pGround->WyslijString(asName, 11); // wysłanie pakietu o zajęciu + if (pMemCell) // w powiązanej komórce pMemCell->UpdateValues(NULL, 0, int(pMemCell->Value2()) | 1, - update_memval2); // zmieniamy ostatni warto na nieparzyst + update_memval2); // zmieniamy ostatnią wartość na nieparzystą } } }; TTrack::TTrack(TGroundNode *g) { // tworzenie nowego odcinka ruchu - trNext = trPrev = NULL; // ssiednie + trNext = trPrev = NULL; // sąsiednie Segment = NULL; // dane odcinka SwitchExtension = NULL; // dodatkowe parametry zwrotnicy i obrotnicy TextureID1 = 0; // tekstura szyny @@ -168,55 +168,55 @@ TTrack::TTrack(TGroundNode *g) fTexHeight1 = 0.6; // nowy profil podsypki ;) fTexWidth = 0.9; fTexSlope = 0.9; - eType = tt_Normal; // domylnie zwyky + eType = tt_Normal; // domyślnie zwykły iCategoryFlag = 1; // 1-tor, 2-droga, 4-rzeka, 8-samolot? - fTrackWidth = 1.435; // rozstaw toru, szeroko nawierzchni - fFriction = 0.15; // wspczynnik tarcia + fTrackWidth = 1.435; // rozstaw toru, szerokość nawierzchni + fFriction = 0.15; // współczynnik tarcia fSoundDistance = -1; iQualityFlag = 20; iDamageFlag = 0; eEnvironment = e_flat; bVisible = true; - iEvents = 0; // Ra: flaga informujca o obecnoci eventw + iEvents = 0; // Ra: flaga informująca o obecności eventów evEvent0 = NULL; evEvent1 = NULL; evEvent2 = NULL; evEventall0 = NULL; evEventall1 = NULL; evEventall2 = NULL; - fVelocity = -1; // ograniczenie prdkoci + fVelocity = -1; // ograniczenie prędkości fTrackLength = 100.0; - fRadius = 0; // promie wybranego toru zwrotnicy + fRadius = 0; // promień wybranego toru zwrotnicy fRadiusTable[0] = 0; // dwa promienie nawet dla prostego fRadiusTable[1] = 0; iNumDynamics = 0; ScannedFlag = false; DisplayListID = 0; - iTrapezoid = 0; // parametry ksztatu: 0-standard, 1-przechyka, 2-trapez, 3-oba - hvOverhead = NULL; // drut zasilajcy, najbliszy Point1 toru + iTrapezoid = 0; // parametry kształtu: 0-standard, 1-przechyłka, 2-trapez, 3-oba + hvOverhead = NULL; // drut zasilający, najbliższy Point1 toru fTexRatio1 = - 1.0; // proporcja bokw tekstury nawierzchni (eby zaoszczdzi na rozmiarach tekstur...) + 1.0; // proporcja boków tekstury nawierzchni (żeby zaoszczędzić na rozmiarach tekstur...) fTexRatio2 = - 1.0; // proporcja bokw tekstury chodnika (eby zaoszczdzi na rozmiarach tekstur...) - iPrevDirection = 0; // domylnie wirtualne odcinki doczamy stron od Point1 + 1.0; // proporcja boków tekstury chodnika (żeby zaoszczędzić na rozmiarach tekstur...) + iPrevDirection = 0; // domyślnie wirtualne odcinki dołączamy stroną od Point1 iNextDirection = 0; pIsolated = NULL; - pMyNode = g; // Ra: proteza, eby tor zna swoj nazw TODO: odziedziczy TTrack z TGroundNode - iAction = 0; // normalnie moe by pomijany podczas skanowania - fOverhead = -1.0; // mona normalnie pobiera prd (0 dla jazdy bezprdowej po danym odcinku - nFouling[0] = NULL; // ukres albo kozio od strony Point1 - nFouling[1] = NULL; // ukres albo kozio od strony Point2 - trColides = NULL; // tor kolizyjny, na ktrym trzeba sprawdza pojazdy pod ktem zderzenia + pMyNode = g; // Ra: proteza, żeby tor znał swoją nazwę TODO: odziedziczyć TTrack z TGroundNode + iAction = 0; // normalnie może być pomijany podczas skanowania + fOverhead = -1.0; // można normalnie pobierać prąd (0 dla jazdy bezprądowej po danym odcinku + nFouling[0] = NULL; // ukres albo kozioł od strony Point1 + nFouling[1] = NULL; // ukres albo kozioł od strony Point2 + trColides = NULL; // tor kolizyjny, na którym trzeba sprawdzać pojazdy pod kątem zderzenia } TTrack::~TTrack() { // likwidacja odcinka if (eType == tt_Normal) - delete Segment; // dla zwrotnic nie usuwa tego (kopiowany) + delete Segment; // dla zwrotnic nie usuwać tego (kopiowany) else - { // usuwanie dodatkowych danych dla niezwykych odcinkw + { // usuwanie dodatkowych danych dla niezwykłych odcinków if (eType == tt_Cross) - delete SwitchExtension->vPoints; // skrzyowanie moe mie punkty + delete SwitchExtension->vPoints; // skrzyżowanie może mieć punkty SafeDelete(SwitchExtension); } } @@ -228,12 +228,12 @@ void TTrack::Init() case tt_Switch: SwitchExtension = new TSwitchExtension(this, 2); // na wprost i na bok break; - case tt_Cross: // tylko dla skrzyowania drg - SwitchExtension = new TSwitchExtension(this, 6); // 6 pocze - SwitchExtension->vPoints = NULL; // brak tablicy punktw + case tt_Cross: // tylko dla skrzyżowania dróg + SwitchExtension = new TSwitchExtension(this, 6); // 6 połączeń + SwitchExtension->vPoints = NULL; // brak tablicy punktów SwitchExtension->iPoints = 0; - SwitchExtension->bPoints = false; // tablica punktw nie wypeniona - SwitchExtension->iRoads = 4; // domylnie 4 + SwitchExtension->bPoints = false; // tablica punktów nie wypełniona + SwitchExtension->iRoads = 4; // domyślnie 4 break; case tt_Normal: Segment = new TSegment(this); @@ -249,94 +249,94 @@ TTrack * TTrack::Create400m(int what, double dx) { // tworzenie toru do wstawiania taboru podczas konwersji na E3D TGroundNode *tmp = new TGroundNode(TP_TRACK); // node TTrack *trk = tmp->pTrack; - trk->bVisible = false; // nie potrzeba pokazywa, zreszt i tak nie ma tekstur - trk->iCategoryFlag = what; // taki sam typ plus informacja, e dodatkowy + trk->bVisible = false; // nie potrzeba pokazywać, zresztą i tak nie ma tekstur + trk->iCategoryFlag = what; // taki sam typ plus informacja, że dodatkowy trk->Init(); // utworzenie segmentu trk->Segment->Init(vector3(-dx, 0, 0), vector3(-dx, 0, 400), 0, 0, 0); // prosty - tmp->pCenter = vector3(-dx, 0, 200); //rodek, aby si mogo wywietli + tmp->pCenter = vector3(-dx, 0, 200); //środek, aby się mogło wyświetlić TSubRect *r = Global::pGround->GetSubRect(tmp->pCenter.x, tmp->pCenter.z); r->NodeAdd(tmp); // dodanie toru do segmentu - r->Sort(); //eby wywietla tabor z dodanego toru - r->Release(); // usunicie skompilowanych zasobw + r->Sort(); //żeby wyświetlał tabor z dodanego toru + r->Release(); // usunięcie skompilowanych zasobów return trk; }; TTrack * TTrack::NullCreate(int dir) -{ // tworzenie toru wykolejajcego od strony (dir), albo ptli dla samochodw +{ // tworzenie toru wykolejającego od strony (dir), albo pętli dla samochodów TGroundNode *tmp = new TGroundNode(TP_TRACK), *tmp2 = NULL; // node - TTrack *trk = tmp->pTrack; // tor; UWAGA! obrotnica moe generowa due iloci tego + TTrack *trk = tmp->pTrack; // tor; UWAGA! obrotnica może generować duże ilości tego // tmp->iType=TP_TRACK; - // TTrack* trk=new TTrack(tmp); //tor; UWAGA! obrotnica moe generowa due iloci tego + // TTrack* trk=new TTrack(tmp); //tor; UWAGA! obrotnica może generować duże ilości tego // tmp->pTrack=trk; - trk->bVisible = false; // nie potrzeba pokazywa, zreszt i tak nie ma tekstur - // trk->iTrapezoid=1; //s przechyki do uwzgldniania w rysowaniu - trk->iCategoryFlag = (iCategoryFlag & 15) | 0x80; // taki sam typ plus informacja, e dodatkowy + trk->bVisible = false; // nie potrzeba pokazywać, zresztą i tak nie ma tekstur + // trk->iTrapezoid=1; //są przechyłki do uwzględniania w rysowaniu + trk->iCategoryFlag = (iCategoryFlag & 15) | 0x80; // taki sam typ plus informacja, że dodatkowy double r1, r2; - Segment->GetRolls(r1, r2); // pobranie przechyek na pocztku toru - vector3 p1, cv1, cv2, p2; // bdziem tworzy trajektori lotu + Segment->GetRolls(r1, r2); // pobranie przechyłek na początku toru + vector3 p1, cv1, cv2, p2; // będziem tworzyć trajektorię lotu if (iCategoryFlag & 1) { // tylko dla kolei trk->iDamageFlag = 128; // wykolejenie trk->fVelocity = 0.0; // koniec jazdy trk->Init(); // utworzenie segmentu switch (dir) - { //czenie z nowym torem + { //łączenie z nowym torem case 0: p1 = Segment->FastGetPoint_0(); p2 = p1 - 450.0 * Normalize(Segment->GetDirection1()); trk->Segment->Init(p1, p2, 5, -RadToDeg(r1), - 70.0); // bo prosty, kontrolne wyliczane przy zmiennej przechyce + 70.0); // bo prosty, kontrolne wyliczane przy zmiennej przechyłce ConnectPrevPrev(trk, 0); break; case 1: p1 = Segment->FastGetPoint_1(); p2 = p1 - 450.0 * Normalize(Segment->GetDirection2()); trk->Segment->Init(p1, p2, 5, RadToDeg(r2), - 70.0); // bo prosty, kontrolne wyliczane przy zmiennej przechyce + 70.0); // bo prosty, kontrolne wyliczane przy zmiennej przechyłce ConnectNextPrev(trk, 0); break; - case 3: // na razie nie moliwe + case 3: // na razie nie możliwe p1 = SwitchExtension->Segments[1]->FastGetPoint_1(); // koniec toru drugiego zwrotnicy p2 = p1 - 450.0 * Normalize( - SwitchExtension->Segments[1]->GetDirection2()); // przeduenie na wprost + SwitchExtension->Segments[1]->GetDirection2()); // przedłużenie na wprost trk->Segment->Init(p1, p2, 5, RadToDeg(r2), - 70.0); // bo prosty, kontrolne wyliczane przy zmiennej przechyce + 70.0); // bo prosty, kontrolne wyliczane przy zmiennej przechyłce ConnectNextPrev(trk, 0); // trk->ConnectPrevNext(trk,dir); - SetConnections(1); // skopiowanie pocze - Switch(1); // bo si przeczy na 0, a to co chce si przecie wykolei na bok - break; // do drugiego zwrotnicy... nie zadziaa? + SetConnections(1); // skopiowanie połączeń + Switch(1); // bo się przełączy na 0, a to coś chce się przecież wykoleić na bok + break; // do drugiego zwrotnicy... nie zadziała? } } else - { // tworznie ptelki dla samochodw + { // tworznie pętelki dla samochodów trk->fVelocity = 20.0; // zawracanie powoli - trk->fRadius = 20.0; // promie, aby si dodawao do tabelki prdkoci i liczyo narastajco + trk->fRadius = 20.0; // promień, aby się dodawało do tabelki prędkości i liczyło narastająco trk->Init(); // utworzenie segmentu - tmp2 = new TGroundNode(TP_TRACK); // drugi odcinek do zaptlenia + tmp2 = new TGroundNode(TP_TRACK); // drugi odcinek do zapętlenia TTrack *trk2 = tmp2->pTrack; trk2->iCategoryFlag = - (iCategoryFlag & 15) | 0x80; // taki sam typ plus informacja, e dodatkowy + (iCategoryFlag & 15) | 0x80; // taki sam typ plus informacja, że dodatkowy trk2->bVisible = false; trk2->fVelocity = 20.0; // zawracanie powoli - trk2->fRadius = 20.0; // promie, aby si dodawao do tabelki prdkoci i liczyo - // narastajco + trk2->fRadius = 20.0; // promień, aby się dodawało do tabelki prędkości i liczyło + // narastająco trk2->Init(); // utworzenie segmentu switch (dir) - { //czenie z nowym torem + { //łączenie z nowym torem case 0: p1 = Segment->FastGetPoint_0(); cv1 = -20.0 * Normalize(Segment->GetDirection1()); // pierwszy wektor kontrolny p2 = p1 + cv1 + cv1; // 40m trk->Segment->Init(p1, p1 + cv1, p2 + vector3(-cv1.z, cv1.y, cv1.x), p2, 2, -RadToDeg(r1), - 0.0); // bo prosty, kontrolne wyliczane przy zmiennej przechyce + 0.0); // bo prosty, kontrolne wyliczane przy zmiennej przechyłce ConnectPrevPrev(trk, 0); trk2->Segment->Init(p1, p1 + cv1, p2 + vector3(cv1.z, cv1.y, -cv1.x), p2, 2, -RadToDeg(r1), - 0.0); // bo prosty, kontrolne wyliczane przy zmiennej przechyce + 0.0); // bo prosty, kontrolne wyliczane przy zmiennej przechyłce trk2->iPrevDirection = 0; // zwrotnie do tego samego odcinka break; case 1: @@ -345,36 +345,36 @@ TTrack * TTrack::NullCreate(int dir) p2 = p1 + cv1 + cv1; trk->Segment->Init(p1, p1 + cv1, p2 + vector3(-cv1.z, cv1.y, cv1.x), p2, 2, RadToDeg(r2), - 0.0); // bo prosty, kontrolne wyliczane przy zmiennej przechyce + 0.0); // bo prosty, kontrolne wyliczane przy zmiennej przechyłce ConnectNextPrev(trk, 0); trk2->Segment->Init(p1, p1 + cv1, p2 + vector3(cv1.z, cv1.y, -cv1.x), p2, 2, RadToDeg(r2), - 0.0); // bo prosty, kontrolne wyliczane przy zmiennej przechyce + 0.0); // bo prosty, kontrolne wyliczane przy zmiennej przechyłce trk2->iPrevDirection = 1; // zwrotnie do tego samego odcinka break; } trk2->trPrev = this; - trk->ConnectNextNext(trk2, 1); // poczenie dwch dodatkowych odcinkw punktami 2 - tmp2->pCenter = (0.5 * (p1 + p2)); //rodek, aby si mogo wywietli + trk->ConnectNextNext(trk2, 1); // połączenie dwóch dodatkowych odcinków punktami 2 + tmp2->pCenter = (0.5 * (p1 + p2)); //środek, aby się mogło wyświetlić } - // trzeba jeszcze doda do odpowiedniego segmentu, aby si renderoway z niego pojazdy - tmp->pCenter = (0.5 * (p1 + p2)); //rodek, aby si mogo wywietli + // trzeba jeszcze dodać do odpowiedniego segmentu, aby się renderowały z niego pojazdy + tmp->pCenter = (0.5 * (p1 + p2)); //środek, aby się mogło wyświetlić if (tmp2) - tmp2->pCenter = tmp->pCenter; // ten sam rodek jest - // Ra: to poniej to poraka, ale na razie si nie da inaczej + tmp2->pCenter = tmp->pCenter; // ten sam środek jest + // Ra: to poniżej to porażka, ale na razie się nie da inaczej TSubRect *r = Global::pGround->GetSubRect(tmp->pCenter.x, tmp->pCenter.z); r->NodeAdd(tmp); // dodanie toru do segmentu if (tmp2) - r->NodeAdd(tmp2); // drugiego te - r->Sort(); //eby wywietla tabor z dodanego toru - r->Release(); // usunicie skompilowanych zasobw + r->NodeAdd(tmp2); // drugiego też + r->Sort(); //żeby wyświetlał tabor z dodanego toru + r->Release(); // usunięcie skompilowanych zasobów return trk; }; void TTrack::ConnectPrevPrev(TTrack *pTrack, int typ) -{ //czenie torw - Point1 wasny do Point1 cudzego +{ //łączenie torów - Point1 własny do Point1 cudzego if (pTrack) - { //(pTrack) moe by zwrotnic, a (this) tylko zwykym odcinkiem + { //(pTrack) może być zwrotnicą, a (this) tylko zwykłym odcinkiem trPrev = pTrack; iPrevDirection = ((pTrack->eType == tt_Switch) ? 0 : (typ & 2)); pTrack->trPrev = this; @@ -382,19 +382,19 @@ void TTrack::ConnectPrevPrev(TTrack *pTrack, int typ) } } void TTrack::ConnectPrevNext(TTrack *pTrack, int typ) -{ //aczenie torw - Point1 wasny do Point2 cudzego +{ //łaczenie torów - Point1 własny do Point2 cudzego if (pTrack) { trPrev = pTrack; - iPrevDirection = typ | 1; // 1:zwyky lub pierwszy zwrotnicy, 3:drugi zwrotnicy + iPrevDirection = typ | 1; // 1:zwykły lub pierwszy zwrotnicy, 3:drugi zwrotnicy pTrack->trNext = this; pTrack->iNextDirection = 0; if (bVisible) if (pTrack->bVisible) - if (eType == tt_Normal) // jeli czone s dwa normalne + if (eType == tt_Normal) // jeśli łączone są dwa normalne if (pTrack->eType == tt_Normal) if ((fTrackWidth != - pTrack->fTrackWidth) // Ra: jeli kolejny ma inne wymiary + pTrack->fTrackWidth) // Ra: jeśli kolejny ma inne wymiary || (fTexHeight1 != pTrack->fTexHeight1) || (fTexWidth != pTrack->fTexWidth) || (fTexSlope != pTrack->fTexSlope)) @@ -402,7 +402,7 @@ void TTrack::ConnectPrevNext(TTrack *pTrack, int typ) } } void TTrack::ConnectNextPrev(TTrack *pTrack, int typ) -{ //aczenie torw - Point2 wasny do Point1 cudzego +{ //łaczenie torów - Point2 własny do Point1 cudzego if (pTrack) { trNext = pTrack; @@ -411,10 +411,10 @@ void TTrack::ConnectNextPrev(TTrack *pTrack, int typ) pTrack->iPrevDirection = 1; if (bVisible) if (pTrack->bVisible) - if (eType == tt_Normal) // jeli czone s dwa normalne + if (eType == tt_Normal) // jeśli łączone są dwa normalne if (pTrack->eType == tt_Normal) if ((fTrackWidth != - pTrack->fTrackWidth) // Ra: jeli kolejny ma inne wymiary + pTrack->fTrackWidth) // Ra: jeśli kolejny ma inne wymiary || (fTexHeight1 != pTrack->fTexHeight1) || (fTexWidth != pTrack->fTexWidth) || (fTexSlope != pTrack->fTexSlope)) @@ -422,11 +422,11 @@ void TTrack::ConnectNextPrev(TTrack *pTrack, int typ) } } void TTrack::ConnectNextNext(TTrack *pTrack, int typ) -{ //aczenie torw - Point2 wasny do Point2 cudzego +{ //łaczenie torów - Point2 własny do Point2 cudzego if (pTrack) { trNext = pTrack; - iNextDirection = typ | 1; // 1:zwyky lub pierwszy zwrotnicy, 3:drugi zwrotnicy + iNextDirection = typ | 1; // 1:zwykły lub pierwszy zwrotnicy, 3:drugi zwrotnicy pTrack->trNext = this; pTrack->iNextDirection = 1; } @@ -442,7 +442,7 @@ vector3 MakeCPoint(vector3 p, double d, double a1, double a2) } vector3 LoadPoint(cParser *parser) -{ // pobranie wsprzdnych punktu +{ // pobranie współrzędnych punktu vector3 p; std::string token; parser->getTokens(3); @@ -452,11 +452,11 @@ vector3 LoadPoint(cParser *parser) void TTrack::Load(cParser *parser, vector3 pOrigin, std::string name) { // pobranie obiektu trajektorii ruchu - vector3 pt, vec, p1, p2, cp1, cp2, p3, p4, cp3, cp4; // dodatkowe punkty potrzebne do skrzyowa + vector3 pt, vec, p1, p2, cp1, cp2, p3, p4, cp3, cp4; // dodatkowe punkty potrzebne do skrzyżowań double a1, a2, r1, r2, r3, r4, d1, d2, a; string str; bool bCurve; - int i; //,state; //Ra: teraz ju nie ma pocztkowego stanu zwrotnicy we wpisie + int i; //,state; //Ra: teraz już nie ma początkowego stanu zwrotnicy we wpisie std::string token; parser->getTokens(); @@ -489,7 +489,7 @@ void TTrack::Load(cParser *parser, vector3 pOrigin, std::string name) iCategoryFlag = 2; } else if (str == "cross") - { // Ra: to bdzie skrzyowanie drg + { // Ra: to będzie skrzyżowanie dróg eType = tt_Cross; iCategoryFlag = 2; } @@ -514,7 +514,7 @@ void TTrack::Load(cParser *parser, vector3 pOrigin, std::string name) // fTrackWidth=Parser->GetNextSymbol().ToDouble(); //track width // fFriction=Parser->GetNextSymbol().ToDouble(); //friction coeff. // fSoundDistance=Parser->GetNextSymbol().ToDouble(); //snd - fTrackWidth2 = fTrackWidth; // rozstaw/szeroko w punkcie 2, na razie taka sama + fTrackWidth2 = fTrackWidth; // rozstaw/szerokość w punkcie 2, na razie taka sama parser->getTokens(2); *parser >> iQualityFlag >> iDamageFlag; // iQualityFlag=Parser->GetNextSymbol().ToInt(); //McZapkie: qualityflag @@ -570,151 +570,151 @@ void TTrack::Load(cParser *parser, vector3 pOrigin, std::string name) // fTexWidth=Parser->GetNextSymbol().ToDouble(); //tex sub width // fTexSlope=Parser->GetNextSymbol().ToDouble(); //tex sub slope width if (iCategoryFlag & 4) - fTexHeight1 = -fTexHeight1; // rzeki maj wysoko odwrotnie ni drogi + fTexHeight1 = -fTexHeight1; // rzeki mają wysokość odwrotnie niż drogi } else if (Global::iWriteLogEnabled & 4) WriteLog("unvis"); Init(); // ustawia SwitchExtension - double segsize = 5.0; // dugo odcinka segmentowania + double segsize = 5.0; // długość odcinka segmentowania switch (eType) - { // Ra: uki segmentowane co 5m albo 314-ktem foremnym - case tt_Table: // obrotnica jest prawie jak zwyky tor - iAction |= 2; // flaga zmiany pooenia typu obrotnica + { // Ra: łuki segmentowane co 5m albo 314-kątem foremnym + case tt_Table: // obrotnica jest prawie jak zwykły tor + iAction |= 2; // flaga zmiany położenia typu obrotnica case tt_Normal: - p1 = LoadPoint(parser) + pOrigin; // pobranie wsprzdnych P1 + p1 = LoadPoint(parser) + pOrigin; // pobranie współrzędnych P1 parser->getTokens(); - *parser >> r1; // pobranie przechyki w P1 - cp1 = LoadPoint(parser); // pobranie wsprzdnych punktw kontrolnych + *parser >> r1; // pobranie przechyłki w P1 + cp1 = LoadPoint(parser); // pobranie współrzędnych punktów kontrolnych cp2 = LoadPoint(parser); - p2 = LoadPoint(parser) + pOrigin; // pobranie wsprzdnych P2 + p2 = LoadPoint(parser) + pOrigin; // pobranie współrzędnych P2 parser->getTokens(2); - *parser >> r2 >> fRadius; // pobranie przechyki w P1 i promienia - fRadius = fabs(fRadius); // we wpisie moe by ujemny + *parser >> r2 >> fRadius; // pobranie przechyłki w P1 i promienia + fRadius = fabs(fRadius); // we wpisie może być ujemny if (iCategoryFlag & 1) - { // zero na gwce szyny + { // zero na główce szyny p1.y += 0.18; p2.y += 0.18; - // na przechyce doliczy jeszcze p przechyki + // na przechyłce doliczyć jeszcze pół przechyłki } - if (fRadius != 0) // gdy podany promie + if (fRadius != 0) // gdy podany promień segsize = Min0R(5.0, 0.2 + fabs(fRadius) * 0.02); // do 250m - 5, potem 1 co 50m if ((((p1 + p1 + p2) / 3.0 - p1 - cp1).Length() < 0.02) || (((p1 + p2 + p2) / 3.0 - p2 + cp1).Length() < 0.02)) - cp1 = cp2 = vector3(0, 0, 0); //"prostowanie" prostych z kontrolnymi, dokadno 2cm + cp1 = cp2 = vector3(0, 0, 0); //"prostowanie" prostych z kontrolnymi, dokładność 2cm if ((cp1 == vector3(0, 0, 0)) && - (cp2 == vector3(0, 0, 0))) // Ra: hm, czasem dla prostego s podane... + (cp2 == vector3(0, 0, 0))) // Ra: hm, czasem dla prostego są podane... Segment->Init(p1, p2, segsize, r1, - r2); // gdy prosty, kontrolne wyliczane przy zmiennej przechyce + r2); // gdy prosty, kontrolne wyliczane przy zmiennej przechyłce else Segment->Init(p1, cp1 + p1, cp2 + p2, p2, segsize, r1, - r2); // gdy uk (ustawia bCurve=true) + r2); // gdy łuk (ustawia bCurve=true) if ((r1 != 0) || (r2 != 0)) - iTrapezoid = 1; // s przechyki do uwzgldniania w rysowaniu - if (eType == tt_Table) // obrotnica ma doklejk + iTrapezoid = 1; // są przechyłki do uwzględniania w rysowaniu + if (eType == tt_Table) // obrotnica ma doklejkę { // SwitchExtension=new TSwitchExtension(this,1); //dodatkowe zmienne dla obrotnicy SwitchExtension->Segments[0]->Init(p1, p2, segsize); // kopia oryginalnego toru } else if (iCategoryFlag & 2) if (TextureID1 && fTexLength) - { // dla drogi trzeba ustali proporcje bokw nawierzchni + { // dla drogi trzeba ustalić proporcje boków nawierzchni float w, h; glBindTexture(GL_TEXTURE_2D, TextureID1); glGetTexLevelParameterfv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &w); glGetTexLevelParameterfv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &h); if (h != 0.0) - fTexRatio1 = w / h; // proporcja bokw + fTexRatio1 = w / h; // proporcja boków glBindTexture(GL_TEXTURE_2D, TextureID2); glGetTexLevelParameterfv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &w); glGetTexLevelParameterfv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &h); if (h != 0.0) - fTexRatio2 = w / h; // proporcja bokw + fTexRatio2 = w / h; // proporcja boków } break; - case tt_Cross: // skrzyowanie drg - 4 punkty z wektorami kontrolnymi - segsize = 1.0; // specjalne segmentowanie ze wzgldu na mae promienie - case tt_Tributary: // dopyw + case tt_Cross: // skrzyżowanie dróg - 4 punkty z wektorami kontrolnymi + segsize = 1.0; // specjalne segmentowanie ze względu na małe promienie + case tt_Tributary: // dopływ case tt_Switch: // zwrotnica - iAction |= 1; // flaga zmiany pooenia typu zwrotnica lub skrzyowanie drg - // problemy z animacj iglic powstaje, gdzy odcinek prosty ma zmienn przechyk - // wtedy dzieli si na dodatkowe odcinki (po 0.2m, bo R=0) i animacj diabli bior - // Ra: na razie nie podejmuj si przerabiania iglic + iAction |= 1; // flaga zmiany położenia typu zwrotnica lub skrzyżowanie dróg + // problemy z animacją iglic powstaje, gdzy odcinek prosty ma zmienną przechyłkę + // wtedy dzieli się na dodatkowe odcinki (po 0.2m, bo R=0) i animację diabli biorą + // Ra: na razie nie podejmuję się przerabiania iglic - // SwitchExtension=new TSwitchExtension(this,eType==tt_Cross?6:2); //zwrotnica ma doklejk + // SwitchExtension=new TSwitchExtension(this,eType==tt_Cross?6:2); //zwrotnica ma doklejkę - p1 = LoadPoint(parser) + pOrigin; // pobranie wsprzdnych P1 + p1 = LoadPoint(parser) + pOrigin; // pobranie współrzędnych P1 parser->getTokens(); *parser >> r1; cp1 = LoadPoint(parser); cp2 = LoadPoint(parser); - p2 = LoadPoint(parser) + pOrigin; // pobranie wsprzdnych P2 + p2 = LoadPoint(parser) + pOrigin; // pobranie współrzędnych P2 parser->getTokens(2); *parser >> r2 >> fRadiusTable[0]; - fRadiusTable[0] = fabs(fRadiusTable[0]); // we wpisie moe by ujemny + fRadiusTable[0] = fabs(fRadiusTable[0]); // we wpisie może być ujemny if (iCategoryFlag & 1) - { // zero na gwce szyny + { // zero na główce szyny p1.y += 0.18; p2.y += 0.18; - // na przechyce doliczy jeszcze p przechyki? + // na przechyłce doliczyć jeszcze pół przechyłki? } if (fRadiusTable[0] > 0) segsize = Min0R(5.0, 0.2 + fRadiusTable[0] * 0.02); - else if (eType != tt_Cross) // dla skrzyowa musz by podane kontrolne - { // jak promie zerowy, to przeliczamy punkty kontrolne - cp1 = (p1 + p1 + p2) / 3.0 - p1; // jak jest prosty, to si zoptymalizuje + else if (eType != tt_Cross) // dla skrzyżowań muszą być podane kontrolne + { // jak promień zerowy, to przeliczamy punkty kontrolne + cp1 = (p1 + p1 + p2) / 3.0 - p1; // jak jest prosty, to się zoptymalizuje cp2 = (p1 + p2 + p2) / 3.0 - p2; segsize = 5.0; - } // uomny prosty + } // ułomny prosty if (!(cp1 == vector3(0, 0, 0)) && !(cp2 == vector3(0, 0, 0))) SwitchExtension->Segments[0]->Init(p1, p1 + cp1, p2 + cp2, p2, segsize, r1, r2); else SwitchExtension->Segments[0]->Init(p1, p2, segsize, r1, r2); - p3 = LoadPoint(parser) + pOrigin; // pobranie wsprzdnych P3 + p3 = LoadPoint(parser) + pOrigin; // pobranie współrzędnych P3 parser->getTokens(); *parser >> r3; cp3 = LoadPoint(parser); cp4 = LoadPoint(parser); - p4 = LoadPoint(parser) + pOrigin; // pobranie wsprzdnych P4 + p4 = LoadPoint(parser) + pOrigin; // pobranie współrzędnych P4 parser->getTokens(2); *parser >> r4 >> fRadiusTable[1]; - fRadiusTable[1] = fabs(fRadiusTable[1]); // we wpisie moe by ujemny + fRadiusTable[1] = fabs(fRadiusTable[1]); // we wpisie może być ujemny if (iCategoryFlag & 1) - { // zero na gwce szyny + { // zero na główce szyny p3.y += 0.18; p4.y += 0.18; - // na przechyce doliczy jeszcze p przechyki? + // na przechyłce doliczyć jeszcze pół przechyłki? } if (fRadiusTable[1] > 0) segsize = Min0R(5.0, 0.2 + fRadiusTable[1] * 0.02); - else if (eType != tt_Cross) // dla skrzyowa musz by podane kontrolne - { // jak promie zerowy, to przeliczamy punkty kontrolne - cp3 = (p3 + p3 + p4) / 3.0 - p3; // jak jest prosty, to si zoptymalizuje + else if (eType != tt_Cross) // dla skrzyżowań muszą być podane kontrolne + { // jak promień zerowy, to przeliczamy punkty kontrolne + cp3 = (p3 + p3 + p4) / 3.0 - p3; // jak jest prosty, to się zoptymalizuje cp4 = (p3 + p4 + p4) / 3.0 - p4; segsize = 5.0; - } // uomny prosty + } // ułomny prosty if (!(cp3 == vector3(0, 0, 0)) && !(cp4 == vector3(0, 0, 0))) - { // dla skrzyowania drg da odwrotnie koce, eby brzegi generowa lewym + { // dla skrzyżowania dróg dać odwrotnie końce, żeby brzegi generować lewym if (eType != tt_Cross) SwitchExtension->Segments[1]->Init(p3, p3 + cp3, p4 + cp4, p4, segsize, r3, r4); else SwitchExtension->Segments[1]->Init(p4, p4 + cp4, p3 + cp3, p3, segsize, r4, - r3); // odwrcony + r3); // odwrócony } else SwitchExtension->Segments[1]->Init(p3, p4, segsize, r3, r4); if (eType == tt_Cross) - { // Ra 2014-07: dla skrzyowa bd dodatkowe segmenty + { // Ra 2014-07: dla skrzyżowań będą dodatkowe segmenty SwitchExtension->Segments[2]->Init(p2, cp2 + p2, cp4 + p4, p4, segsize, r2, r4); // z punktu 2 do 4 if (LengthSquared3(p3 - p1) < - 0.01) // gdy mniej ni 10cm, to mamy skrzyowanie trzech drg + 0.01) // gdy mniej niż 10cm, to mamy skrzyżowanie trzech dróg SwitchExtension->iRoads = 3; - else // dla 4 drg bd dodatkowe 3 segmenty + else // dla 4 dróg będą dodatkowe 3 segmenty { SwitchExtension->Segments[3]->Init(p4, p4 + cp4, p1 + cp1, p1, segsize, r4, r1); // z punktu 4 do 1 @@ -725,9 +725,9 @@ void TTrack::Load(cParser *parser, vector3 pOrigin, std::string name) } } - Switch(0); // na stae w pooeniu 0 - nie ma pocztkowego stanu zwrotnicy we wpisie + Switch(0); // na stałe w położeniu 0 - nie ma początkowego stanu zwrotnicy we wpisie - // Ra: zamieni pniej na iloczyn wektorowy + // Ra: zamienić później na iloczyn wektorowy { vector3 v1, v2; double a1, a2; @@ -742,7 +742,7 @@ void TTrack::Load(cParser *parser, vector3 pOrigin, std::string name) a2 = a2 - 2 * M_PI; while (a2 < -M_PI) a2 = a2 + 2 * M_PI; - SwitchExtension->RightSwitch = a2 < 0; // lustrzany ukad OXY... + SwitchExtension->RightSwitch = a2 < 0; // lustrzany układ OXY... } break; } @@ -791,25 +791,25 @@ void TTrack::Load(cParser *parser, vector3 pOrigin, std::string name) { parser->getTokens(); *parser >> fVelocity; //*0.28; McZapkie-010602 - if (SwitchExtension) // jeli tor ruchomy - if (fabs(fVelocity) >= 1.0) //eby zero nie ograniczao doywotnio - SwitchExtension->fVelocity = fVelocity; // zapamitanie gwnego ograniczenia; a + 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 } else if (str == "isolated") - { // obwd izolowany, do ktrego tor naley + { // obwód izolowany, do którego tor należy parser->getTokens(); *parser >> token; pIsolated = TIsolated::Find(token); } else if (str == "angle1") - { // kt cicia koca od strony 1 + { // kąt ścięcia końca od strony 1 parser->getTokens(); *parser >> a1; Segment->AngleSet(0, a1); } else if (str == "angle2") - { // kt cicia koca od strony 2 + { // kąt ścięcia końca od strony 2 parser->getTokens(); *parser >> a2; Segment->AngleSet(1, a2); @@ -827,20 +827,20 @@ void TTrack::Load(cParser *parser, vector3 pOrigin, std::string name) // nFouling[1]= } else if (str == "overhead") - { // informacja o stanie sieci: 0-jazda bezprdowa, >0-z opuszczonym i ograniczeniem - // prdkoci + { // informacja o stanie sieci: 0-jazda bezprądowa, >0-z opuszczonym i ograniczeniem + // prędkości parser->getTokens(); *parser >> fOverhead; if (fOverhead > 0.0) - iAction |= 0x40; // flaga opuszczenia pantografu (tor uwzgldniany w skanowaniu jako - // ograniczenie dla pantografujcych) + iAction |= 0x40; // flaga opuszczenia pantografu (tor uwzględniany w skanowaniu jako + // ograniczenie dla pantografujących) } else if (str == "colides") - { // informacja o stanie sieci: 0-jazda bezprdowa, >0-z opuszczonym i ograniczeniem - // prdkoci + { // informacja o stanie sieci: 0-jazda bezprądowa, >0-z opuszczonym i ograniczeniem + // prędkości parser->getTokens(); *parser >> token; - // trColides=; //tor kolizyjny, na ktrym trzeba sprawdza pojazdy pod ktem zderzenia + // trColides=; //tor kolizyjny, na którym trzeba sprawdzać pojazdy pod kątem zderzenia } else ErrorLog("Unknown property: \"" + str + "\" in track \"" + name + "\""); @@ -851,10 +851,10 @@ void TTrack::Load(cParser *parser, vector3 pOrigin, std::string name) // alternatywny zapis nazwy odcinka izolowanego - po znaku "@" w nazwie toru if (!pIsolated) if ((i = name.find("@")) != string::npos) - if (i < name.length()) // nie moe by puste + if (i < name.length()) // nie może być puste { pIsolated = TIsolated::Find(name.substr(i + 1, name.length())); - name = name.substr(0, i - 1); // usunicie z nazwy + name = name.substr(0, i - 1); // usunięcie z nazwy } } @@ -1006,7 +1006,7 @@ bool TTrack::AssignallEvents(TEvent *NewEvent0, TEvent *NewEvent1, TEvent *NewEv } bool TTrack::AssignForcedEvents(TEvent *NewEventPlus, TEvent *NewEventMinus) -{ // ustawienie eventw sygnalizacji rozprucia +{ // ustawienie eventów sygnalizacji rozprucia if (SwitchExtension) { if (NewEventPlus) @@ -1019,7 +1019,7 @@ bool TTrack::AssignForcedEvents(TEvent *NewEventPlus, TEvent *NewEventMinus) }; string TTrack::IsolatedName() -{ // podaje nazw odcinka izolowanego, jesli nie ma on jeszcze przypisanych zdarze +{ // podaje nazwę odcinka izolowanego, jesli nie ma on jeszcze przypisanych zdarzeń if (pIsolated) if (!pIsolated->evBusy && !pIsolated->evFree) return pIsolated->asName; @@ -1042,25 +1042,25 @@ bool TTrack::IsolatedEventsAssign(TEvent *busy, TEvent *free) // ABu: przeniesione z Track.h i poprawione!!! bool TTrack::AddDynamicObject(TDynamicObject *Dynamic) { // dodanie pojazdu do trajektorii - // Ra: tymczasowo wysyanie informacji o zajtoci konkretnego toru - // Ra: usun po upowszechnieniu si odcinkw izolowanych - if (iCategoryFlag & 0x100) // jeli usuwaczek + // Ra: tymczasowo wysyłanie informacji o zajętości konkretnego toru + // Ra: usunąć po upowszechnieniu się odcinków izolowanych + if (iCategoryFlag & 0x100) // jeśli usuwaczek { - Dynamic->MyTrack = NULL; // trzeba by to uzaleni od kierunku ruchu... + Dynamic->MyTrack = NULL; // trzeba by to uzależnić od kierunku ruchu... return true; } - if (Global::iMultiplayer) // jeli multiplayer - if (!iNumDynamics) // pierwszy zajmujcy + if (Global::iMultiplayer) // jeśli multiplayer + if (!iNumDynamics) // pierwszy zajmujący if (pMyNode->asName != "none") Global::pGround->WyslijString(pMyNode->asName, - 8); // przekazanie informacji o zajtoci toru + 8); // przekazanie informacji o zajętości toru if (iNumDynamics < iMaxNumDynamics) - { // jeli jest miejsce, dajemy na koniec + { // jeśli jest miejsce, dajemy na koniec Dynamics[iNumDynamics++] = Dynamic; - Dynamic->MyTrack = this; // ABu: na ktorym torze jestemy - if (Dynamic->iOverheadMask) // jeli ma pantografy + Dynamic->MyTrack = this; // ABu: na ktorym torze jesteśmy + if (Dynamic->iOverheadMask) // jeśli ma pantografy Dynamic->OverheadTrack( - fOverhead); // przekazanie informacji o jedzie bezprdowej na tym odcinku toru + fOverhead); // przekazanie informacji o jeździe bezprądowej na tym odcinku toru return true; } else @@ -1071,7 +1071,7 @@ bool TTrack::AddDynamicObject(TDynamicObject *Dynamic) }; void TTrack::MoveMe(vector3 pPosition) -{ // to nie jest uywane +{ // to nie jest używane if (SwitchExtension) { SwitchExtension->Segments[0]->MoveMe(1 * pPosition); @@ -1090,7 +1090,7 @@ const int numPts = 4; const int nnumPts = 12; /* const vector6 szyna[nnumPts]= //szyna - vextor6(x,y,mapowanie tekstury,xn,yn,zn) -{pierwotna szyna, opracowa youBy, zmiany w celu uzyskania symetrii +{pierwotna szyna, opracował youBy, zmiany w celu uzyskania symetrii vector6( 0.111,-0.180,0.00, 1.000, 0.000,0.000), vector6( 0.045,-0.155,0.15, 0.707, 0.707,0.000), vector6( 0.045,-0.070,0.25, 0.707,-0.707,0.000), @@ -1106,7 +1106,7 @@ const vector6 szyna[nnumPts]= //szyna - vextor6(x,y,mapowanie tekstury,xn,yn,zn) }; */ const vector6 szyna[nnumPts] = // szyna - vextor6(x,y,mapowanie tekstury,xn,yn,zn) - { // t wersj opracowa Tolein (bez pochylenia) + { // tę wersję opracował Tolein (bez pochylenia) vector6(0.111, -0.180, 0.00, 1.000, 0.000, 0.000), vector6(0.046, -0.150, 0.15, 0.707, 0.707, 0.000), vector6(0.044, -0.050, 0.25, 0.707, -0.707, 0.000), @@ -1134,15 +1134,15 @@ const vector6 iglica[nnumPts] = // iglica - vextor3(x,y,mapowanie tekstury) vector6(0.000, -0.070, 0.75, -1.000, 0.000, 0.000), vector6(0.000, -0.155, 0.85, -0.707, 0.707, 0.000), vector6(-0.040, -0.180, 1.00, -1.000, 0.000, - 0.000) // 1mm wicej, eby nie nachodziy tekstury? + 0.000) // 1mm więcej, żeby nie nachodziły tekstury? }; void TTrack::Compile(GLuint tex) -{ // generowanie treci dla Display Lists - model proceduralny +{ // generowanie treści dla Display Lists - model proceduralny if (!tex) - { // jeli nie podana tekstura, to kady tor ma wlasne DL + { // jeśli nie podana tekstura, to każdy tor ma wlasne DL if (DisplayListID) - Release(); // zwolnienie zasobw w celu ponownego utworzenia + Release(); // zwolnienie zasobów w celu ponownego utworzenia if (Global::bManageNodes) { DisplayListID = glGenLists(1); // otwarcie nowej listy @@ -1150,31 +1150,31 @@ void TTrack::Compile(GLuint tex) }; } glColor3f(1.0f, 1.0f, 1.0f); // to tutaj potrzebne? - // Ra: nie zmieniamy owietlenia przy kompilowaniu, poniewa ono si zmienia w czasie! - // troch podliczonych zmiennych, co si potem przydadz - double fHTW = 0.5 * fabs(fTrackWidth); // poowa szerokoci - double side = fabs(fTexWidth); // szerok podsypki na zewntrz szyny albo pobocza - double slop = fabs(fTexSlope); // szeroko pochylenia - double rozp = fHTW + side + slop; // brzeg zewntrzny + // Ra: nie zmieniamy oświetlenia przy kompilowaniu, ponieważ ono się zmienia w czasie! + // trochę podliczonych zmiennych, co się potem przydadzą + double fHTW = 0.5 * fabs(fTrackWidth); // połowa szerokości + double side = fabs(fTexWidth); // szerokść podsypki na zewnątrz szyny albo pobocza + double slop = fabs(fTexSlope); // szerokość pochylenia + double rozp = fHTW + side + slop; // brzeg zewnętrzny double hypot1 = hypot(slop, fTexHeight1); // rozmiar pochylenia do liczenia normalnych if (hypot1 == 0.0) hypot1 = 1.0; vector3 normal1 = vector3(fTexSlope / hypot1, fTexHeight1 / hypot1, 0.0); // wektor normalny double fHTW2, side2, slop2, rozp2, fTexHeight2, hypot2; vector3 normal2; - if (iTrapezoid & 2) // ten bit oznacza, e istnieje odpowiednie pNext + if (iTrapezoid & 2) // ten bit oznacza, że istnieje odpowiednie pNext { // Ra: jest OK - fHTW2 = 0.5 * fabs(trNext->fTrackWidth); // poowa rozstawu/nawierzchni + fHTW2 = 0.5 * fabs(trNext->fTrackWidth); // połowa rozstawu/nawierzchni side2 = fabs(trNext->fTexWidth); slop2 = fabs(trNext->fTexSlope); - rozp2 = fHTW2 + side2 + slop2; // szeroko podstawy + rozp2 = fHTW2 + side2 + slop2; // szerokość podstawy fTexHeight2 = trNext->fTexHeight1; hypot2 = hypot(slop2, fTexHeight2); if (hypot2 == 0.0) hypot2 = 1.0; normal2 = vector3(trNext->fTexSlope / hypot2, fTexHeight2 / hypot2, 0.0); } - else // gdy nie ma nastpnego albo jest nieodpowiednim kocem podpity + else // gdy nie ma następnego albo jest nieodpowiednim końcem podpięty { fHTW2 = fHTW; side2 = side; @@ -1191,7 +1191,7 @@ void TTrack::Compile(GLuint tex) { Segment->GetRolls(roll1, roll2); double sin1 = sin(roll1), cos1 = cos(roll1), sin2 = sin(roll2), cos2 = cos(roll2); - // zwykla szyna: //Ra: czemu gwki s asymetryczne na wysokoci 0.140? + // zwykla szyna: //Ra: czemu główki są asymetryczne na wysokości 0.140? vector6 rpts1[24], rpts2[24], rpts3[24], rpts4[24]; int i; for (i = 0; i < 12; ++i) @@ -1205,7 +1205,7 @@ void TTrack::Compile(GLuint tex) -szyna[i].n.x * cos1 + szyna[i].n.y * sin1, +szyna[i].n.x * sin1 + szyna[i].n.y * cos1, 0.0); } - if (iTrapezoid) // jak trapez albo przechyki, to oddzielne punkty na kocu + if (iTrapezoid) // jak trapez albo przechyłki, to oddzielne punkty na końcu for (i = 0; i < 12; ++i) { rpts1[12 + i] = vector6((fHTW2 + szyna[i].x) * cos2 + szyna[i].y * sin2, @@ -1217,42 +1217,42 @@ void TTrack::Compile(GLuint tex) szyna[i].z, -szyna[i].n.x * cos2 + szyna[i].n.y * sin2, +szyna[i].n.x * sin2 + szyna[i].n.y * cos2, 0.0); } - switch (eType) // dalej zalenie od typu + switch (eType) // dalej zależnie od typu { - case tt_Table: // obrotnica jak zwyky tor, animacja wykonywana w RaAnimate(), tutaj tylko + case tt_Table: // obrotnica jak zwykły tor, animacja wykonywana w RaAnimate(), tutaj tylko // regeneracja siatek case tt_Normal: if (TextureID2) - if (tex ? TextureID2 == tex : true) // jeli pasuje do grupy (tex) - { // podsypka z podkadami jest tylko dla zwykego toru + if (tex ? TextureID2 == tex : true) // jeśli pasuje do grupy (tex) + { // podsypka z podkładami jest tylko dla zwykłego toru vector6 - bpts1[8]; // punkty gwnej paszczyzny nie przydaj si do robienia bokw + bpts1[8]; // punkty głównej płaszczyzny nie przydają się do robienia boków if (fTexLength == - 4.0) // jeli stare mapowanie na profil 0.2 0.5 1.1 (rwnie 6-9-9/noil) - { // stare mapowanie z rn gstoci pikseli i oddzielnymi teksturami na kady + 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 - if (iTrapezoid) // trapez albo przechyki + if (iTrapezoid) // trapez albo przechyłki { // podsypka z podkladami trapezowata - // ewentualnie poprawi mapowanie, eby rodek mapowa si na + // ewentualnie poprawić mapowanie, żeby środek mapował się na // 1.435/4.671 ((0.3464,0.6536) - // bo si tekstury podsypki rozjedaj po zmianie proporcji profilu + // bo się tekstury podsypki rozjeżdżają po zmianie proporcji profilu bpts1[0] = vector6(rozp, -fTexHeight1 - 0.18, 0.00, normal1.x, -normal1.y, 0.0); // lewy brzeg bpts1[1] = vector6((fHTW + side) * cos1, -(fHTW + side) * sin1 - 0.18, - 0.33, 0.0, 1.0, 0.0); // krawd zaamania + 0.33, 0.0, 1.0, 0.0); // krawędź załamania bpts1[2] = vector6(-bpts1[1].x, +(fHTW + side) * sin1 - 0.18, 0.67, -normal1.x, - -normal1.y, 0.0); // prawy brzeg pocztku symetrycznie + -normal1.y, 0.0); // prawy brzeg początku symetrycznie bpts1[3] = vector6(-rozp, -fTexHeight1 - 0.18, 1.00, -normal1.x, -normal1.y, 0.0); // prawy skos - // przekrj kocowy + // przekrój końcowy bpts1[4] = vector6(rozp2, -fTexHeight2 - 0.18, 0.00, normal2.x, -normal2.y, 0.0); // lewy brzeg bpts1[5] = vector6((fHTW2 + side2) * cos2, -(fHTW2 + side2) * sin2 - 0.18, - 0.33, 0.0, 1.0, 0.0); // krawd zaamania + 0.33, 0.0, 1.0, 0.0); // krawędź załamania bpts1[6] = vector6(-bpts1[5].x, +(fHTW2 + side2) * sin2 - 0.18, 0.67, - 0.0, 1.0, 0.0); // prawy brzeg pocztku symetrycznie + 0.0, 1.0, 0.0); // prawy brzeg początku symetrycznie bpts1[7] = vector6(-rozp2, -fTexHeight2 - 0.18, 1.00, -normal2.x, -normal2.y, 0.0); // prawy skos } @@ -1261,7 +1261,7 @@ void TTrack::Compile(GLuint tex) bpts1[0] = vector6(rozp, -fTexHeight1 - 0.18, 0.0, +normal1.x, -normal1.y, 0.0); // lewy brzeg bpts1[1] = vector6(fHTW + side, -0.18, 0.33, +normal1.x, -normal1.y, - 0.0); // krawd zaamania + 0.0); // krawędź załamania bpts1[2] = vector6(-fHTW - side, -0.18, 0.67, -normal1.x, -normal1.y, 0.0); // druga bpts1[3] = vector6(-rozp, -fTexHeight1 - 0.18, 1.0, -normal1.x, @@ -1269,41 +1269,41 @@ void TTrack::Compile(GLuint tex) } } else - { // mapowanie proporcjonalne do powierzchni, rozmiar w poprzek okrela + { // mapowanie proporcjonalne do powierzchni, rozmiar w poprzek określa // fTexLength - double max = fTexRatio2 * fTexLength; // szeroko proporcjonalna do - // dugoci + double max = fTexRatio2 * fTexLength; // szerokość proporcjonalna do + // długości double map11 = - max > 0.0 ? (fHTW + side) / max : 0.25; // zaamanie od strony 1 + max > 0.0 ? (fHTW + side) / max : 0.25; // załamanie od strony 1 double map12 = max > 0.0 ? (fHTW + side + hypot1) / max : 0.5; // brzeg od strony 1 - if (iTrapezoid) // trapez albo przechyki + if (iTrapezoid) // trapez albo przechyłki { // podsypka z podkladami trapezowata double map21 = - max > 0.0 ? (fHTW2 + side2) / max : 0.25; // zaamanie od strony 2 + max > 0.0 ? (fHTW2 + side2) / max : 0.25; // załamanie od strony 2 double map22 = max > 0.0 ? (fHTW2 + side2 + hypot2) / max : 0.5; // brzeg od strony 2 - // ewentualnie poprawi mapowanie, eby rodek mapowa si na + // ewentualnie poprawić mapowanie, żeby środek mapował się na // 1.435/4.671 ((0.3464,0.6536) - // bo si tekstury podsypki rozjedaj po zmianie proporcji profilu + // bo się tekstury podsypki rozjeżdżają po zmianie proporcji profilu bpts1[0] = vector6(rozp, -fTexHeight1 - 0.18, 0.5 - map12, normal1.x, -normal1.y, 0.0); // lewy brzeg bpts1[1] = vector6((fHTW + side) * cos1, -(fHTW + side) * sin1 - 0.18, - 0.5 - map11, 0.0, 1.0, 0.0); // krawd zaamania + 0.5 - map11, 0.0, 1.0, 0.0); // krawędź załamania bpts1[2] = vector6(-bpts1[1].x, +(fHTW + side) * sin1 - 0.18, 0.5 + map11, 0.0, - 1.0, 0.0); // prawy brzeg pocztku symetrycznie + 1.0, 0.0); // prawy brzeg początku symetrycznie bpts1[3] = vector6(-rozp, -fTexHeight1 - 0.18, 0.5 + map12, -normal1.x, -normal1.y, 0.0); // prawy skos - // przekrj kocowy + // przekrój końcowy bpts1[4] = vector6(rozp2, -fTexHeight2 - 0.18, 0.5 - map22, normal2.x, -normal2.y, 0.0); // lewy brzeg bpts1[5] = vector6((fHTW2 + side2) * cos2, -(fHTW2 + side2) * sin2 - 0.18, - 0.5 - map21, 0.0, 1.0, 0.0); // krawd zaamania + 0.5 - map21, 0.0, 1.0, 0.0); // krawędź załamania bpts1[6] = vector6(-bpts1[5].x, +(fHTW2 + side2) * sin2 - 0.18, 0.5 + map21, - 0.0, 1.0, 0.0); // prawy brzeg pocztku symetrycznie + 0.0, 1.0, 0.0); // prawy brzeg początku symetrycznie bpts1[7] = vector6(-rozp2, -fTexHeight2 - 0.18, 0.5 + map22, -normal2.x, -normal2.y, 0.0); // prawy skos } @@ -1312,7 +1312,7 @@ void TTrack::Compile(GLuint tex) bpts1[0] = vector6(rozp, -fTexHeight1 - 0.18, 0.5 - map12, +normal1.x, -normal1.y, 0.0); // lewy brzeg bpts1[1] = vector6(fHTW + side, -0.18, 0.5 - map11, +normal1.x, - -normal1.y, 0.0); // krawd zaamania + -normal1.y, 0.0); // krawędź załamania bpts1[2] = vector6(-fHTW - side, -0.18, 0.5 + map11, -normal1.x, -normal1.y, 0.0); // druga bpts1[3] = vector6(-rozp, -fTexHeight1 - 0.18, 0.5 + map12, -normal1.x, @@ -1324,7 +1324,7 @@ void TTrack::Compile(GLuint tex) Segment->RenderLoft(bpts1, iTrapezoid ? -4 : 4, fTexLength); } if (TextureID1) - if (tex ? TextureID1 == tex : true) // jeli pasuje do grupy (tex) + if (tex ? TextureID1 == tex : true) // jeśli pasuje do grupy (tex) { // szyny if (!tex) glBindTexture(GL_TEXTURE_2D, TextureID1); @@ -1333,9 +1333,9 @@ void TTrack::Compile(GLuint tex) } break; case tt_Switch: // dla zwrotnicy dwa razy szyny - if (TextureID1) // zwrotnice nie s grupowane, aby prociej byo je animowa + if (TextureID1) // zwrotnice nie są grupowane, aby prościej było je animować { // iglice liczone tylko dla zwrotnic - // Ra: TODO: oddzielna animacja kadej iglicy, opr na docisku + // Ra: TODO: oddzielna animacja każdej iglicy, opór na docisku vector6 rpts3[24], rpts4[24]; for (i = 0; i < 12; ++i) { @@ -1349,7 +1349,7 @@ void TTrack::Compile(GLuint tex) -iglica[i].n.x * cos1 + iglica[i].n.y * sin1, +iglica[i].n.x * sin1 + iglica[i].n.y * cos1, 0.0); } - if (iTrapezoid) // trapez albo przechyki, to oddzielne punkty na kocu + if (iTrapezoid) // trapez albo przechyłki, to oddzielne punkty na końcu for (i = 0; i < 12; ++i) { rpts3[12 + i] = @@ -1368,70 +1368,70 @@ void TTrack::Compile(GLuint tex) { // zwrotnica prawa glBindTexture(GL_TEXTURE_2D, TextureID1); SwitchExtension->Segments[0]->RenderLoft(rpts1, nnumPts, fTexLength, - 2); // prawa szyna za iglic + 2); // prawa szyna za iglicą SwitchExtension->Segments[0]->RenderSwitchRail( rpts1, rpts3, nnumPts, fTexLength, 2, SwitchExtension->fOffset2); // prawa iglica SwitchExtension->Segments[0]->RenderLoft( - rpts2, nnumPts, fTexLength); // lewa szyna normalnie caa + rpts2, nnumPts, fTexLength); // lewa szyna normalnie cała if (TextureID2 != TextureID1) // nie wiadomo, czy OpenGL to optymalizuje glBindTexture(GL_TEXTURE_2D, TextureID2); SwitchExtension->Segments[1]->RenderLoft( - rpts1, nnumPts, fTexLength); // prawa szyna normalna caa + rpts1, nnumPts, fTexLength); // prawa szyna normalna cała SwitchExtension->Segments[1]->RenderLoft(rpts2, nnumPts, fTexLength, - 2); // lewa szyna za iglic + 2); // lewa szyna za iglicą SwitchExtension->Segments[1]->RenderSwitchRail( rpts2, rpts4, nnumPts, fTexLength, 2, -fMaxOffset + SwitchExtension->fOffset1); // lewa iglica } else - { // lewa kiedy dziaaa lepiej ni prawa + { // lewa kiedyś działała lepiej niż prawa glBindTexture(GL_TEXTURE_2D, TextureID1); SwitchExtension->Segments[0]->RenderLoft( - rpts1, nnumPts, fTexLength); // prawa szyna normalna caa + rpts1, nnumPts, fTexLength); // prawa szyna normalna cała SwitchExtension->Segments[0]->RenderLoft(rpts2, nnumPts, fTexLength, - 2); // lewa szyna za iglic + 2); // lewa szyna za iglicą SwitchExtension->Segments[0]->RenderSwitchRail( rpts2, rpts4, nnumPts, fTexLength, 2, -SwitchExtension->fOffset2); // lewa iglica if (TextureID2 != TextureID1) // nie wiadomo, czy OpenGL to optymalizuje glBindTexture(GL_TEXTURE_2D, TextureID2); SwitchExtension->Segments[1]->RenderLoft(rpts1, nnumPts, fTexLength, - 2); // prawa szyna za iglic + 2); // prawa szyna za iglicą SwitchExtension->Segments[1]->RenderSwitchRail( rpts1, rpts3, nnumPts, fTexLength, 2, fMaxOffset - SwitchExtension->fOffset1); // prawa iglica SwitchExtension->Segments[1]->RenderLoft( - rpts2, nnumPts, fTexLength); // lewa szyna normalnie caa + rpts2, nnumPts, fTexLength); // lewa szyna normalnie cała } } break; } - } // koniec obsugi torw + } // koniec obsługi torów break; case 2: // McZapkie-260302 - droga - rendering // McZapkie:240702-zmieniony zakres widzialnosci - switch (eType) // dalej zalenie od typu + switch (eType) // dalej zależnie od typu { - case tt_Normal: // drogi proste, bo skrzyowania osobno + case tt_Normal: // drogi proste, bo skrzyżowania osobno { - vector6 bpts1[4]; // punkty gwnej paszczyzny przydaj si do robienia bokw - if (TextureID1 || TextureID2) // punkty si przydadz, nawet jeli nawierzchni nie ma + vector6 bpts1[4]; // punkty głównej płaszczyzny przydają się do robienia boków + if (TextureID1 || TextureID2) // punkty się przydadzą, nawet jeśli nawierzchni nie ma { // double max=2.0*(fHTW>fHTW2?fHTW:fHTW2); //z szerszej strony jest 100% - double max = fTexRatio1 * fTexLength; // test: szeroko proporcjonalna do dugoci - double map1 = max > 0.0 ? fHTW / max : 0.5; // obcicie tekstury od strony 1 - double map2 = max > 0.0 ? fHTW2 / max : 0.5; // obcicie tekstury od strony 2 - if (iTrapezoid) // trapez albo przechyki + double max = fTexRatio1 * fTexLength; // test: szerokość proporcjonalna do długości + double map1 = max > 0.0 ? fHTW / max : 0.5; // obcięcie tekstury od strony 1 + double map2 = max > 0.0 ? fHTW2 / max : 0.5; // obcięcie tekstury od strony 2 + if (iTrapezoid) // trapez albo przechyłki { // nawierzchnia trapezowata Segment->GetRolls(roll1, roll2); bpts1[0] = vector6(fHTW * cos(roll1), -fHTW * sin(roll1), 0.5 - map1, - sin(roll1), cos(roll1), 0.0); // lewy brzeg pocztku + sin(roll1), cos(roll1), 0.0); // lewy brzeg początku bpts1[1] = vector6(-bpts1[0].x, -bpts1[0].y, 0.5 + map1, -sin(roll1), - cos(roll1), 0.0); // prawy brzeg pocztku symetrycznie + cos(roll1), 0.0); // prawy brzeg początku symetrycznie bpts1[2] = vector6(fHTW2 * cos(roll2), -fHTW2 * sin(roll2), 0.5 - map2, - sin(roll2), cos(roll2), 0.0); // lewy brzeg koca + sin(roll2), cos(roll2), 0.0); // lewy brzeg końca bpts1[3] = vector6(-bpts1[2].x, -bpts1[2].y, 0.5 + map2, -sin(roll2), - cos(roll2), 0.0); // prawy brzeg pocztku symetrycznie + cos(roll2), 0.0); // prawy brzeg początku symetrycznie } else { @@ -1439,39 +1439,39 @@ void TTrack::Compile(GLuint tex) bpts1[1] = vector6(-fHTW, 0.0, 0.5 + map1, 0.0, 1.0, 0.0); } } - if (TextureID1) // jeli podana bya tekstura, generujemy trjkty - if (tex ? TextureID1 == tex : true) // jeli pasuje do grupy (tex) - { // tworzenie trjktw nawierzchni szosy + if (TextureID1) // jeśli podana była tekstura, generujemy trójkąty + if (tex ? TextureID1 == tex : true) // jeśli pasuje do grupy (tex) + { // tworzenie trójkątów nawierzchni szosy if (!tex) glBindTexture(GL_TEXTURE_2D, TextureID1); Segment->RenderLoft(bpts1, iTrapezoid ? -2 : 2, fTexLength); } if (TextureID2) - if (tex ? TextureID2 == tex : true) // jeli pasuje do grupy (tex) - { // pobocze drogi - poziome przy przechyce (a moe krawnik i chodnik zrobi jak + 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?) if (!tex) glBindTexture(GL_TEXTURE_2D, TextureID2); vector6 rpts1[6], - rpts2[6]; // wsprzdne przekroju i mapowania dla prawej i lewej strony + rpts2[6]; // współrzędne przekroju i mapowania dla prawej i lewej strony if (fTexHeight1 >= 0.0) - { // standardowo: od zewntrz pochylenie, a od wewntrz poziomo + { // 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 krawd zaamania + vector6(bpts1[0].x + side, bpts1[0].y, 0.5); // lewa krawędź załamania rpts1[2] = vector6(bpts1[0].x, bpts1[0].y, - 1.0); // lewy brzeg pobocza (mapowanie moe by inne + 1.0); // lewy brzeg pobocza (mapowanie może być inne rpts2[0] = vector6(bpts1[1].x, bpts1[1].y, 1.0); // prawy brzeg pobocza rpts2[1] = - vector6(bpts1[1].x - side, bpts1[1].y, 0.5); // prawa krawd zaamania + vector6(bpts1[1].x - side, bpts1[1].y, 0.5); // prawa krawędź załamania rpts2[2] = vector6(-rozp, -fTexHeight1, 0.0); // prawy brzeg podstawy - if (iTrapezoid) // trapez albo przechyki + if (iTrapezoid) // trapez albo przechyłki { // pobocza do trapezowatej nawierzchni - dodatkowe punkty z drugiej strony // odcinka rpts1[3] = vector6(rozp2, -fTexHeight2, 0.0); // lewy brzeg lewego pobocza rpts1[4] = - vector6(bpts1[2].x + side2, bpts1[2].y, 0.5); // krawd zaamania + vector6(bpts1[2].x + side2, bpts1[2].y, 0.5); // krawędź 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); @@ -1480,66 +1480,66 @@ void TTrack::Compile(GLuint tex) } } else - { // wersja dla chodnika: skos 1:3.75, kady chodnik innej szerokoci - // mapowanie propocjonalne do szerokoci chodnika - // krawnik jest mapowany od 31/64 do 32/64 lewy i od 32/64 do 33/64 prawy + { // wersja dla chodnika: skos 1:3.75, każdy chodnik innej szerokości + // mapowanie propocjonalne do szerokości chodnika + // krawężnik jest mapowany od 31/64 do 32/64 lewy i od 32/64 do 33/64 prawy double d = - -fTexHeight1 / 3.75; // krawnik o wysokoci 150mm jest pochylony 40mm + -fTexHeight1 / 3.75; // krawężnik o wysokości 150mm jest pochylony 40mm double max = - fTexRatio2 * fTexLength; // test: szeroko proporcjonalna do dugoci + fTexRatio2 * fTexLength; // test: szerokość proporcjonalna do długości double map1l = max > 0.0 ? side / max : - 0.484375; // obcicie tekstury od lewej strony punktu 1 + 0.484375; // obcięcie tekstury od lewej strony punktu 1 double map1r = max > 0.0 ? slop / max : - 0.484375; // obcicie tekstury od prawej strony punktu 1 + 0.484375; // obcięcie tekstury od prawej strony punktu 1 rpts1[0] = vector6(bpts1[0].x + slop, bpts1[0].y - fTexHeight1, 0.515625 + map1r); // prawy brzeg prawego chodnika rpts1[1] = vector6(bpts1[0].x + d, bpts1[0].y - fTexHeight1, - 0.515625); // prawy krawnik u gry + 0.515625); // prawy krawężnik u góry rpts1[2] = vector6(bpts1[0].x, bpts1[0].y, - 0.515625 - d / 2.56); // prawy krawnik u dou + 0.515625 - d / 2.56); // prawy krawężnik u dołu rpts2[0] = vector6(bpts1[1].x, bpts1[1].y, - 0.484375 + d / 2.56); // lewy krawnik u dou + 0.484375 + d / 2.56); // lewy krawężnik u dołu rpts2[1] = vector6(bpts1[1].x - d, bpts1[1].y - fTexHeight1, - 0.484375); // lewy krawnik u gry + 0.484375); // lewy krawężnik u góry rpts2[2] = vector6(bpts1[1].x - side, bpts1[1].y - fTexHeight1, 0.484375 - map1l); // lewy brzeg lewego chodnika - if (iTrapezoid) // trapez albo przechyki + if (iTrapezoid) // trapez albo przechyłki { // pobocza do trapezowatej nawierzchni - dodatkowe punkty z drugiej strony // odcinka slop2 = fabs((iTrapezoid & 2) ? slop2 : - slop); // szeroko chodnika po prawej + slop); // szerokość chodnika po prawej double map2l = max > 0.0 ? side2 / max : - 0.484375; // obcicie tekstury od lewej strony punktu 2 + 0.484375; // obcięcie tekstury od lewej strony punktu 2 double map2r = max > 0.0 ? slop2 / max : - 0.484375; // obcicie tekstury od prawej strony punktu 2 + 0.484375; // obcięcie tekstury od prawej strony punktu 2 rpts1[3] = vector6(bpts1[2].x + slop2, bpts1[2].y - fTexHeight2, 0.515625 + map2r); // prawy brzeg prawego chodnika rpts1[4] = vector6(bpts1[2].x + d, bpts1[2].y - fTexHeight2, - 0.515625); // prawy krawnik u gry + 0.515625); // prawy krawężnik u góry rpts1[5] = vector6(bpts1[2].x, bpts1[2].y, - 0.515625 - d / 2.56); // prawy krawnik u dou + 0.515625 - d / 2.56); // prawy krawężnik u dołu rpts2[3] = vector6(bpts1[3].x, bpts1[3].y, - 0.484375 + d / 2.56); // lewy krawnik u dou + 0.484375 + d / 2.56); // lewy krawężnik u dołu rpts2[4] = vector6(bpts1[3].x - d, bpts1[3].y - fTexHeight2, - 0.484375); // lewy krawnik u gry + 0.484375); // lewy krawężnik u góry rpts2[5] = vector6(bpts1[3].x - side2, bpts1[3].y - fTexHeight2, 0.484375 - map2l); // lewy brzeg lewego chodnika } } - if (iTrapezoid) // trapez albo przechyki + if (iTrapezoid) // trapez albo przechyłki { // pobocza do trapezowatej nawierzchni - dodatkowe punkty z drugiej strony // odcinka if ((fTexHeight1 >= 0.0) ? true : (slop != 0.0)) - Segment->RenderLoft(rpts1, -3, fTexLength); // tylko jeli jest z prawej + Segment->RenderLoft(rpts1, -3, fTexLength); // tylko jeśli jest z prawej if ((fTexHeight1 >= 0.0) ? true : (side != 0.0)) - Segment->RenderLoft(rpts2, -3, fTexLength); // tylko jeli jest z lewej + Segment->RenderLoft(rpts2, -3, fTexLength); // tylko jeśli jest z lewej } else - { // pobocza zwyke, brak przechyki + { // pobocza zwykłe, brak przechyłki if ((fTexHeight1 >= 0.0) ? true : (slop != 0.0)) Segment->RenderLoft(rpts1, 3, fTexLength); if ((fTexHeight1 >= 0.0) ? true : (side != 0.0)) @@ -1548,40 +1548,40 @@ void TTrack::Compile(GLuint tex) } break; } - case tt_Cross: // skrzyowanie drg rysujemy inaczej - { // ustalenie wsprzdnych rodka - przecicie Point1-Point2 z CV4-Point4 - double a[4]; // kty osi ulic wchodzcych - vector3 p[4]; // punkty si przydadz do oblicze - // na razie poowa odlegoci pomidzy Point1 i Point2, potem si dopracuje - a[0] = a[1] = 0.5; // parametr do poszukiwania przecicia ukw - // modyfikowa a[0] i a[1] tak, aby trafi na przecicie odcinka 34 + case tt_Cross: // skrzyżowanie dróg rysujemy inaczej + { // ustalenie współrzędnych środka - przecięcie Point1-Point2 z CV4-Point4 + double a[4]; // kąty osi ulic wchodzących + vector3 p[4]; // punkty się przydadzą do obliczeń + // na razie połowa odległości pomiędzy Point1 i Point2, potem się dopracuje + a[0] = a[1] = 0.5; // parametr do poszukiwania przecięcia łuków + // modyfikować a[0] i a[1] tak, aby trafić na przecięcie odcinka 34 p[0] = SwitchExtension->Segments[0]->FastGetPoint( - a[0]); // wsprzdne rodka pierwszego odcinka + a[0]); // współrzędne środka pierwszego odcinka p[1] = SwitchExtension->Segments[1]->FastGetPoint(a[1]); //-//- drugiego - // p[2]=p[1]-p[0]; //jeli rne od zera, przeliczy a[0] i a[1] i wyznaczy nowe punkty - vector3 oxz = p[0]; // punkt mapowania rodka tekstury skrzyowania + // p[2]=p[1]-p[0]; //jeśli różne od zera, przeliczyć a[0] i a[1] i wyznaczyć nowe punkty + vector3 oxz = p[0]; // punkt mapowania środka tekstury skrzyżowania p[0] = SwitchExtension->Segments[0] - ->GetDirection1(); // Point1 - pobranie wektorw kontrolnych + ->GetDirection1(); // Point1 - pobranie wektorów kontrolnych p[1] = SwitchExtension->Segments[1]->GetDirection2(); // Point3 (bo zamienione) p[2] = SwitchExtension->Segments[0]->GetDirection2(); // Point2 p[3] = SwitchExtension->Segments[1]->GetDirection1(); // Point4 (bo zamienione) - a[0] = atan2(-p[0].x, p[0].z); // kty stycznych osi drg + a[0] = atan2(-p[0].x, p[0].z); // kąty stycznych osi dróg a[1] = atan2(-p[1].x, p[1].z); a[2] = atan2(-p[2].x, p[2].z); a[3] = atan2(-p[3].x, p[3].z); p[0] = SwitchExtension->Segments[0] - ->FastGetPoint_0(); // Point1 - pobranie wsprzdnych kocw + ->FastGetPoint_0(); // Point1 - pobranie współrzędnych końców p[1] = SwitchExtension->Segments[1]->FastGetPoint_1(); // Point3 p[2] = SwitchExtension->Segments[0]->FastGetPoint_1(); // Point2 p[3] = SwitchExtension->Segments[1] - ->FastGetPoint_0(); // Point4 - przy trzech drogach pokrywa si z Point1 - // 2014-07: na pocztek rysowa brzegi jak dla ukw - // punkty brzegu nawierzchni uzyskujemy podczas renderowania bokw (bez sensu, ale - // najszybciej byo zrobi) - int i, j; // ile punktw (moe byc rna ilo punktw midzy drogami) + ->FastGetPoint_0(); // Point4 - przy trzech drogach pokrywa się z Point1 + // 2014-07: na początek rysować brzegi jak dla łuków + // punkty brzegu nawierzchni uzyskujemy podczas renderowania boków (bez sensu, ale + // najszybciej było zrobić) + int i, j; // ile punktów (może byc różna ilość punktów między drogami) if (!SwitchExtension->vPoints) - { // jeli tablica punktw nie jest jeszcze utworzona, zliczamy punkty i tworzymy j - if (SwitchExtension->iRoads == 3) // mog by tylko 3 drogi zamiast 4 + { // jeśli tablica punktów nie jest jeszcze utworzona, zliczamy punkty i tworzymy ją + if (SwitchExtension->iRoads == 3) // mogą być tylko 3 drogi zamiast 4 SwitchExtension->iPoints = 5 + SwitchExtension->Segments[0]->RaSegCount() + SwitchExtension->Segments[1]->RaSegCount() + SwitchExtension->Segments[2]->RaSegCount(); @@ -1590,69 +1590,69 @@ void TTrack::Compile(GLuint tex) 5 + SwitchExtension->Segments[2]->RaSegCount() + SwitchExtension->Segments[3]->RaSegCount() + SwitchExtension->Segments[4]->RaSegCount() + - SwitchExtension->Segments[5]->RaSegCount(); // mog by tylko 3 drogi + SwitchExtension->Segments[5]->RaSegCount(); // mogą być tylko 3 drogi SwitchExtension->vPoints = new vector3[SwitchExtension->iPoints]; // tablica utworzona z zapasem, ale nie - // wypeniona wsprzdnymi + // wypełniona współrzędnymi } vector3 *b = SwitchExtension->bPoints ? NULL : SwitchExtension - ->vPoints; // zmienna robocza, NULL gdy tablica punktw ju jest wypeniona - vector6 bpts1[4]; // punkty gwnej paszczyzny przydaj si do robienia bokw - if (TextureID1 || TextureID2) // punkty si przydadz, nawet jeli nawierzchni nie ma + ->vPoints; // zmienna robocza, NULL gdy tablica punktów już jest wypełniona + vector6 bpts1[4]; // punkty głównej płaszczyzny przydają się do robienia boków + if (TextureID1 || TextureID2) // punkty się przydadzą, nawet jeśli nawierzchni nie ma { // double max=2.0*(fHTW>fHTW2?fHTW:fHTW2); //z szerszej strony jest 100% - double max = fTexRatio1 * fTexLength; // test: szeroko proporcjonalna do dugoci - double map1 = max > 0.0 ? fHTW / max : 0.5; // obcicie tekstury od strony 1 - double map2 = max > 0.0 ? fHTW2 / max : 0.5; // obcicie tekstury od strony 2 - // if (iTrapezoid) //trapez albo przechyki + double max = fTexRatio1 * fTexLength; // test: szerokość proporcjonalna do długości + double map1 = max > 0.0 ? fHTW / max : 0.5; // obcięcie tekstury od strony 1 + double map2 = max > 0.0 ? fHTW2 / max : 0.5; // obcięcie tekstury od strony 2 + // if (iTrapezoid) //trapez albo przechyłki { // nawierzchnia trapezowata Segment->GetRolls(roll1, roll2); bpts1[0] = vector6(fHTW * cos(roll1), -fHTW * sin(roll1), 0.5 - map1, - sin(roll1), cos(roll1), 0.0); // lewy brzeg pocztku + sin(roll1), cos(roll1), 0.0); // lewy brzeg początku bpts1[1] = vector6(-bpts1[0].x, -bpts1[0].y, 0.5 + map1, -sin(roll1), - cos(roll1), 0.0); // prawy brzeg pocztku symetrycznie + cos(roll1), 0.0); // prawy brzeg początku symetrycznie bpts1[2] = vector6(fHTW2 * cos(roll2), -fHTW2 * sin(roll2), 0.5 - map2, - sin(roll2), cos(roll2), 0.0); // lewy brzeg koca + sin(roll2), cos(roll2), 0.0); // lewy brzeg końca bpts1[3] = vector6(-bpts1[2].x, -bpts1[2].y, 0.5 + map2, -sin(roll2), - cos(roll2), 0.0); // prawy brzeg pocztku symetrycznie + cos(roll2), 0.0); // prawy brzeg początku symetrycznie } } - // najpierw renderowanie poboczy i zapamitywanie punktw - // problem ze skrzyowaniami jest taki, e teren chce si pogrupowa wg tekstur, ale + // najpierw renderowanie poboczy i zapamiętywanie punktów + // problem ze skrzyżowaniami jest taki, że teren chce się pogrupować wg tekstur, ale // zaczyna od nawierzchni - // sama nawierzchnia nie wypeni tablicy punktw, bo potrzebne s pobocza - // ale pobocza renderuj si pniej, wic nawierzchnia nie zaapuje si na renderowanie + // sama nawierzchnia nie wypełni tablicy punktów, bo potrzebne są pobocza + // ale pobocza renderują się później, więc nawierzchnia nie załapuje się na renderowanie // w swoim czasie // if (TextureID2) - // if (tex?TextureID2==tex:true) //jeli pasuje do grupy (tex) - { // pobocze drogi - poziome przy przechyce (a moe krawnik i chodnik zrobi jak w + // 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?) if (TextureID2) if (!tex) glBindTexture(GL_TEXTURE_2D, TextureID2); vector6 rpts1[6], - rpts2[6]; // wsprzdne przekroju i mapowania dla prawej i lewej strony - // Ra 2014-07: trzeba to przerobi na ptl i pobiera profile (przynajmniej 2..4) z - // ssiednich drg + rpts2[6]; // współrzędne przekroju i mapowania dla prawej i lewej strony + // Ra 2014-07: trzeba to przerobić na pętlę i pobierać profile (przynajmniej 2..4) z + // sąsiednich dróg if (fTexHeight1 >= 0.0) - { // standardowo: od zewntrz pochylenie, a od wewntrz poziomo + { // 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 krawd - // zaamania + rpts1[1] = vector6(bpts1[0].x + side, bpts1[0].y, 0.5); // lewa krawędź + // załamania rpts1[2] = vector6(bpts1[0].x, bpts1[0].y, - 1.0); // lewy brzeg pobocza (mapowanie moe by inne + 1.0); // lewy brzeg pobocza (mapowanie może być inne rpts2[0] = vector6(bpts1[1].x, bpts1[1].y, 1.0); // prawy brzeg pobocza rpts2[1] = - vector6(bpts1[1].x - side, bpts1[1].y, 0.5); // prawa krawd zaamania + vector6(bpts1[1].x - side, bpts1[1].y, 0.5); // prawa krawędź załamania rpts2[2] = vector6(-rozp, -fTexHeight1, 0.0); // prawy brzeg podstawy - // if (iTrapezoid) //trapez albo przechyki + // if (iTrapezoid) //trapez albo przechyłki { // pobocza do trapezowatej nawierzchni - dodatkowe punkty z drugiej strony // odcinka rpts1[3] = vector6(rozp2, -fTexHeight2, 0.0); // lewy brzeg lewego pobocza - rpts1[4] = vector6(bpts1[2].x + side2, bpts1[2].y, 0.5); // krawd - // zaamania + rpts1[4] = vector6(bpts1[2].x + side2, bpts1[2].y, 0.5); // krawędź + // 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); @@ -1661,84 +1661,84 @@ void TTrack::Compile(GLuint tex) } } else - { // wersja dla chodnika: skos 1:3.75, kady chodnik innej szerokoci - // mapowanie propocjonalne do szerokoci chodnika - // krawnik jest mapowany od 31/64 do 32/64 lewy i od 32/64 do 33/64 prawy + { // wersja dla chodnika: skos 1:3.75, każdy chodnik innej szerokości + // mapowanie propocjonalne do szerokości chodnika + // krawężnik jest mapowany od 31/64 do 32/64 lewy i od 32/64 do 33/64 prawy double d = - -fTexHeight1 / 3.75; // krawnik o wysokoci 150mm jest pochylony 40mm + -fTexHeight1 / 3.75; // krawężnik o wysokości 150mm jest pochylony 40mm double max = - fTexRatio2 * fTexLength; // test: szeroko proporcjonalna do dugoci + fTexRatio2 * fTexLength; // test: szerokość proporcjonalna do długości double map1l = max > 0.0 ? side / max : - 0.484375; // obcicie tekstury od lewej strony punktu 1 + 0.484375; // obcięcie tekstury od lewej strony punktu 1 double map1r = max > 0.0 ? slop / max : - 0.484375; // obcicie tekstury od prawej strony punktu 1 + 0.484375; // obcięcie tekstury od prawej strony punktu 1 rpts1[0] = vector6(bpts1[0].x + slop, bpts1[0].y - fTexHeight1, 0.515625 + map1r); // prawy brzeg prawego chodnika rpts1[1] = vector6(bpts1[0].x + d, bpts1[0].y - fTexHeight1, - 0.515625); // prawy krawnik u gry + 0.515625); // prawy krawężnik u góry rpts1[2] = vector6(bpts1[0].x, bpts1[0].y, - 0.515625 - d / 2.56); // prawy krawnik u dou + 0.515625 - d / 2.56); // prawy krawężnik u dołu rpts2[0] = vector6(bpts1[1].x, bpts1[1].y, - 0.484375 + d / 2.56); // lewy krawnik u dou + 0.484375 + d / 2.56); // lewy krawężnik u dołu rpts2[1] = vector6(bpts1[1].x - d, bpts1[1].y - fTexHeight1, - 0.484375); // lewy krawnik u gry + 0.484375); // lewy krawężnik u góry rpts2[2] = vector6(bpts1[1].x - side, bpts1[1].y - fTexHeight1, 0.484375 - map1l); // lewy brzeg lewego chodnika - // if (iTrapezoid) //trapez albo przechyki + // if (iTrapezoid) //trapez albo przechyłki { // pobocza do trapezowatej nawierzchni - dodatkowe punkty z drugiej strony // odcinka slop2 = - fabs((iTrapezoid & 2) ? slop2 : slop); // szeroko chodnika po prawej + fabs((iTrapezoid & 2) ? slop2 : slop); // szerokość chodnika po prawej double map2l = max > 0.0 ? side2 / max : - 0.484375; // obcicie tekstury od lewej strony punktu 2 + 0.484375; // obcięcie tekstury od lewej strony punktu 2 double map2r = max > 0.0 ? slop2 / max : - 0.484375; // obcicie tekstury od prawej strony punktu 2 + 0.484375; // obcięcie tekstury od prawej strony punktu 2 rpts1[3] = vector6(bpts1[2].x + slop2, bpts1[2].y - fTexHeight2, 0.515625 + map2r); // prawy brzeg prawego chodnika rpts1[4] = vector6(bpts1[2].x + d, bpts1[2].y - fTexHeight2, - 0.515625); // prawy krawnik u gry + 0.515625); // prawy krawężnik u góry rpts1[5] = vector6(bpts1[2].x, bpts1[2].y, - 0.515625 - d / 2.56); // prawy krawnik u dou + 0.515625 - d / 2.56); // prawy krawężnik u dołu rpts2[3] = vector6(bpts1[3].x, bpts1[3].y, - 0.484375 + d / 2.56); // lewy krawnik u dou + 0.484375 + d / 2.56); // lewy krawężnik u dołu rpts2[4] = vector6(bpts1[3].x - d, bpts1[3].y - fTexHeight2, - 0.484375); // lewy krawnik u gry + 0.484375); // lewy krawężnik u góry rpts2[5] = vector6(bpts1[3].x - side2, bpts1[3].y - fTexHeight2, 0.484375 - map2l); // lewy brzeg lewego chodnika } } bool render = TextureID2 ? (tex ? TextureID2 == tex : true) : - false; // renderowa nie trzeba, ale trzeba wyznaczy + false; // renderować nie trzeba, ale trzeba wyznaczyć // punkty brzegowe nawierzchni - // if (iTrapezoid) //trapez albo przechyki + // if (iTrapezoid) //trapez albo przechyłki if (SwitchExtension->iRoads == 4) { // pobocza do trapezowatej nawierzchni - dodatkowe punkty z drugiej strony odcinka if ((fTexHeight1 >= 0.0) ? true : (side != 0.0)) SwitchExtension->Segments[2]->RenderLoft( - rpts2, -3, fTexLength, 0, 1, &b, render); // tylko jeli jest z lewej + rpts2, -3, fTexLength, 0, 1, &b, render); // tylko jeśli jest z lewej if ((fTexHeight1 >= 0.0) ? true : (side != 0.0)) SwitchExtension->Segments[3]->RenderLoft( - rpts2, -3, fTexLength, 0, 1, &b, render); // tylko jeli jest z lewej + rpts2, -3, fTexLength, 0, 1, &b, render); // tylko jeśli jest z lewej if ((fTexHeight1 >= 0.0) ? true : (side != 0.0)) SwitchExtension->Segments[4]->RenderLoft( - rpts2, -3, fTexLength, 0, 1, &b, render); // tylko jeli jest z lewej + rpts2, -3, fTexLength, 0, 1, &b, render); // tylko jeśli jest z lewej if ((fTexHeight1 >= 0.0) ? true : (side != 0.0)) SwitchExtension->Segments[5]->RenderLoft( - rpts2, -3, fTexLength, 0, 1, &b, render); // tylko jeli jest z lewej + rpts2, -3, fTexLength, 0, 1, &b, render); // tylko jeśli jest z lewej } - else // to bdzie ewentualnie dla prostego na skrzyowaniu trzech drg - { // punkt 3 pokrywa si z punktem 1, jak w zwrotnicy; poczenie 1->2 nie musi by + 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 if ((fTexHeight1 >= 0.0) ? true : (side != 0.0)) // OK SwitchExtension->Segments[2]->RenderLoft(rpts2, -3, fTexLength, 0, 1, &b, render); // z P2 do P4 if ((fTexHeight1 >= 0.0) ? true : (side != 0.0)) // OK SwitchExtension->Segments[1]->RenderLoft( - rpts2, -3, fTexLength, 0, 1, &b, render); // z P4 do P3=P1 (odwrcony) + rpts2, -3, fTexLength, 0, 1, &b, render); // z P4 do P3=P1 (odwrócony) if ((fTexHeight1 >= 0.0) ? true : (side != 0.0)) // OK SwitchExtension->Segments[0]->RenderLoft(rpts2, -3, fTexLength, 0, 1, &b, render); // z P1 do P2 @@ -1750,43 +1750,43 @@ void TTrack::Compile(GLuint tex) */ } } - // renderowanie nawierzchni na kocu + // renderowanie nawierzchni na końcu double sina0 = sin(a[0]), cosa0 = cos(a[0]); double u, v; - if (!SwitchExtension->bPoints) // jeli tablica nie wypeniona - if (b) // ale jest wskanik do tablicy - moe nie by? - { // co si gubi w obliczeniach na wskanikach + if (!SwitchExtension->bPoints) // jeśli tablica nie wypełniona + if (b) // ale jest wskaźnik do tablicy - może nie być? + { // coś się gubi w obliczeniach na wskaźnikach i = (int((void *)(b)) - int((void *)(SwitchExtension->vPoints))) / - sizeof(vector3); // ustalenie liczby punktw, bo mogo wyj inaczej ni - // policzone z gry + sizeof(vector3); // ustalenie liczby punktów, bo mogło wyjść inaczej niż + // policzone z góry if (i > 0) - { // jeli zostao to wanie utworzone - if (SwitchExtension->iPoints > i) // jeli wyszo mniej ni byo miejsca - SwitchExtension->iPoints = i; // domknicie wachlarza + { // 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 bd jest - zrobi - // miejsce na powtrzenie pierwszego punktu - // na kocu + --SwitchExtension->iPoints; // jak tutaj wejdzie, to błąd jest - zrobić + // miejsce na powtórzenie pierwszego punktu + // na końcu SwitchExtension->vPoints[SwitchExtension->iPoints++] = SwitchExtension->vPoints[0]; - SwitchExtension->bPoints = true; // tablica punktw zostaa wypeniona + SwitchExtension->bPoints = true; // tablica punktów została wypełniona } } - if (TextureID1) // jeli podana tekstura nawierzchni - if (tex ? TextureID1 == tex : true) // jeli pasuje do grupy (tex) + if (TextureID1) // jeśli podana tekstura nawierzchni + if (tex ? TextureID1 == tex : true) // jeśli pasuje do grupy (tex) { if (!tex) glBindTexture(GL_TEXTURE_2D, TextureID1); - glBegin(GL_TRIANGLE_FAN); // takie keczko bdzie + glBegin(GL_TRIANGLE_FAN); // takie kółeczko będzie glNormal3f(0, 1, 0); - glTexCoord2f(0.5, 0.5); //rodek tekstury na rodku skrzyowania + glTexCoord2f(0.5, 0.5); //środek tekstury na środku skrzyżowania glVertex3f(oxz.x, oxz.y, oxz.z); for (i = SwitchExtension->iPoints - 1; i >= 0; --i) // for (i=0;iiPoints;++i) { glNormal3f(0, 1, 0); u = (SwitchExtension->vPoints[i].x - oxz.x) / - fTexLength; // mapowanie we wsprzdnych scenerii + fTexLength; // mapowanie we współrzędnych scenerii v = (SwitchExtension->vPoints[i].z - oxz.z) / (fTexRatio1 * fTexLength); glTexCoord2f(cosa0 * u + sina0 * v + 0.5, -sina0 * u + cosa0 * v + 0.5); glVertex3f(SwitchExtension->vPoints[i].x, SwitchExtension->vPoints[i].y, @@ -1799,22 +1799,22 @@ void TTrack::Compile(GLuint tex) } break; case 4: // McZapkie-260302 - rzeka- rendering - // Ra: rzeki na razie bez zmian, przechyki na pewno nie maj - // Ra: przemyle wyrwnanie u gry traw do czworoboku + // Ra: rzeki na razie bez zmian, przechyłki na pewno nie mają + // Ra: przemyśleć wyrównanie u góry trawą do czworoboku vector6 bpts1[numPts] = {vector6(fHTW, 0.0, 0.0), vector6(fHTW, 0.2, 0.33), vector6(-fHTW, 0.0, 0.67), vector6(-fHTW, 0.0, 1.0)}; - // Ra: dziwnie ten ksztat wyglda + // Ra: dziwnie ten kształt wygląda if (TextureID1) - if (tex ? TextureID1 == tex : true) // jeli pasuje do grupy (tex) + if (tex ? TextureID1 == tex : true) // jeśli pasuje do grupy (tex) { if (!tex) glBindTexture(GL_TEXTURE_2D, TextureID1); Segment->RenderLoft(bpts1, numPts, fTexLength); } if (TextureID2) - if (tex ? TextureID2 == tex : true) // jeli pasuje do grupy (tex) - { // brzegi rzeki prawie jak pobocze derogi, tylko inny znak ma wysoko - // znak jest zmieniany przy wczytywaniu, wic tu musi byc minus fTexHeight + if (tex ? TextureID2 == tex : true) // jeśli pasuje do grupy (tex) + { // brzegi rzeki prawie jak pobocze derogi, tylko inny znak ma wysokość + // znak jest zmieniany przy wczytywaniu, więc tu musi byc minus fTexHeight vector6 rpts1[3] = {vector6(rozp, -fTexHeight1, 0.0), vector6(fHTW + side, 0.0, 0.5), vector6(fHTW, 0.0, 1.0)}; vector6 rpts2[3] = {vector6(-fHTW, 0.0, 1.0), vector6(-fHTW - side, 0.0, 0.5), @@ -1840,7 +1840,7 @@ void TTrack::Release() void TTrack::Render() { - if (bVisible) // Ra: tory s renderowane sektorami i nie ma sensu kadorazowo liczy odlegoci + if (bVisible) // Ra: tory są renderowane sektorami i nie ma sensu każdorazowo liczyć odległości { if (!DisplayListID) { @@ -1849,16 +1849,16 @@ void TTrack::Render() ResourceManager::Register(this); }; SetLastUsage(Timer::GetSimulationTime()); - EnvironmentSet(); // owietlenie nie moe by skompilowane, bo moe si zmienia z czasem + EnvironmentSet(); // oświetlenie nie może być skompilowane, bo może się zmieniać z czasem glCallList(DisplayListID); - EnvironmentReset(); // ustawienie owietlenia na zwyke + EnvironmentReset(); // ustawienie oświetlenia na zwykłe if (InMovement()) Release(); // zwrotnica w trakcie animacji do odrysowania }; //#ifdef _DEBUG #if 0 if (DebugModeFlag && ScannedFlag) //McZapkie-230702 - //if (iNumDynamics) //bdzie kreska na zajtym torze + //if (iNumDynamics) //będzie kreska na zajętym torze { vector3 pos1,pos2,pos3; glDisable(GL_DEPTH_TEST); @@ -1892,16 +1892,16 @@ bool TTrack::CheckDynamicObject(TDynamicObject *Dynamic) }; bool TTrack::RemoveDynamicObject(TDynamicObject *Dynamic) -{ // usunicie pojazdu z listy przypisanych do toru +{ // usunięcie pojazdu z listy przypisanych do toru for (int i = 0; i < iNumDynamics; i++) { // sprawdzanie wszystkich po kolei if (Dynamic == Dynamics[i]) - { // znaleziony, przepisanie nastpnych, eby dziur nie byo + { // znaleziony, przepisanie następnych, żeby dziur nie było --iNumDynamics; for (i; i < iNumDynamics; i++) Dynamics[i] = Dynamics[i + 1]; - if (Global::iMultiplayer) // jeli multiplayer - if (!iNumDynamics) // jeli ju nie ma adnego + if (Global::iMultiplayer) // jeśli multiplayer + if (!iNumDynamics) // jeśli już nie ma żadnego if (pMyNode->asName != "none") Global::pGround->WyslijString( pMyNode->asName, 9); // przekazanie informacji o zwolnieniu toru @@ -1913,50 +1913,50 @@ bool TTrack::RemoveDynamicObject(TDynamicObject *Dynamic) } bool TTrack::InMovement() -{ // tory animowane (zwrotnica, obrotnica) maj SwitchExtension +{ // tory animowane (zwrotnica, obrotnica) mają SwitchExtension if (SwitchExtension) { if (eType == tt_Switch) - return SwitchExtension->bMovement; // ze zwrotnic atwiej + return SwitchExtension->bMovement; // ze zwrotnicą łatwiej if (eType == tt_Table) if (SwitchExtension->pModel) { if (!SwitchExtension->CurrentIndex) - return false; // 0=zablokowana si nie animuje - // trzeba kadorazowo porwnywa z ktem modelu + return false; // 0=zablokowana się nie animuje + // trzeba każdorazowo porównywać z kątem modelu TAnimContainer *ac = SwitchExtension->pModel ? SwitchExtension->pModel->GetContainer(NULL) : NULL; return ac ? (ac->AngleGet() != SwitchExtension->fOffset) || !(ac->TransGet() == SwitchExtension->vTrans) : false; - // return true; //jeli jest taki obiekt + // return true; //jeśli jest taki obiekt } } return false; }; void TTrack::RaAssign(TGroundNode *gn, TAnimContainer *ac){ - // Ra: wizanie toru z modelem obrotnicy + // Ra: wiązanie toru z modelem obrotnicy // if (eType==tt_Table) SwitchExtension->pAnim=p; }; void TTrack::RaAssign(TGroundNode *gn, TAnimModel *am, TEvent *done, TEvent *joined) -{ // Ra: wizanie toru z modelem obrotnicy +{ // Ra: wiązanie toru z modelem obrotnicy if (eType == tt_Table) { SwitchExtension->pModel = am; SwitchExtension->pMyNode = gn; - SwitchExtension->evMinus = done; // event zakoczenia animacji (zadanie nowej przedua) + SwitchExtension->evMinus = done; // event zakończenia animacji (zadanie nowej przedłuża) SwitchExtension->evPlus = - joined; // event potwierdzenia poczenia (gdy nie znajdzie, to si nie poczy) + joined; // event potwierdzenia połączenia (gdy nie znajdzie, to się nie połączy) if (am) - if (am->GetContainer(NULL)) // moe nie by? - am->GetContainer(NULL)->EventAssign(done); // zdarzenie zakoczenia animacji + if (am->GetContainer(NULL)) // może nie być? + am->GetContainer(NULL)->EventAssign(done); // zdarzenie zakończenia animacji } }; int TTrack::RaArrayPrepare() -{ // przygotowanie tablic do skopiowania do VBO (zliczanie wierzchokw) - if (bVisible) // o ile w ogle wida +{ // przygotowanie tablic do skopiowania do VBO (zliczanie wierzchołków) + if (bVisible) // o ile w ogóle widać switch (iCategoryFlag & 15) { case 1: // tor @@ -1966,12 +1966,12 @@ int TTrack::RaArrayPrepare() else // dla toru podsypka plus szyny return (Segment->RaSegCount()) * ((TextureID1 ? 48 : 0) + (TextureID2 ? 8 : 0)); case 2: // droga - if (eType == tt_Cross) // tylko dla skrzyowania drg - { // specjalny sposb obliczania liczby wierzchokw w skrzyowaniu - // int n=0; //wierzchoki wewntrzne do generowania nawierzchni - // int b=0; //wierzchoki do generowania bokw - if (fTexHeight1 >= 0) // jeli fTexHeight1<0, to s chodniki i moe ktrego nie by - { // normalne pobocze, na razie si skada z + if (eType == tt_Cross) // tylko dla skrzyżowania dróg + { // specjalny sposób obliczania liczby wierzchołków w skrzyżowaniu + // int n=0; //wierzchołki wewnętrzne do generowania nawierzchni + // int b=0; //wierzchołki do generowania boków + if (fTexHeight1 >= 0) // jeśli fTexHeight1<0, to są chodniki i może któregoś nie być + { // normalne pobocze, na razie się składa z return (Segment->RaSegCount()) * ((TextureID1 ? 4 : 0) + (TextureID2 ? 12 : 0)); } else @@ -1980,38 +1980,38 @@ int TTrack::RaArrayPrepare() (TextureID2 ? (fTexWidth != 0.0 ? 6 : 0) + (fTexSlope != 0.0 ? 6 : 0) : 0)); } - else // standardowo dla zwykej drogi - if (fTexHeight1 >= 0) // jeli fTexHeight1<0, to s chodniki i moe ktrego nie by + else // standardowo dla zwykłej drogi + if (fTexHeight1 >= 0) // jeśli fTexHeight1<0, to są chodniki i może któregoś nie być return (Segment->RaSegCount()) * - ((TextureID1 ? 4 : 0) + (TextureID2 ? 12 : 0)); // moe nie by poziomego! + ((TextureID1 ? 4 : 0) + (TextureID2 ? 12 : 0)); // może nie być poziomego! else return (Segment->RaSegCount()) * ((TextureID1 ? 4 : 0) + (TextureID2 ? (fTexWidth != 0.0 ? 6 : 0) + (fTexSlope != 0.0 ? 6 : 0) : 0)); - case 4: // rzeki do przemylenia + case 4: // rzeki do przemyślenia return (Segment->RaSegCount()) * ((TextureID1 ? 4 : 0) + (TextureID2 ? 12 : 0)); } return 0; }; void TTrack::RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start) -{ // wypenianie tablic VBO - // Ra: trzeba rozdzieli szyny od podsypki, aby mc grupowa wg tekstur +{ // wypełnianie tablic VBO + // Ra: trzeba rozdzielić szyny od podsypki, aby móc grupować wg tekstur double fHTW = 0.5 * fabs(fTrackWidth); - double side = fabs(fTexWidth); // szerok podsypki na zewntrz szyny albo pobocza - double slop = fabs(fTexSlope); // brzeg zewntrzny - double rozp = fHTW + side + slop; // brzeg zewntrzny + double side = fabs(fTexWidth); // szerokść podsypki na zewnątrz szyny albo pobocza + double slop = fabs(fTexSlope); // brzeg zewnętrzny + double rozp = fHTW + side + slop; // brzeg zewnętrzny double hypot1 = hypot(slop, fTexHeight1); // rozmiar pochylenia do liczenia normalnych if (hypot1 == 0.0) hypot1 = 1.0; vector3 normal1 = vector3(fTexSlope / hypot1, fTexHeight1 / hypot1, 0.0); // wektor normalny double fHTW2, side2, slop2, rozp2, fTexHeight2, hypot2; vector3 normal2; - if (iTrapezoid & 2) // ten bit oznacza, e istnieje odpowiednie pNext + if (iTrapezoid & 2) // ten bit oznacza, że istnieje odpowiednie pNext { // Ra: jest OK - fHTW2 = 0.5 * fabs(trNext->fTrackWidth); // poowa rozstawu/nawierzchni + fHTW2 = 0.5 * fabs(trNext->fTrackWidth); // połowa rozstawu/nawierzchni side2 = fabs(trNext->fTexWidth); - slop2 = fabs(trNext->fTexSlope); // nie jest uywane pniej + slop2 = fabs(trNext->fTexSlope); // nie jest używane później rozp2 = fHTW2 + side2 + slop2; fTexHeight2 = trNext->fTexHeight1; hypot2 = hypot(slop2, fTexHeight2); @@ -2019,7 +2019,7 @@ void TTrack::RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start) hypot2 = 1.0; normal2 = vector3(trNext->fTexSlope / hypot2, fTexHeight2 / hypot2, 0.0); } - else // gdy nie ma nastpnego albo jest nieodpowiednim kocem podpity + else // gdy nie ma następnego albo jest nieodpowiednim końcem podpięty { fHTW2 = fHTW; side2 = side; @@ -2039,7 +2039,7 @@ void TTrack::RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start) else roll1 = roll2 = 0.0; // dla zwrotnic double sin1 = sin(roll1), cos1 = cos(roll1), sin2 = sin(roll2), cos2 = cos(roll2); - // zwykla szyna: //Ra: czemu gwki s asymetryczne na wysokoci 0.140? + // zwykla szyna: //Ra: czemu główki są asymetryczne na wysokości 0.140? vector6 rpts1[24], rpts2[24], rpts3[24], rpts4[24]; int i; for (i = 0; i < 12; ++i) @@ -2053,7 +2053,7 @@ void TTrack::RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start) -szyna[i].n.x * cos1 + szyna[i].n.y * sin1, +szyna[i].n.x * sin1 + szyna[i].n.y * cos1, 0.0); } - if (iTrapezoid) // trapez albo przechyki, to oddzielne punkty na kocu + if (iTrapezoid) // trapez albo przechyłki, to oddzielne punkty na końcu for (i = 0; i < 12; ++i) { rpts1[12 + i] = vector6((fHTW2 + szyna[i].x) * cos2 + szyna[i].y * sin2, @@ -2065,37 +2065,37 @@ void TTrack::RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start) szyna[i].z, -szyna[i].n.x * cos2 + szyna[i].n.y * sin2, +szyna[i].n.x * sin2 + szyna[i].n.y * cos2, 0.0); } - switch (eType) // dalej zalenie od typu + switch (eType) // dalej zależnie od typu { - case tt_Table: // obrotnica jak zwyky tor, tylko animacja dochodzi + case tt_Table: // obrotnica jak zwykły tor, tylko animacja dochodzi SwitchExtension->iLeftVBO = Vert - Start; // indeks toru obrotnicy case tt_Normal: if (TextureID2) - { // podsypka z podkadami jest tylko dla zwykego toru - vector6 bpts1[8]; // punkty gwnej paszczyzny nie przydaj si do robienia bokw - if (fTexLength == 4.0) // jeli stare mapowanie - { // stare mapowanie z rn gstoci pikseli i oddzielnymi teksturami na kady + { // podsypka z podkładami jest tylko dla zwykłego toru + 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 - if (iTrapezoid) // trapez albo przechyki + if (iTrapezoid) // trapez albo przechyłki { // podsypka z podkladami trapezowata - // ewentualnie poprawi mapowanie, eby rodek mapowa si na 1.435/4.671 + // ewentualnie poprawić mapowanie, żeby środek mapował się na 1.435/4.671 // ((0.3464,0.6536) - // bo si tekstury podsypki rozjedaj po zmianie proporcji profilu + // bo się tekstury podsypki rozjeżdżają po zmianie proporcji profilu bpts1[0] = vector6(rozp, -fTexHeight1 - 0.18, 0.00, -0.707, 0.707, 0.0); // lewy brzeg bpts1[1] = vector6((fHTW + side) * cos1, -(fHTW + side) * sin1 - 0.18, 0.33, - -0.707, 0.707, 0.0); // krawd zaamania + -0.707, 0.707, 0.0); // krawędź załamania bpts1[2] = vector6(-bpts1[1].x, +(fHTW + side) * sin1 - 0.18, 0.67, 0.707, - 0.707, 0.0); // prawy brzeg pocztku symetrycznie + 0.707, 0.0); // prawy brzeg początku symetrycznie bpts1[3] = vector6(-rozp, -fTexHeight1 - 0.18, 1.00, 0.707, 0.707, 0.0); // prawy skos - // kocowy przekrj + // końcowy przekrój bpts1[4] = vector6(rozp2, -fTexHeight2 - 0.18, 0.00, -0.707, 0.707, 0.0); // lewy brzeg bpts1[5] = vector6((fHTW2 + side2) * cos2, -(fHTW2 + side2) * sin2 - 0.18, - 0.33, -0.707, 0.707, 0.0); // krawd zaamania + 0.33, -0.707, 0.707, 0.0); // krawędź załamania bpts1[6] = vector6(-bpts1[5].x, +(fHTW2 + side2) * sin2 - 0.18, 0.67, 0.707, - 0.707, 0.0); // prawy brzeg pocztku symetrycznie + 0.707, 0.0); // prawy brzeg początku symetrycznie bpts1[7] = vector6(-rozp2, -fTexHeight2 - 0.18, 1.00, 0.707, 0.707, 0.0); // prawy skos } @@ -2104,42 +2104,42 @@ void TTrack::RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start) bpts1[0] = vector6(rozp, -fTexHeight1 - 0.18, 0.0, -0.707, 0.707, 0.0); // lewy brzeg bpts1[1] = vector6(fHTW + side, -0.18, 0.33, -0.707, 0.707, - 0.0); // krawd zaamania + 0.0); // krawędź załamania bpts1[2] = vector6(-fHTW - side, -0.18, 0.67, 0.707, 0.707, 0.0); // druga bpts1[3] = vector6(-rozp, -fTexHeight1 - 0.18, 1.0, 0.707, 0.707, 0.0); // prawy skos } } else - { // mapowanie proporcjonalne do powierzchni, rozmiar w poprzek okrela fTexLength - double max = fTexRatio2 * fTexLength; // szeroko proporcjonalna do dugoci - double map11 = max > 0.0 ? (fHTW + side) / max : 0.25; // zaamanie od strony 1 + { // mapowanie proporcjonalne do powierzchni, rozmiar w poprzek określa fTexLength + double max = fTexRatio2 * fTexLength; // szerokość proporcjonalna do długości + double map11 = max > 0.0 ? (fHTW + side) / max : 0.25; // załamanie od strony 1 double map12 = max > 0.0 ? (fHTW + side + hypot1) / max : 0.5; // brzeg od strony 1 - if (iTrapezoid) // trapez albo przechyki + if (iTrapezoid) // trapez albo przechyłki { // podsypka z podkladami trapezowata double map21 = - max > 0.0 ? (fHTW2 + side2) / max : 0.25; // zaamanie od strony 2 + max > 0.0 ? (fHTW2 + side2) / max : 0.25; // załamanie od strony 2 double map22 = max > 0.0 ? (fHTW2 + side2 + hypot2) / max : 0.5; // brzeg od strony 2 - // ewentualnie poprawi mapowanie, eby rodek mapowa si na 1.435/4.671 + // ewentualnie poprawić mapowanie, żeby środek mapował się na 1.435/4.671 // ((0.3464,0.6536) - // bo si tekstury podsypki rozjedaj po zmianie proporcji profilu + // bo się tekstury podsypki rozjeżdżają po zmianie proporcji profilu bpts1[0] = vector6(rozp, -fTexHeight1 - 0.18, 0.5 - map12, normal1.x, -normal1.y, 0.0); // lewy brzeg bpts1[1] = vector6((fHTW + side) * cos1, -(fHTW + side) * sin1 - 0.18, - 0.5 - map11, 0.0, 1.0, 0.0); // krawd zaamania + 0.5 - map11, 0.0, 1.0, 0.0); // krawędź załamania bpts1[2] = vector6(-bpts1[1].x, +(fHTW + side) * sin1 - 0.18, 0.5 + map11, - 0.0, 1.0, 0.0); // prawy brzeg pocztku symetrycznie + 0.0, 1.0, 0.0); // prawy brzeg początku symetrycznie bpts1[3] = vector6(-rozp, -fTexHeight1 - 0.18, 0.5 + map12, -normal1.x, -normal1.y, 0.0); // prawy skos - // przekrj kocowy + // przekrój końcowy bpts1[4] = vector6(rozp2, -fTexHeight2 - 0.18, 0.5 - map22, normal2.x, -normal2.y, 0.0); // lewy brzeg bpts1[5] = vector6((fHTW2 + side2) * cos2, -(fHTW2 + side2) * sin2 - 0.18, - 0.5 - map21, 0.0, 1.0, 0.0); // krawd zaamania + 0.5 - map21, 0.0, 1.0, 0.0); // krawędź załamania bpts1[6] = vector6(-bpts1[5].x, +(fHTW2 + side2) * sin2 - 0.18, 0.5 + map21, - 0.0, 1.0, 0.0); // prawy brzeg pocztku symetrycznie + 0.0, 1.0, 0.0); // prawy brzeg początku symetrycznie bpts1[7] = vector6(-rozp2, -fTexHeight2 - 0.18, 0.5 + map22, -normal2.x, -normal2.y, 0.0); // prawy skos } @@ -2148,7 +2148,7 @@ void TTrack::RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start) bpts1[0] = vector6(rozp, -fTexHeight1 - 0.18, 0.5 - map12, +normal1.x, -normal1.y, 0.0); // lewy brzeg bpts1[1] = vector6(fHTW + side, -0.18, 0.5 - map11, +normal1.x, -normal1.y, - 0.0); // krawd zaamania + 0.0); // krawędź załamania bpts1[2] = vector6(-fHTW - side, -0.18, 0.5 + map11, -normal1.x, -normal1.y, 0.0); // druga bpts1[3] = vector6(-rozp, -fTexHeight1 - 0.18, 0.5 + map12, -normal1.x, @@ -2158,7 +2158,7 @@ void TTrack::RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start) Segment->RaRenderLoft(Vert, bpts1, iTrapezoid ? -4 : 4, fTexLength); } if (TextureID1) - { // szyny - generujemy dwie, najwyej rysowa si bdzie jedn + { // szyny - generujemy dwie, najwyżej rysować się będzie jedną Segment->RaRenderLoft(Vert, rpts1, iTrapezoid ? -nnumPts : nnumPts, fTexLength); Segment->RaRenderLoft(Vert, rpts2, iTrapezoid ? -nnumPts : nnumPts, fTexLength); } @@ -2197,53 +2197,53 @@ void TTrack::RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start) SwitchExtension->Segments[1]->RaRenderLoft(Vert, rpts2, nnumPts, fTexLength, 2); } else - { // lewa dziaa lepiej ni prawa + { // lewa działa lepiej niż prawa SwitchExtension->Segments[0]->RaRenderLoft( - Vert, rpts1, nnumPts, fTexLength); // lewa szyna normalna caa + Vert, rpts1, nnumPts, fTexLength); // lewa szyna normalna cała SwitchExtension->iLeftVBO = Vert - Start; // indeks lewej iglicy SwitchExtension->Segments[0]->RaRenderLoft( Vert, rpts4, -nnumPts, fTexLength, 0, 2, -SwitchExtension->fOffset2); // prawa iglica SwitchExtension->Segments[0]->RaRenderLoft(Vert, rpts2, nnumPts, fTexLength, - 2); // prawa szyna za iglic + 2); // prawa szyna za iglicą SwitchExtension->iRightVBO = Vert - Start; // indeks prawej iglicy SwitchExtension->Segments[1]->RaRenderLoft( Vert, rpts3, -nnumPts, fTexLength, 0, 2, fMaxOffset - SwitchExtension->fOffset1); // lewa iglica SwitchExtension->Segments[1]->RaRenderLoft(Vert, rpts1, nnumPts, fTexLength, - 2); // lewa szyna za iglic + 2); // lewa szyna za iglicą SwitchExtension->Segments[1]->RaRenderLoft( - Vert, rpts2, nnumPts, fTexLength); // prawa szyna normalnie caa + Vert, rpts2, nnumPts, fTexLength); // prawa szyna normalnie cała } } break; } - } // koniec obsugi torw + } // koniec obsługi torów break; case 2: // McZapkie-260302 - droga - rendering - switch (eType) // dalej zalenie od typu + switch (eType) // dalej zależnie od typu { - case tt_Normal: // drogi proste, bo skrzyowania osobno + case tt_Normal: // drogi proste, bo skrzyżowania osobno { - vector6 bpts1[4]; // punkty gwnej paszczyzny przydaj si do robienia bokw - if (TextureID1 || TextureID2) // punkty si przydadz, nawet jeli nawierzchni nie ma + vector6 bpts1[4]; // punkty głównej płaszczyzny przydają się do robienia boków + if (TextureID1 || TextureID2) // punkty się przydadzą, nawet jeśli nawierzchni nie ma { // double max=2.0*(fHTW>fHTW2?fHTW:fHTW2); //z szerszej strony jest 100% double max = (iCategoryFlag & 4) ? 0.0 : - fTexLength; // test: szeroko drg proporcjonalna do dugoci - double map1 = max > 0.0 ? fHTW / max : 0.5; // obcicie tekstury od strony 1 - double map2 = max > 0.0 ? fHTW2 / max : 0.5; // obcicie tekstury od strony 2 - if (iTrapezoid) // trapez albo przechyki + fTexLength; // test: szerokość dróg proporcjonalna do długości + double map1 = max > 0.0 ? fHTW / max : 0.5; // obcięcie tekstury od strony 1 + double map2 = max > 0.0 ? fHTW2 / max : 0.5; // obcięcie tekstury od strony 2 + if (iTrapezoid) // trapez albo przechyłki { // nawierzchnia trapezowata Segment->GetRolls(roll1, roll2); bpts1[0] = vector6(fHTW * cos(roll1), -fHTW * sin(roll1), - 0.5 - map1); // lewy brzeg pocztku + 0.5 - map1); // lewy brzeg początku bpts1[1] = vector6(-bpts1[0].x, -bpts1[0].y, - 0.5 + map1); // prawy brzeg pocztku symetrycznie + 0.5 + map1); // prawy brzeg początku symetrycznie bpts1[2] = vector6(fHTW2 * cos(roll2), -fHTW2 * sin(roll2), - 0.5 - map2); // lewy brzeg koca + 0.5 - map2); // lewy brzeg końca bpts1[3] = vector6(-bpts1[2].x, -bpts1[2].y, - 0.5 + map2); // prawy brzeg pocztku symetrycznie + 0.5 + map2); // prawy brzeg początku symetrycznie } else { @@ -2251,32 +2251,32 @@ void TTrack::RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start) bpts1[1] = vector6(-fHTW, 0.0, 0.5 + map1); } } - if (TextureID1) // jeli podana bya tekstura, generujemy trjkty - { // tworzenie trjktw nawierzchni szosy + if (TextureID1) // jeśli podana była tekstura, generujemy trójkąty + { // tworzenie trójkątów nawierzchni szosy Segment->RaRenderLoft(Vert, bpts1, iTrapezoid ? -2 : 2, fTexLength); } if (TextureID2) - { // pobocze drogi - poziome przy przechyce (a moe krawnik i chodnik zrobi jak w + { // pobocze drogi - poziome przy przechyłce (a może krawężnik i chodnik zrobić jak w // Midtown Madness 2?) vector6 rpts1[6], - rpts2[6]; // wsprzdne przekroju i mapowania dla prawej i lewej strony + rpts2[6]; // współrzędne przekroju i mapowania dla prawej i lewej strony if (fTexHeight1 >= 0.0) - { // standardowo: od zewntrz pochylenie, a od wewntrz poziomo + { // 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 krawd zaamania + vector6(bpts1[0].x + side, bpts1[0].y, 0.5), // lewa krawędź załamania rpts1[2] = vector6(bpts1[0].x, bpts1[0].y, - 1.0); // lewy brzeg pobocza (mapowanie moe by inne + 1.0); // lewy brzeg pobocza (mapowanie może być inne rpts2[0] = vector6(bpts1[1].x, bpts1[1].y, 1.0); // prawy brzeg pobocza rpts2[1] = - vector6(bpts1[1].x - side, bpts1[1].y, 0.5); // prawa krawd zaamania + vector6(bpts1[1].x - side, bpts1[1].y, 0.5); // prawa krawędź załamania rpts2[2] = vector6(-rozp, -fTexHeight1, 0.0); // prawy brzeg podstawy - if (iTrapezoid) // trapez albo przechyki + if (iTrapezoid) // trapez albo przechyłki { // pobocza do trapezowatej nawierzchni - dodatkowe punkty z drugiej strony // odcinka rpts1[3] = vector6(rozp2, -fTexHeight2, 0.0); // lewy brzeg lewego pobocza - rpts1[4] = vector6(bpts1[2].x + side2, bpts1[2].y, 0.5); // krawd - // zaamania + rpts1[4] = vector6(bpts1[2].x + side2, bpts1[2].y, 0.5); // krawędź + // 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); @@ -2286,62 +2286,62 @@ void TTrack::RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start) Segment->RaRenderLoft(Vert, rpts2, -3, fTexLength); } else - { // pobocza zwyke, brak przechyki + { // pobocza zwykłe, brak przechyłki Segment->RaRenderLoft(Vert, rpts1, 3, fTexLength); Segment->RaRenderLoft(Vert, rpts2, 3, fTexLength); } } else - { // wersja dla chodnika: skos 1:3.75, kady chodnik innej szerokoci - // mapowanie propocjonalne do szerokoci chodnika - // krawnik jest mapowany od 31/64 do 32/64 lewy i od 32/64 do 33/64 prawy + { // wersja dla chodnika: skos 1:3.75, każdy chodnik innej szerokości + // mapowanie propocjonalne do szerokości chodnika + // krawężnik jest mapowany od 31/64 do 32/64 lewy i od 32/64 do 33/64 prawy double d = - -fTexHeight1 / 3.75; // krawnik o wysokoci 150mm jest pochylony 40mm + -fTexHeight1 / 3.75; // krawężnik o wysokości 150mm jest pochylony 40mm double max = - fTexRatio2 * fTexLength; // test: szeroko proporcjonalna do dugoci + fTexRatio2 * fTexLength; // test: szerokość proporcjonalna do długości double map1l = max > 0.0 ? side / max : - 0.484375; // obcicie tekstury od lewej strony punktu 1 + 0.484375; // obcięcie tekstury od lewej strony punktu 1 double map1r = max > 0.0 ? slop / max : - 0.484375; // obcicie tekstury od prawej strony punktu 1 + 0.484375; // obcięcie tekstury od prawej strony punktu 1 double h1r = (slop > d) ? -fTexHeight1 : 0; double h1l = (side > d) ? -fTexHeight1 : 0; rpts1[0] = vector6(bpts1[0].x + slop, bpts1[0].y + h1r, 0.515625 + map1r); // prawy brzeg prawego chodnika rpts1[1] = vector6(bpts1[0].x + d, bpts1[0].y + h1r, - 0.515625); // prawy krawnik u gry + 0.515625); // prawy krawężnik u góry rpts1[2] = vector6(bpts1[0].x, bpts1[0].y, - 0.515625 - d / 2.56); // prawy krawnik u dou + 0.515625 - d / 2.56); // prawy krawężnik u dołu rpts2[0] = vector6(bpts1[1].x, bpts1[1].y, - 0.484375 + d / 2.56); // lewy krawnik u dou + 0.484375 + d / 2.56); // lewy krawężnik u dołu rpts2[1] = vector6(bpts1[1].x - d, bpts1[1].y + h1l, - 0.484375); // lewy krawnik u gry + 0.484375); // lewy krawężnik u góry rpts2[2] = vector6(bpts1[1].x - side, bpts1[1].y + h1l, 0.484375 - map1l); // lewy brzeg lewego chodnika - if (iTrapezoid) // trapez albo przechyki + if (iTrapezoid) // trapez albo przechyłki { // pobocza do trapezowatej nawierzchni - dodatkowe punkty z drugiej strony // odcinka slop2 = - fabs((iTrapezoid & 2) ? slop2 : slop); // szeroko chodnika po prawej + fabs((iTrapezoid & 2) ? slop2 : slop); // szerokość chodnika po prawej double map2l = max > 0.0 ? side2 / max : - 0.484375; // obcicie tekstury od lewej strony punktu 2 + 0.484375; // obcięcie tekstury od lewej strony punktu 2 double map2r = max > 0.0 ? slop2 / max : - 0.484375; // obcicie tekstury od prawej strony punktu 2 + 0.484375; // obcięcie tekstury od prawej strony punktu 2 double h2r = (slop2 > d) ? -fTexHeight2 : 0; double h2l = (side2 > d) ? -fTexHeight2 : 0; rpts1[3] = vector6(bpts1[2].x + slop2, bpts1[2].y + h2r, 0.515625 + map2r); // prawy brzeg prawego chodnika rpts1[4] = vector6(bpts1[2].x + d, bpts1[2].y + h2r, - 0.515625); // prawy krawnik u gry + 0.515625); // prawy krawężnik u góry rpts1[5] = vector6(bpts1[2].x, bpts1[2].y, - 0.515625 - d / 2.56); // prawy krawnik u dou + 0.515625 - d / 2.56); // prawy krawężnik u dołu rpts2[3] = vector6(bpts1[3].x, bpts1[3].y, - 0.484375 + d / 2.56); // lewy krawnik u dou + 0.484375 + d / 2.56); // lewy krawężnik u dołu rpts2[4] = vector6(bpts1[3].x - d, bpts1[3].y + h2l, - 0.484375); // lewy krawnik u gry + 0.484375); // lewy krawężnik u góry rpts2[5] = vector6(bpts1[3].x - side2, bpts1[3].y + h2l, 0.484375 - map2l); // lewy brzeg lewego chodnika if (slop != 0.0) @@ -2350,7 +2350,7 @@ void TTrack::RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start) Segment->RaRenderLoft(Vert, rpts2, -3, fTexLength); } else - { // pobocza zwyke, brak przechyki + { // pobocza zwykłe, brak przechyłki if (slop != 0.0) Segment->RaRenderLoft(Vert, rpts1, 3, fTexLength); if (side != 0.0) @@ -2361,30 +2361,30 @@ void TTrack::RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start) } } break; - case 4: // Ra: rzeki na razie jak drogi, przechyki na pewno nie maj - switch (eType) // dalej zalenie od typu + case 4: // Ra: rzeki na razie jak drogi, przechyłki na pewno nie mają + switch (eType) // dalej zależnie od typu { - case tt_Normal: // drogi proste, bo skrzyowania osobno + case tt_Normal: // drogi proste, bo skrzyżowania osobno { - vector6 bpts1[4]; // punkty gwnej paszczyzny przydaj si do robienia bokw - if (TextureID1 || TextureID2) // punkty si przydadz, nawet jeli nawierzchni nie ma + vector6 bpts1[4]; // punkty głównej płaszczyzny przydają się do robienia boków + if (TextureID1 || TextureID2) // punkty się przydadzą, nawet jeśli nawierzchni nie ma { // double max=2.0*(fHTW>fHTW2?fHTW:fHTW2); //z szerszej strony jest 100% double max = (iCategoryFlag & 4) ? 0.0 : - fTexLength; // test: szeroko drg proporcjonalna do dugoci - double map1 = max > 0.0 ? fHTW / max : 0.5; // obcicie tekstury od strony 1 - double map2 = max > 0.0 ? fHTW2 / max : 0.5; // obcicie tekstury od strony 2 - if (iTrapezoid) // trapez albo przechyki + fTexLength; // test: szerokość dróg proporcjonalna do długości + double map1 = max > 0.0 ? fHTW / max : 0.5; // obcięcie tekstury od strony 1 + double map2 = max > 0.0 ? fHTW2 / max : 0.5; // obcięcie tekstury od strony 2 + if (iTrapezoid) // trapez albo przechyłki { // nawierzchnia trapezowata Segment->GetRolls(roll1, roll2); bpts1[0] = vector6(fHTW * cos(roll1), -fHTW * sin(roll1), - 0.5 - map1); // lewy brzeg pocztku + 0.5 - map1); // lewy brzeg początku bpts1[1] = vector6(-bpts1[0].x, -bpts1[0].y, - 0.5 + map1); // prawy brzeg pocztku symetrycznie + 0.5 + map1); // prawy brzeg początku symetrycznie bpts1[2] = vector6(fHTW2 * cos(roll2), -fHTW2 * sin(roll2), - 0.5 - map2); // lewy brzeg koca + 0.5 - map2); // lewy brzeg końca bpts1[3] = vector6(-bpts1[2].x, -bpts1[2].y, - 0.5 + map2); // prawy brzeg pocztku symetrycznie + 0.5 + map2); // prawy brzeg początku symetrycznie } else { @@ -2392,26 +2392,26 @@ void TTrack::RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start) bpts1[1] = vector6(-fHTW, 0.0, 0.5 + map1); } } - if (TextureID1) // jeli podana bya tekstura, generujemy trjkty - { // tworzenie trjktw nawierzchni szosy + if (TextureID1) // jeśli podana była tekstura, generujemy trójkąty + { // tworzenie trójkątów nawierzchni szosy Segment->RaRenderLoft(Vert, bpts1, iTrapezoid ? -2 : 2, fTexLength); } if (TextureID2) - { // pobocze drogi - poziome przy przechyce (a moe krawnik i chodnik zrobi jak w + { // pobocze drogi - poziome przy przechyłce (a może krawężnik i chodnik zrobić jak w // Midtown Madness 2?) vector6 rpts1[6], - rpts2[6]; // wsprzdne przekroju i mapowania dla prawej i lewej strony + rpts2[6]; // współrzędne przekroju i mapowania dla prawej i lewej strony rpts1[0] = vector6(rozp, -fTexHeight1, 0.0); // lewy brzeg podstawy - rpts1[1] = vector6(bpts1[0].x + side, bpts1[0].y, 0.5), // lewa krawd zaamania + rpts1[1] = vector6(bpts1[0].x + side, bpts1[0].y, 0.5), // lewa krawędź załamania rpts1[2] = vector6(bpts1[0].x, bpts1[0].y, - 1.0); // lewy brzeg pobocza (mapowanie moe by inne + 1.0); // lewy brzeg pobocza (mapowanie może być inne rpts2[0] = vector6(bpts1[1].x, bpts1[1].y, 1.0); // prawy brzeg pobocza - rpts2[1] = vector6(bpts1[1].x - side, bpts1[1].y, 0.5); // prawa krawd zaamania + rpts2[1] = vector6(bpts1[1].x - side, bpts1[1].y, 0.5); // prawa krawędź załamania rpts2[2] = vector6(-rozp, -fTexHeight1, 0.0); // prawy brzeg podstawy - if (iTrapezoid) // trapez albo przechyki + if (iTrapezoid) // trapez albo przechyłki { // pobocza do trapezowatej nawierzchni - dodatkowe punkty z drugiej strony odcinka rpts1[3] = vector6(rozp2, -fTexHeight2, 0.0); // lewy brzeg lewego pobocza - rpts1[4] = vector6(bpts1[2].x + side2, bpts1[2].y, 0.5); // krawd zaamania + rpts1[4] = vector6(bpts1[2].x + side2, bpts1[2].y, 0.5); // krawędź 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); @@ -2420,7 +2420,7 @@ void TTrack::RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start) Segment->RaRenderLoft(Vert, rpts2, -3, fTexLength); } else - { // pobocza zwyke, brak przechyki + { // pobocza zwykłe, brak przechyłki Segment->RaRenderLoft(Vert, rpts1, 3, fTexLength); Segment->RaRenderLoft(Vert, rpts2, 3, fTexLength); } @@ -2432,8 +2432,8 @@ void TTrack::RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start) }; void TTrack::RaRenderVBO(int iPtr) -{ // renderowanie z uyciem VBO - // Ra 2014-07: trzeba wymieni GL_TRIANGLE_STRIP na GL_TRIANGLES i renderowa trjkty sektora +{ // renderowanie z użyciem VBO + // Ra 2014-07: trzeba wymienić GL_TRIANGLE_STRIP na GL_TRIANGLES i renderować trójkąty sektora // dla kolejnych tekstur! EnvironmentSet(); int seg; @@ -2449,10 +2449,10 @@ void TTrack::RaRenderVBO(int iPtr) glBindTexture(GL_TEXTURE_2D, TextureID1); // szyny + for (i = 0; i < seg; ++i) glDrawArrays(GL_TRIANGLE_STRIP, iPtr + 24 * i, 24); - iPtr += 24 * seg; // pominicie lewej szyny + iPtr += 24 * seg; // pominięcie lewej szyny for (i = 0; i < seg; ++i) glDrawArrays(GL_TRIANGLE_STRIP, iPtr + 24 * i, 24); - iPtr += 24 * seg; // pominicie prawej szyny + iPtr += 24 * seg; // pominięcie prawej szyny } if (TextureID2) if ((seg = SwitchExtension->Segments[1]->RaSegCount()) > 0) @@ -2460,7 +2460,7 @@ void TTrack::RaRenderVBO(int iPtr) glBindTexture(GL_TEXTURE_2D, TextureID2); // szyny - for (i = 0; i < seg; ++i) glDrawArrays(GL_TRIANGLE_STRIP, iPtr + 24 * i, 24); - iPtr += 24 * seg; // pominicie lewej szyny + iPtr += 24 * seg; // pominięcie lewej szyny for (i = 0; i < seg; ++i) glDrawArrays(GL_TRIANGLE_STRIP, iPtr + 24 * i, 24); } @@ -2474,14 +2474,14 @@ void TTrack::RaRenderVBO(int iPtr) glBindTexture(GL_TEXTURE_2D, TextureID2); // podsypka for (i = 0; i < seg; ++i) glDrawArrays(GL_TRIANGLE_STRIP, iPtr + 8 * i, 8); - iPtr += 8 * seg; // pominicie podsypki + iPtr += 8 * seg; // pominięcie podsypki } if (TextureID1) { glBindTexture(GL_TEXTURE_2D, TextureID1); // szyny for (i = 0; i < seg; ++i) glDrawArrays(GL_TRIANGLE_STRIP, iPtr + 24 * i, 24); - iPtr += 24 * seg; // pominicie lewej szyny + iPtr += 24 * seg; // pominięcie lewej szyny for (i = 0; i < seg; ++i) glDrawArrays(GL_TRIANGLE_STRIP, iPtr + 24 * i, 24); } @@ -2507,17 +2507,17 @@ void TTrack::RaRenderVBO(int iPtr) { // normalna droga z poboczem for (i = 0; i < seg; ++i) glDrawArrays(GL_TRIANGLE_STRIP, iPtr + 6 * i, 6); - iPtr += 6 * seg; // pominicie lewego pobocza + iPtr += 6 * seg; // pominięcie lewego pobocza for (i = 0; i < seg; ++i) glDrawArrays(GL_TRIANGLE_STRIP, iPtr + 6 * i, 6); } else - { // z chodnikami o rnych szerokociach + { // z chodnikami o różnych szerokociach if (fTexWidth != 0.0) { for (i = 0; i < seg; ++i) glDrawArrays(GL_TRIANGLE_STRIP, iPtr + 6 * i, 6); - iPtr += 6 * seg; // pominicie lewego pobocza + iPtr += 6 * seg; // pominięcie lewego pobocza } if (fTexSlope != 0.0) for (i = 0; i < seg; ++i) @@ -2526,7 +2526,7 @@ void TTrack::RaRenderVBO(int iPtr) } } break; - case 4: // rzeki - jeszcze do przemylenia + case 4: // rzeki - jeszcze do przemyślenia if ((seg = Segment->RaSegCount()) > 0) { if (TextureID1) @@ -2543,7 +2543,7 @@ void TTrack::RaRenderVBO(int iPtr) glBindTexture(GL_TEXTURE_2D, TextureID2); // pobocze for (i = 0; i < seg; ++i) glDrawArrays(GL_TRIANGLE_STRIP, iPtr + 6 * i, 6); - iPtr += 6 * seg; // pominicie lewego pobocza + iPtr += 6 * seg; // pominięcie lewego pobocza for (i = 0; i < seg; ++i) glDrawArrays(GL_TRIANGLE_STRIP, iPtr + 6 * i, 6); } @@ -2554,7 +2554,7 @@ void TTrack::RaRenderVBO(int iPtr) }; void TTrack::EnvironmentSet() -{ // ustawienie zmienionego wiata +{ // ustawienie zmienionego światła glColor3f(1.0f, 1.0f, 1.0f); // Ra: potrzebne to? if (eEnvironment) { // McZapkie-310702: zmiana oswietlenia w tunelu, wykopie @@ -2562,7 +2562,7 @@ void TTrack::EnvironmentSet() GLfloat diffuseLight[4] = {0.5f, 0.5f, 0.5f, 1.0f}; GLfloat specularLight[4] = {0.5f, 0.5f, 0.5f, 1.0f}; switch (eEnvironment) - { // modyfikacje owietlenia zalenie od rodowiska + { // modyfikacje oświetlenia zależnie od środowiska case e_canyon: for (int li = 0; li < 3; li++) { @@ -2590,9 +2590,9 @@ void TTrack::EnvironmentSet() }; void TTrack::EnvironmentReset() -{ // przywrcenie domylnego wiata +{ // przywrócenie domyślnego światła switch (eEnvironment) - { // przywrcenie globalnych ustawie wiata, o ile byo zmienione + { // przywrócenie globalnych ustawień światła, o ile było zmienione case e_canyon: // wykop case e_tunnel: // tunel glLightfv(GL_LIGHT0, GL_AMBIENT, Global::ambientDayLight); @@ -2602,33 +2602,33 @@ void TTrack::EnvironmentReset() }; void TTrack::RenderDyn() -{ // renderowanie nieprzezroczystych fragmentw pojazdw +{ // renderowanie nieprzezroczystych fragmentów pojazdów if (!iNumDynamics) - return; // po co kombinowa, jeli nie ma pojazdw? - // EnvironmentSet(); //Ra: pojazdy sobie same teraz licz cienie + return; // po co kombinować, jeśli nie ma pojazdów? + // EnvironmentSet(); //Ra: pojazdy sobie same teraz liczą cienie for (int i = 0; i < iNumDynamics; i++) Dynamics[i]->Render(); // sam sprawdza, czy VBO; zmienia kontekst VBO! // EnvironmentReset(); }; void TTrack::RenderDynAlpha() -{ // renderowanie przezroczystych fragmentw pojazdw +{ // renderowanie przezroczystych fragmentów pojazdów if (!iNumDynamics) - return; // po co kombinowa, jeli nie ma pojazdw? - // EnvironmentSet(); //Ra: pojazdy sobie same teraz licz cienie + return; // po co kombinować, jeśli nie ma pojazdów? + // EnvironmentSet(); //Ra: pojazdy sobie same teraz liczą cienie for (int i = 0; i < iNumDynamics; i++) Dynamics[i]->RenderAlpha(); // sam sprawdza, czy VBO; zmienia kontekst VBO! // EnvironmentReset(); }; void TTrack::RenderDynSounds() -{ // odtwarzanie dwikw pojazdw jest niezalene od ich wywietlania +{ // odtwarzanie dźwięków pojazdów jest niezależne od ich wyświetlania for (int i = 0; i < iNumDynamics; i++) Dynamics[i]->RenderSounds(); }; //--------------------------------------------------------------------------- bool TTrack::SetConnections(int i) -{ // przepisanie aktualnych pocze toru do odpowiedniego segmentu +{ // przepisanie aktualnych połączeń toru do odpowiedniego segmentu if (SwitchExtension) { SwitchExtension->pNexts[i] = trNext; @@ -2636,7 +2636,7 @@ bool TTrack::SetConnections(int i) SwitchExtension->iNextDirection[i] = iNextDirection; SwitchExtension->iPrevDirection[i] = iPrevDirection; if (eType == tt_Switch) - { // zwrotnica jest wycznie w punkcie 1, wic tor od strony Prev jest zawsze ten sam + { // zwrotnica jest wyłącznie w punkcie 1, więc tor od strony Prev jest zawsze ten sam SwitchExtension->pPrevs[i ^ 1] = trPrev; SwitchExtension->iPrevDirection[i ^ 1] = iPrevDirection; } @@ -2645,7 +2645,7 @@ bool TTrack::SetConnections(int i) { } if (i) - Switch(0); // po przypisaniu w punkcie 4 wczy stan zasadniczy + Switch(0); // po przypisaniu w punkcie 4 włączyć stan zasadniczy return true; } Error("Cannot set connections"); @@ -2653,92 +2653,92 @@ bool TTrack::SetConnections(int i) } bool TTrack::Switch(int i, double t, double d) -{ // przeczenie torw z uruchomieniem animacji - if (SwitchExtension) // tory przeczalne maj doklejk +{ // przełączenie torów z uruchomieniem animacji + if (SwitchExtension) // tory przełączalne mają doklejkę if (eType == tt_Switch) - { // przekadanie zwrotnicy jak zwykle - if (t > 0.0) // prdko liniowa ruchu iglic - SwitchExtension->fOffsetSpeed = t; // prdko atwiej zgra z animacj modelu - if (d >= 0.0) // dodatkowy ruch drugiej iglicy (zamknicie nastawnicze) + { // przekładanie zwrotnicy jak zwykle + if (t > 0.0) // prędkość liniowa ruchu iglic + SwitchExtension->fOffsetSpeed = t; // prędkość łatwiej zgrać z animacją modelu + if (d >= 0.0) // dodatkowy ruch drugiej iglicy (zamknięcie nastawnicze) SwitchExtension->fOffsetDelay = d; - i &= 1; // ograniczenie bdw !!!! + i &= 1; // ograniczenie błędów !!!! SwitchExtension->fDesiredOffset = i ? fMaxOffset + SwitchExtension->fOffsetDelay : -SwitchExtension->fOffsetDelay; SwitchExtension->CurrentIndex = i; Segment = SwitchExtension->Segments[i]; // wybranie aktywnej drogi - potrzebne to? - trNext = SwitchExtension->pNexts[i]; // przeczenie kocw + trNext = SwitchExtension->pNexts[i]; // przełączenie końców trPrev = SwitchExtension->pPrevs[i]; iNextDirection = SwitchExtension->iNextDirection[i]; iPrevDirection = SwitchExtension->iPrevDirection[i]; fRadius = fRadiusTable[i]; // McZapkie: wybor promienia toru if (SwitchExtension->fVelocity <= - -2) //-1 oznacza maksymaln prdko, a dalsze ujemne to ograniczenie na bok + -2) //-1 oznacza maksymalną prędkość, a dalsze ujemne to ograniczenie na bok fVelocity = i ? -SwitchExtension->fVelocity : -1; if (SwitchExtension->pOwner ? SwitchExtension->pOwner->RaTrackAnimAdd(this) : - true) // jeli nie dodane do animacji - { // nie ma si co bawi + true) // jeśli nie dodane do animacji + { // nie ma się co bawić SwitchExtension->fOffset = SwitchExtension->fDesiredOffset; - RaAnimate(); // przeliczenie pooenia iglic; czy zadziaa na niewywietlanym + RaAnimate(); // przeliczenie położenia iglic; czy zadziała na niewyświetlanym // sektorze w VBO? } return true; } else if (eType == tt_Table) - { // blokowanie (0, szukanie torw) lub odblokowanie (1, rozczenie) obrotnicy + { // blokowanie (0, szukanie torów) lub odblokowanie (1, rozłączenie) obrotnicy if (i) - { // 0: rozczenie ssiednich torw od obrotnicy - if (trPrev) // jeli jest tor od Point1 obrotnicy - if (iPrevDirection) // 0:doczony Point1, 1:doczony Point2 - trPrev->trNext = NULL; // rozczamy od Point2 + { // 0: rozłączenie sąsiednich torów od obrotnicy + if (trPrev) // jeśli jest tor od Point1 obrotnicy + if (iPrevDirection) // 0:dołączony Point1, 1:dołączony Point2 + trPrev->trNext = NULL; // rozłączamy od Point2 else - trPrev->trPrev = NULL; // rozczamy od Point1 - if (trNext) // jeli jest tor od Point2 obrotnicy - if (iNextDirection) // 0:doczony Point1, 1:doczony Point2 - trNext->trNext = NULL; // rozczamy od Point2 + trPrev->trPrev = NULL; // rozłączamy od Point1 + if (trNext) // jeśli jest tor od Point2 obrotnicy + if (iNextDirection) // 0:dołączony Point1, 1:dołączony Point2 + trNext->trNext = NULL; // rozłączamy od Point2 else - trNext->trPrev = NULL; // rozczamy od Point1 + trNext->trPrev = NULL; // rozłączamy od Point1 trNext = trPrev = - NULL; // na kocu rozczamy obrotnic (wkaniki do ssiadw ju niepotrzebne) - fVelocity = 0.0; // AI, nie ruszaj si! + NULL; // na końcu rozłączamy obrotnicę (wkaźniki do sąsiadów już niepotrzebne) + fVelocity = 0.0; // AI, nie ruszaj się! if (SwitchExtension->pOwner) SwitchExtension->pOwner->RaTrackAnimAdd(this); // dodanie do listy animacyjnej } else - { // 1: ustalenie finalnego pooenia (gdy nie byo animacji) + { // 1: ustalenie finalnego położenia (gdy nie było animacji) RaAnimate(); // ostatni etap animowania - // zablokowanie pozycji i poczenie do ssiednich torw + // zablokowanie pozycji i połączenie do sąsiednich torów Global::pGround->TrackJoin(SwitchExtension->pMyNode); if (trNext || trPrev) { fVelocity = 6.0; // jazda dozwolona if (trPrev) if (trPrev->fVelocity == - 0.0) // ustawienie 0 da moliwo zatrzymania AI na obrotnicy - trPrev->VelocitySet(6.0); // odblokowanie doczonego toru do jazdy + 0.0) // ustawienie 0 da możliwość zatrzymania AI na obrotnicy + trPrev->VelocitySet(6.0); // odblokowanie dołączonego toru do jazdy if (trNext) if (trNext->fVelocity == 0.0) trNext->VelocitySet(6.0); - if (SwitchExtension->evPlus) // w starych sceneriach moe nie by + if (SwitchExtension->evPlus) // w starych sceneriach może nie być Global::AddToQuery(SwitchExtension->evPlus, NULL); // potwierdzenie wykonania (np. odpala WZ) } } - SwitchExtension->CurrentIndex = i; // zapamitanie stanu zablokowania + SwitchExtension->CurrentIndex = i; // zapamiętanie stanu zablokowania return true; } else if (eType == tt_Cross) - { // to jest przydatne tylko do czenia odcinkw + { // to jest przydatne tylko do łączenia odcinków i &= 1; SwitchExtension->CurrentIndex = i; Segment = SwitchExtension->Segments[i]; // wybranie aktywnej drogi - potrzebne to? - trNext = SwitchExtension->pNexts[i]; // przeczenie kocw + trNext = SwitchExtension->pNexts[i]; // przełączenie końców trPrev = SwitchExtension->pPrevs[i]; iNextDirection = SwitchExtension->iNextDirection[i]; iPrevDirection = SwitchExtension->iPrevDirection[i]; return true; } if (iCategoryFlag == 1) - iDamageFlag = (iDamageFlag & 127) + 128 * (i & 1); // przeczanie wykolejenia + iDamageFlag = (iDamageFlag & 127) + 128 * (i & 1); // przełączanie wykolejenia else Error("Cannot switch normal track"); return false; @@ -2762,19 +2762,19 @@ bool TTrack::SwitchForced(int i, TDynamicObject *o) Global::AddToQuery(SwitchExtension->evMinus, o); // dodanie do kolejki break; } - Switch(i); // jeli si tu nie przeczy, to kady pojazd powtrzy event rozrprucia + Switch(i); // jeśli się tu nie przełączy, to każdy pojazd powtórzy event rozrprucia } } else if (eType == tt_Cross) - { // ustawienie wskanika na wskazany segment + { // ustawienie wskaźnika na wskazany segment Segment = SwitchExtension->Segments[i]; } return true; }; int TTrack::CrossSegment(int from, int into) -{ // ustawienie wskanika na segement w podanym kierunku (into) od strony (from) - // zwraca kod segmentu, z kierunkiem jazdy jako znakiem +{ // ustawienie wskaźnika na segement w pożądanym kierunku (into) od strony (from) + // zwraca kod segmentu, z kierunkiem jazdy jako znakiem ± int i = 0; switch (into) { @@ -2813,21 +2813,21 @@ void TTrack::RaAnimListAdd(TTrack *t) if (SwitchExtension->pNextAnim) { if (SwitchExtension->pNextAnim == t) - return; // gdy ju taki jest + return; // gdy już taki jest else SwitchExtension->pNextAnim->RaAnimListAdd(t); } else { SwitchExtension->pNextAnim = t; - t->SwitchExtension->pNextAnim = NULL; // nowo dodawany nie moe mie ogona + t->SwitchExtension->pNextAnim = NULL; // nowo dodawany nie może mieć ogona } } }; TTrack * TTrack::RaAnimate() -{ // wykonanie rekurencyjne animacji, wywoywane przed wywietleniem sektora - // zwraca wskanik toru wymagajcego dalszej animacji +{ // wykonanie rekurencyjne animacji, wywoływane przed wyświetleniem sektora + // zwraca wskaźnik toru wymagającego dalszej animacji if (SwitchExtension->pNextAnim) SwitchExtension->pNextAnim = SwitchExtension->pNextAnim->RaAnimate(); bool m = true; // animacja trwa @@ -2835,15 +2835,15 @@ TTrack * TTrack::RaAnimate() { double v = SwitchExtension->fDesiredOffset - SwitchExtension->fOffset; // kierunek SwitchExtension->fOffset += sign(v) * Timer::GetDeltaTime() * SwitchExtension->fOffsetSpeed; - // Ra: trzeba da to do klasy... + // Ra: trzeba dać to do klasy... SwitchExtension->fOffset1 = SwitchExtension->fOffset; SwitchExtension->fOffset2 = SwitchExtension->fOffset; if (SwitchExtension->fOffset1 >= fMaxOffset) - SwitchExtension->fOffset1 = fMaxOffset; // ograniczenie animacji zewntrznej iglicy + SwitchExtension->fOffset1 = fMaxOffset; // ograniczenie animacji zewnętrznej iglicy if (SwitchExtension->fOffset2 <= 0.00) - SwitchExtension->fOffset2 = 0.0; // ograniczenie animacji wewntrznej iglicy + SwitchExtension->fOffset2 = 0.0; // ograniczenie animacji wewnętrznej iglicy if (v < 0) - { // jak na pierwszy z torw + { // jak na pierwszy z torów if (SwitchExtension->fOffset <= SwitchExtension->fDesiredOffset) { SwitchExtension->fOffset = SwitchExtension->fDesiredOffset; @@ -2851,7 +2851,7 @@ TTrack * TTrack::RaAnimate() } } else - { // jak na drugi z torw + { // jak na drugi z torów if (SwitchExtension->fOffset >= SwitchExtension->fDesiredOffset) { SwitchExtension->fOffset = SwitchExtension->fDesiredOffset; @@ -2859,13 +2859,13 @@ TTrack * TTrack::RaAnimate() } } if (Global::bUseVBO) - { // dla OpenGL 1.4 odwiey si cay sektor, w pniejszych poprawiamy fragment - if (Global::bOpenGL_1_5) // dla OpenGL 1.4 to si nie wykona poprawnie + { // dla OpenGL 1.4 odświeży się cały sektor, w późniejszych poprawiamy fragment + if (Global::bOpenGL_1_5) // dla OpenGL 1.4 to się nie wykona poprawnie if (TextureID1) // Ra: !!!! tu jest do poprawienia { // iglice liczone tylko dla zwrotnic vector6 rpts3[24], rpts4[24]; double fHTW = 0.5 * fabs(fTrackWidth); - double fHTW2 = fHTW; // Ra: na razie niech tak bdzie + double fHTW2 = fHTW; // Ra: na razie niech tak będzie double cos1 = 1.0, sin1 = 0.0, cos2 = 1.0, sin2 = 0.0; // Ra: ... for (int i = 0; i < 12; ++i) { @@ -2883,7 +2883,7 @@ TTrack * TTrack::RaAnimate() -(-fHTW2 - szyna[i].x) * sin2 + iglica[i].y * cos2, szyna[i].z); } CVertNormTex Vert[2 * 2 * 12]; // na razie 2 segmenty - CVertNormTex *v = Vert; // bo RaAnimate() modyfikuje wskanik + CVertNormTex *v = Vert; // bo RaAnimate() modyfikuje wskaźnik glGetBufferSubData( GL_ARRAY_BUFFER, SwitchExtension->iLeftVBO * sizeof(CVertNormTex), 2 * 2 * 12 * sizeof(CVertNormTex), &Vert); // pobranie fragmentu bufora VBO @@ -2894,7 +2894,7 @@ TTrack * TTrack::RaAnimate() glBufferSubData(GL_ARRAY_BUFFER, SwitchExtension->iLeftVBO * sizeof(CVertNormTex), 2 * 2 * 12 * sizeof(CVertNormTex), - &Vert); // wysanie fragmentu bufora VBO + &Vert); // wysłanie fragmentu bufora VBO v = Vert; glGetBufferSubData(GL_ARRAY_BUFFER, SwitchExtension->iRightVBO * sizeof(CVertNormTex), @@ -2905,14 +2905,14 @@ TTrack * TTrack::RaAnimate() SwitchExtension->fOffset1); } else - { // oryginalnie lewa dziaaa lepiej ni prawa + { // oryginalnie lewa działała lepiej niż prawa SwitchExtension->Segments[0]->RaAnimate( v, rpts4, -nnumPts, fTexLength, 0, 2, -SwitchExtension->fOffset2); // prawa iglica glBufferSubData(GL_ARRAY_BUFFER, SwitchExtension->iLeftVBO * sizeof(CVertNormTex), 2 * 2 * 12 * sizeof(CVertNormTex), - &Vert); // wysanie fragmentu bufora VBO + &Vert); // wysłanie fragmentu bufora VBO v = Vert; glGetBufferSubData(GL_ARRAY_BUFFER, SwitchExtension->iRightVBO * sizeof(CVertNormTex), @@ -2924,32 +2924,32 @@ TTrack * TTrack::RaAnimate() } glBufferSubData( GL_ARRAY_BUFFER, SwitchExtension->iRightVBO * sizeof(CVertNormTex), - 2 * 2 * 12 * sizeof(CVertNormTex), &Vert); // wysanie fragmentu bufora VBO + 2 * 2 * 12 * sizeof(CVertNormTex), &Vert); // wysłanie fragmentu bufora VBO } } else // gdy Display List - Release(); // niszczenie skompilowanej listy, aby si wygenerowaa nowa + Release(); // niszczenie skompilowanej listy, aby się wygenerowała nowa } else if (eType == tt_Table) // dla obrotnicy - szyny i podsypka { if (SwitchExtension->pModel && - SwitchExtension->CurrentIndex) // 0=zablokowana si nie animuje - { // trzeba kadorazowo porwnywa z ktem modelu + SwitchExtension->CurrentIndex) // 0=zablokowana się nie animuje + { // trzeba każdorazowo porównywać z kątem modelu // SwitchExtension->fOffset1=SwitchExtension->pAnim?SwitchExtension->pAnim->AngleGet():0.0; - // //pobranie kta z modelu + // //pobranie kąta z modelu TAnimContainer *ac = SwitchExtension->pModel ? SwitchExtension->pModel->GetContainer(NULL) : - NULL; // pobranie gwnego submodelu - // if (ac) ac->EventAssign(SwitchExtension->evMinus); //event zakoczenia animacji, - // troch bez sensu tutaj + NULL; // pobranie głównego submodelu + // if (ac) ac->EventAssign(SwitchExtension->evMinus); //event zakończenia animacji, + // trochę bez sensu tutaj if (ac) if ((ac->AngleGet() != SwitchExtension->fOffset) || !(ac->TransGet() == - SwitchExtension->vTrans)) // czy przemiecio si od ostatniego sprawdzania + SwitchExtension->vTrans)) // czy przemieściło się od ostatniego sprawdzania { - double hlen = 0.5 * SwitchExtension->Segments[0]->GetLength(); // poowa - // dugoci - SwitchExtension->fOffset = ac->AngleGet(); // pobranie kta z submodelu + double hlen = 0.5 * SwitchExtension->Segments[0]->GetLength(); // połowa + // 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)); SwitchExtension->vTrans = ac->TransGet(); @@ -2959,32 +2959,32 @@ TTrack * TTrack::RaAnimate() Segment->Init(middle + vector3(sina, 0.0, cosa), 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 - // kty + Dynamics[i]->Move(0.000001); // minimalny ruch, aby przeliczyć pozycję i + // kąty if (Global::bUseVBO) - { // dla OpenGL 1.4 odwiey si cay sektor, w pniejszych poprawiamy fragment - // aktualizacja pojazdw na torze - if (Global::bOpenGL_1_5) // dla OpenGL 1.4 to si nie wykona poprawnie + { // dla OpenGL 1.4 odświeży się cały sektor, w późniejszych poprawiamy fragment + // aktualizacja pojazdów na torze + if (Global::bOpenGL_1_5) // dla OpenGL 1.4 to się nie wykona poprawnie { int size = - RaArrayPrepare(); // wielko tabeli potrzebna dla tej obrotnicy + RaArrayPrepare(); // wielkość tabeli potrzebna dla tej obrotnicy CVertNormTex *Vert = new CVertNormTex[size]; // bufor roboczy // CVertNormTex *v=Vert; //zmieniane przez RaArrayFill(Vert, Vert - SwitchExtension - ->iLeftVBO); // iLeftVBO powinno zosta niezmienione + ->iLeftVBO); // iLeftVBO powinno zostać niezmienione glBufferSubData( GL_ARRAY_BUFFER, SwitchExtension->iLeftVBO * sizeof(CVertNormTex), - size * sizeof(CVertNormTex), Vert); // wysanie fragmentu bufora VBO + size * sizeof(CVertNormTex), Vert); // wysłanie fragmentu bufora VBO } } else // gdy Display List - Release(); // niszczenie skompilowanej listy, aby si wygenerowaa nowa + Release(); // niszczenie skompilowanej listy, aby się wygenerowała nowa } // animacja trwa nadal } else - m = false; // koniec animacji albo w ogle nie poczone z modelem + m = false; // koniec animacji albo w ogóle nie połączone z modelem } return m ? this : SwitchExtension->pNextAnim; // zwraca obiekt do dalszej animacji }; @@ -2996,30 +2996,30 @@ void TTrack::RadioStop() }; double TTrack::WidthTotal() -{ // szeroko z poboczem +{ // szerokość z poboczem if (iCategoryFlag & 2) // jesli droga - if (fTexHeight1 >= 0.0) // i ma boki zagite w d (chodnik jest w gr) + if (fTexHeight1 >= 0.0) // i ma boki zagięte w dół (chodnik jest w górę) return 2.0 * fabs(fTexWidth) + 0.5 * fabs(fTrackWidth + fTrackWidth2); // dodajemy pobocze - return 0.5 * fabs(fTrackWidth + fTrackWidth2); // a tak tylko zwyka rednia szeroko + return 0.5 * fabs(fTrackWidth + fTrackWidth2); // a tak tylko zwykła średnia szerokość }; bool TTrack::IsGroupable() -{ // czy wywietlanie toru moe by zgrupwane z innymi +{ // czy wyświetlanie toru może być zgrupwane z innymi if ((eType == tt_Switch) || (eType == tt_Table)) - return false; // tory ruchome nie s grupowane + return false; // tory ruchome nie są grupowane if ((eEnvironment == e_canyon) || (eEnvironment == e_tunnel)) - return false; // tory ze zmian wiata + return false; // tory ze zmianą światła return true; }; bool Equal(vector3 v1, vector3 *v2) -{ // sprawdzenie odlegoci punktw - // Ra: powinno by do 100cm wzdu toru i ze 2cm w poprzek (na prostej moe nie by dugiego - // kawaka) - // Ra: z automatycznie dodawanym stukiem, jeli dziura jest wiksza ni 2mm. +{ // sprawdzenie odległości punktów + // Ra: powinno być do 100cm wzdłuż toru i ze 2cm w poprzek (na prostej może nie być długiego + // kawałka) + // Ra: z automatycznie dodawanym stukiem, jeśli dziura jest większa niż 2mm. if (fabs(v1.x - v2->x) > 0.02) - return false; // szecian zamiast kuli + return false; // sześcian zamiast kuli if (fabs(v1.z - v2->z) > 0.02) return false; if (fabs(v1.y - v2->y) > 0.02) @@ -3029,10 +3029,10 @@ bool Equal(vector3 v1, vector3 *v2) }; int TTrack::TestPoint(vector3 *Point) -{ // sprawdzanie, czy tory mona poczy +{ // sprawdzanie, czy tory można połączyć switch (eType) { - case tt_Normal: // zwyky odcinek + case tt_Normal: // zwykły odcinek if (trPrev == NULL) if (Equal(Segment->FastGetPoint_0(), Point)) return 0; @@ -3043,8 +3043,8 @@ int TTrack::TestPoint(vector3 *Point) case tt_Switch: // zwrotnica { int state = GetSwitchState(); // po co? - // Ra: TODO: jak si zmieni na bezporednie odwoania do segmentow zwrotnicy, - // to si wykoleja, poniewa trNext zaley od przeoenia + // Ra: TODO: jak się zmieni na bezpośrednie odwołania do segmentow zwrotnicy, + // to się wykoleja, ponieważ trNext zależy od przełożenia Switch(0); if (trPrev == NULL) // if (Equal(SwitchExtension->Segments[0]->FastGetPoint_0(),Point)) @@ -3060,15 +3060,15 @@ int TTrack::TestPoint(vector3 *Point) Switch(state); return 3; } - Switch(1); // mona by si pozby tego przeczania - if (trPrev == NULL) // Ra: z tym chyba nie potrzeba czy + Switch(1); // można by się pozbyć tego przełączania + if (trPrev == NULL) // Ra: z tym chyba nie potrzeba łączyć // if (Equal(SwitchExtension->Segments[1]->FastGetPoint_0(),Point)) if (Equal(Segment->FastGetPoint_0(), Point)) { Switch(state); // Switch(0); return 4; } - if (trNext == NULL) // TODO: to zaley od przeoenia zwrotnicy + if (trNext == NULL) // TODO: to zależy od przełożenia zwrotnicy // if (Equal(SwitchExtension->Segments[1]->FastGetPoint_1(),Point)) if (Equal(Segment->FastGetPoint_1(), Point)) { @@ -3078,7 +3078,7 @@ int TTrack::TestPoint(vector3 *Point) Switch(state); } break; - case tt_Cross: // skrzyowanie drg + case tt_Cross: // skrzyżowanie dróg // if (trPrev==NULL) if (Equal(SwitchExtension->Segments[0]->FastGetPoint_0(), Point)) return 2; @@ -3097,7 +3097,7 @@ int TTrack::TestPoint(vector3 *Point) }; void TTrack::MovedUp1(double dh) -{ // poprawienie przechyki wymaga wyduenia podsypki +{ // poprawienie przechyłki wymaga wydłużenia podsypki fTexHeight1 += dh; }; @@ -3110,23 +3110,23 @@ string TTrack::NameGet() }; void TTrack::VelocitySet(float v) -{ // ustawienie prdkoci z ograniczeniem do pierwotnej wartoci (zapisanej w scenerii) +{ // ustawienie prędkości z ograniczeniem do pierwotnej wartości (zapisanej w scenerii) if (SwitchExtension ? SwitchExtension->fVelocity >= 0.0 : false) - { // zwrotnica moe mie odgrne ograniczenie, nieprzeskakiwalne eventem + { // zwrotnica może mieć odgórne ograniczenie, nieprzeskakiwalne eventem if (v > SwitchExtension->fVelocity ? true : v < 0.0) return void(fVelocity = - SwitchExtension->fVelocity); // maksymalnie tyle, ile byo we wpisie + SwitchExtension->fVelocity); // maksymalnie tyle, ile było we wpisie } fVelocity = v; // nie ma ograniczenia }; float TTrack::VelocityGet() -{ // pobranie dozwolonej prdkoci podczas skanowania - return ((iDamageFlag & 128) ? 0.0f : fVelocity); // tor uszkodzony = prdko zerowa +{ // pobranie dozwolonej prędkości podczas skanowania + return ((iDamageFlag & 128) ? 0.0f : fVelocity); // tor uszkodzony = prędkość zerowa }; void TTrack::ConnectionsLog() -{ // wypisanie informacji o poczeniach +{ // wypisanie informacji o połączeniach int i; WriteLog("--> tt_Cross named " + pMyNode->asName); if (eType == tt_Cross) @@ -3144,31 +3144,31 @@ void TTrack::ConnectionsLog() }; TTrack * TTrack::Neightbour(int s, double &d) -{ // zwraca wskanik na ssiedni tor, w kierunku okrelonym znakiem (s), odwraca (d) w razie - // niezgodnoci kierunku torw - TTrack *t; // nie zmieniamy kierunku (d), jeli nie ma toru dalej +{ // zwraca wskaźnik na sąsiedni tor, w kierunku określonym znakiem (s), odwraca (d) w razie + // 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 + { // jeszcze trzeba sprawdzić zgodność t = (s > 0) ? trNext : trPrev; - if (t) // o ile jest na co przej, zmieniamy znak kierunku na nowym torze + if (t) // o ile jest na co przejść, zmieniamy znak kierunku na nowym torze if (t->eType == tt_Cross) - { // jeli wjazd na skrzyowanie, trzeba ustali segment, bo od tego zaley zmiana + { // jeśli wjazd na skrzyżowanie, trzeba ustalić segment, bo od tego zależy zmiana // kierunku (d) - // if (r) //gdy nie podano (r), to nie zmienia (d) + // if (r) //gdy nie podano (r), to nie zmieniać (d) // if (s*t->CrossSegment(((s>0)?iNextDirection:iPrevDirection),r)<0) // d=-d; } else { if ((s > 0) ? iNextDirection : !iPrevDirection) - d = -d; // nastpuje zmiana kierunku wzka albo kierunku skanowania + d = -d; // następuje zmiana kierunku wózka albo kierunku skanowania // s=((s>0)?iNextDirection:iPrevDirection)?-1:1; //kierunek toru po zmianie } return (t); // zwrotnica ma odpowiednio ustawione (trNext) } switch ((SwitchExtension->iRoads == 4) ? iEnds4[s + 6] : - iEnds3[s + 6]) // numer koca 0..3, -1 to bd - { // zjazd ze skrzyowania + iEnds3[s + 6]) // numer końca 0..3, -1 to błąd + { // zjazd ze skrzyżowania case 0: if (SwitchExtension->pPrevs[0]) if ((s > 0) == SwitchExtension->iPrevDirection[0]) diff --git a/Track.h b/Track.h index 401425cf..fa313084 100644 --- a/Track.h +++ b/Track.h @@ -36,7 +36,7 @@ typedef enum e_bridge, e_bank } TEnvironmentType; -// Ra: opracowa alternatywny system cieni/wiate z definiowaniem koloru owietlenia w halach +// Ra: opracować alternatywny system cieni/świateł z definiowaniem koloru oświetlenia w halach class TTrack; class TGroundNode; @@ -44,49 +44,49 @@ class TSubRect; class TTraction; class TSwitchExtension -{ // dodatkowe dane do toru, ktry jest zwrotnic +{ // dodatkowe dane do toru, który jest zwrotnicą public: TSwitchExtension(TTrack *owner, int what); ~TSwitchExtension(); - TSegment *Segments[6]; // dwa tory od punktu 1, pozostae dwa od 2? Ra 140101: 6 pocze dla - // skrzyowa - // TTrack *trNear[4]; //tory doczone do punktw 1, 2, 3 i 4 - // dotychczasowe [2]+[2] wskaniki zamieni na nowe [4] - TTrack *pNexts[2]; // tory doczone do punktw 2 i 4 - TTrack *pPrevs[2]; // tory doczone do punktw 1 i 3 - int iNextDirection[2]; // to te z [2]+[2] przerobi na [4] + TSegment *Segments[6]; // dwa tory od punktu 1, pozostałe dwa od 2? Ra 140101: 6 połączeń dla + // skrzyżowań + // TTrack *trNear[4]; //tory dołączone do punktów 1, 2, 3 i 4 + // dotychczasowe [2]+[2] wskaźniki zamienić na nowe [4] + TTrack *pNexts[2]; // tory dołączone do punktów 2 i 4 + TTrack *pPrevs[2]; // tory dołączone do punktów 1 i 3 + int iNextDirection[2]; // to też z [2]+[2] przerobić na [4] int iPrevDirection[2]; int CurrentIndex; // dla zwrotnicy - double fOffset, fDesiredOffset; // aktualne i docelowe pooenie napdu iglic - double fOffsetSpeed; // prdko liniowa ruchu iglic - double fOffsetDelay; // opnienie ruchu drugiej iglicy wzgldem pierwszej + double fOffset, fDesiredOffset; // aktualne i docelowe położenie napędu iglic + double fOffsetSpeed; // prędkość liniowa ruchu iglic + double fOffsetDelay; // opóźnienie ruchu drugiej iglicy względem pierwszej union { struct { // zmienne potrzebne tylko dla zwrotnicy - double fOffset1, fOffset2; // przesunicia iglic - 0=na wprost + double fOffset1, fOffset2; // przesunięcia iglic - 0=na wprost bool RightSwitch; // czy zwrotnica w prawo }; struct { // zmienne potrzebne tylko dla obrotnicy/przesuwnicy - TGroundNode *pMyNode; // dla obrotnicy do wtrnego podczania torw + TGroundNode *pMyNode; // dla obrotnicy do wtórnego podłączania torów // TAnimContainer *pAnim; //animator modelu dla obrotnicy TAnimModel *pModel; // na razie model }; struct - { // zmienne dla skrzyowania - vector3 *vPoints; // tablica wierzchokw nawierzchni, generowana przez pobocze - int iPoints; // liczba faktycznie uytych wierzchokw nawierzchni + { // zmienne dla skrzyżowania + vector3 *vPoints; // tablica wierzchołków nawierzchni, generowana przez pobocze + int iPoints; // liczba faktycznie użytych wierzchołków nawierzchni bool bPoints; // czy utworzone? - int iRoads; // ile drg si spotyka? + int iRoads; // ile dróg się spotyka? }; }; bool bMovement; // czy w trakcie animacji int iLeftVBO, iRightVBO; // indeksy iglic w VBO - TSubRect *pOwner; // sektor, ktremu trzeba zgosi animacj - TTrack *pNextAnim; // nastpny tor do animowania + TSubRect *pOwner; // sektor, któremu trzeba zgłosić animację + TTrack *pNextAnim; // następny tor do animowania TEvent *evPlus, *evMinus; // zdarzenia sygnalizacji rozprucia - float fVelocity; // maksymalne ograniczenie prdkoci (ustawianej eventem) + float fVelocity; // maksymalne ograniczenie prędkości (ustawianej eventem) vector3 vTrans; // docelowa translacja przesuwnicy private: }; @@ -94,21 +94,21 @@ class TSwitchExtension const int iMaxNumDynamics = 40; // McZapkie-100303 class TIsolated -{ // obiekt zbierajcy zajtoci z kilku odcinkw - int iAxles; // ilo osi na odcinkach obsugiwanych przez obiekt - TIsolated *pNext; // odcinki izolowane s trzymane w postaci listy jednikierunkowej - static TIsolated *pRoot; // pocztek listy +{ // obiekt zbierający zajętości z kilku odcinków + int iAxles; // ilość osi na odcinkach obsługiwanych przez obiekt + TIsolated *pNext; // odcinki izolowane są trzymane w postaci listy jednikierunkowej + static TIsolated *pRoot; // początek listy public: - std::string asName; // nazwa obiektu, baza do nazw eventw - TEvent *evBusy; // zdarzenie wyzwalane po zajciu grupy - TEvent *evFree; // zdarzenie wyzwalane po cakowitym zwolnieniu zajtoci grupy - TMemCell *pMemCell; // automatyczna komrka pamici, ktra wsppracuje z odcinkiem izolowanym + std::string asName; // nazwa obiektu, baza do nazw eventów + TEvent *evBusy; // zdarzenie wyzwalane po zajęciu grupy + TEvent *evFree; // zdarzenie wyzwalane po całkowitym zwolnieniu zajętości grupy + TMemCell *pMemCell; // automatyczna komórka pamięci, która współpracuje z odcinkiem izolowanym TIsolated(); TIsolated(const std::string &n, TIsolated *i); ~TIsolated(); static TIsolated * Find( const std::string &n); // znalezienie obiektu albo utworzenie nowego - void Modify(int i, TDynamicObject *o); // dodanie lub odjcie osi + void Modify(int i, TDynamicObject *o); // dodanie lub odjęcie osi bool Busy() { return (iAxles > 0); @@ -126,36 +126,36 @@ class TIsolated class TTrack : public Resource { // trajektoria ruchu - opakowanie private: - TSwitchExtension *SwitchExtension; // dodatkowe dane do toru, ktry jest zwrotnic + TSwitchExtension *SwitchExtension; // dodatkowe dane do toru, który jest zwrotnicą TSegment *Segment; - TTrack *trNext; // odcinek od strony punktu 2 - to powinno by w segmencie + TTrack *trNext; // odcinek od strony punktu 2 - to powinno być w segmencie TTrack *trPrev; // odcinek od strony punktu 1 // McZapkie-070402: dodalem zmienne opisujace rozmiary tekstur GLuint TextureID1; // tekstura szyn albo nawierzchni GLuint TextureID2; // tekstura automatycznej podsypki albo pobocza - float fTexLength; // dugo powtarzania tekstury w metrach - float fTexRatio1; // proporcja rozmiarw tekstury dla nawierzchni drogi - float fTexRatio2; // proporcja rozmiarw tekstury dla chodnika - float fTexHeight1; // wysoko brzegu wzgldem trajektorii - float fTexWidth; // szeroko boku + float fTexLength; // długość powtarzania tekstury w metrach + float fTexRatio1; // proporcja rozmiarów tekstury dla nawierzchni drogi + float fTexRatio2; // proporcja rozmiarów tekstury dla chodnika + float fTexHeight1; // wysokość brzegu względem trajektorii + float fTexWidth; // szerokość boku float fTexSlope; double fRadiusTable[2]; // dwa promienie, drugi dla zwrotnicy - int iTrapezoid; // 0-standard, 1-przechyka, 2-trapez, 3-oba + int iTrapezoid; // 0-standard, 1-przechyłka, 2-trapez, 3-oba GLuint DisplayListID; - TIsolated *pIsolated; // obwd izolowany obsugujcy zajcia/zwolnienia grupy torw + TIsolated *pIsolated; // obwód izolowany obsługujący zajęcia/zwolnienia grupy torów TGroundNode * - pMyNode; // Ra: proteza, eby tor zna swoj nazw TODO: odziedziczy TTrack z TGroundNode + pMyNode; // Ra: proteza, żeby tor znał swoją nazwę TODO: odziedziczyć TTrack z TGroundNode public: int iNumDynamics; TDynamicObject *Dynamics[iMaxNumDynamics]; - int iEvents; // Ra: flaga informujca o obecnoci eventw + int iEvents; // Ra: flaga informująca o obecności eventów TEvent *evEventall0; // McZapkie-140302: wyzwalany gdy pojazd stoi TEvent *evEventall1; TEvent *evEventall2; TEvent *evEvent0; // McZapkie-280503: wyzwalany tylko gdy headdriver TEvent *evEvent1; TEvent *evEvent2; - std::string asEventall0Name; // nazwy eventw + std::string asEventall0Name; // nazwy eventów std::string asEventall1Name; std::string asEventall2Name; std::string asEvent0Name; @@ -164,28 +164,28 @@ class TTrack : public Resource int iNextDirection; // 0:Point1, 1:Point2, 3:do odchylonego na zwrotnicy int iPrevDirection; TTrackType eType; - int iCategoryFlag; // 0x100 - usuwanie pojazw - float fTrackWidth; // szeroko w punkcie 1 - float fTrackWidth2; // szeroko w punkcie 2 (gwnie drogi i rzeki) - float fFriction; // wspczynnik tarcia + int iCategoryFlag; // 0x100 - usuwanie pojazów + float fTrackWidth; // szerokość w punkcie 1 + float fTrackWidth2; // szerokość w punkcie 2 (głównie drogi i rzeki) + float fFriction; // współczynnik tarcia float fSoundDistance; int iQualityFlag; int iDamageFlag; - TEnvironmentType eEnvironment; // dwik i owietlenie + TEnvironmentType eEnvironment; // dźwięk i oświetlenie bool bVisible; // czy rysowany - int iAction; // czy modyfikowany eventami (specjalna obsuga przy skanowaniu) - float fOverhead; // informacja o stanie sieci: 0-jazda bezprdowa, >0-z opuszczonym i - // ograniczeniem prdkoci + int iAction; // czy modyfikowany eventami (specjalna obsługa przy skanowaniu) + float fOverhead; // informacja o stanie sieci: 0-jazda bezprądowa, >0-z opuszczonym i + // ograniczeniem prędkości private: - double fVelocity; // prdko dla AI (powyej ronie prawdopowobiestwo wykolejenia) + double fVelocity; // prędkość dla AI (powyżej rośnie prawdopowobieństwo wykolejenia) public: // McZapkie-100502: - double fTrackLength; // dugo z wpisu, nigdzie nie uywana - double fRadius; // promie, dla zwrotnicy kopiowany z tabeli - bool ScannedFlag; // McZapkie: do zaznaczania kolorem torw skanowanych przez AI - TTraction *hvOverhead; // drut zasilajcy do szybkiego znalezienia (nie uywany) - TGroundNode *nFouling[2]; // wsprzdne ukresu albo oporu koza - TTrack *trColides; // tor kolizyjny, na ktrym trzeba sprawdza pojazdy pod ktem zderzenia + double fTrackLength; // długość z wpisu, nigdzie nie używana + double fRadius; // promień, dla zwrotnicy kopiowany z tabeli + bool ScannedFlag; // McZapkie: do zaznaczania kolorem torów skanowanych przez AI + TTraction *hvOverhead; // drut zasilający do szybkiego znalezienia (nie używany) + TGroundNode *nFouling[2]; // współrzędne ukresu albo oporu kozła + TTrack *trColides; // tor kolizyjny, na którym trzeba sprawdzać pojazdy pod kątem zderzenia TTrack(TGroundNode *g); ~TTrack(); @@ -239,12 +239,12 @@ class TTrack : public Resource void Render(); // renderowanie z Display Lists int RaArrayPrepare(); // zliczanie rozmiaru dla VBO sektroa - void RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start); // wypenianie VBO + void RaArrayFill(CVertNormTex *Vert, const CVertNormTex *Start); // wypełnianie VBO void RaRenderVBO(int iPtr); // renderowanie z VBO sektora - void RenderDyn(); // renderowanie nieprzezroczystych pojazdw (oba tryby) - void RenderDynAlpha(); // renderowanie przezroczystych pojazdw (oba tryby) - void RenderDynSounds(); // odtwarzanie dwikw pojazdw jest niezalene od ich - // wywietlania + void RenderDyn(); // renderowanie nieprzezroczystych pojazdów (oba tryby) + void RenderDynAlpha(); // renderowanie przezroczystych pojazdów (oba tryby) + void RenderDynSounds(); // odtwarzanie dźwięków pojazdów jest niezależne od ich + // wyświetlania void RaOwnerSet(TSubRect *o) { @@ -262,7 +262,7 @@ class TTrack : public Resource { if (pIsolated) pIsolated->Modify(i, o); - }; // dodanie lub odjcie osi + }; // dodanie lub odjęcie osi std::string IsolatedName(); bool IsolatedEventsAssign(TEvent *busy, TEvent *free); double WidthTotal(); diff --git a/Traction.cpp b/Traction.cpp index e649a3a9..973fd67f 100644 --- a/Traction.cpp +++ b/Traction.cpp @@ -23,55 +23,55 @@ http://mozilla.org/MPL/2.0/. /* === Koncepcja dwustronnego zasilania sekcji sieci trakcyjnej, Ra 2014-02 === -0. Kade przso sieci moe mie wpisan nazw zasilacza, a take napicie -nominalne i maksymalny prd, ktre stanowi redundancj do danych zasilacza. -Rezystancja moe si zmienia, materia i grubo drutu powinny by wsplny -dla segmentu. Podanie punktw umoliwia czenie przse w listy dwukierunkowe, -co usprawnia wyszukiwania kolejnych przese podczas jazdy. Dla bieni wsplnej -powinna by podana nazwa innego przsa w parametrze "parallel". Wskaniki -na przsa bieni wsplnej maj by ukadane w jednokierunkowy piercie. -1. Problemem jest ustalenie topologii sekcji dla linii dwutorowych. Nad kadym -torem powinna znajdowa si oddzielna sekcja sieci, aby moga zosta odczona -w przypadku zwarcia. Sekcje nad rwnolegymi torami s rwnie czone -rwnolegle przez kabiny sekcyjne, co zmniejsza pynce prdy i spadki napi. -2. Drugim zagadnieniem jest zasilanie sekcji jednoczenie z dwch stron, czyli -sekcja musi mie swoj nazw oraz wskazanie dwch zasilaczy ze wskazaniem -geograficznym ich pooenia. Dodatkow trudnoci jest brak poczenia -pomidzy segmentami naprania. Podsumowujc, kady segment naprania powinien -mie przypisanie do sekcji zasilania, a dodatkowo skrajne segmenty powinny -wskazywa dwa rne zasilacze. -3. Zasilaczem sieci moe by podstacja, ktra w wersji 3kV powinna generowa -pod obcieniem napicie maksymalne rzdu 3600V, a spadek napicia nastpuje -na jej rezystancji wewntrznej oraz na przewodach trakcyjnych. Zasilaczem moe -by rwnie kabina sekcyjna, ktra jest zasilana z podstacji poprzez przewody +0. Każde przęsło sieci może mieć wpisaną nazwę zasilacza, a także napięcie +nominalne i maksymalny prąd, które stanowią redundancję do danych zasilacza. +Rezystancja może się zmieniać, materiał i grubość drutu powinny być wspólny +dla segmentu. Podanie punktów umożliwia łączenie przęseł w listy dwukierunkowe, +co usprawnia wyszukiwania kolejnych przeseł podczas jazdy. Dla bieżni wspólnej +powinna być podana nazwa innego przęsła w parametrze "parallel". Wskaźniki +na przęsła bieżni wspólnej mają być układane w jednokierunkowy pierścień. +1. Problemem jest ustalenie topologii sekcji dla linii dwutorowych. Nad każdym +torem powinna znajdować się oddzielna sekcja sieci, aby mogła zostać odłączona +w przypadku zwarcia. Sekcje nad równoległymi torami są również łączone +równolegle przez kabiny sekcyjne, co zmniejsza płynące prądy i spadki napięć. +2. Drugim zagadnieniem jest zasilanie sekcji jednocześnie z dwóch stron, czyli +sekcja musi mieć swoją nazwę oraz wskazanie dwóch zasilaczy ze wskazaniem +geograficznym ich położenia. Dodatkową trudnością jest brak połączenia +pomiędzy segmentami naprężania. Podsumowując, każdy segment naprężania powinien +mieć przypisanie do sekcji zasilania, a dodatkowo skrajne segmenty powinny +wskazywać dwa różne zasilacze. +3. Zasilaczem sieci może być podstacja, która w wersji 3kV powinna generować +pod obciążeniem napięcie maksymalne rzędu 3600V, a spadek napięcia następuje +na jej rezystancji wewnętrznej oraz na przewodach trakcyjnych. Zasilaczem może +być również kabina sekcyjna, która jest zasilana z podstacji poprzez przewody trakcyjne. -4. Dla uproszczenia mona przyj, e zasilanie pojazdu odbywa si bdzie z -dwch ssiednich podstacji, pomidzy ktrymi moe by dowolna liczba kabin -sekcyjnych. W przypadku wyczenia jednej z tych podstacji, zasilanie moe -by pobierane z kolejnej. cznie naley rozwaa 4 najblisze podstacje, -przy czym do oblicze mona przyjmowa 2 z nich. -5. Przsa sieci s czone w list dwukierunkow, wic wystarczy nazw -sekcji wpisa w jednym z nich, wpisanie w kadym nie przeszkadza. -Alternatywnym sposobem czenia segmentw naprania moe by wpisywanie -nazw przse jako "parallel", co moe by uciliwe dla autorw scenerii. -W skrajnych przsach naleaoby dodatkowo wpisa nazw zasilacza, bdzie -to jednoczenie wskazanie przsa, do ktrego podczone s przewody -zasilajce. Konieczne jest odrnienie nazwy sekcji od nazwy zasilacza, co -mona uzyska rnicujc ich nazwy albo np. specyficznie ustawiajc warto -prdu albo napicia przsa. -6. Jeli dany segment naprania jest wsplny dla dwch sekcji zasilania, -to jedno z przse musi mie nazw "*" (gwiazdka), co bdzie oznaczao, e -ma zamontowany izolator. Dla uzyskania efektw typu uk elektryczny, naleao -by wskaza pooenie izolatora i jego dugo (ew. typ). -7. Rwnie w parametrach zasilacza naleao by okreli, czy jest podstacj, -czy jedynie kabin sekcyjn. Rni si one bd fizyk dziaania. -8. Dla zbudowanej topologii sekcji i zasilaczy naleao by zbudowa dynamiczny -schemat zastpczy. Dynamika polega na wyczaniu sekcji ze zwarciem oraz -przecionych podstacji. Musi by te moliwo wyczenia sekcji albo -podstacji za pomoc eventu. -9. Dla kadej sekcji musi by tworzony obiekt, wskazujcy na podstacje -zasilajce na kocach, stan wczenia, zwarcia, przepicia. Do tego obiektu -musi wskazywa kade przso z aktywnym zasilaniem. +4. Dla uproszczenia można przyjąć, że zasilanie pojazdu odbywać się będzie z +dwóch sąsiednich podstacji, pomiędzy którymi może być dowolna liczba kabin +sekcyjnych. W przypadku wyłączenia jednej z tych podstacji, zasilanie może +być pobierane z kolejnej. Łącznie należy rozważać 4 najbliższe podstacje, +przy czym do obliczeń można przyjmować 2 z nich. +5. Przęsła sieci są łączone w listę dwukierunkową, więc wystarczy nazwę +sekcji wpisać w jednym z nich, wpisanie w każdym nie przeszkadza. +Alternatywnym sposobem łączenia segmentów naprężania może być wpisywanie +nazw przęseł jako "parallel", co może być uciążliwe dla autorów scenerii. +W skrajnych przęsłach należałoby dodatkowo wpisać nazwę zasilacza, będzie +to jednocześnie wskazanie przęsła, do którego podłączone są przewody +zasilające. Konieczne jest odróżnienie nazwy sekcji od nazwy zasilacza, co +można uzyskać różnicując ich nazwy albo np. specyficznie ustawiając wartość +prądu albo napięcia przęsła. +6. Jeśli dany segment naprężania jest wspólny dla dwóch sekcji zasilania, +to jedno z przęseł musi mieć nazwę "*" (gwiazdka), co będzie oznaczało, że +ma zamontowany izolator. Dla uzyskania efektów typu łuk elektryczny, należało +by wskazać położenie izolatora i jego długość (ew. typ). +7. Również w parametrach zasilacza należało by określić, czy jest podstacją, +czy jedynie kabiną sekcyjną. Różnić się one będą fizyką działania. +8. Dla zbudowanej topologii sekcji i zasilaczy należało by zbudować dynamiczny +schemat zastępczy. Dynamika polega na wyłączaniu sekcji ze zwarciem oraz +przeciążonych podstacji. Musi być też możliwość wyłączenia sekcji albo +podstacji za pomocą eventu. +9. Dla każdej sekcji musi być tworzony obiekt, wskazujący na podstacje +zasilające na końcach, stan włączenia, zwarcia, przepięcia. Do tego obiektu +musi wskazywać każde przęsło z aktywnym zasilaniem. z.1 z.2 z.3 -=-a---1*1---c-=---c---=-c--2*2--e---=---e-3-*-3--g-=- @@ -79,15 +79,15 @@ musi wskazywa nazwy sekcji (@): a,b,c,d,e,f,g,h nazwy zasilaczy (#): 1,2,3 - przso z izolatorem: * - przsa bez wskazania nazwy sekcji/zasilacza: - - segment naprzania: =-x-= - segment naprania z izolatorem: =---@---#*#---@---= - segment naprania bez izolatora: =--------@------= + przęsło z izolatorem: * + przęsła bez wskazania nazwy sekcji/zasilacza: - + segment napręzania: =-x-= + segment naprężania z izolatorem: =---@---#*#---@---= + segment naprężania bez izolatora: =--------@------= -Obecnie brak nazwy sekcji nie jest akceptowany i kade przso musi mie wpisan -jawnie nazw sekcji, ewentualnie nazw zasilacza (zostanie zastpiona wskazaniem -sekcji z ssiedniego przsa). +Obecnie brak nazwy sekcji nie jest akceptowany i każde przęsło musi mieć wpisaną +jawnie nazwę sekcji, ewentualnie nazwę zasilacza (zostanie zastąpiona wskazaniem +sekcji z sąsiedniego przęsła). */ TTraction::TTraction() @@ -107,12 +107,12 @@ TTraction::TTraction() // mdPole= NULL; // ReplacableSkinID= 0; hvNext[0] = hvNext[1] = NULL; - iLast = 1; //e niby ostatni drut - psPowered = psPower[0] = psPower[1] = NULL; // na pocztku zasilanie nie podczone - psSection = NULL; // na pocztku nie podczone - hvParallel = NULL; // normalnie brak bieni wsplnej - fResistance[0] = fResistance[1] = -1.0; // trzeba dopiero policzy - iTries = 0; // ile razy prbowa podczy, ustawiane pniej + iLast = 1; //że niby ostatni drut + psPowered = psPower[0] = psPower[1] = NULL; // na początku zasilanie nie podłączone + psSection = NULL; // na początku nie podłączone + hvParallel = NULL; // normalnie brak bieżni wspólnej + fResistance[0] = fResistance[1] = -1.0; // trzeba dopiero policzyć + iTries = 0; // ile razy próbować podłączyć, ustawiane później } TTraction::~TTraction() @@ -263,33 +263,33 @@ void TTraction::RenderDL(float mgn) // McZapkie: mgn to odleglosc od obserwatora // McZapkie: ustalanie przezroczystosci i koloru linii: if (Wires != 0 && !TestFlag(DamageFlag, 128)) // rysuj jesli sa druty i nie zerwana { - // glDisable(GL_LIGHTING); //aby nie uywao wektorw normalnych do kolorowania + // glDisable(GL_LIGHTING); //aby nie używało wektorów normalnych do kolorowania glColor4f(0, 0, 0, 1); // jak nieznany kolor to czarne nieprzezroczyste if (!Global::bSmoothTraction) - glDisable(GL_LINE_SMOOTH); // na liniach kiepsko wyglda - robi gradient + glDisable(GL_LINE_SMOOTH); // na liniach kiepsko wygląda - robi gradient float linealpha = 5000 * WireThickness / (mgn + 1.0); //*WireThickness if (linealpha > 1.2) - linealpha = 1.2; // zbyt grube nie s dobre + linealpha = 1.2; // zbyt grube nie są dobre glLineWidth(linealpha); if (linealpha > 1.0) linealpha = 1.0; // McZapkie-261102: kolor zalezy od materialu i zasniedzenia float r, g, b; switch (Material) - { // Ra: kolory podzieliem przez 2, bo po zmianie ambient za jasne byy - // trzeba uwzgldni kierunek wiecenia Soca - tylko ze Socem wida kolor + { // Ra: kolory podzieliłem przez 2, bo po zmianie ambient za jasne były + // trzeba uwzględnić kierunek świecenia Słońca - tylko ze Słońcem widać kolor case 1: if (TestFlag(DamageFlag, 1)) { r = 0.00000; g = 0.32549; - b = 0.2882353; // zielona mied + b = 0.2882353; // zielona miedź } else { r = 0.35098; g = 0.22549; - b = 0.1; // czerwona mied + b = 0.1; // czerwona miedź } break; case 2: @@ -306,53 +306,53 @@ void TTraction::RenderDL(float mgn) // McZapkie: mgn to odleglosc od obserwatora b = 0.25; // srebrne Al } break; - // tymczasowo pokazanie zasilanych odcinkw + // tymczasowo pokazanie zasilanych odcinków case 4: r = 0.5; g = 0.5; b = 1.0; - break; // niebieskie z podczonym zasilaniem + break; // niebieskie z podłączonym zasilaniem case 5: r = 1.0; g = 0.0; b = 0.0; - break; // czerwone z podczonym zasilaniem 1 + break; // czerwone z podłączonym zasilaniem 1 case 6: r = 0.0; g = 1.0; b = 0.0; - break; // zielone z podczonym zasilaniem 2 + break; // zielone z podłączonym zasilaniem 2 case 7: r = 1.0; g = 1.0; b = 0.0; - break; //te z podczonym zasilaniem z obu stron + break; //żółte z podłączonym zasilaniem z obu stron } if (DebugModeFlag) if (hvParallel) - { // jeli z bieni wspln, to dodatkowo przyciemniamy + { // jeśli z bieżnią wspólną, to dodatkowo przyciemniamy r *= 0.6; g *= 0.6; b *= 0.6; } - r *= Global::ambientDayLight[0]; // w zalenoci od koloru swiata + r *= Global::ambientDayLight[0]; // w zaleźności od koloru swiatła g *= Global::ambientDayLight[1]; b *= Global::ambientDayLight[2]; if (linealpha > 1.0) - linealpha = 1.0; // trzeba ograniczy do <=1 + linealpha = 1.0; // trzeba ograniczyć do <=1 glColor4f(r, g, b, linealpha); if (!uiDisplayList) - Optimize(); // generowanie DL w miar potrzeby + Optimize(); // generowanie DL w miarę potrzeby glCallList(uiDisplayList); glLineWidth(1.0); glEnable(GL_LINE_SMOOTH); - // glEnable(GL_LIGHTING); //bez tego si modele nie owietlaj + // glEnable(GL_LIGHTING); //bez tego się modele nie oświetlają } } int TTraction::RaArrayPrepare() -{ // przygotowanie tablic do skopiowania do VBO (zliczanie wierzchokw) - // if (bVisible) //o ile w ogle wida +{ // przygotowanie tablic do skopiowania do VBO (zliczanie wierzchołków) + // if (bVisible) //o ile w ogóle widać switch (Wires) { case 1: @@ -375,7 +375,7 @@ int TTraction::RaArrayPrepare() }; void TTraction::RaArrayFill(CVertNormTex *Vert) -{ // wypenianie tablic VBO +{ // wypełnianie tablic VBO CVertNormTex *old = Vert; double ddp = hypot(pPoint2.x - pPoint1.x, pPoint2.z - pPoint1.z); if (Wires == 2) @@ -401,7 +401,7 @@ void TTraction::RaArrayFill(CVertNormTex *Vert) float t; // Przewod nosny 'Marcin if (Wires > 1) - { // lina nona w kawakach + { // lina nośna w kawałkach Vert->x = pPoint3.x; Vert->y = pPoint3.y; Vert->z = pPoint3.z; @@ -467,40 +467,40 @@ void TTraction::RaArrayFill(CVertNormTex *Vert) } } if ((Vert - old) != iLines) - WriteLog("!!! Wygenerowano punktw " + std::to_string(Vert - old) + ", powinno by " + + WriteLog("!!! Wygenerowano punktów " + std::to_string(Vert - old) + ", powinno być " + std::to_string(iLines)); }; void TTraction::RenderVBO(float mgn, int iPtr) -{ // renderowanie z uyciem VBO +{ // renderowanie z użyciem VBO if (Wires != 0 && !TestFlag(DamageFlag, 128)) // rysuj jesli sa druty i nie zerwana { glBindTexture(GL_TEXTURE_2D, 0); - glDisable(GL_LIGHTING); // aby nie uywao wektorw normalnych do kolorowania + glDisable(GL_LIGHTING); // aby nie używało wektorów normalnych do kolorowania glColor4f(0, 0, 0, 1); // jak nieznany kolor to czarne nieprzezroczyste if (!Global::bSmoothTraction) - glDisable(GL_LINE_SMOOTH); // na liniach kiepsko wyglda - robi gradient + glDisable(GL_LINE_SMOOTH); // na liniach kiepsko wygląda - robi gradient float linealpha = 5000 * WireThickness / (mgn + 1.0); //*WireThickness if (linealpha > 1.2) - linealpha = 1.2; // zbyt grube nie s dobre + linealpha = 1.2; // zbyt grube nie są dobre glLineWidth(linealpha); // McZapkie-261102: kolor zalezy od materialu i zasniedzenia float r, g, b; switch (Material) - { // Ra: kolory podzieliem przez 2, bo po zmianie ambient za jasne byy - // trzeba uwzgldni kierunek wiecenia Soca - tylko ze Socem wida kolor + { // Ra: kolory podzieliłem przez 2, bo po zmianie ambient za jasne były + // trzeba uwzględnić kierunek świecenia Słońca - tylko ze Słońcem widać kolor case 1: if (TestFlag(DamageFlag, 1)) { r = 0.00000; g = 0.32549; - b = 0.2882353; // zielona mied + b = 0.2882353; // zielona miedź } else { r = 0.35098; g = 0.22549; - b = 0.1; // czerwona mied + b = 0.1; // czerwona miedź } break; case 2: @@ -517,43 +517,43 @@ void TTraction::RenderVBO(float mgn, int iPtr) b = 0.25; // srebrne Al } break; - // tymczasowo pokazanie zasilanych odcinkw + // tymczasowo pokazanie zasilanych odcinków case 4: r = 0.5; g = 0.5; b = 1.0; - break; // niebieskie z podczonym zasilaniem + break; // niebieskie z podłączonym zasilaniem case 5: r = 1.0; g = 0.0; b = 0.0; - break; // czerwone z podczonym zasilaniem 1 + break; // czerwone z podłączonym zasilaniem 1 case 6: r = 0.0; g = 1.0; b = 0.0; - break; // zielone z podczonym zasilaniem 2 + break; // zielone z podłączonym zasilaniem 2 case 7: r = 1.0; g = 1.0; b = 0.0; - break; //te z podczonym zasilaniem z obu stron + break; //żółte z podłączonym zasilaniem z obu stron } r = r * Global::ambientDayLight[0]; // w zaleznosci od koloru swiatla g = g * Global::ambientDayLight[1]; b = b * Global::ambientDayLight[2]; if (linealpha > 1.0) - linealpha = 1.0; // trzeba ograniczy do <=1 + linealpha = 1.0; // trzeba ograniczyć do <=1 glColor4f(r, g, b, linealpha); glDrawArrays(GL_LINES, iPtr, iLines); glLineWidth(1.0); glEnable(GL_LINE_SMOOTH); - glEnable(GL_LIGHTING); // bez tego si modele nie owietlaj + glEnable(GL_LIGHTING); // bez tego się modele nie oświetlają } }; int TTraction::TestPoint(vector3 *Point) -{ // sprawdzanie, czy przsa mona poczy +{ // sprawdzanie, czy przęsła można połączyć if (!hvNext[0]) if (pPoint1.Equal(Point)) return 0; @@ -564,7 +564,7 @@ int TTraction::TestPoint(vector3 *Point) }; void TTraction::Connect(int my, TTraction *with, int to) -{ //czenie segmentu (with) od strony (my) do jego (to) +{ //łączenie segmentu (with) od strony (my) do jego (to) if (my) { // do mojego Point2 hvNext[1] = with; @@ -585,118 +585,118 @@ void TTraction::Connect(int my, TTraction *with, int to) with->hvNext[0] = this; with->iNext[0] = my; } - if (hvNext[0]) // jeli z obu stron podczony + if (hvNext[0]) // jeśli z obu stron podłączony if (hvNext[1]) iLast = 0; // to nie jest ostatnim - if (with->hvNext[0]) // temu te, bo drugi raz czenie si nie nie wykona + if (with->hvNext[0]) // temu też, bo drugi raz łączenie się nie nie wykona if (with->hvNext[1]) with->iLast = 0; // to nie jest ostatnim }; bool TTraction::WhereIs() -{ // ustalenie przedostatnich przse +{ // ustalenie przedostatnich przęseł if (iLast) - return (iLast == 1); // ma ju ustalon informacj o pooeniu - if (hvNext[0] ? hvNext[0]->iLast == 1 : false) // jeli poprzedni jest ostatnim + return (iLast == 1); // ma już ustaloną informację o położeniu + if (hvNext[0] ? hvNext[0]->iLast == 1 : false) // jeśli poprzedni jest ostatnim iLast = 2; // jest przedostatnim - else if (hvNext[1] ? hvNext[1]->iLast == 1 : false) // jeli nastpny jest ostatnim + else if (hvNext[1] ? hvNext[1]->iLast == 1 : false) // jeśli następny jest ostatnim iLast = 2; // jest przedostatnim - return (iLast == 1); // ostatnie bd dostawa zasilanie + return (iLast == 1); // ostatnie będą dostawać zasilanie }; void TTraction::Init() -{ // przeliczenie parametrw - vParametric = pPoint2 - pPoint1; // wektor mnonikw parametru dla rwnania parametrycznego +{ // przeliczenie parametrów + vParametric = pPoint2 - pPoint1; // wektor mnożników parametru dla równania parametrycznego }; void TTraction::ResistanceCalc(int d, double r, TTractionPowerSource *ps) -{ //(this) jest przsem zasilanym, o rezystancji (r), policzy rezystancj zastpcz ssiednich +{ //(this) jest przęsłem zasilanym, o rezystancji (r), policzyć rezystancję zastępczą sąsiednich if (d >= 0) - { // podanie we wskazanym kierunku + { // podążanie we wskazanym kierunku TTraction *t = hvNext[d], *p; if (ps) - psPower[d ^ 1] = ps; // podczenie podanego + psPower[d ^ 1] = ps; // podłączenie podanego else - ps = psPower[d ^ 1]; // zasilacz od przeciwnej strony ni idzie analiza + ps = psPower[d ^ 1]; // zasilacz od przeciwnej strony niż idzie analiza d = iNext[d]; // kierunek // double r; //sumaryczna rezystancja - if (DebugModeFlag) // tylko podczas testw - Material = 4; // pokazanie, e to przso ma podczone zasilanie - while (t ? !t->psPower[d] : false) // jeli jest jaki kolejny i nie ma ustalonego zasilacza - { // ustawienie zasilacza i policzenie rezystancji zastpczej - if (DebugModeFlag) // tylko podczas testw - if (t->Material != 4) // przsa zasilajcego nie modyfikowa + if (DebugModeFlag) // tylko podczas testów + Material = 4; // pokazanie, że to przęsło ma podłączone zasilanie + while (t ? !t->psPower[d] : false) // jeśli jest jakiś kolejny i nie ma ustalonego zasilacza + { // ustawienie zasilacza i policzenie rezystancji zastępczej + if (DebugModeFlag) // tylko podczas testów + if (t->Material != 4) // przęsła zasilającego nie modyfikować { if (t->Material < 4) - t->Material = 4; // tymczasowo, aby zmienia kolor - t->Material |= d ? 2 : 1; // kolor zaleny od strony, z ktrej jest zasilanie + t->Material = 4; // tymczasowo, aby zmieniła kolor + t->Material |= d ? 2 : 1; // kolor zależny od strony, z której jest zasilanie } - t->psPower[d] = ps; // skopiowanie wskanika zasilacza od danej strony + t->psPower[d] = ps; // skopiowanie wskaźnika zasilacza od danej strony t->fResistance[d] = r; // wpisanie rezystancji w kierunku tego zasilacza r += t->fResistivity * Length3(t->vParametric); // doliczenie oporu kolejnego odcinka - p = t; // zapamitanie dotychczasowego - t = p->hvNext[d ^ 1]; // podanie w t sam stron + p = t; // zapamiętanie dotychczasowego + t = p->hvNext[d ^ 1]; // podążanie w tę samą stronę d = p->iNext[d ^ 1]; - // w przypadku zaptlenia sieci moe si zawiesi? + // w przypadku zapętlenia sieci może się zawiesić? } } else - { // podanie w obu kierunkach, mona by rekurencj, ale szkoda zasobw + { // podążanie w obu kierunkach, można by rekurencją, ale szkoda zasobów r = 0.5 * fResistivity * - Length3(vParametric); // powiedzmy, e w zasilanym przle jest poowa + Length3(vParametric); // powiedzmy, że w zasilanym przęśle jest połowa if (fResistance[0] == 0.0) - ResistanceCalc(0, r); // do tyu (w stron Point1) + ResistanceCalc(0, r); // do tyłu (w stronę Point1) if (fResistance[1] == 0.0) - ResistanceCalc(1, r); // do przodu (w stron Point2) + ResistanceCalc(1, r); // do przodu (w stronę Point2) } }; void TTraction::PowerSet(TTractionPowerSource *ps) -{ // podczenie przsa do zasilacza +{ // podłączenie przęsła do zasilacza if (ps->bSection) psSection = ps; // ustalenie sekcji zasilania else - { // ustalenie punktu zasilania (nie ma jeszcze pocze midzy przsami) - psPowered = ps; // ustawienie bezporedniego zasilania dla przsa - psPower[0] = psPower[1] = ps; // a to chyba nie jest dobry pomys, bo nawet zasilane przso - // powinno mie wskazania na inne - fResistance[0] = fResistance[1] = 0.0; // a liczy si tylko rezystancja zasilacza + { // ustalenie punktu zasilania (nie ma jeszcze połączeń między przęsłami) + psPowered = ps; // ustawienie bezpośredniego zasilania dla przęsła + psPower[0] = psPower[1] = ps; // a to chyba nie jest dobry pomysł, bo nawet zasilane przęsło + // powinno mieć wskazania na inne + fResistance[0] = fResistance[1] = 0.0; // a liczy się tylko rezystancja zasilacza } }; double TTraction::VoltageGet(double u, double i) -{ // pobranie napicia na przle po podczeniu do niego rezystancji (res) - na razie jest to prd +{ // pobranie napięcia na przęśle po podłączeniu do niego rezystancji (res) - na razie jest to prąd if (!psSection) if (!psPowered) - return NominalVoltage; // jak nie ma zasilacza, to napicie podane w przle - // na pocztek mona zaoy, e wszystkie podstacje maj to samo napicie i nie pynie prd - // pomidzy nimi - // dla danego przsa mamy 3 rda zasilania - // 1. zasilacz psPower[0] z rezystancj fResistance[0] oraz jego wewntrzn - // 2. zasilacz psPower[1] z rezystancj fResistance[1] oraz jego wewntrzn - // 3. zasilacz psPowered z jego wewntrzn rezystancj dla przse zasilanych bezporednio + return NominalVoltage; // jak nie ma zasilacza, to napięcie podane w przęśle + // na początek można założyć, że wszystkie podstacje mają to samo napięcie i nie płynie prąd + // pomiędzy nimi + // dla danego przęsła mamy 3 źródła zasilania + // 1. zasilacz psPower[0] z rezystancją fResistance[0] oraz jego wewnętrzną + // 2. zasilacz psPower[1] z rezystancją fResistance[1] oraz jego wewnętrzną + // 3. zasilacz psPowered z jego wewnętrzną rezystancją dla przęseł zasilanych bezpośrednio double res = (i != 0.0) ? (u / i) : 10000.0; if (psPowered) return psPowered->CurrentGet(res) * - res; // yB: dla zasilanego nie baw si w gwiazdy, tylko bierz bezporednio + res; // yB: dla zasilanego nie baw się w gwiazdy, tylko bierz bezpośrednio double r0t, r1t, r0g, r1g; double u0, u1, i0, i1; - r0t = fResistance[0]; //redni pomys, ale lepsze ni nic - r1t = fResistance[1]; // bo nie uwzgldnia spadkw z innych pojazdw + r0t = fResistance[0]; //średni pomysł, ale lepsze niż nic + r1t = fResistance[1]; // bo nie uwzględnia spadków z innych pojazdów if (psPower[0] && psPower[1]) - { // gdy przso jest zasilane z obu stron - mamy trjkt: res, r0t, r1t - // yB: Gdy wywali podstacja, to zaczyna si robi nieciekawie - napicie w sekcji na jednym - // kocu jest rwne zasilaniu, - // yB: a na drugim kocu jest rwne 0. Kolejna sprawa to rozrnienie uszynienia sieci na - // podstacji/odczniku (czyli - // yB: potencja masy na sieci) od braku zasilania (czyli odczenie rda od sieci i brak - // jego wpywu na napicie). + { // gdy przęsło jest zasilane z obu stron - mamy trójkąt: res, r0t, r1t + // yB: Gdy wywali podstacja, to zaczyna się robić nieciekawie - napięcie w sekcji na jednym + // końcu jest równe zasilaniu, + // yB: a na drugim końcu jest równe 0. Kolejna sprawa to rozróżnienie uszynienia sieci na + // podstacji/odłączniku (czyli + // yB: potencjał masy na sieci) od braku zasilania (czyli odłączenie źródła od sieci i brak + // jego wpływu na napięcie). if ((r0t > 0.0) && (r1t > 0.0)) - { // rezystancje w mianowniku nie mog by zerowe - r0g = res + r0t + (res * r0t) / r1t; // przeliczenie z trjkta na gwiazd + { // rezystancje w mianowniku nie mogą być zerowe + r0g = res + r0t + (res * r0t) / r1t; // przeliczenie z trójkąta na gwiazdę r1g = res + r1t + (res * r1t) / r0t; - // pobierane s prdy dla kadej rezystancji, a suma jest mnoona przez rezystancj - // pojazdu w celu uzyskania napicia + // pobierane są prądy dla każdej rezystancji, a suma jest mnożona przez rezystancję + // pojazdu w celu uzyskania napięcia i0 = psPower[0]->CurrentGet(r0g); // oddzielnie dla sprawdzenia i1 = psPower[1]->CurrentGet(r1g); return (i0 + i1) * res; @@ -706,13 +706,13 @@ double TTraction::VoltageGet(double u, double i) else if (r1t >= 0.0) return psPower[1]->CurrentGet(res + r1t) * res; else - return 0.0; // co z tym zrobi? + return 0.0; // co z tym zrobić? } else if (psPower[0] && (r0t >= 0.0)) - { // jeli odcinek podczony jest tylko z jednej strony + { // jeśli odcinek podłączony jest tylko z jednej strony return psPower[0]->CurrentGet(res + r0t) * res; } else if (psPower[1] && (r1t >= 0.0)) return psPower[1]->CurrentGet(res + r1t) * res; - return 0.0; // gdy nie podczony wcale? + return 0.0; // gdy nie podłączony wcale? }; diff --git a/Traction.h b/Traction.h index 86f53a58..ab95eb18 100644 --- a/Traction.h +++ b/Traction.h @@ -19,24 +19,24 @@ using namespace Math3D; class TTractionPowerSource; class TTraction -{ // drut zasilajcy, dla wskanikw uywa przedrostka "hv" +{ // drut zasilający, dla wskaźników używać przedrostka "hv" private: // vector3 vUp,vFront,vLeft; // matrix4x4 mMatrix; - // matryca do wyliczania pozycji drutu w zalenoci od [X,Y,kt] w scenerii: - // - x: odlego w bok (czy odbierak si nie zsun) - // - y: przyjmuje warto <0,1>, jeli pod drutem (wzdu) - // - z: wysoko bezwzgldna drutu w danym miejsu + // matryca do wyliczania pozycji drutu w zależności od [X,Y,kąt] w scenerii: + // - x: odległość w bok (czy odbierak się nie zsunął) + // - y: przyjmuje wartość <0,1>, jeśli pod drutem (wzdłuż) + // - z: wysokość bezwzględna drutu w danym miejsu public: // na razie - TTractionPowerSource *psPower[2]; // najblisze zasilacze z obu kierunkw - TTractionPowerSource *psPowered; // ustawione tylko dla bezporednio zasilanego przsa - TTraction *hvNext[2]; //czenie drutw w sie - int iNext[2]; // do ktrego koca si czy - int iLast; // ustawiony bit 0, jeli jest ostatnim drutem w sekcji; bit1 - przedostatni + TTractionPowerSource *psPower[2]; // najbliższe zasilacze z obu kierunków + TTractionPowerSource *psPowered; // ustawione tylko dla bezpośrednio zasilanego przęsła + TTraction *hvNext[2]; //łączenie drutów w sieć + int iNext[2]; // do którego końca się łączy + int iLast; // ustawiony bit 0, jeśli jest ostatnim drutem w sekcji; bit1 - przedostatni public: GLuint uiDisplayList; vector3 pPoint1, pPoint2, pPoint3, pPoint4; - vector3 vParametric; // wspczynniki rwnania parametrycznego odcinka + vector3 vParametric; // współczynniki równania parametrycznego odcinka double fHeightDifference; //,fMiddleHeight; // int iCategory,iMaterial,iDamageFlag; // float fU,fR,fMaxI,fWireThickness; @@ -52,10 +52,10 @@ class TTraction float WireOffset; std::string asPowerSupplyName; // McZapkie: nazwa podstacji trakcyjnej TTractionPowerSource * - psSection; // zasilacz (opcjonalnie moe to by pulpit sterujcy EL2 w hali!) - std::string asParallel; // nazwa przsa, z ktrym moe by bienia wsplna - TTraction *hvParallel; // jednokierunkowa i zaptlona lista przse ewentualnej bieni wsplnej - float fResistance[2]; // rezystancja zastpcza do punktu zasilania (0: przso zasilane, <0: do + psSection; // zasilacz (opcjonalnie może to być pulpit sterujący EL2 w hali!) + std::string asParallel; // nazwa przęsła, z którym może być bieżnia wspólna + TTraction *hvParallel; // jednokierunkowa i zapętlona lista przęseł ewentualnej bieżni wspólnej + float fResistance[2]; // rezystancja zastępcza do punktu zasilania (0: przęsło zasilane, <0: do // policzenia) int iTries; // bool bVisible; diff --git a/TractionPower.cpp b/TractionPower.cpp index 2fca9d33..366945e7 100644 --- a/TractionPower.cpp +++ b/TractionPower.cpp @@ -31,16 +31,16 @@ TTractionPowerSource::TTractionPowerSource(TGroundNode *node) SlowFuseTimeOut = 60; Recuperation = false; - TotalAdmitance = 1e-10; // 10Mom - jaka tam upywno + TotalAdmitance = 1e-10; // 10Mom - jakaś tam upływność TotalPreviousAdmitance = 1e-10; // zero jest szkodliwe OutputVoltage = 0; FastFuse = false; SlowFuse = false; FuseTimer = 0; FuseCounter = 0; - psNode[0] = NULL; // sekcje zostan podczone do zasilaczy + psNode[0] = NULL; // sekcje zostaną podłączone do zasilaczy psNode[1] = NULL; - bSection = false; // sekcja nie jest rdem zasilania, tylko grupuje przsa + bSection = false; // sekcja nie jest źródłem zasilania, tylko grupuje przęsła gMyNode = node; }; @@ -70,16 +70,16 @@ bool TTractionPowerSource::Load(cParser *parser) *parser >> token; if (token.compare("recuperation") == 0) Recuperation = true; - else if (token.compare("section") == 0) // odcznik sekcyjny - bSection = true; // nie jest rdem zasilania, a jedynie informuje o prdzie odczenia + else if (token.compare("section") == 0) // odłącznik sekcyjny + bSection = true; // nie jest źródłem zasilania, a jedynie informuje o prądzie odłączenia // sekcji z obwodu parser->getTokens(); *parser >> token; if (token.compare("end") != 0) Error("tractionpowersource end statement missing"); - // if (!bSection) //odcznik sekcji zasadniczo nie ma impedancji (0.01 jest OK) - if (InternalRes < 0.1) // co maa ta rezystancja bya... - InternalRes = 0.2; // tak okoo 0.2, wg + // if (!bSection) //odłącznik sekcji zasadniczo nie ma impedancji (0.01 jest OK) + if (InternalRes < 0.1) // coś mała ta rezystancja była... + InternalRes = 0.2; // tak około 0.2, wg // http://www.ikolej.pl/fileadmin/user_upload/Seminaria_IK/13_05_07_Prezentacja_Kruczek.pdf return true; }; @@ -90,12 +90,12 @@ bool TTractionPowerSource::Render() }; bool TTractionPowerSource::Update(double dt) -{ // powinno by wykonane raz na krok fizyki +{ // powinno być wykonane raz na krok fizyki // if (NominalVoltage * TotalPreviousAdmitance > - // MaxOutputCurrent * 0.00000005) // iloczyn napicia i admitancji daje prd + // MaxOutputCurrent * 0.00000005) // iloczyn napięcia i admitancji daje prąd // ErrorLog("Power overload: \"" + gMyNode->asName + "\" with current " + AnsiString(NominalVoltage * TotalPreviousAdmitance) + "A"); if (NominalVoltage * TotalPreviousAdmitance > - MaxOutputCurrent) // iloczyn napicia i admitancji daje prd + MaxOutputCurrent) // iloczyn napięcia i admitancji daje prąd { FastFuse = true; FuseCounter += 1; @@ -111,46 +111,46 @@ bool TTractionPowerSource::Update(double dt) FuseTimer = 0; } if (FastFuse || SlowFuse) - { // jeli ktry z bezpiecznikw zadziaa + { // jeśli któryś z bezpieczników zadziałał TotalAdmitance = 0; FuseTimer += dt; if (!SlowFuse) - { // gdy szybki, odczeka krtko i zaczy + { // gdy szybki, odczekać krótko i załączyć if (FuseTimer > FastFuseTimeOut) FastFuse = false; } else if (FuseTimer > SlowFuseTimeOut) { SlowFuse = false; - FuseCounter = 0; // dajemy znw szans + FuseCounter = 0; // dajemy znów szansę } } - TotalPreviousAdmitance = TotalAdmitance; // uywamy admitancji z poprzedniego kroku + TotalPreviousAdmitance = TotalAdmitance; // używamy admitancji z poprzedniego kroku if (TotalPreviousAdmitance == 0.0) - TotalPreviousAdmitance = 1e-10; // przynajmniej minimalna upywno - TotalAdmitance = 1e-10; // a w aktualnym kroku sumujemy admitancj + TotalPreviousAdmitance = 1e-10; // przynajmniej minimalna upływność + TotalAdmitance = 1e-10; // a w aktualnym kroku sumujemy admitancję return true; }; double TTractionPowerSource::CurrentGet(double res) -{ // pobranie wartoci prdu przypadajcego na rezystancj (res) - // niech pamita poprzedni admitancj i wg niej przydziela prd +{ // pobranie wartości prądu przypadającego na rezystancję (res) + // niech pamięta poprzednią admitancję i wg niej przydziela prąd if (SlowFuse || FastFuse) - { // czekanie na zanik obcienia sekcji - if (res < 100.0) // liczenie czasu dopiero, gdy obcienie zniknie + { // czekanie na zanik obciążenia sekcji + if (res < 100.0) // liczenie czasu dopiero, gdy obciążenie zniknie FuseTimer = 0; return 0; } if ((res > 0) || ((res < 0) && (Recuperation || true))) TotalAdmitance += - 1.0 / res; // poczenie rwnolege rezystancji jest rwnowane sumie admitancji + 1.0 / res; // połączenie równoległe rezystancji jest równoważne sumie admitancji float NomVolt = (TotalPreviousAdmitance < 0 ? NominalVoltage * 1.083 : NominalVoltage); TotalCurrent = (TotalPreviousAdmitance != 0.0) ? NomVolt / (InternalRes + 1.0 / TotalPreviousAdmitance) : - 0.0; // napicie dzielone przez sum rezystancji wewntrznej i obcienia - OutputVoltage = NomVolt - InternalRes * TotalCurrent; // napicie na obcieniu - return TotalCurrent / (res * TotalPreviousAdmitance); // prd proporcjonalny do udziau (1/res) - // w cakowitej admitancji + 0.0; // napięcie dzielone przez sumę rezystancji wewnętrznej i obciążenia + OutputVoltage = NomVolt - InternalRes * TotalCurrent; // napięcie na obciążeniu + return TotalCurrent / (res * TotalPreviousAdmitance); // prąd proporcjonalny do udziału (1/res) + // w całkowitej admitancji }; void TTractionPowerSource::PowerSet(TTractionPowerSource *ps) @@ -159,7 +159,7 @@ void TTractionPowerSource::PowerSet(TTractionPowerSource *ps) psNode[0] = ps; else if (!psNode[1]) psNode[1] = ps; - // else ErrorLog("nie moe by wicej punktw zasilania ni dwa"); + // else ErrorLog("nie może być więcej punktów zasilania niż dwa"); }; //--------------------------------------------------------------------------- diff --git a/TractionPower.h b/TractionPower.h index 8099e677..494c2ed4 100644 --- a/TractionPower.h +++ b/TractionPower.h @@ -33,12 +33,12 @@ class TTractionPowerSource bool SlowFuse; double FuseTimer; int FuseCounter; - TGroundNode *gMyNode; // wskanik na wze rodzica + TGroundNode *gMyNode; // wskaźnik na węzeł rodzica protected: public: // zmienne publiczne - TTractionPowerSource *psNode[2]; // zasilanie na kocach dla sekcji - bool bSection; // czy jest sekcj + TTractionPowerSource *psNode[2]; // zasilanie na końcach dla sekcji + bool bSection; // czy jest sekcją public: // AnsiString asName; TTractionPowerSource(TGroundNode *node); diff --git a/Train.cpp b/Train.cpp index c68862c6..d511f36f 100644 --- a/Train.cpp +++ b/Train.cpp @@ -40,10 +40,10 @@ TCab::TCab() dimm_r = dimm_g = dimm_b = 1; intlit_r = intlit_g = intlit_b = 0; intlitlow_r = intlitlow_g = intlitlow_b = 0; - iGaugesMax = 100; // 95 - trzeba pobiera� to z pliku konfiguracyjnego + iGaugesMax = 100; // 95 - trzeba pobierać to z pliku konfiguracyjnego ggList = new TGauge[iGaugesMax]; - iGauges = 0; // na razie nie s� dodane - iButtonsMax = 60; // 55 - trzeba pobiera� to z pliku konfiguracyjnego + iGauges = 0; // na razie nie są dodane + iButtonsMax = 60; // 55 - trzeba pobierać to z pliku konfiguracyjnego btList = new TButton[iButtonsMax]; iButtons = 0; } @@ -111,16 +111,16 @@ TButton *TCab::Button(int n) }; void TCab::Update() -{ // odczyt parametr�w i ustawienie animacji submodelom +{ // odczyt parametrów i ustawienie animacji submodelom int i; for (i = 0; i < iGauges; ++i) { // animacje izometryczne - ggList[i].UpdateValue(); // odczyt parametru i przeliczenie na k�t + ggList[i].UpdateValue(); // odczyt parametru i przeliczenie na kąt ggList[i].Update(); // ustawienie animacji } for (i = 0; i < iButtons; ++i) { // animacje dwustanowe - btList[i].Update(); // odczyt parametru i wyb�r submodelu + btList[i].Update(); // odczyt parametru i wybór submodelu } }; @@ -172,7 +172,7 @@ TTrain::TTrain() dsbEN57_CouplerStretch = NULL; dsbBufferClamp = NULL; iRadioChannel = 0; - fTachoTimer = 0.0; // w��czenie skok�w wskaza� pr�dko�ciomierza + fTachoTimer = 0.0; // włączenie skoków wskazań prędkościomierza } TTrain::~TTrain() @@ -180,12 +180,12 @@ TTrain::~TTrain() if (DynamicObject) if (DynamicObject->Mechanik) DynamicObject->Mechanik->TakeControl( - true); // likwidacja kabiny wymaga przej�cia przez AI + true); // likwidacja kabiny wymaga przejęcia przez AI } bool TTrain::Init(TDynamicObject *NewDynamicObject, bool e3d) -{ // powi�zanie r�cznego sterowania kabin� z pojazdem - // Global::pUserDynamic=NewDynamicObject; //pojazd renderowany bez trz�sienia +{ // powiązanie ręcznego sterowania kabiną z pojazdem + // Global::pUserDynamic=NewDynamicObject; //pojazd renderowany bez trzęsienia DynamicSet(NewDynamicObject); if (!e3d) if (DynamicObject->Mechanik == NULL) @@ -214,7 +214,7 @@ bool TTrain::Init(TDynamicObject *NewDynamicObject, bool e3d) fMechMaxSpring = 0.15; fMechRoll = 0.05; fMechPitch = 0.1; - fMainRelayTimer = 0; // Hunter, do k...y n�dzy, ustawiaj warto�ci pocz�tkowe zmiennych! + fMainRelayTimer = 0; // Hunter, do k...y nędzy, ustawiaj wartości początkowe zmiennych! if (!LoadMMediaFile(DynamicObject->asBaseDir + DynamicObject->MoverParameters->TypeName + ".mmd")) @@ -240,9 +240,9 @@ bool TTrain::Init(TDynamicObject *NewDynamicObject, bool e3d) // sConverter.Init("converter.wav",1.5); //NBMX obsluga przez AdvSound iCabn = 0; - // Ra: taka proteza - przes�anie kierunku do cz�on�w connected + // Ra: taka proteza - przesłanie kierunku do członów connected if (mvControlled->ActiveDir > 0) - { // by�o do przodu + { // było do przodu mvControlled->DirectionBackward(); mvControlled->DirectionForward(); } @@ -393,7 +393,7 @@ PyObject *TTrain::GetTrainState() } void TTrain::OnKeyDown(int cKey) -{ // naci�ni�cie klawisza +{ // naciśnięcie klawisza bool isEztOer; isEztOer = ((mvControlled->TrainType == dt_EZT) && (mvControlled->Battery == true) && (mvControlled->EpFuse == true) && (mvOccupied->BrakeSubsystem == ss_ESt) && @@ -402,7 +402,7 @@ void TTrain::OnKeyDown(int cKey) // isEztOer=((mvControlled->TrainType==dt_EZT)&&(mvControlled->Battery==true)&&(mvControlled->EpFuse==true)&&(mvOccupied->BrakeSubsystem==Oerlikon)&&(mvControlled->ActiveDir!=0)); if (GetAsyncKeyState(VK_SHIFT) < 0) - { // wci�ni�ty [Shift] + { // wciśnięty [Shift] if (cKey == Global::Keys[k_IncMainCtrlFAST]) // McZapkie-200702: szybkie // przelaczanie na poz. // bezoporowa @@ -493,9 +493,9 @@ void TTrain::OnKeyDown(int cKey) // if // (((mvControlled->TrainType==dt_EZT)||(mvControlled->EngineType==ElectricSeriesMotor)||(mvControlled->EngineType==DieselElectric))&&(!mvControlled->Battery)) if (!mvControlled->Battery) - { // wy��cznik jest te� w SN61, ewentualnie - // za��cza� pr�d na sta�e z poziomu FIZ - if (mvOccupied->BatterySwitch(true)) // bateria potrzebna np. do zapalenia �wiate� + { // wyłącznik jest też w SN61, ewentualnie + // załączać prąd na stałe z poziomu FIZ + if (mvOccupied->BatterySwitch(true)) // bateria potrzebna np. do zapalenia świateł { dsbSwitch->Play(0, 0, 0); if (ggBatteryButton.SubModel) @@ -507,7 +507,7 @@ void TTrain::OnKeyDown(int cKey) SetLights(); } if (TestFlag(mvOccupied->SecuritySystem.SystemType, - 2)) // Ra: znowu w kabinie jest co�, co by� nie powinno! + 2)) // Ra: znowu w kabinie jest coś, co być nie powinno! { SetFlag(mvOccupied->SecuritySystem.Status, s_active); SetFlag(mvOccupied->SecuritySystem.Status, s_SHPalarm); @@ -662,30 +662,30 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || } else if (cKey == Global::Keys[k_SmallCompressor]) // Winger 160404: mala // sprezarka wl - { // Ra: d�wi�k, gdy razem z [Shift] + { // Ra: dźwięk, gdy razem z [Shift] if ((mvControlled->TrainType & dt_EZT) ? mvControlled == mvOccupied : !mvOccupied->ActiveCab) // tylko w maszynowym if (Console::Pressed(VK_CONTROL)) // z [Ctrl] - mvControlled->bPantKurek3 = true; // zbiornik pantografu po��czony - // jest ze zbiornikiem g��wnym + mvControlled->bPantKurek3 = true; // zbiornik pantografu połączony + // jest ze zbiornikiem głównym // (pompowanie nie ma sensu) - else if (!mvControlled->PantCompFlag) // je�li wy��czona - if (mvControlled->Battery) // jeszcze musi by� za��czona bateria - if (mvControlled->PantPress < 4.8) // pisz�, �e to tak nie dzia�a + else if (!mvControlled->PantCompFlag) // jeśli wyłączona + if (mvControlled->Battery) // jeszcze musi być załączona bateria + if (mvControlled->PantPress < 4.8) // piszą, że to tak nie działa { mvControlled->PantCompFlag = true; dsbSwitch->SetVolume(DSBVOLUME_MAX); - dsbSwitch->Play(0, 0, 0); // d�wi�k tylko po naci�ni�ciu klawisza + dsbSwitch->Play(0, 0, 0); // dźwięk tylko po naciśnięciu klawisza } } - else if (cKey == VkKeyScan('q')) // ze Shiftem - w��czenie AI + else if (cKey == VkKeyScan('q')) // ze Shiftem - włączenie AI { // McZapkie-240302 - wlaczanie automatycznego pilota (zadziala tylko w // trybie debugmode) if (DynamicObject->Mechanik) { if (DebugModeFlag) - if (DynamicObject->Mechanik->AIControllFlag) //�eby nie trzeba by�o - // roz��cza� dla + if (DynamicObject->Mechanik->AIControllFlag) //żeby nie trzeba było + // rozłączać dla // zresetowania DynamicObject->Mechanik->TakeControl(false); DynamicObject->Mechanik->TakeControl(true); @@ -705,7 +705,7 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || dsbSwitch->Play(0, 0, 0); } /* Ra: przeniesione do Mover.cpp - if (mvControlled->TrainType!=dt_EZT) //to powinno by� w fizyce, a + if (mvControlled->TrainType!=dt_EZT) //to powinno być w fizyce, a nie w kabinie! if (mvControlled->MinCurrentSwitch(true)) { @@ -786,7 +786,7 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || } /* if (Console::Pressed(VK_CONTROL)) - {//z [Ctrl] zapalamy albo gasimy �wiate�ko w kabinie + {//z [Ctrl] zapalamy albo gasimy światełko w kabinie if (iCabLightFlag<2) ++iCabLightFlag; //zapalenie } */ @@ -813,7 +813,7 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || // przedn. pantografu if (mvOccupied->ActiveCab == 1) //||((mvOccupied->ActiveCab<1)&&((mvControlled->TrainType&(dt_ET40|dt_ET41|dt_ET42|dt_EZT))==0))) - { // przedni gdy w kabinie 1 lub (z wyj�tkiem ET40, ET41, ET42 i EZT) gdy + { // przedni gdy w kabinie 1 lub (z wyjątkiem ET40, ET41, ET42 i EZT) gdy // w kabinie -1 mvControlled->PantFrontSP = false; if (mvControlled->PantFront(true)) @@ -839,10 +839,10 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || else if (cKey == Global::Keys[k_PantRearUp]) { // Winger 160204: podn. // tyln. pantografu - // wzgl�dem kierunku jazdy + // względem kierunku jazdy if (mvOccupied->ActiveCab == 1) //||((mvOccupied->ActiveCab<1)&&((mvControlled->TrainType&(dt_ET40|dt_ET41|dt_ET42|dt_EZT))==0))) - { // tylny gdy w kabinie 1 lub (z wyj�tkiem ET40, ET41, ET42 i EZT) gdy w + { // tylny gdy w kabinie 1 lub (z wyjątkiem ET40, ET41, ET42 i EZT) gdy w // kabinie -1 mvControlled->PantRearSP = false; if (mvControlled->PantRear(true)) @@ -866,13 +866,13 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || } } else if (cKey == Global::Keys[k_Active]) // yB 300407: przelacznik rozrzadu - { // Ra 2014-06: uruchomi�em to, aby aktywowa� czuwak w zajmowanym cz�onie, - // a wy��czy� w innych - // Ra 2014-03: aktywacja czuwaka przepi�ta na ustawienie kierunku w + { // Ra 2014-06: uruchomiłem to, aby aktywować czuwak w zajmowanym członie, + // a wyłączyć w innych + // Ra 2014-03: aktywacja czuwaka przepięta na ustawienie kierunku w // mvOccupied - // if (mvControlled->Battery) //je�li bateria jest ju� za��czona - // mvOccupied->BatterySwitch(true); //to w ten oto durny spos�b aktywuje - // si� CA/SHP + // if (mvControlled->Battery) //jeśli bateria jest już załączona + // mvOccupied->BatterySwitch(true); //to w ten oto durny sposób aktywuje + // się CA/SHP // if (mvControlled->CabActivisation()) // { // dsbSwitch->SetVolume(DSBVOLUME_MAX); @@ -881,7 +881,7 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || } else if (cKey == Global::Keys[k_Heating]) // Winger 020304: ogrzewanie // skladu - wlaczenie - { // Ra 2014-09: w trybie latania obs�uga jest w World.cpp + { // Ra 2014-09: w trybie latania obsługa jest w World.cpp if (!FreeFlyModeFlag) { if ((mvControlled->Heating == false) && @@ -895,7 +895,7 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || } } } - else if (cKey == Global::Keys[k_LeftSign]) // lewe swiatlo - w��czenie + else if (cKey == Global::Keys[k_LeftSign]) // lewe swiatlo - włączenie // ABu 060205: dzielo Wingera po malutkim liftingu: { if (!mvOccupied->LightsPosNo > 0) @@ -1003,10 +1003,10 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || } //----------- } } - else if (cKey == Global::Keys[k_UpperSign]) // ABu 060205: �wiat�o g�rne - - // w��czenie + else if (cKey == Global::Keys[k_UpperSign]) // ABu 060205: światło górne - + // włączenie { - if (mvOccupied->LightsPosNo > 0) // kr�ciolek od swiatel + if (mvOccupied->LightsPosNo > 0) //kręciolek od swiatel { if ((mvOccupied->LightsPos < mvOccupied->LightsPosNo) || (mvOccupied->LightsWrap)) { @@ -1250,7 +1250,7 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || else if (cKey == Global::Keys[k_IncLocalBrakeLevel]) { // Ra 2014-09: w // trybie latania - // obs�uga jest w + // obsługa jest w // World.cpp if (!FreeFlyModeFlag) { @@ -1277,8 +1277,8 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || mvOccupied->DecManualBrakeLevel(1); else ; - else // Ra 1014-06: AI potrafi zahamowa� pomocniczym mimo jego braku - - // odhamowa� jako� trzeba + else // Ra 1014-06: AI potrafi zahamować pomocniczym mimo jego braku - + // odhamować jakoś trzeba if ((mvOccupied->LocalBrake != ManualBrake) || mvOccupied->LocalBrakePos) mvOccupied->DecLocalBrakeLevel(1); } @@ -1286,12 +1286,12 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || else if ((cKey == Global::Keys[k_IncBrakeLevel]) && (mvOccupied->BrakeHandle != FV4a)) // if (mvOccupied->IncBrakeLevel()) if (mvOccupied->BrakeLevelAdd(Global::fBrakeStep)) // nieodpowiedni - // warunek; true, je�li - // mo�na dalej kr�ci� + // warunek; true, jeśli + // można dalej kręcić { keybrakecount = 0; if ((isEztOer) && (mvOccupied->BrakeCtrlPos < 3)) - { // Ra: uzale�ni� d�wi�k od zmiany stanu EP, nie od klawisza + { // Ra: uzależnić dźwięk od zmiany stanu EP, nie od klawisza dsbPneumaticSwitch->SetVolume(-10); dsbPneumaticSwitch->Play(0, 0, 0); } @@ -1300,13 +1300,13 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || ; else if ((cKey == Global::Keys[k_DecBrakeLevel]) && (mvOccupied->BrakeHandle != FV4a)) { - // now� wersj� dostarczy� ZiomalCl ("fixed looped sound in ezt when using + // nową wersję dostarczył ZiomalCl ("fixed looped sound in ezt when using // NUM_9 key") if ((mvOccupied->BrakeCtrlPos > -1) || (keybrakecount > 1)) { if ((isEztOer) && (mvControlled->Mains) && (mvOccupied->BrakeCtrlPos != -1)) - { // Ra: uzale�ni� d�wi�k od zmiany stanu EP, nie od klawisza + { // Ra: uzależnić dźwięk od zmiany stanu EP, nie od klawisza dsbPneumaticSwitch->SetVolume(-10); dsbPneumaticSwitch->Play(0, 0, 0); } @@ -1316,7 +1316,7 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || else keybrakecount += 1; // koniec wersji dostarczonej przez ZiomalCl - /* wersja poprzednia - ten pierwszy if ze �rednikiem nie dzia�a� jak + /* wersja poprzednia - ten pierwszy if ze średnikiem nie działał jak warunek if ((mvOccupied->BrakeCtrlPos>-1)|| (keybrakecount>1)) { @@ -1337,7 +1337,7 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || { // while (mvOccupied->IncBrakeLevel()); mvOccupied->BrakeLevelSet(mvOccupied->Handle->GetPos(bh_EB)); - if (mvOccupied->BrakeCtrlPosNo <= 0.1) // hamulec bezpiecze�stwa dla wagon�w + if (mvOccupied->BrakeCtrlPosNo <= 0.1) // hamulec bezpieczeństwa dla wagonów mvOccupied->EmergencyBrakeFlag = true; } else if (cKey == Global::Keys[k_Brake3]) @@ -1369,7 +1369,7 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || if (GetAsyncKeyState(VK_CONTROL) < 0) mvOccupied->BrakeLevelSet( mvOccupied->Handle->GetPos(bh_NP)); // yB: czy ten stos funkcji nie - // powinien by� jako oddzielna + // powinien być jako oddzielna // funkcja movera? } else if (cKey == Global::Keys[k_Brake1]) @@ -1416,7 +1416,7 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || else if (cKey == Global::Keys[k_Czuwak]) //--------------- // hunter-131211: zbicie czuwaka przeniesione do TTrain::Update() - { // Ra: tu zosta� tylko d�wi�k + { // Ra: tu został tylko dźwięk // dsbBuzzer->Stop(); // if (mvOccupied->SecuritySystemReset()) if (fabs(ggSecurityResetButton.GetValue()) < 0.001) @@ -1480,16 +1480,16 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || dsbSwitch->Play(0, 0, 0); } //------------ - if (mvOccupied->ActiveDir) // je�li kierunek niezerowy + if (mvOccupied->ActiveDir) // jeśli kierunek niezerowy if (DynamicObject->Mechanik) // na wszelki wypadek DynamicObject->Mechanik->CheckVehicles( - Change_direction); // aktualizacja skrajnych pojazd�w w sk�adzie + Change_direction); // aktualizacja skrajnych pojazdów w składzie } } else if (cKey == Global::Keys[k_DirectionBackward]) // r { if (GetAsyncKeyState(VK_CONTROL) < 0) - { // wci�ni�ty [Ctrl] + { // wciśnięty [Ctrl] if (mvOccupied->Radio == true) { dsbSwitch->SetVolume(DSBVOLUME_MAX); @@ -1514,10 +1514,10 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || dsbSwitch->Play(0, 0, 0); } //------------ - if (mvOccupied->ActiveDir) // je�li kierunek niezerowy + if (mvOccupied->ActiveDir) // jeśli kierunek niezerowy if (DynamicObject->Mechanik) // na wszelki wypadek DynamicObject->Mechanik->CheckVehicles( - Change_direction); // aktualizacja skrajnych pojazd�w w sk�adzie + Change_direction); // aktualizacja skrajnych pojazdów w składzie } } else if (cKey == Global::Keys[k_Main]) @@ -1538,9 +1538,9 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || // (mvControlled->EngineType==ElectricSeriesMotor)|| // (mvControlled->EngineType==DieselElectric)) if (mvOccupied->BatterySwitch(false)) - { // ewentualnie zablokowa� z FIZ, - // np. w samochodach si� nie - // od��cza akumulatora + { // ewentualnie zablokować z FIZ, + // np. w samochodach się nie + // odłącza akumulatora if (ggBatteryButton.SubModel) { ggBatteryButton.PutValue(0); @@ -1659,20 +1659,20 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || } else if (cKey == Global::Keys[k_SmallCompressor]) // Winger 160404: mala // sprezarka wl - { // Ra: bez [Shift] te� da� d�wi�k + { // Ra: bez [Shift] też dać dźwięk if ((mvControlled->TrainType & dt_EZT) ? mvControlled == mvOccupied : !mvOccupied->ActiveCab) // tylko w maszynowym if (Console::Pressed(VK_CONTROL)) // z [Ctrl] mvControlled->bPantKurek3 = - false; // zbiornik pantografu po��czony jest z ma�� spr��ark� - // (pompowanie ma sens, ale potem trzeba prze��czy�) - else if (!mvControlled->PantCompFlag) // je�li wy��czona - if (mvControlled->Battery) // jeszcze musi by� za��czona bateria - if (mvControlled->PantPress < 4.8) // pisz�, �e to tak nie dzia�a + false; // zbiornik pantografu połączony jest z małą sprężarką + // (pompowanie ma sens, ale potem trzeba przełączyć) + else if (!mvControlled->PantCompFlag) // jeśli wyłączona + if (mvControlled->Battery) // jeszcze musi być załączona bateria + if (mvControlled->PantPress < 4.8) // piszą, że to tak nie działa { mvControlled->PantCompFlag = true; dsbSwitch->SetVolume(DSBVOLUME_MAX); - dsbSwitch->Play(0, 0, 0); // d�wi�k tylko po naci�ni�ciu klawisza + dsbSwitch->Play(0, 0, 0); // dźwięk tylko po naciśnięciu klawisza } } // McZapkie-240302 - wylaczanie automatycznego pilota (w trybie ~debugmode @@ -1752,7 +1752,7 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || DynamicObject->PrevConnectedNo ? -1 : 1; } if (DynamicObject->MoverParameters->ActiveCab) - mvControlled->PantCompFlag = false; // wyj�cie z maszynowego wy��cza spr��ark� + mvControlled->PantCompFlag = false; // wyjście z maszynowego wyłącza sprężarkę } else if (cKey == Global::Keys[k_CabBackward]) { @@ -1766,7 +1766,7 @@ if ((mvControlled->PantFrontVolt) || (mvControlled->PantRearVolt) || } if (DynamicObject->MoverParameters->ActiveCab) mvControlled->PantCompFlag = - false; // wyj�cie z maszynowego wy��cza spr��ark� pomocnicz� + false; // wyjście z maszynowego wyłącza sprężarkę pomocniczą } else if (cKey == Global::Keys[k_Couple]) { // ABu051104: male zmiany, zeby @@ -1806,7 +1806,7 @@ if } else { // tryb freefly - int CouplNr = -1; // normalnie �aden ze sprz�g�w + int CouplNr = -1; // normalnie żaden ze sprzęgów TDynamicObject *tmp; tmp = DynamicObject->ABuScanNearestObject(DynamicObject->GetTrack(), 1, 1500, CouplNr); @@ -1829,10 +1829,10 @@ if ctrain_coupler)) { // tmp->MoverParameters->Couplers[CouplNr].Render=true; - // //pod��czony sprz�g b�dzie widoczny + // //podłączony sprzęg będzie widoczny if (DynamicObject->Mechanik) // na wszelki wypadek DynamicObject->Mechanik->CheckVehicles( - Connect); // aktualizacja flag kierunku w sk�adzie + Connect); // aktualizacja flag kierunku w składzie dsbCouplerAttach->SetVolume(DSBVOLUME_MAX); dsbCouplerAttach->Play(0, 0, 0); } @@ -1855,7 +1855,7 @@ if { rsHiss.Play(1, DSBPLAY_LOOPING, true, tmp->GetPosition()); DynamicObject->SetPneumatic(CouplNr, - 1); // Ra: to mi si� nie podoba !!!! + 1); // Ra: to mi się nie podoba !!!! tmp->SetPneumatic(CouplNr, 1); } } @@ -1877,7 +1877,7 @@ if dsbCouplerDetach->SetVolume(DSBVOLUME_MAX); dsbCouplerDetach->Play(0, 0, 0); DynamicObject->SetPneumatic(CouplNr, - 0); // Ra: to mi si� nie podoba !!!! + 0); // Ra: to mi się nie podoba !!!! tmp->SetPneumatic(CouplNr, 0); } } @@ -1930,13 +1930,13 @@ if // odlegle wagony if (iCabn > 0) { - if (!FreeFlyModeFlag) // tryb 'kabinowy' (pozwala r�wnie� roz��czy� - // sprz�gi zablokowane) + if (!FreeFlyModeFlag) // tryb 'kabinowy' (pozwala również rozłączyć + // sprzęgi zablokowane) { - if (DynamicObject->DettachStatus(iCabn - 1) < 0) // je�li jest co odczepi� - if (DynamicObject->Dettach(iCabn - 1)) // iCab==1:prz�d,iCab==2:ty� + if (DynamicObject->DettachStatus(iCabn - 1) < 0) // jeśli jest co odczepić + if (DynamicObject->Dettach(iCabn - 1)) // iCab==1:przód,iCab==2:tył { - dsbCouplerDetach->SetVolume(DSBVOLUME_MAX); // w kabinie ten d�wi�k? + dsbCouplerDetach->SetVolume(DSBVOLUME_MAX); // w kabinie ten dźwięk? dsbCouplerDetach->Play(0, 0, 0); } } @@ -1952,10 +1952,10 @@ if if (tmp && (CouplNr != -1)) { if ((tmp->MoverParameters->Couplers[CouplNr].CouplingFlag & ctrain_depot) == - 0) // je�eli sprz�g niezablokowany - if (tmp->DettachStatus(CouplNr) < 0) // je�li jest co odczepi� i si� da + 0) // jeżeli sprzęg niezablokowany + if (tmp->DettachStatus(CouplNr) < 0) // jeśli jest co odczepić i się da if (!tmp->Dettach(CouplNr)) - { // d�wi�k odczepiania + { // dźwięk odczepiania dsbCouplerDetach->SetVolume(DSBVOLUME_MAX); dsbCouplerDetach->Play(0, 0, 0); } @@ -1963,7 +1963,7 @@ if } if (DynamicObject->Mechanik) // na wszelki wypadek DynamicObject->Mechanik->CheckVehicles( - Disconnect); // aktualizacja skrajnych pojazd�w w sk�adzie + Disconnect); // aktualizacja skrajnych pojazdów w składzie } } else if (cKey == Global::Keys[k_CloseLeft]) // NBMX 17-09-2003: zamykanie drzwi @@ -2016,7 +2016,7 @@ if } /* if (Console::Pressed(VK_CONTROL)) - {//z [Ctrl] zapalamy albo gasimy �wiate�ko w kabinie + {//z [Ctrl] zapalamy albo gasimy światełko w kabinie if (iCabLightFlag) --iCabLightFlag; //gaszenie } */ } @@ -2042,9 +2042,9 @@ if if (mvOccupied->ActiveCab == 1) //||((mvOccupied->ActiveCab<1)&&(mvControlled->TrainType!=dt_ET40)&&(mvControlled->TrainType!=dt_ET41)&&(mvControlled->TrainType!=dt_ET42)&&(mvControlled->TrainType!=dt_EZT))) { - // if (!mvControlled->PantFrontUp) //je�li by� opuszczony - // if () //je�li po�amany - // //to powt�rzone opuszczanie naprawia + // if (!mvControlled->PantFrontUp) //jeśli był opuszczony + // if () //jeśli połamany + // //to powtórzone opuszczanie naprawia if (mvControlled->PantFront(false)) { dsbSwitch->SetVolume(DSBVOLUME_MAX); @@ -2091,7 +2091,7 @@ if } else if (cKey == Global::Keys[k_Heating]) // Winger 020304: ogrzewanie - // wylaczenie - { // Ra 2014-09: w trybie latania obs�uga jest w World.cpp + { // Ra 2014-09: w trybie latania obsługa jest w World.cpp if (!FreeFlyModeFlag) { if (mvControlled->Heating == true) @@ -2209,10 +2209,10 @@ if } } } - else if (cKey == Global::Keys[k_UpperSign]) // ABu 060205: �wiat�o g�rne - - // wy��czenie + else if (cKey == Global::Keys[k_UpperSign]) // ABu 060205: światło górne - + // wyłączenie { - if (mvOccupied->LightsPosNo > 0) // kr�ciolek od swiatel + if (mvOccupied->LightsPosNo > 0) //kręciolek od swiatel { if ((mvOccupied->LightsPos > 1) || (mvOccupied->LightsWrap)) { @@ -2388,7 +2388,7 @@ if if ((mvControlled->TrainType != dt_EZT) && (mvControlled->TrainType != dt_EP05) && (mvControlled->TrainType != dt_ET40)) { - ggStLinOffButton.PutValue(1); // Ra: by�o Fuse... + ggStLinOffButton.PutValue(1); // Ra: było Fuse... dsbSwitch->SetVolume(DSBVOLUME_MAX); dsbSwitch->Play(0, 0, 0); if (mvControlled->MainCtrlPosNo > 0) @@ -2424,33 +2424,33 @@ if { vMechMovement.x += fMechCroach; if (DynamicObject->Mechanik) - if (!FreeFlyModeFlag) //�eby nie miesza� obserwuj�c z zewn�trz + if (!FreeFlyModeFlag) //żeby nie mieszać obserwując z zewnątrz DynamicObject->Mechanik->RouteSwitch( - 1); // na skrzy�owaniu skr�ci w lewo + 1); // na skrzyżowaniu skręci w lewo } else if (cKey == Global::Keys[k_MechRight]) { vMechMovement.x -= fMechCroach; if (DynamicObject->Mechanik) - if (!FreeFlyModeFlag) //�eby nie miesza� obserwuj�c z zewn�trz + if (!FreeFlyModeFlag) //żeby nie mieszać obserwując z zewnątrz DynamicObject->Mechanik->RouteSwitch( - 2); // na skrzy�owaniu skr�ci w prawo + 2); // na skrzyżowaniu skręci w prawo } else if (cKey == Global::Keys[k_MechBackward]) { vMechMovement.z -= fMechCroach; // if (DynamicObject->Mechanik) - // if (!FreeFlyModeFlag) //�eby nie miesza� obserwuj�c z zewn�trz - // DynamicObject->Mechanik->RouteSwitch(0); //na skrzy�owaniu stanie + // if (!FreeFlyModeFlag) //żeby nie mieszać obserwując z zewnątrz + // DynamicObject->Mechanik->RouteSwitch(0); //na skrzyżowaniu stanie // i poczeka } else if (cKey == Global::Keys[k_MechForward]) { vMechMovement.z += fMechCroach; if (DynamicObject->Mechanik) - if (!FreeFlyModeFlag) //�eby nie miesza� obserwuj�c z zewn�trz + if (!FreeFlyModeFlag) //żeby nie mieszać obserwując z zewnątrz DynamicObject->Mechanik->RouteSwitch( - 3); // na skrzy�owaniu pojedzie prosto + 3); // na skrzyżowaniu pojedzie prosto } else if (cKey == Global::Keys[k_MechUp]) pMechOffset.y += 0.2; // McZapkie-120302 - wstawanie @@ -2461,20 +2461,20 @@ if // else if (DebugModeFlag) - { // przesuwanie sk�adu o 100m + { // przesuwanie składu o 100m TDynamicObject *d = DynamicObject; if (cKey == VkKeyScan('[')) { while (d) { d->Move(100.0 * d->DirectionGet()); - d = d->Next(); // pozosta�e te� + d = d->Next(); // pozostałe też } d = DynamicObject->Prev(); while (d) { d->Move(100.0 * d->DirectionGet()); - d = d->Prev(); // w drug� stron� te� + d = d->Prev(); // w drugą stronę też } } else if (cKey == VkKeyScan(']')) @@ -2482,25 +2482,25 @@ if while (d) { d->Move(-100.0 * d->DirectionGet()); - d = d->Next(); // pozosta�e te� + d = d->Next(); // pozostałe też } d = DynamicObject->Prev(); while (d) { d->Move(-100.0 * d->DirectionGet()); - d = d->Prev(); // w drug� stron� te� + d = d->Prev(); // w drugą stronę też } } } if (cKey == VkKeyScan('-')) - { // zmniejszenie numeru kana�u radiowego + { // zmniejszenie numeru kanału radiowego if (iRadioChannel > 0) - --iRadioChannel; // 0=wy��czony + --iRadioChannel; // 0=wyłączony } else if (cKey == VkKeyScan('=')) - { // zmniejszenie numeru kana�u radiowego + { // zmniejszenie numeru kanału radiowego if (iRadioChannel < 8) - ++iRadioChannel; // 0=wy��czony + ++iRadioChannel; // 0=wyłączony } } } @@ -2508,12 +2508,12 @@ if void TTrain::OnKeyUp(int cKey) { // zwolnienie klawisza if (GetAsyncKeyState(VK_SHIFT) < 0) - { // wci�ni�ty [Shift] + { // wciśnięty [Shift] } else { if (cKey == Global::Keys[k_StLinOff]) // Winger 110904: wylacznik st. liniowych - { // zwolnienie klawisza daje powr�t przycisku do zwyk�ego stanu + { // zwolnienie klawisza daje powrót przycisku do zwykłego stanu if ((mvControlled->TrainType != dt_EZT) && (mvControlled->TrainType != dt_EP05) && (mvControlled->TrainType != dt_ET40)) ggStLinOffButton.PutValue(0); @@ -2522,20 +2522,20 @@ void TTrain::OnKeyUp(int cKey) }; void TTrain::UpdateMechPosition(double dt) -{ // Ra: mechanik powinien by� - // telepany niezale�nie od pozycji +{ // Ra: mechanik powinien być + // telepany niezależnie od pozycji // pojazdu - // Ra: trzeba zrobi� model bujania g�ow� i wczepi� go do pojazdu + // Ra: trzeba zrobić model bujania głową i wczepić go do pojazdu - // DynamicObject->vFront=DynamicObject->GetDirection(); //to jest ju� + // DynamicObject->vFront=DynamicObject->GetDirection(); //to jest już // policzone - // Ra: tu by si� przyda�o uwzgl�dni� rozk�ad si�: + // Ra: tu by się przydało uwzględnić rozkład sił: // - na postoju horyzont prosto, kabina skosem - // - przy szybkiej je�dzie kabina prosto, horyzont pochylony + // - przy szybkiej jeździe kabina prosto, horyzont pochylony vector3 pNewMechPosition; - // McZapkie: najpierw policz� pozycj� w/m kabiny + // McZapkie: najpierw policzę pozycję w/m kabiny // ABu: rzucamy kabina tylko przy duzym FPS! // Mala histereza, zeby bez przerwy nie przelaczalo przy FPS~17 @@ -2544,8 +2544,8 @@ void TTrain::UpdateMechPosition(double dt) int iVel = DynamicObject->GetVelocity(); if (iVel > 150) iVel = 150; - if (!Global::iSlowMotion // musi by� pe�na pr�dko�� - && (pMechOffset.y < 4.0)) // Ra 15-01: przy ogl�daniu pantografu bujanie przeszkadza + if (!Global::iSlowMotion // musi być pełna prędkość + && (pMechOffset.y < 4.0)) // Ra 15-01: przy oglądaniu pantografu bujanie przeszkadza { if (!(Random((GetFPS() + 1) / 15) > 0)) { @@ -2578,8 +2578,8 @@ void TTrain::UpdateMechPosition(double dt) } else { // hamowanie rzucania przy spadku FPS - pMechShake -= pMechShake * Min0R(dt, 1); // po tym chyba potrafi� zosta� - // jakie� u�amki, kt�re powoduj� + pMechShake -= pMechShake * Min0R(dt, 1); // po tym chyba potrafią zostać + // jakieś ułamki, które powodują // zjazd pMechOffset += vMechMovement * dt; vMechVelocity.y = 0.5 * vMechVelocity.y; @@ -2587,9 +2587,9 @@ void TTrain::UpdateMechPosition(double dt) vMechMovement = 0.5 * vMechMovement; } // numer kabiny (-1: kabina B) - if (DynamicObject->Mechanik) // mo�e nie by�? - if (DynamicObject->Mechanik->AIControllFlag) // je�li prowadzi AI - { // Ra: przesiadka, je�li AI zmieni�o kabin� (a cz�on?)... + if (DynamicObject->Mechanik) // może nie być? + if (DynamicObject->Mechanik->AIControllFlag) // jeśli prowadzi AI + { // Ra: przesiadka, jeśli AI zmieniło kabinę (a człon?)... if (iCabn != (DynamicObject->MoverParameters->ActiveCab == -1 ? 2 : DynamicObject->MoverParameters->ActiveCab)) @@ -2601,7 +2601,7 @@ void TTrain::UpdateMechPosition(double dt) 2 : DynamicObject->MoverParameters->ActiveCab); if (!DebugModeFlag) - { // sprawdzaj wi�zy //Ra: nie tu! + { // sprawdzaj więzy //Ra: nie tu! if (pNewMechPosition.x < Cabine[iCabn].CabPos1.x) pNewMechPosition.x = Cabine[iCabn].CabPos1.x; if (pNewMechPosition.x > Cabine[iCabn].CabPos2.x) @@ -2629,7 +2629,7 @@ void TTrain::UpdateMechPosition(double dt) pMechOffset.y = Cabine[iCabn].CabPos2.y + 0.5; } pMechPosition = DynamicObject->mMatrix * - pNewMechPosition; // po�o�enie wzgl�dem �rodka pojazdu w uk�adzie scenerii + pNewMechPosition; // położenie względem środka pojazdu w układzie scenerii pMechPosition += DynamicObject->GetPosition(); }; @@ -2639,7 +2639,7 @@ bool TTrain::Update() double dt = Timer::GetDeltaTime(); if (DynamicObject->mdKabina) { // Ra: TODO: odczyty klawiatury/pulpitu nie - // powinny by� uzale�nione od istnienia modelu + // powinny być uzależnione od istnienia modelu // kabiny tor = DynamicObject->GetTrack(); // McZapkie-180203 // McZapkie: predkosc wyswietlana na tachometrze brana jest z obrotow kol @@ -2667,7 +2667,7 @@ bool TTrain::Update() fTachoCount -= dt * 0.66; // schodz powoli - niektore haslery to ze 4 // sekundy potrafia stukac - /* Ra: to by trzeba by�o przemy�le�, zmienione na szybko problemy robi + /* Ra: to by trzeba było przemyśleć, zmienione na szybko problemy robi //McZapkie: predkosc wyswietlana na tachometrze brana jest z obrotow kol double vel=fabs(11.31*mvControlled->WheelDiameter*mvControlled->nrot); if (iSekunda!=floor(GlobalTime->mr)||(vel<1.0)) @@ -2681,7 +2681,7 @@ bool TTrain::Update() if (fTachoCount>0) fTachoCount-=dt; if (mvControlled->TrainType==dt_EZT) - //dla EZT wskaz�wka porusza si� niestabilnie + //dla EZT wskazówka porusza się niestabilnie if (fTachoVelocity>7.0) {fTachoVelocity=floor(0.5+fTachoVelocity+random(5)-random(5)); //*floor(0.2*fTachoVelocity); @@ -2690,19 +2690,16 @@ bool TTrain::Update() iSekunda=floor(GlobalTime->mr); } */ - // Ra 2014-09: napi�cia i pr�dy musz� by� ustalone najpierw, bo wysy�ane s� + // Ra 2014-09: napięcia i prądy muszą być ustalone najpierw, bo wysyłane są // ewentualnie na // PoKeys - if ((mvControlled->EngineType != DieselElectric) && - (mvControlled->EngineType != - ElectricInductionMotor)) // Ra 2014-09: czy taki rozdzia? ma sens? - fHVoltage = - mvControlled->RunningTraction.TractionVoltage; // Winger czy to nie jest zle? + if ((mvControlled->EngineType != DieselElectric) && (mvControlled->EngineType != ElectricInductionMotor)) // Ra 2014-09: czy taki rozdzia? ma sens? + fHVoltage = mvControlled->RunningTraction.TractionVoltage; // Winger czy to nie jest zle? // *mvControlled->Mains); else fHVoltage = mvControlled->Voltage; if (ShowNextCurrent) - { // je�li pokazywa� drugi cz�on + { // jeśli pokazywać drugi człon if (mvSecond) { // o ile jest ten drugi fHCurrent[0] = mvSecond->ShowCurrent(0) * 1.05; @@ -2712,7 +2709,7 @@ bool TTrain::Update() } else fHCurrent[0] = fHCurrent[1] = fHCurrent[2] = fHCurrent[3] = - 0.0; // gdy nie ma cz�ona + 0.0; // gdy nie ma człona } else { // normalne pokazywanie @@ -2757,15 +2754,12 @@ bool TTrain::Update() iUnits[i] = iUnitNo; cCode[i] = p->MoverParameters->TypeName[p->MoverParameters->TypeName.length()]; asCarName[i] = p->GetName(); - bPants[iUnitNo - 1][0] = - (bPants[iUnitNo - 1][0] || p->MoverParameters->PantFrontUp); + bPants[iUnitNo - 1][0] = (bPants[iUnitNo - 1][0] || p->MoverParameters->PantFrontUp); bPants[iUnitNo - 1][1] = (bPants[iUnitNo - 1][1] || p->MoverParameters->PantRearUp); - bComp[iUnitNo - 1][0] = - (bComp[iUnitNo - 1][0] || p->MoverParameters->CompressorAllow); + bComp[iUnitNo - 1][0] = (bComp[iUnitNo - 1][0] || p->MoverParameters->CompressorAllow); if (p->MoverParameters->CompressorSpeed > 0.00001) { - bComp[iUnitNo - 1][1] = - (bComp[iUnitNo - 1][1] || p->MoverParameters->CompressorFlag); + bComp[iUnitNo - 1][1] = (bComp[iUnitNo - 1][1] || p->MoverParameters->CompressorFlag); } if ((in < 8) && (p->MoverParameters->eimc[eimc_p_Pmax] > 1)) { @@ -2778,8 +2772,7 @@ bool TTrain::Update() fEIMParams[1 + in][5] = -Min0R(fEIMParams[1 + in][3], 0); fEIMParams[1 + in][6] = p->MoverParameters->eimv[eimv_If]; fEIMParams[1 + in][7] = p->MoverParameters->eimv[eimv_U]; - fEIMParams[1 + in][8] = - p->MoverParameters->Itot; // p->MoverParameters->eimv[eimv_Ipoj]; + fEIMParams[1 + in][8] = p->MoverParameters->Itot;//p->MoverParameters->eimv[eimv_Ipoj]; fEIMParams[1 + in][9] = p->MoverParameters->Voltage; fEIMParams[0][6] += fEIMParams[1 + in][8]; bMains[in] = p->MoverParameters->Mains; @@ -2840,34 +2833,32 @@ bool TTrain::Update() } if (Global::iFeedbackMode == 4) - { // wykonywa� tylko gdy wyprowadzone na pulpit + { // wykonywać tylko gdy wyprowadzone na pulpit Console::ValueSet(0, - mvOccupied->Compressor); // Ra: sterowanie miernikiem: zbiornik g��wny + mvOccupied->Compressor); // Ra: sterowanie miernikiem: zbiornik główny Console::ValueSet(1, - mvOccupied->PipePress); // Ra: sterowanie miernikiem: przew�d g��wny - Console::ValueSet( - 2, mvOccupied->BrakePress); // Ra: sterowanie miernikiem: cylinder hamulcowy - Console::ValueSet(3, fHVoltage); // woltomierz wysokiego napi�cia + mvOccupied->PipePress); // Ra: sterowanie miernikiem: przewód główny + Console::ValueSet(2, mvOccupied->BrakePress); // Ra: sterowanie miernikiem: cylinder hamulcowy + Console::ValueSet(3, fHVoltage); // woltomierz wysokiego napięcia Console::ValueSet(4, fHCurrent[2]); // Ra: sterowanie miernikiem: drugi amperomierz - Console::ValueSet( - 5, + Console::ValueSet(5, fHCurrent[(mvControlled->TrainType & dt_EZT) ? 0 : 1]); // pierwszy amperomierz; dla - // EZT pr�d ca�kowity - Console::ValueSet(6, fTachoVelocity); ////Ra: pr�dko�� na pin 43 - wyj�cie + // EZT prąd całkowity + Console::ValueSet(6, fTachoVelocity); ////Ra: prędkość na pin 43 - wyjście /// analogowe (to nie jest PWM); /// skakanie zapewnia mechanika - /// nap�du + /// napędu } // hunter-080812: wyrzucanie szybkiego na elektrykach gdy nie ma napiecia // przy dowolnym ustawieniu kierunkowego - // Ra: to ju� jest w T_MoverParameters::TractionForce(), ale zale�y od + // Ra: to już jest w T_MoverParameters::TractionForce(), ale zależy od // kierunku if (mvControlled->EngineType == ElectricSeriesMotor) if (fabs(mvControlled->RunningTraction.TractionVoltage) < 0.5 * mvControlled->EnginePowerSource - .MaxVoltage) // minimalne napi�cie pobiera� z FIZ? + .MaxVoltage) // minimalne napięcie pobierać z FIZ? mvControlled->MainSwitch(false); // hunter-091012: swiatlo @@ -2883,7 +2874,7 @@ bool TTrain::Update() //------------------ // hunter-261211: nadmiarowy przetwornicy i ogrzewania - // Ra 15-01: to musi st�d wylecie� - zale�no�ci nie mog� by� w kabinie + // Ra 15-01: to musi stąd wylecieć - zależności nie mogą być w kabinie if (mvControlled->ConverterFlag == true) { fConverterTimer += dt; @@ -3159,7 +3150,7 @@ bool TTrain::Update() } if (FreeFlyModeFlag) - rsFadeSound.Stop(); // wy��cz to cholerne cykanie! + rsFadeSound.Stop(); // wyłącz to cholerne cykanie! else rsFadeSound.Play(1, DSBPLAY_LOOPING, true, DynamicObject->GetPosition()); @@ -3215,7 +3206,7 @@ bool TTrain::Update() if (mvOccupied->SoundFlag == 0) if (mvOccupied->EventFlag) if (TestFlag(mvOccupied->DamageFlag, dtrain_wheelwear)) - { // Ra: przenie�� do DynObj! + { // Ra: przenieść do DynObj! if (rsRunningNoise.AM != 0) { rsRunningNoise.Stop(); @@ -3286,8 +3277,8 @@ bool TTrain::Update() //McZapkie-240302 ggVelocity.UpdateValue(DynamicObject->GetVelocity()); //fHaslerTimer+=dt; //if (fHaslerTimer>fHaslerTime) - {//Ra: ryzykowne jest to, gdy� mo�e si� nie uaktualnia� pr�dko�� - //Ra: pr�dko�� si� powinna zaokr�gla� tam gdzie si� liczy + {//Ra: ryzykowne jest to, gdyż może się nie uaktualniać prędkość + //Ra: prędkość się powinna zaokrąglać tam gdzie się liczy fTachoVelocity if (ggVelocity.SubModel) {//ZiomalCl: wskazanie Haslera w kabinie A ze zwloka czasowa oraz odpowiednia @@ -3302,7 +3293,7 @@ bool TTrain::Update() ggVelocity.Update(); } if (ggVelocityDgt.SubModel) - {//Ra 2014-07: pr�dko�ciomierz cyfrowy + {//Ra 2014-07: prędkościomierz cyfrowy ggVelocityDgt.UpdateValue(fTachoVelocity); ggVelocityDgt.Update(); } @@ -3329,7 +3320,7 @@ bool TTrain::Update() ggClockHInd.Update(); } - Cabine[iCabn].Update(); // nowy spos�b ustawienia animacji + Cabine[iCabn].Update(); // nowy sposób ustawienia animacji if (ggZbS.SubModel) { ggZbS.UpdateValue(mvOccupied->Handle->GetCP()); @@ -3438,10 +3429,10 @@ bool TTrain::Update() if (mvControlled->SlippingWheels) { // Ra 2014-12: lokomotywy 181/182 - // dostaj� SlippingWheels po zahamowaniu - // powy�ej 2.85 bara i bucza�y + // dostają SlippingWheels po zahamowaniu + // powyżej 2.85 bara i buczały double veldiff = (DynamicObject->GetVelocity() - fTachoVelocity) / mvControlled->Vmax; - if (veldiff < -0.01) // 1% Vmax rezerwy, �eby 181/182 nie bucza�y po + if (veldiff < -0.01) // 1% Vmax rezerwy, żeby 181/182 nie buczały po // zahamowaniu, ale to proteza { if (fabs(mvControlled->Im) > 10.0) @@ -3492,8 +3483,8 @@ bool TTrain::Update() (mvControlled->MainCtrlActualPos == 0)); // do EU04 if ((mvControlled->Itot != 0) || (mvOccupied->BrakePress > 2) || (mvOccupied->PipePress < 3.6)) - btLampkaStyczn.TurnOff(); // Ra: czy to jest udawanie dzia�ania - // stycznik�w liniowych? + btLampkaStyczn.TurnOff(); // Ra: czy to jest udawanie działania + // styczników liniowych? else if (mvOccupied->BrakePress < 1) btLampkaStyczn.TurnOn(); // mozna prowadzic rozruch if (((TestFlag(mvControlled->Couplers[1].CouplingFlag, ctrain_controll)) && @@ -3509,7 +3500,7 @@ bool TTrain::Update() // drugiego stopnia hamowania btLampkaHamPosp.Turn((TestFlag(mvOccupied->BrakeStatus, 1))); // lampka drugiego stopnia // hamowania //TODO: youBy - // wyci�gn�� flag� wysokiego + // wyciągnąć flagę wysokiego // stopnia // hunter-111211: wylacznik cisnieniowy - Ra: tutaj? w kabinie? //yBARC - @@ -3538,9 +3529,9 @@ bool TTrain::Update() 0); // napiecie na nastawniku hamulcowym btLampkaSprezarka.Turn(mvControlled->CompressorFlag); // mutopsitka dziala // boczniki - unsigned char scp; // Ra: dopisa�em "unsigned" - // Ra: w SU45 boczniki wchodz� na MainCtrlPos, a nie na MainCtrlActualPos - // - poki�ka� kto�? + unsigned char scp; // Ra: dopisałem "unsigned" + // Ra: w SU45 boczniki wchodzą na MainCtrlPos, a nie na MainCtrlActualPos + // - pokićkał ktoś? scp = mvControlled->RList[mvControlled->MainCtrlPos].ScndAct; scp = (scp == 255 ? 0 : scp); // Ra: whatta hella is this? if ((mvControlled->ScndCtrlPos > 0) || (mvControlled->ScndInMain) && (scp > 0)) @@ -3551,7 +3542,7 @@ bool TTrain::Update() btLampkaBocznik4.Turn(mvControlled->ScndCtrlPos > 3); } else - { // wy��czone wszystkie cztery + { // wyłączone wszystkie cztery btLampkaBocznik1.TurnOff(); btLampkaBocznik2.TurnOff(); btLampkaBocznik3.TurnOff(); @@ -3606,8 +3597,8 @@ bool TTrain::Update() { // yB - wskazniki drugiego czlonu TDynamicObject *tmp; //=mvControlled->mvSecond; //Ra 2014-07: trzeba to - // jeszcze wyj�� z kabiny... - // Ra 2014-07: no nie ma potrzeby szuka� tego w ka�dej klatce + // jeszcze wyjąć z kabiny... + // Ra 2014-07: no nie ma potrzeby szukać tego w każdej klatce tmp = NULL; if ((TestFlag(mvControlled->Couplers[1].CouplingFlag, ctrain_controll)) && (mvOccupied->ActiveCab > 0)) @@ -3694,13 +3685,13 @@ bool TTrain::Update() if (mvControlled->Battery) { switch (mvControlled->TrainType) - { // zale�nie od typu lokomotywy + { // zależnie od typu lokomotywy case dt_EZT: btLampkaHamienie.Turn((mvControlled->BrakePress >= 0.2) && mvControlled->Signalling); break; - case dt_ET41: // odhamowanie drugiego cz�onu - if (mvSecond) // bo mo�e komu� przyj�� do g�owy je�d�enie jednym cz�onem + case dt_ET41: // odhamowanie drugiego członu + if (mvSecond) // bo może komuś przyjść do głowy jeżdżenie jednym członem btLampkaHamienie.Turn(mvSecond->BrakePress < 0.4); break; default: @@ -3712,17 +3703,17 @@ bool TTrain::Update() btLampkaPrzekrMaxSila.Turn(abs(mvControlled->Im) >= 450); btLampkaRadio.Turn(mvOccupied->Radio); btLampkaHamulecReczny.Turn(mvOccupied->ManualBrakePos > 0); - // NBMX wrzesien 2003 - drzwi oraz sygna� odjazdu + // NBMX wrzesien 2003 - drzwi oraz sygnał odjazdu btLampkaDoorLeft.Turn(mvOccupied->DoorLeftOpened); btLampkaDoorRight.Turn(mvOccupied->DoorRightOpened); btLampkaNapNastHam.Turn((mvControlled->ActiveDir != 0) && (mvOccupied->EpFuse)); // napiecie na nastawniku hamulcowym btLampkaForward.Turn(mvControlled->ActiveDir > 0); // jazda do przodu - btLampkaBackward.Turn(mvControlled->ActiveDir < 0); // jazda do ty�u + btLampkaBackward.Turn(mvControlled->ActiveDir < 0); // jazda do tyłu btLampkaED.Turn(mvControlled->DynamicBrakeFlag); // hamulec ED } else - { // gdy bateria wy��czona + { // gdy bateria wyłączona btLampkaHamienie.TurnOff(); btLampkaMaxSila.TurnOff(); btLampkaPrzekrMaxSila.TurnOff(); @@ -3774,25 +3765,24 @@ bool TTrain::Update() if (ggBrakeCtrl.SubModel) { if (DynamicObject->Mechanik ? - (DynamicObject->Mechanik->AIControllFlag ? false : Global::iFeedbackMode == 4) : + (DynamicObject->Mechanik->AIControllFlag ? false : + Global::iFeedbackMode == 4 ) : false) // nie blokujemy AI - { // Ra: nie najlepsze miejsce, ale na pocz�tek gdzie� to da� trzeba - // Firleju: dlatego kasujemy i zastepujemy funkcj� w Console + { // Ra: nie najlepsze miejsce, ale na początek gdzieś to dać trzeba + // Firleju: dlatego kasujemy i zastepujemy funkcją w Console if (((mvOccupied->BrakeHandle == FV4a) || - (mvOccupied->BrakeHandle == - FVel6))) // mo�e mo�na usun�� ograniczenie do FV4a i FVel6? + (mvOccupied->BrakeHandle == FVel6))) // może można usunąć ograniczenie do FV4a i FVel6? { double b = Console::AnalogCalibrateGet(0); - b = Global::CutValueToRange( - -2.0, b, mvOccupied->BrakeCtrlPosNo); // przyci�cie zmiennej do granic + b = Global::CutValueToRange(-2.0, b, mvOccupied->BrakeCtrlPosNo); // przycięcie zmiennej do granic - ggBrakeCtrl.UpdateValue(b); // przes�w bez zaokr�glenia + ggBrakeCtrl.UpdateValue(b); // przesów bez zaokrąglenia mvOccupied->BrakeLevelSet(b); } - // else //standardowa prodedura z kranem powi�zanym z klawiatur� + // else //standardowa prodedura z kranem powiązanym z klawiaturą // ggBrakeCtrl.UpdateValue(double(mvOccupied->BrakeCtrlPos)); } - // else //standardowa prodedura z kranem powi�zanym z klawiatur� + // else //standardowa prodedura z kranem powiązanym z klawiaturą // ggBrakeCtrl.UpdateValue(double(mvOccupied->BrakeCtrlPos)); ggBrakeCtrl.UpdateValue(mvOccupied->fBrakeCtrlPos); ggBrakeCtrl.Update(); @@ -3802,21 +3792,20 @@ bool TTrain::Update() if (DynamicObject->Mechanik ? (DynamicObject->Mechanik->AIControllFlag ? false : Global::iFeedbackMode == 4) : false) // nie blokujemy AI - { // Ra: nie najlepsze miejsce, ale na pocz�tek gdzie� to da� trzeba - // Firleju: dlatego kasujemy i zastepujemy funkcj� w Console + { // Ra: nie najlepsze miejsce, ale na początek gdzieś to dać trzeba + // Firleju: dlatego kasujemy i zastepujemy funkcją w Console if ((mvOccupied->BrakeLocHandle == FD1)) { double b = Console::AnalogCalibrateGet(1); - b = Global::CutValueToRange(0.0, b, - LocalBrakePosNo); // przyci�cie zmiennej do granic - ggLocalBrake.UpdateValue(b); // przes�w bez zaokr�glenia + b = Global::CutValueToRange(0.0, b, LocalBrakePosNo); // przycięcie zmiennej do granic + ggLocalBrake.UpdateValue(b); // przesów bez zaokrąglenia mvOccupied->LocalBrakePos = - int(1.09 * b); // spos�b zaokr�glania jest do ustalenia + int(1.09 * b); // sposób zaokrąglania jest do ustalenia } - else // standardowa prodedura z kranem powi�zanym z klawiatur� + else // standardowa prodedura z kranem powiązanym z klawiaturą ggLocalBrake.UpdateValue(double(mvOccupied->LocalBrakePos)); } - else // standardowa prodedura z kranem powi�zanym z klawiatur� + else // standardowa prodedura z kranem powiązanym z klawiaturą ggLocalBrake.UpdateValue(double(mvOccupied->LocalBrakePos)); ggLocalBrake.Update(); } @@ -3940,7 +3929,7 @@ bool TTrain::Update() else if ((mvOccupied->ActiveCab) == 1) ggRearLeftLightButton.PutValue(1); - // ko�c�wki + // końcówki if ((DynamicObject->iLights[0] & 2) == 2) if ((mvOccupied->ActiveCab) == 1) { @@ -3999,7 +3988,7 @@ bool TTrain::Update() ggRearUpperLightButton.PutValue(1); //-------------- // REFLEKTOR PRAWY - // g��wne o�wietlenie + // główne oświetlenie if ((DynamicObject->iLights[0] & 16) == 16) if ((mvOccupied->ActiveCab) == 1) ggRightLightButton.PutValue(1); @@ -4012,7 +4001,7 @@ bool TTrain::Update() else if ((mvOccupied->ActiveCab) == 1) ggRearRightLightButton.PutValue(1); - // ko�c�wki + // końcówki if ((DynamicObject->iLights[0] & 32) == 32) if ((mvOccupied->ActiveCab) == 1) { @@ -4111,7 +4100,7 @@ bool TTrain::Update() ggDoorSignallingButton.Update(); } // if (ggDistCounter.SubModel) - //{//Ra 2014-07: licznik kilometr�w + //{//Ra 2014-07: licznik kilometrów // ggDistCounter.PutValue(mvControlled->DistCounter); // ggDistCounter.Update(); //} @@ -4303,7 +4292,7 @@ bool TTrain::Update() // hunter-091012: zrobiony test czuwaka if (Console::Pressed(Global::Keys[k_Czuwak])) { // czuwak testuje kierunek, ale podobno w - // EZT nie, wi�c mo�e by� w rozrz�dczym + // EZT nie, więc może być w rozrządczym fCzuwakTestTimer += dt; ggSecurityResetButton.PutValue(1); if (CAflag == false) @@ -4513,10 +4502,10 @@ bool TTrain::Update() } } if (!Console::Pressed(Global::Keys[k_SmallCompressor])) - // Ra: przecie�� to na zwolnienie klawisza + // Ra: przecieść to na zwolnienie klawisza if (DynamicObject->Mechanik ? !DynamicObject->Mechanik->AIControllFlag : - false) // nie wy��cza�, gdy AI - mvControlled->PantCompFlag = false; // wy��czona, gdy nie trzymamy klawisza + false) // nie wyłączać, gdy AI + mvControlled->PantCompFlag = false; // wyłączona, gdy nie trzymamy klawisza if (Console::Pressed(Global::Keys[k_Univ2])) { if (!DebugModeFlag) @@ -4589,8 +4578,8 @@ bool TTrain::Update() if (Console::Pressed(VK_CONTROL)) - {//z [Ctrl] zapalamy albo gasimy �wiate�ko w kabinie - //tutaj jest bez sensu, trzeba reagowa� na wciskanie klawisza! + {//z [Ctrl] zapalamy albo gasimy światełko w kabinie + //tutaj jest bez sensu, trzeba reagować na wciskanie klawisza! if (Console::Pressed(VK_SHIFT)) {//zapalenie if (iCabLightFlag<2) ++iCabLightFlag; @@ -4602,7 +4591,7 @@ bool TTrain::Update() } else - {//bez [Ctrl] prze��czamy co�tem + {//bez [Ctrl] przełączamy cośtem if (Console::Pressed(VK_SHIFT)) { ggUniversal3Button.PutValue(1); //hunter-131211: z UpdateValue na @@ -4621,8 +4610,8 @@ bool TTrain::Update() } */ // ABu030405 obsluga lampki uniwersalnej: - if (btLampkaUniversal3.Active()) // w og�le jest - if (LampkaUniversal3_st) // za��czona + if (btLampkaUniversal3.Active()) // w ogóle jest + if (LampkaUniversal3_st) // załączona switch (LampkaUniversal3_typ) { case 0: @@ -4714,7 +4703,7 @@ bool TTrain::Update() } } - // Ra: przeklejka z SPKS - p�ynne poruszanie hamulcem + // Ra: przeklejka z SPKS - płynne poruszanie hamulcem // if // ((mvOccupied->BrakeHandle==FV4a)&&(Console::Pressed(Global::Keys[k_IncBrakeLevel]))) if ((Console::Pressed(Global::Keys[k_IncBrakeLevel]))) @@ -4813,8 +4802,8 @@ bool TTrain::Update() else { btLampkaDepartureSignal.TurnOff(); - if (DynamicObject->Mechanik) // mo�e nie by�? - if (!DynamicObject->Mechanik->AIControllFlag) // tylko je�li nie prowadzi AI + if (DynamicObject->Mechanik) // może nie być? + if (!DynamicObject->Mechanik->AIControllFlag) // tylko jeśli nie prowadzi AI mvControlled->DepartureSignal = false; } @@ -4848,7 +4837,7 @@ bool TTrain::Update() if (Console::Pressed(VK_SHIFT)) { // if (Console::Pressed(k_CurrentNext)) - { // Ra: by�o pod VK_F3 + { // Ra: było pod VK_F3 if ((mvOccupied->EpFuseSwitch(true))) { dsbPneumaticSwitch->SetVolume(-10); @@ -4859,7 +4848,7 @@ bool TTrain::Update() else { // if (Console::Pressed(k_CurrentNext)) - { // Ra: by�o pod VK_F3 + { // Ra: było pod VK_F3 if (Console::Pressed(VK_CONTROL)) { if ((mvOccupied->EpFuseSwitch(false))) @@ -5026,24 +5015,24 @@ bool TTrain::Update() pyScreens.update(); } - // wyprowadzenie sygna��w dla haslera na PoKeys (zaznaczanie na ta�mie) - btHaslerBrakes.Turn(DynamicObject->MoverParameters->BrakePress > 0.4); // ci�nienie w cylindrach - btHaslerCurrent.Turn(DynamicObject->MoverParameters->Im != 0.0); // pr�d na silnikach + // wyprowadzenie sygnałów dla haslera na PoKeys (zaznaczanie na taśmie) + btHaslerBrakes.Turn(DynamicObject->MoverParameters->BrakePress > 0.4); // ciśnienie w cylindrach + btHaslerCurrent.Turn(DynamicObject->MoverParameters->Im != 0.0); // prąd na silnikach return true; //(DynamicObject->Update(dt)); } // koniec update bool TTrain::CabChange(int iDirection) { // McZapkie-090902: zmiana kabiny 1->0->2 i z powrotem if (DynamicObject->Mechanik ? DynamicObject->Mechanik->AIControllFlag : - true) // je�li prowadzi AI albo jest w innym cz�onie - { // jak AI prowadzi, to nie mo�na mu miesza� + true) // jeśli prowadzi AI albo jest w innym członie + { // jak AI prowadzi, to nie można mu mieszać if (abs(DynamicObject->MoverParameters->ActiveCab + iDirection) > 1) return false; // ewentualna zmiana pojazdu DynamicObject->MoverParameters->ActiveCab = DynamicObject->MoverParameters->ActiveCab + iDirection; } else - { // je�li pojazd prowadzony r�cznie albo wcale (wagon) + { // jeśli pojazd prowadzony ręcznie albo wcale (wagon) DynamicObject->MoverParameters->CabDeactivisation(); if (DynamicObject->MoverParameters->ChangeCab(iDirection)) if (InitializeCab(DynamicObject->MoverParameters->ActiveCab, @@ -5051,13 +5040,13 @@ bool TTrain::CabChange(int iDirection) ".mmd")) { // zmiana kabiny w ramach tego samego pojazdu DynamicObject->MoverParameters - ->CabActivisation(); // za��czenie rozrz�du (wirtualne kabiny) - return true; // uda�o si� zmieni� kabin� + ->CabActivisation(); // załączenie rozrządu (wirtualne kabiny) + return true; // udało się zmienić kabinę } DynamicObject->MoverParameters->CabActivisation(); // aktywizacja // poprzedniej, bo // jeszcze nie wiadomo, - // czy jaki� pojazd jest + // czy jakiś pojazd jest } return false; // ewentualna zmiana pojazdu } @@ -5068,7 +5057,7 @@ bool TTrain::LoadMMediaFile(std::string const &asFileName) { double dSDist; cParser parser(asFileName, cParser::buffer_FILE); - // Warto�ci domy�lne by nie wysypywa�o przy wybrakowanych mmd @240816 Stele + //Wartości domyślne by nie wysypywało przy wybrakowanych mmd @240816 Stele dsbPneumaticSwitch = TSoundsManager::GetFromName("silence1.wav", true); dsbBufferClamp = TSoundsManager::GetFromName("en57_bufferclamp.wav", true); dsbCouplerDetach = TSoundsManager::GetFromName("couplerdetach.wav", true); @@ -5372,7 +5361,7 @@ bool TTrain::InitializeCab(int NewCabNo, std::string const &asFileName) bool parse = false; double dSDist; int cabindex = 0; - DynamicObject->mdKabina = NULL; // likwidacja wska�nika na dotychczasow� kabin� + DynamicObject->mdKabina = NULL; // likwidacja wskaźnika na dotychczasową kabinę switch (NewCabNo) { // ustalenie numeru kabiny do wczytania case -1: @@ -5400,7 +5389,7 @@ bool TTrain::InitializeCab(int NewCabNo, std::string const &asFileName) if ((cabindex != 1) && (token != cabstr)) { - // je�li nie znaleziony wpis kabiny, pr�ba szukania kabiny 1 + // jeśli nie znaleziony wpis kabiny, próba szukania kabiny 1 cabstr = "cab1definition:"; // crude way to start parsing from beginning parser = std::make_shared(asFileName, cParser::buffer_FILE); @@ -5413,7 +5402,7 @@ bool TTrain::InitializeCab(int NewCabNo, std::string const &asFileName) } if (token == cabstr) { - // je�li znaleziony wpis kabiny + // jeśli znaleziony wpis kabiny Cabine[cabindex].Load(*parser); // NOTE: the next part is likely to break if sitpos doesn't follow pos parser->getTokens(); @@ -5454,10 +5443,10 @@ bool TTrain::InitializeCab(int NewCabNo, std::string const &asFileName) parse = true; } // inicjacja kabiny - // Ra 2014-08: zmieniamy zasady - zamiast przypisywa� submodel do - // istniej�cych obiekt�w animuj�cych - // b�dziemy teraz uaktywnia� obiekty animuj�ce z tablicy i podawa� im - // submodel oraz wska�nik na parametr + // Ra 2014-08: zmieniamy zasady - zamiast przypisywać submodel do + // istniejących obiektów animujących + // będziemy teraz uaktywniać obiekty animujące z tablicy i podawać im + // submodel oraz wskaźnik na parametr if (token == std::string("cab" + std::to_string(cabindex) + "model:")) { // model kabiny @@ -5467,10 +5456,10 @@ bool TTrain::InitializeCab(int NewCabNo, std::string const &asFileName) { Global::asCurrentTexturePath = - DynamicObject->asBaseDir; // bie��ca sciezka do tekstur to dynamic/... + DynamicObject->asBaseDir; // bieżąca sciezka do tekstur to dynamic/... TModel3d *kabina = TModelsManager::GetModel(DynamicObject->asBaseDir + token, - true); // szukaj kabin� jako oddzielny model + true); // szukaj kabinę jako oddzielny model Global::asCurrentTexturePath = szTexturePath; // z powrotem defaultowa sciezka do tekstur // if (DynamicObject->mdKabina!=k) @@ -5478,10 +5467,10 @@ bool TTrain::InitializeCab(int NewCabNo, std::string const &asFileName) { DynamicObject->mdKabina = kabina; // nowa kabina } - //(mdKabina) mo�e zosta� to samo po przej�ciu do innego cz�onu bez - // zmiany kabiny, przy powrocie musi by� wi�zanie ponowne + //(mdKabina) może zostać to samo po przejściu do innego członu bez + // zmiany kabiny, przy powrocie musi być wiązanie ponowne // else - // break; //wyj�cie z p�tli, bo model zostaje bez zmian + // break; //wyjście z pętli, bo model zostaje bez zmian } else if (cabindex == 1) { @@ -5523,8 +5512,8 @@ bool TTrain::InitializeCab(int NewCabNo, std::string const &asFileName) pyScreens.start(); if (DynamicObject->mdKabina) { - DynamicObject->mdKabina->Init(); // obr�cenie modelu oraz optymalizacja, - // r�wnie� zapisanie binarnego + DynamicObject->mdKabina->Init(); // obrócenie modelu oraz optymalizacja, + // również zapisanie binarnego return true; } return (token == "none"); @@ -5536,11 +5525,11 @@ void TTrain::MechStop() pMechPosition = vector3(0, 0, 0); pMechShake = vector3(0, 0, 0); vMechMovement = vector3(0, 0, 0); - vMechVelocity = vector3(0, 0, 0); // tu zostawa�y jakie� u�amki, powoduj�ce uciekanie kamery + vMechVelocity = vector3(0, 0, 0); // tu zostawały jakieś ułamki, powodujące uciekanie kamery }; vector3 TTrain::MirrorPosition(bool lewe) -{ // zwraca wsp��rz�dne widoku kamery z lusterka +{ // zwraca współrzędne widoku kamery z lusterka switch (iCabn) { case 1: // przednia (1) @@ -5552,24 +5541,24 @@ vector3 TTrain::MirrorPosition(bool lewe) vector3(lewe ? Cabine[iCabn].CabPos1.x : Cabine[iCabn].CabPos2.x, 1.5 + Cabine[iCabn].CabPos1.y, Cabine[iCabn].CabPos1.z); } - return DynamicObject->GetPosition(); // wsp��rz�dne �rodka pojazdu + return DynamicObject->GetPosition(); // współrzędne środka pojazdu }; void TTrain::DynamicSet(TDynamicObject *d) -{ // taka proteza: chc� pod��czy� - // kabin� EN57 bezpo�rednio z - // silnikowym, aby nie robi� tego +{ // taka proteza: chcę podłączyć + // kabinę EN57 bezpośrednio z + // silnikowym, aby nie robić tego // przez ukrotnienie - // drugi silnikowy i tak musi by� ukrotniony, podobnie jak kolejna jednostka - // problem si� robi ze �wiat�ami, kt�re b�d� zapalane w silnikowym, ale musz� - // �wieci� si� w rozrz�dczych - // dla EZT �wiat�a czo�owe b�d� "zapalane w silnikowym", ale widziane z - // rozrz�dczych - // r�wnie� wczytywanie MMD powinno dotyczy� aktualnego cz�onu - // problematyczna mo�e by� kwestia wybranej kabiny (w silnikowym...) - // je�li silnikowy b�dzie zapi�ty odwrotnie (tzn. -1), to i tak powinno - // je�dzi� dobrze - // r�wnie� hamowanie wykonuje si� zaworem w cz�onie, a nie w silnikowym... + // drugi silnikowy i tak musi być ukrotniony, podobnie jak kolejna jednostka + // problem się robi ze światłami, które będą zapalane w silnikowym, ale muszą + // świecić się w rozrządczych + // dla EZT światła czołowe będą "zapalane w silnikowym", ale widziane z + // rozrządczych + // również wczytywanie MMD powinno dotyczyć aktualnego członu + // problematyczna może być kwestia wybranej kabiny (w silnikowym...) + // jeśli silnikowy będzie zapięty odwrotnie (tzn. -1), to i tak powinno + // jeździć dobrze + // również hamowanie wykonuje się zaworem w członie, a nie w silnikowym... DynamicObject = d; // jedyne miejsce zmiany mvOccupied = mvControlled = d ? DynamicObject->MoverParameters : NULL; // albo silnikowy w EZT if (!DynamicObject) @@ -5577,47 +5566,47 @@ void TTrain::DynamicSet(TDynamicObject *d) if (mvControlled->TrainType & dt_EZT) // na razie dotyczy to EZT if (DynamicObject->NextConnected ? mvControlled->Couplers[1].AllowedFlag & ctrain_depot : false) - { // gdy jest cz�on od sprz�gu 1, a sprz�g ��czony + { // gdy jest człon od sprzęgu 1, a sprzęg łączony // warsztatowo (powiedzmy) if ((mvControlled->Power < 1.0) && (mvControlled->Couplers[1].Connected->Power > 1.0)) // my nie mamy mocy, ale ten drugi ma mvControlled = - DynamicObject->NextConnected->MoverParameters; // b�dziemy sterowa� tym z moc� + DynamicObject->NextConnected->MoverParameters; // będziemy sterować tym z mocą } else if (DynamicObject->PrevConnected ? mvControlled->Couplers[0].AllowedFlag & ctrain_depot : false) - { // gdy jest cz�on od sprz�gu 0, a sprz�g ��czony + { // gdy jest człon od sprzęgu 0, a sprzęg łączony // warsztatowo (powiedzmy) if ((mvControlled->Power < 1.0) && (mvControlled->Couplers[0].Connected->Power > 1.0)) // my nie mamy mocy, ale ten drugi ma mvControlled = - DynamicObject->PrevConnected->MoverParameters; // b�dziemy sterowa� tym z moc� + DynamicObject->PrevConnected->MoverParameters; // będziemy sterować tym z mocą } - mvSecond = NULL; // gdyby si� nic nie znalaz�o - if (mvOccupied->Power > 1.0) // dwucz�onowe lub ukrotnienia, �eby nie szuka� ka�dorazowo + mvSecond = NULL; // gdyby się nic nie znalazło + if (mvOccupied->Power > 1.0) // dwuczłonowe lub ukrotnienia, żeby nie szukać każdorazowo if (mvOccupied->Couplers[1].Connected ? mvOccupied->Couplers[1].AllowedFlag & ctrain_controll : false) - { // gdy jest cz�on od sprz�gu 1, a sprz�g ��czony + { // gdy jest człon od sprzęgu 1, a sprzęg łączony // warsztatowo (powiedzmy) if (mvOccupied->Couplers[1].Connected->Power > 1.0) // ten drugi ma moc mvSecond = - (TMoverParameters *)mvOccupied->Couplers[1].Connected; // wska�nik na drugiego + (TMoverParameters *)mvOccupied->Couplers[1].Connected; // wskaźnik na drugiego } else if (mvOccupied->Couplers[0].Connected ? mvOccupied->Couplers[0].AllowedFlag & ctrain_controll : false) - { // gdy jest cz�on od sprz�gu 0, a sprz�g ��czony + { // gdy jest człon od sprzęgu 0, a sprzęg łączony // warsztatowo (powiedzmy) if (mvOccupied->Couplers[0].Connected->Power > 1.0) // ale ten drugi ma moc mvSecond = - (TMoverParameters *)mvOccupied->Couplers[0].Connected; // wska�nik na drugiego + (TMoverParameters *)mvOccupied->Couplers[0].Connected; // wskaźnik na drugiego } }; void TTrain::Silence() -{ // wyciszenie d�wi�k�w przy wychodzeniu +{ // wyciszenie dźwięków przy wychodzeniu if (dsbNastawnikJazdy) dsbNastawnikJazdy->Stop(); if (dsbNastawnikBocz) @@ -5662,11 +5651,11 @@ void TTrain::Silence() rsEngageSlippery.Stop(); rsFadeSound.Stop(); if (dsbHasler) - dsbHasler->Stop(); // wy��czenie d�wi�k�w opuszczanej kabiny + dsbHasler->Stop(); // wyłączenie dźwięków opuszczanej kabiny if (dsbBuzzer) dsbBuzzer->Stop(); if (dsbSlipAlarm) - dsbSlipAlarm->Stop(); // d�wi�k alarmu przy po�lizgu + dsbSlipAlarm->Stop(); // dźwięk alarmu przy poślizgu // sConverter.Stop(); // sSmallCompressor->Stop(); if (dsbCouplerStretch) @@ -5762,20 +5751,20 @@ void TTrain::clear_cab_controls() ggClockHInd.Clear(); ggEngineVoltage.Clear(); ggLVoltage.Clear(); - // ggLVoltage.Output(0); //Ra: sterowanie miernikiem: niskie napi�cie + // ggLVoltage.Output(0); //Ra: sterowanie miernikiem: niskie napięcie // ggEnrot1m.Clear(); // ggEnrot2m.Clear(); // ggEnrot3m.Clear(); // ggEngageRatio.Clear(); ggMainGearStatus.Clear(); ggIgnitionKey.Clear(); - // Je�li ustawiamy now� warto�� dla PoKeys wolna jest 15 - // Numer 14 jest u�ywany dla buczka SHP w innym miejscu + // Jeśli ustawiamy nową wartość dla PoKeys wolna jest 15 + // Numer 14 jest używany dla buczka SHP w innym miejscu btLampkaPoslizg.Clear(6); btLampkaStyczn.Clear(5); btLampkaNadmPrzetw.Clear((mvControlled->TrainType & (dt_EZT)) ? -1 : 7); // EN57 nie ma tej lampki - btLampkaPrzetw.Clear((mvControlled->TrainType & (dt_EZT)) ? 7 : -1); // za to ma t� + btLampkaPrzetw.Clear((mvControlled->TrainType & (dt_EZT)) ? 7 : -1); // za to ma tę btLampkaPrzekRozn.Clear(); btLampkaPrzekRoznPom.Clear(); btLampkaNadmSil.Clear(4); @@ -5835,8 +5824,8 @@ void TTrain::clear_cab_controls() ggRearUpperLightButton.Clear(); ggRearLeftEndLightButton.Clear(); ggRearRightEndLightButton.Clear(); - btHaslerBrakes.Clear(12); // ci�nienie w cylindrach do odbijania na haslerze - btHaslerCurrent.Clear(13); // pr�d na silnikach do odbijania na haslerze + btHaslerBrakes.Clear(12); // ciśnienie w cylindrach do odbijania na haslerze + btHaslerCurrent.Clear(13); // prąd na silnikach do odbijania na haslerze } // initializes a button matching provided label. returns: true if the label was found, false @@ -5846,7 +5835,7 @@ void TTrain::clear_cab_controls() bool TTrain::initialize_button(cParser &Parser, std::string const &Label, int const Cabindex) { - TButton *bt; // roboczy wsa�nik na obiekt animuj�cy lampk� + TButton *bt; // roboczy wskaźnik na obiekt animujący lampkę // SEKCJA LAMPEK if (Label == "i-maxft:") @@ -6079,7 +6068,7 @@ bool TTrain::initialize_button(cParser &Parser, std::string const &Label, int co bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int const Cabindex) { - TGauge *gg; // roboczy wsa�nik na obiekt animuj�cy ga�k� + TGauge *gg; // roboczy wskaźnik na obiekt animujący gałkę /* sanity check if( !DynamicObject->mdKabina ) { @@ -6331,7 +6320,7 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con } else if (Label == "nextcurrent_sw:") { - // pr�d drugiego cz�onu + // prąd drugiego członu ggNextCurrentButton.Load(Parser, DynamicObject->mdKabina); } else if (Label == "cablight_sw:") @@ -6364,50 +6353,50 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con // SEKCJA WSKAZNIKOW else if ((Label == "tachometer:") || (Label == "tachometerb:")) { - // predkosciomierz wskaz�wkowy z szarpaniem - gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna ga�ka + // predkosciomierz wskaźnikowy z szarpaniem + gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna gałka gg->Load(Parser, DynamicObject->mdKabina); gg->AssignFloat(&fTachoVelocityJump); } else if (Label == "tachometern:") { - // predkosciomierz wskaz�wkowy bez szarpania - gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna ga�ka + // predkosciomierz wskaźnikowy bez szarpania + gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna gałka gg->Load(Parser, DynamicObject->mdKabina); gg->AssignFloat(&fTachoVelocity); } else if (Label == "tachometerd:") { // predkosciomierz cyfrowy - gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna ga�ka + gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna gałka gg->Load(Parser, DynamicObject->mdKabina); gg->AssignFloat(&fTachoVelocity); } else if ((Label == "hvcurrent1:") || (Label == "hvcurrent1b:")) { // 1szy amperomierz - gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna ga�ka + gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna gałka gg->Load(Parser, DynamicObject->mdKabina); gg->AssignFloat(fHCurrent + 1); } else if ((Label == "hvcurrent2:") || (Label == "hvcurrent2b:")) { // 2gi amperomierz - gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna ga�ka + gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna gałka gg->Load(Parser, DynamicObject->mdKabina); gg->AssignFloat(fHCurrent + 2); } else if ((Label == "hvcurrent3:") || (Label == "hvcurrent3b:")) { // 3ci amperomierz - gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna ga�ka + gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna gałska gg->Load(Parser, DynamicObject->mdKabina); gg->AssignFloat(fHCurrent + 3); } else if ((Label == "hvcurrent:") || (Label == "hvcurrentb:")) { // amperomierz calkowitego pradu - gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna ga�ka + gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna gałka gg->Load(Parser, DynamicObject->mdKabina); gg->AssignFloat(fHCurrent); } @@ -6417,7 +6406,7 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con int i, j; Parser.getTokens(2, false); Parser >> i >> j; - gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna ga�ka + gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna gałka gg->Load(Parser, DynamicObject->mdKabina); gg->AssignFloat(&fEIMParams[i][j]); } @@ -6427,7 +6416,7 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con int i, j; Parser.getTokens(2, false); Parser >> i >> j; - gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna ga�ka + gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna gałka gg->Load(Parser, DynamicObject->mdKabina); gg->AssignFloat(&fPress[i - 1][j]); } @@ -6435,14 +6424,14 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con { // manometr cylindrow hamulcowych // Ra 2014-08: przeniesione do TCab - gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna ga�ka + gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna gałka gg->Load(Parser, DynamicObject->mdKabina, NULL, 0.1); gg->AssignDouble(&mvOccupied->BrakePress); } else if ((Label == "pipepress:") || (Label == "pipepressb:")) { // manometr przewodu hamulcowego - TGauge *gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna ga�ka + TGauge *gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna gałka gg->Load(Parser, DynamicObject->mdKabina, NULL, 0.1); gg->AssignDouble(&mvOccupied->PipePress); } @@ -6453,15 +6442,15 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con } else if (Label == "cntrlpress:") { - // manometr zbiornika kontrolnego/rorz�du - gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna ga�ka + // manometr zbiornika kontrolnego/rorzďż˝du + gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna gałka gg->Load(Parser, DynamicObject->mdKabina, NULL, 0.1); gg->AssignDouble(&mvControlled->PantPress); } else if ((Label == "compressor:") || (Label == "compressorb:")) { // manometr sprezarki/zbiornika glownego - gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna ga�ka + gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna gałka gg->Load(Parser, DynamicObject->mdKabina, NULL, 0.1); gg->AssignDouble(&mvOccupied->Compressor); } @@ -6509,7 +6498,7 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con else if (Label == "hvoltage:") { // woltomierz wysokiego napiecia - gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna ga�ka + gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna gałka gg->Load(Parser, DynamicObject->mdKabina); gg->AssignFloat(&fHVoltage); } @@ -6521,33 +6510,33 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con else if (Label == "enrot1m:") { // obrotomierz - gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna ga�ka + gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna gałka gg->Load(Parser, DynamicObject->mdKabina); gg->AssignFloat(fEngine + 1); } // ggEnrot1m.Load(Parser,DynamicObject->mdKabina); else if (Label == "enrot2m:") { // obrotomierz - gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna ga�ka + gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna gałka gg->Load(Parser, DynamicObject->mdKabina); gg->AssignFloat(fEngine + 2); } // ggEnrot2m.Load(Parser,DynamicObject->mdKabina); else if (Label == "enrot3m:") { // obrotomierz - gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna ga�ka + gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna gałka gg->Load(Parser, DynamicObject->mdKabina); gg->AssignFloat(fEngine + 3); } // ggEnrot3m.Load(Parser,DynamicObject->mdKabina); else if (Label == "engageratio:") { - // np. ci�nienie sterownika sprz�g�a - gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna ga�ka + // np. ciśnienie sterownika sprzęgła + gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna gałka gg->Load(Parser, DynamicObject->mdKabina); gg->AssignDouble(&mvControlled->dizel_engage); } // ggEngageRatio.Load(Parser,DynamicObject->mdKabina); else if (Label == "maingearstatus:") { - // np. ci�nienie sterownika skrzyni bieg�w + // np. ciśnienie sterownika skrzyni biegów ggMainGearStatus.Load(Parser, DynamicObject->mdKabina); } else if (Label == "ignitionkey:") @@ -6556,8 +6545,8 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con } else if (Label == "distcounter:") { - // Ra 2014-07: licznik kilometr�w - gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna ga�ka + // Ra 2014-07: licznik kilometrów + gg = Cabine[Cabindex].Gauge(-1); // pierwsza wolna gałka gg->Load(Parser, DynamicObject->mdKabina); gg->AssignDouble(&mvControlled->DistCounter); } diff --git a/Train.h b/Train.h index bf566251..239bacf9 100644 --- a/Train.h +++ b/Train.h @@ -58,10 +58,10 @@ class TCab intlitlow_b; // McZapkie-120503: przyciemnione oswietlenie kabiny private: // bool bChangePossible; - TGauge *ggList; // Ra 2014-08: lista animacji macierzowych (gaek) w kabinie - int iGaugesMax, iGauges; // ile miejsca w tablicy i ile jest w uyciu + TGauge *ggList; // Ra 2014-08: lista animacji macierzowych (gałek) w kabinie + int iGaugesMax, iGauges; // ile miejsca w tablicy i ile jest w użyciu TButton *btList; // Ra 2014-08: lista animacji dwustanowych (lampek) w kabinie - int iButtonsMax, iButtons; // ile miejsca w tablicy i ile jest w uyciu + int iButtonsMax, iButtons; // ile miejsca w tablicy i ile jest w użyciu public: TGauge *Gauge(int n = -1); // pobranie adresu obiektu TButton *Button(int n = -1); // pobranie adresu obiektu @@ -112,18 +112,18 @@ class TTrain // otherwise bool initialize_button(cParser &Parser, std::string const &Label, int const Cabindex); - private: //eby go nic z zewntrz nie przestawiao + private: //żeby go nic z zewnątrz nie przestawiało TDynamicObject *DynamicObject; // przestawia zmiana pojazdu [F5] - private: //eby go nic z zewntrz nie przestawiao - TMoverParameters *mvControlled; // czon, w ktrym sterujemy silnikiem - TMoverParameters *mvOccupied; // czon, w ktrym sterujemy hamulcem - TMoverParameters *mvSecond; // drugi czon (ET40, ET41, ET42, ukrotnienia) - TMoverParameters *mvThird; // trzeci czon (SN61) - public: // reszta moe by?publiczna + private: //żeby go nic z zewnątrz nie przestawiało + TMoverParameters *mvControlled; // człon, w którym sterujemy silnikiem + TMoverParameters *mvOccupied; // człon, w którym sterujemy hamulcem + TMoverParameters *mvSecond; // drugi człon (ET40, ET41, ET42, ukrotnienia) + TMoverParameters *mvThird; // trzeci człon (SN61) + public: // reszta może by?publiczna // AnsiString asMessage; - // McZapkie: definicje wskanikw - // Ra 2014-08: czsciowo przeniesione do tablicy w TCab + // McZapkie: definicje wskaźników + // Ra 2014-08: częsciowo przeniesione do tablicy w TCab TGauge ggZbS; TGauge ggClockSInd; TGauge ggClockMInd; @@ -137,7 +137,7 @@ class TTrain TGauge ggMainGearStatus; TGauge ggEngineVoltage; - TGauge ggI1B; // drugi czon w postaci jawnej + TGauge ggI1B; // drugi człon w postaci jawnej TGauge ggI2B; TGauge ggI3B; TGauge ggItotalB; @@ -218,8 +218,8 @@ class TTrain TGauge ggSignallingButton; TGauge ggDoorSignallingButton; // TModel3d *mdKabina; McZapkie-030303: to do dynobj - // TGauge ggDistCounter; //Ra 2014-07: licznik kilometrw - // TGauge ggVelocityDgt; //i od razu prdkociomierz + // TGauge ggDistCounter; //Ra 2014-07: licznik kilometrów + // TGauge ggVelocityDgt; //i od razu prędkościomierz TButton btLampkaPoslizg; TButton btLampkaStyczn; @@ -268,7 +268,7 @@ class TTrain TButton btLampkaRadiotelefon; TButton btLampkaHamienie; TButton btLampkaED; // Stele 161228 hamowanie elektrodynamiczne - TButton btLampkaJazda; // Ra: nie uywane + TButton btLampkaJazda; // Ra: nie używane // KURS90 TButton btLampkaBoczniki; TButton btLampkaMaxSila; @@ -280,13 +280,13 @@ class TTrain TButton btLampkaDepartureSignal; TButton btLampkaBlokadaDrzwi; TButton btLampkaHamulecReczny; - TButton btLampkaForward; // Ra: lampki w przd i w ty?dla komputerowych kabin + TButton btLampkaForward; // Ra: lampki w przód i w ty?dla komputerowych kabin TButton btLampkaBackward; TButton btCabLight; // hunter-171012: lampa oswietlajaca kabine // Ra 2013-12: wirtualne "lampki" do odbijania na haslerze w PoKeys - TButton btHaslerBrakes; // cinienie w cylindrach - TButton btHaslerCurrent; // prd na silnikach + TButton btHaslerBrakes; // ciśnienie w cylindrach + TButton btHaslerCurrent; // prąd na silnikach vector3 pPosition; vector3 pMechOffset; // driverNpos @@ -395,8 +395,8 @@ class TTrain float fHVoltage; // napi?cie dla dynamicznych ga?ek float fHCurrent[4]; // pr?dy: suma i amperomierze 1,2,3 float fEngine[4]; // obroty te? trzeba pobra? - int iCarNo, iPowerNo, iUnitNo; // liczba pojazdow, czlonow napednych i jednostek spitych ze - // sob + int iCarNo, iPowerNo, iUnitNo; // liczba pojazdow, czlonow napednych i jednostek spiętych ze + // sobą bool bDoors[20][3]; // drzwi dla wszystkich czlonow int iUnits[20]; // numer jednostki int iDoorNo[20]; // liczba drzwi diff --git a/TrkFoll.cpp b/TrkFoll.cpp index 682577e9..adbdd44a 100644 --- a/TrkFoll.cpp +++ b/TrkFoll.cpp @@ -28,7 +28,7 @@ TTrackFollower::TTrackFollower() fCurrentDistance = 0; pPosition = vAngles = vector3(0, 0, 0); fDirection = 1; // jest przodem do Point2 - fOffsetH = 0.0; // na starcie stoi na rodku + fOffsetH = 0.0; // na starcie stoi na środku } TTrackFollower::~TTrackFollower() @@ -40,7 +40,7 @@ bool TTrackFollower::Init(TTrack *pTrack, TDynamicObject *NewOwner, double fDir) fDirection = fDir; Owner = NewOwner; SetCurrentTrack(pTrack, 0); - iEventFlag = 3; // na torze startowym rwnie wykona eventy 1/2 + iEventFlag = 3; // na torze startowym również wykonać eventy 1/2 iEventallFlag = 3; if ((pCurrentSegment)) // && (pCurrentSegment->GetLength()eType) { - case tt_Switch: // jeli zwrotnica, to przekadamy j, aby uzyska dobry segment + case tt_Switch: // jeśli zwrotnica, to przekładamy ją, aby uzyskać dobry segment { int i = (end ? pCurrentTrack->iNextDirection : pCurrentTrack->iPrevDirection); - if (i > 0) // jeeli wjazd z ostrza - pTrack->SwitchForced(i >> 1, Owner); // to przeoenie zwrotnicy - rozprucie! + if (i > 0) // jeżeli wjazd z ostrza + pTrack->SwitchForced(i >> 1, Owner); // to przełożenie zwrotnicy - rozprucie! } break; - case tt_Cross: // skrzyowanie trzeba tymczasowo przeczy, aby wjecha na waciwy tor + case tt_Cross: // skrzyżowanie trzeba tymczasowo przełączyć, aby wjechać na właściwy tor { - iSegment = Owner->RouteWish(pTrack); // nr segmentu zosta ustalony podczas skanowania - // Ra 2014-08: aby ustali dalsz tras, naley zapyta AI - trasa jest ustalana podczas + iSegment = Owner->RouteWish(pTrack); // nr segmentu został ustalony podczas skanowania + // Ra 2014-08: aby ustalić dalszą trasę, należy zapytać AI - trasa jest ustalana podczas // skanowania - // Ra 15-01: zapytanie AI nie wybiera segmentu - kolejny skanujcy moe przestawi + // Ra 15-01: zapytanie AI nie wybiera segmentu - kolejny skanujący może przestawić // pTrack->CrossSegment(end?pCurrentTrack->iNextDirection:pCurrentTrack->iPrevDirection,i); - // //ustawienie waciwego wskanika - // powinno zwraca kierunek do zapamitania, bo segmenty mog mie rny kierunek + // //ustawienie właściwego wskaźnika + // powinno zwracać kierunek do zapamiętania, bo segmenty mogą mieć różny kierunek // if fDirection=(iSegment>0)?1.0:-1.0; //kierunek na tym segmencie jest ustalany - // bezporednio + // bezpośrednio if (iSegment == 0) - { // to jest bdna sytuacja - generuje ptle zawracajce za skrzyowaniem - ustali, + { // to jest błędna sytuacja - generuje pętle zawracające za skrzyżowaniem - ustalić, // kiedy powstaje! - iSegment = 1; // dorana poprawka + iSegment = 1; // doraźna poprawka } if ((end ? iSegment : -iSegment) < 0) - fDirection = -fDirection; // wtrna zmiana - pTrack->SwitchForced(abs(iSegment) - 1, NULL); // wybr zapamitanego segmentu + fDirection = -fDirection; // wtórna zmiana + pTrack->SwitchForced(abs(iSegment) - 1, NULL); // wybór zapamiętanego segmentu } break; } if (!pTrack) { // gdy nie ma toru w kierunku jazdy pTrack = pCurrentTrack->NullCreate( - end); // tworzenie toru wykolejcego na przedueniu pCurrentTrack - if (!end) // jeli dodana od strony zero, to zmiana kierunku - fDirection = -fDirection; // wtrna zmiana + end); // tworzenie toru wykolejącego na przedłużeniu pCurrentTrack + if (!end) // jeśli dodana od strony zero, to zmiana kierunku + fDirection = -fDirection; // wtórna zmiana // if (pTrack->iCategoryFlag&2) - //{//jeli samochd, zepsu na miejscu - // Owner->MoverParameters->V=0; //zatrzyma - // Owner->MoverParameters->Power=0; //ukra silnik - // Owner->MoverParameters->AccS=0; //wchon moc + //{//jeśli samochód, zepsuć na miejscu + // Owner->MoverParameters->V=0; //zatrzymać + // Owner->MoverParameters->Power=0; //ukraść silnik + // Owner->MoverParameters->AccS=0; //wchłonąć moc // Global::iPause|=1; //zapauzowanie symulacji //} } else - { // najpierw +1, pniej -1, aby odcinek izolowany wsplny dla tych torw nie wykry zera - pTrack->AxleCounter(+1, Owner); // zajcie nowego toru + { // najpierw +1, później -1, aby odcinek izolowany wspólny dla tych torów nie wykrył zera + pTrack->AxleCounter(+1, Owner); // zajęcie nowego toru if (pCurrentTrack) pCurrentTrack->AxleCounter(-1, Owner); // opuszczenie tamtego toru } @@ -109,31 +109,31 @@ TTrack * TTrackFollower::SetCurrentTrack(TTrack *pTrack, int end) }; bool TTrackFollower::Move(double fDistance, bool bPrimary) -{ // przesuwanie wzka po torach o odlego (fDistance), z wyzwoleniem eventw - // bPrimary=true - jest pierwsz osi w pojedzie, czyli generuje eventy i przepisuje pojazd - // Ra: zwraca false, jeli pojazd ma by usunity - fDistance *= fDirection; // dystans mnonony przez kierunek +{ // przesuwanie wózka po torach o odległość (fDistance), z wyzwoleniem eventów + // bPrimary=true - jest pierwszą osią w pojeździe, czyli generuje eventy i przepisuje pojazd + // Ra: zwraca false, jeśli pojazd ma być usunięty + fDistance *= fDirection; // dystans mnożnony przez kierunek double s; // roboczy dystans - double dir; // zapamitany kierunek do sprawdzenia, czy si zmieni - bool bCanSkip; // czy przemieci pojazd na inny tor - while (true) // ptla wychodzi, gdy przesunicie wyjdzie zerowe - { // ptla przesuwajca wzek przez kolejne tory, a do trafienia w jaki + double dir; // zapamiętany kierunek do sprawdzenia, czy się zmienił + bool bCanSkip; // czy przemieścić pojazd na inny tor + while (true) // pętla wychodzi, gdy przesunięcie wyjdzie zerowe + { // pętla przesuwająca wózek przez kolejne tory, aż do trafienia w jakiś if (!pCurrentTrack) return false; // nie ma toru, to nie ma przesuwania if (pCurrentTrack->iEvents) // sumaryczna informacja o eventach - { // omijamy cay ten blok, gdy tor nie ma on adnych eventw (wikszo nie ma) + { // omijamy cały ten blok, gdy tor nie ma on żadnych eventów (większość nie ma) if (fDistance < 0) { - if (iSetFlag(iEventFlag, -1)) // zawsze zeruje flag sprawdzenia, jak mechanik - // dosidzie, to si nie wykona - if (Owner->Mechanik->Primary()) // tylko dla jednego czonu + if (iSetFlag(iEventFlag, -1)) // zawsze zeruje flagę sprawdzenia, jak mechanik + // dosiądzie, to się nie wykona + if (Owner->Mechanik->Primary()) // tylko dla jednego członu // if (TestFlag(iEventFlag,1)) //McZapkie-280503: wyzwalanie event tylko dla // pojazdow z obsada if (bPrimary && pCurrentTrack->evEvent1 && (!pCurrentTrack->evEvent1->iQueued)) Global::AddToQuery(pCurrentTrack->evEvent1, Owner); // dodanie do // kolejki - // Owner->RaAxleEvent(pCurrentTrack->Event1); //Ra: dynamic zdecyduje, czy doda do + // Owner->RaAxleEvent(pCurrentTrack->Event1); //Ra: dynamic zdecyduje, czy dodać do // kolejki // if (TestFlag(iEventallFlag,1)) if (iSetFlag(iEventallFlag, @@ -141,79 +141,79 @@ bool TTrackFollower::Move(double fDistance, bool bPrimary) if (bPrimary && pCurrentTrack->evEventall1 && (!pCurrentTrack->evEventall1->iQueued)) Global::AddToQuery(pCurrentTrack->evEventall1, Owner); // dodanie do kolejki - // Owner->RaAxleEvent(pCurrentTrack->Eventall1); //Ra: dynamic zdecyduje, czy doda + // Owner->RaAxleEvent(pCurrentTrack->Eventall1); //Ra: dynamic zdecyduje, czy dodać // do kolejki } else if (fDistance > 0) { - if (iSetFlag(iEventFlag, -2)) // zawsze ustawia flag sprawdzenia, jak mechanik - // dosidzie, to si nie wykona - if (Owner->Mechanik->Primary()) // tylko dla jednego czonu + if (iSetFlag(iEventFlag, -2)) // zawsze ustawia flagę sprawdzenia, jak mechanik + // dosiądzie, to się nie wykona + if (Owner->Mechanik->Primary()) // tylko dla jednego członu // if (TestFlag(iEventFlag,2)) //sprawdzanie jest od razu w pierwszym // warunku if (bPrimary && pCurrentTrack->evEvent2 && (!pCurrentTrack->evEvent2->iQueued)) Global::AddToQuery(pCurrentTrack->evEvent2, Owner); - // Owner->RaAxleEvent(pCurrentTrack->Event2); //Ra: dynamic zdecyduje, czy doda do + // Owner->RaAxleEvent(pCurrentTrack->Event2); //Ra: dynamic zdecyduje, czy dodać do // kolejki // if (TestFlag(iEventallFlag,2)) if (iSetFlag(iEventallFlag, - -2)) // sprawdza i zeruje na przyszo, true jeli zmieni z 2 na 0 + -2)) // sprawdza i zeruje na przyszłość, true jeśli zmieni z 2 na 0 if (bPrimary && pCurrentTrack->evEventall2 && (!pCurrentTrack->evEventall2->iQueued)) Global::AddToQuery(pCurrentTrack->evEventall2, Owner); - // Owner->RaAxleEvent(pCurrentTrack->Eventall2); //Ra: dynamic zdecyduje, czy doda + // Owner->RaAxleEvent(pCurrentTrack->Eventall2); //Ra: dynamic zdecyduje, czy dodać // do kolejki } else // if (fDistance==0) //McZapkie-140602: wyzwalanie zdarzenia gdy pojazd stoi { - if (Owner->Mechanik->Primary()) // tylko dla jednego czonu + if (Owner->Mechanik->Primary()) // tylko dla jednego członu if (pCurrentTrack->evEvent0) if (!pCurrentTrack->evEvent0->iQueued) Global::AddToQuery(pCurrentTrack->evEvent0, Owner); - // Owner->RaAxleEvent(pCurrentTrack->Event0); //Ra: dynamic zdecyduje, czy doda do + // Owner->RaAxleEvent(pCurrentTrack->Event0); //Ra: dynamic zdecyduje, czy dodać do // kolejki if (pCurrentTrack->evEventall0) if (!pCurrentTrack->evEventall0->iQueued) Global::AddToQuery(pCurrentTrack->evEventall0, Owner); - // Owner->RaAxleEvent(pCurrentTrack->Eventall0); //Ra: dynamic zdecyduje, czy doda + // Owner->RaAxleEvent(pCurrentTrack->Eventall0); //Ra: dynamic zdecyduje, czy dodać // do kolejki } } - if (!pCurrentSegment) // jeeli nie ma powizanego segmentu toru? + if (!pCurrentSegment) // jeżeli nie ma powiązanego segmentu toru? return false; - // if (fDistance==0.0) return true; //Ra: jak stoi, to chyba dalej nie ma co kombinowa? - s = fCurrentDistance + fDistance; // doliczenie przesunicia - // Ra: W Point2 toru moe znajdowa si "dziura", ktra zamieni energi kinetyczn - // ruchu wzdunego na energi potencjaln, zamieniajc si potem na energi - // sprystoci na amortyzatorach. Naleaoby we wpisie toru umieci wspczynnik - // podziau energii kinetycznej. - // Wspczynnik normalnie 1, z dziur np. 0.99, a -1 bdzie oznaczao 100% odbicia (kozio). - // Albo w postaci kta: normalnie 0, a 180 oznacza 100% odbicia (cosinus powyszego). + // if (fDistance==0.0) return true; //Ra: jak stoi, to chyba dalej nie ma co kombinować? + s = fCurrentDistance + fDistance; // doliczenie przesunięcia + // Ra: W Point2 toru może znajdować się "dziura", która zamieni energię kinetyczną + // ruchu wzdłużnego na energię potencjalną, zamieniającą się potem na energię + // sprężystości na amortyzatorach. Należałoby we wpisie toru umieścić współczynnik + // podziału energii kinetycznej. + // Współczynnik normalnie 1, z dziurą np. 0.99, a -1 będzie oznaczało 100% odbicia (kozioł). + // Albo w postaci kąta: normalnie 0°, a 180° oznacza 100% odbicia (cosinus powyższego). /* if (pCurrentTrack->eType==tt_Cross) - {//zjazdu ze skrzyowania nie da si okreli przez (iPrevDirection) i (iNextDirection) - //int segment=Owner->RouteWish(pCurrentTrack); //numer segmentu dla skrzyowa + {//zjazdu ze skrzyżowania nie da się określić przez (iPrevDirection) i (iNextDirection) + //int segment=Owner->RouteWish(pCurrentTrack); //numer segmentu dla skrzyżowań //pCurrentTrack->SwitchForced(abs(segment)-1,NULL); //tymczasowo ustawienie tego segmentu - //pCurrentSegment=pCurrentTrack->CurrentSegment(); //odwiey sobie wskanik segmentu + //pCurrentSegment=pCurrentTrack->CurrentSegment(); //odświeżyć sobie wskaźnik segmentu (?) } */ if (s < 0) - { // jeli przekroczenie toru od strony Point1 + { // jeśli przekroczenie toru od strony Point1 bCanSkip = bPrimary ? pCurrentTrack->CheckDynamicObject(Owner) : false; - if (bCanSkip) // tylko gwna o przenosi pojazd do innego toru + if (bCanSkip) // tylko główna oś przenosi pojazd do innego toru Owner->MyTrack->RemoveDynamicObject( Owner); // zdejmujemy pojazd z dotychczasowego toru dir = fDirection; if (pCurrentTrack->eType == tt_Cross) { if (!SetCurrentTrack(pCurrentTrack->Neightbour(iSegment, fDirection), 0)) - return false; // wyjcie z bdem + return false; // wyjście z błędem } else if (!SetCurrentTrack(pCurrentTrack->Neightbour(-1, fDirection), 0)) // ustawia fDirection - return false; // wyjcie z bdem + return false; // wyjście z błędem if (dir == fDirection) //(pCurrentTrack->iPrevDirection) { // gdy kierunek bez zmiany (Point1->Point2) fCurrentDistance = pCurrentSegment->GetLength(); @@ -225,7 +225,7 @@ bool TTrackFollower::Move(double fDistance, bool bPrimary) fDistance = -s; } if (bCanSkip) - { // jak gwna o, to dodanie pojazdu do nowego toru + { // jak główna oś, to dodanie pojazdu do nowego toru pCurrentTrack->AddDynamicObject(Owner); iEventFlag = 3; // McZapkie-020602: umozliwienie uruchamiania event1,2 po zmianie toru @@ -236,9 +236,9 @@ bool TTrackFollower::Move(double fDistance, bool bPrimary) continue; } else if (s > pCurrentSegment->GetLength()) - { // jeli przekroczenie toru od strony Point2 + { // jeśli przekroczenie toru od strony Point2 bCanSkip = bPrimary ? pCurrentTrack->CheckDynamicObject(Owner) : false; - if (bCanSkip) // tylko gwna o przenosi pojazd do innego toru + if (bCanSkip) // tylko główna oś przenosi pojazd do innego toru Owner->MyTrack->RemoveDynamicObject( Owner); // zdejmujemy pojazd z dotychczasowego toru fDistance = s - pCurrentSegment->GetLength(); @@ -246,11 +246,11 @@ bool TTrackFollower::Move(double fDistance, bool bPrimary) if (pCurrentTrack->eType == tt_Cross) { if (!SetCurrentTrack(pCurrentTrack->Neightbour(iSegment, fDirection), 1)) - return false; // wyjcie z bdem + return false; // wyjście z błędem } else if (!SetCurrentTrack(pCurrentTrack->Neightbour(1, fDirection), 1)) // ustawia fDirection - return false; // wyjcie z bdem + return false; // wyjście z błędem if (dir != fDirection) //(pCurrentTrack->iNextDirection) { // gdy zmiana kierunku toru (Point2->Point2) fDistance = -fDistance; //(s-pCurrentSegment->GetLength()); @@ -259,7 +259,7 @@ bool TTrackFollower::Move(double fDistance, bool bPrimary) else // gdy kierunek bez zmiany (Point2->Point1) fCurrentDistance = 0; if (bCanSkip) - { // jak gwna o, to dodanie pojazdu do nowego toru + { // jak główna oś, to dodanie pojazdu do nowego toru pCurrentTrack->AddDynamicObject(Owner); iEventFlag = 3; // McZapkie-020602: umozliwienie uruchamiania event1,2 po zmianie toru @@ -270,9 +270,9 @@ bool TTrackFollower::Move(double fDistance, bool bPrimary) continue; } else - { // gdy zostaje na tym samym torze (przesuwanie ju nie zmienia toru) + { // gdy zostaje na tym samym torze (przesuwanie już nie zmienia toru) if (bPrimary) - { // tylko gdy pocztkowe ustawienie, dodajemy eventy stania do kolejki + { // tylko gdy początkowe ustawienie, dodajemy eventy stania do kolejki if (Owner->MoverParameters->ActiveCab != 0) // if (Owner->MoverParameters->CabNo!=0) { @@ -288,25 +288,25 @@ bool TTrackFollower::Move(double fDistance, bool bPrimary) } fCurrentDistance = s; // fDistance=0; - return ComputatePosition(); // przeliczenie XYZ, true o ile nie wyjecha na NULL + return ComputatePosition(); // przeliczenie XYZ, true o ile nie wyjechał na NULL } } }; bool TTrackFollower::ComputatePosition() -{ // ustalenie wsprzdnych XYZ +{ // ustalenie współrzędnych XYZ if (pCurrentSegment) // o ile jest tor { pCurrentSegment->RaPositionGet(fCurrentDistance, pPosition, vAngles); - if (fDirection < 0) // kty zale jeszcze od zwrotu na torze - { // kty s w przedziale <-M_PI;M_PI> - vAngles.x = -vAngles.x; // przechyka jest w przecinw stron - vAngles.y = -vAngles.y; // pochylenie jest w przecinw stron + if (fDirection < 0) // kąty zależą jeszcze od zwrotu na torze + { // kąty są w przedziale <-M_PI;M_PI> + vAngles.x = -vAngles.x; // przechyłka jest w przecinwą stronę + vAngles.y = -vAngles.y; // pochylenie jest w przecinwą stronę vAngles.z += - (vAngles.z >= M_PI) ? -M_PI : M_PI; // ale kierunek w planie jest obrcony o 180 + (vAngles.z >= M_PI) ? -M_PI : M_PI; // ale kierunek w planie jest obrócony o 180° } if (fOffsetH != 0.0) - { // jeli przesunicie wzgldem osi toru, to je doliczy + { // jeśli przesunięcie względem osi toru, to je doliczyć } return true; } @@ -316,15 +316,15 @@ bool TTrackFollower::ComputatePosition() #include "opengl/glew.h" #include "opengl/glut.h" void TTrackFollower::Render(float fNr) -{ // funkcja rysujca stoek w miejscu osi +{ // funkcja rysująca stożek w miejscu osi glPushMatrix(); // matryca kamery glTranslatef(pPosition.x, pPosition.y + 6, pPosition.z); // 6m ponad - glRotated(RadToDeg(-vAngles.z), 0, 1, 0); // obrt wzgldem osi OY - // glRotated(RadToDeg(vAngles.z),0,1,0); //obrt wzgldem osi OY + glRotated(RadToDeg(-vAngles.z), 0, 1, 0); // obrót względem osi OY + // glRotated(RadToDeg(vAngles.z),0,1,0); //obrót względem osi OY glDisable(GL_LIGHTING); - glColor3f(1.0, 1.0 - fNr, 1.0 - fNr); // biay dla 0, czerwony dla 1 - // glutWireCone(promie podstawy,wysoko,ktno podstawy,ilo segmentw na wysoko) - glutWireCone(0.5, 2, 4, 1); // rysowanie stoka (ostrosupa o podstawie wieloboka) + glColor3f(1.0, 1.0 - fNr, 1.0 - fNr); // biały dla 0, czerwony dla 1 + // glutWireCone(promień podstawy,wysokość,kątność podstawy,ilość segmentów na wysokość) + glutWireCone(0.5, 2, 4, 1); // rysowanie stożka (ostrosłupa o podstawie wieloboka) glEnable(GL_LIGHTING); glPopMatrix(); } diff --git a/TrkFoll.h b/TrkFoll.h index 190d1bb6..4e3befa1 100644 --- a/TrkFoll.h +++ b/TrkFoll.h @@ -14,22 +14,22 @@ http://mozilla.org/MPL/2.0/. #include "McZapkie\MOVER.h" class TTrackFollower -{ // o poruszajca si po torze +{ // oś poruszająca się po torze private: - TTrack *pCurrentTrack; // na ktrym torze si znajduje - TSegment *pCurrentSegment; // zwrotnice mog mie dwa segmenty - double fCurrentDistance; // przesunicie wzgldem Point1 w stron Point2 - double fDirection; // ustawienie wzgldem toru: -1.0 albo 1.0, mnoone przez dystans + TTrack *pCurrentTrack; // na którym torze się znajduje + TSegment *pCurrentSegment; // zwrotnice mogą mieć dwa segmenty + double fCurrentDistance; // przesunięcie względem Point1 w stronę Point2 + double fDirection; // ustawienie względem toru: -1.0 albo 1.0, mnożone przez dystans bool ComputatePosition(); // przeliczenie pozycji na torze - TDynamicObject *Owner; // pojazd posiadajcy + TDynamicObject *Owner; // pojazd posiadający int iEventFlag; // McZapkie-020602: informacja o tym czy wyzwalac zdarzenie: 0,1,2,3 int iEventallFlag; - int iSegment; // ktry segment toru jest uywany (eby nie przeskakiwao po przestawieniu + int iSegment; // który segment toru jest używany (żeby nie przeskakiwało po przestawieniu // zwrotnicy pod taborem) public: - double fOffsetH; // Ra: odlego rodka osi od osi toru (dla samochodw) - uy do wykowania - vector3 pPosition; // wsprzdne XYZ w ukadzie scenerii - vector3 vAngles; // x:przechyka, y:pochylenie, z:kierunek w planie (w radianach) + double fOffsetH; // Ra: odległość środka osi od osi toru (dla samochodów) - użyć do wężykowania + vector3 pPosition; // współrzędne XYZ w układzie scenerii + vector3 vAngles; // x:przechyłka, y:pochylenie, z:kierunek w planie (w radianach) TTrackFollower(); ~TTrackFollower(); TTrack * SetCurrentTrack(TTrack *pTrack, int end); @@ -41,8 +41,8 @@ class TTrackFollower inline double GetRoll() { return vAngles.x; - }; // przechyka policzona przy ustalaniu pozycji - //{return pCurrentSegment->GetRoll(fCurrentDistance)*fDirection;}; //zamiast liczy mona pobra + }; // przechyłka policzona przy ustalaniu pozycji + //{return pCurrentSegment->GetRoll(fCurrentDistance)*fDirection;}; //zamiast liczyć można pobrać inline double GetDirection() { return fDirection; diff --git a/VBO.cpp b/VBO.cpp index 7c443b50..dc43b318 100644 --- a/VBO.cpp +++ b/VBO.cpp @@ -22,17 +22,17 @@ CMesh::CMesh() CMesh::~CMesh() { // usuwanie obiektu - Clear(); // zwolnienie zasobw + Clear(); // zwolnienie zasobów }; void CMesh::MakeArray(int n) { // tworzenie tablic m_nVertexCount = n; - m_pVNT = new CVertNormTex[m_nVertexCount]; // przydzielenie pamici dla tablicy + m_pVNT = new CVertNormTex[m_nVertexCount]; // przydzielenie pamięci dla tablicy }; void CMesh::BuildVBOs(bool del) -{ // tworzenie VBO i kasowanie ju niepotrzebnych tablic +{ // tworzenie VBO i kasowanie już niepotrzebnych tablic // pobierz numer VBO oraz ustaw go jako aktywny glGenBuffersARB(1, &m_nVBOVertices); // pobierz numer glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_nVBOVertices); // ustaw bufor jako aktualny @@ -41,26 +41,26 @@ void CMesh::BuildVBOs(bool del) // WriteLog("Assigned VBO number "+AnsiString(m_nVBOVertices)+", vertices: // "+AnsiString(m_nVertexCount)); if (del) - SafeDeleteArray(m_pVNT); // wierzchoki ju si nie przydadz + SafeDeleteArray(m_pVNT); // wierzchołki już się nie przydadzą }; void CMesh::Clear() -{ // niewirtualne zwolnienie zasobw przez sprztacz albo destruktor - // inna nazwa, eby nie mieszao si z funkcj wirtualn sprztacza - if (m_nVBOVertices) // jeli byo co rezerwowane +{ // niewirtualne zwolnienie zasobów przez sprzątacz albo destruktor + // inna nazwa, żeby nie mieszało się z funkcją wirtualną sprzątacza + if (m_nVBOVertices) // jeśli było coś rezerwowane { glDeleteBuffersARB(1, &m_nVBOVertices); // Free The Memory // WriteLog("Released VBO number "+AnsiString(m_nVBOVertices)); } m_nVBOVertices = 0; m_nVertexCount = -1; // do ponownego zliczenia - SafeDeleteArray(m_pVNT); // usuwanie tablic, gdy byy uyte do Vertex Array + SafeDeleteArray(m_pVNT); // usuwanie tablic, gdy były użyte do Vertex Array }; bool CMesh::StartVBO() -{ // pocztek rysowania elementw z VBO +{ // początek rysowania elementów z VBO if (m_nVertexCount <= 0) - return false; // nie ma nic do rysowania w ten sposb + return false; // nie ma nic do rysowania w ten sposób glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); @@ -69,15 +69,15 @@ bool CMesh::StartVBO() glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_nVBOVertices); glVertexPointer( 3, GL_FLOAT, sizeof(CVertNormTex), static_cast(nullptr) ); // pozycje glNormalPointer( GL_FLOAT, sizeof( CVertNormTex ), static_cast( nullptr ) + 12 ); // normalne - glTexCoordPointer( 2, GL_FLOAT, sizeof( CVertNormTex ), static_cast( nullptr ) + 24 ); // wierzchoki + glTexCoordPointer( 2, GL_FLOAT, sizeof( CVertNormTex ), static_cast( nullptr ) + 24 ); // wierzchołki } - return true; // mona rysowa z VBO + return true; // można rysować z VBO }; bool CMesh::StartColorVBO() -{ // pocztek rysowania punktw wieccych z VBO +{ // początek rysowania punktów świecących z VBO if (m_nVertexCount <= 0) - return false; // nie ma nic do rysowania w ten sposb + return false; // nie ma nic do rysowania w ten sposób glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); if (m_nVBOVertices) @@ -87,16 +87,16 @@ bool CMesh::StartColorVBO() // glColorPointer(3,GL_UNSIGNED_BYTE,sizeof(CVertNormTex),((char*)NULL)+12); //kolory glColorPointer( 3, GL_FLOAT, sizeof( CVertNormTex ), static_cast( nullptr ) + 12 ); // kolory } - return true; // mona rysowa z VBO + return true; // można rysować z VBO }; void CMesh::EndVBO() -{ // koniec uycia VBO +{ // koniec użycia VBO glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_COLOR_ARRAY); - // glBindBuffer(GL_ARRAY_BUFFER,0); //takie co psuje, mimo i polecali uy + // glBindBuffer(GL_ARRAY_BUFFER,0); //takie coś psuje, mimo iż polecali użyć glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); - glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); // Ra: to na przyszo + glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); // Ra: to na przyszłość }; diff --git a/VBO.h b/VBO.h index f930df5c..08925631 100644 --- a/VBO.h +++ b/VBO.h @@ -13,9 +13,9 @@ http://mozilla.org/MPL/2.0/. class CVertNormTex { public: - float x; // X wierzchoka - float y; // Y wierzchoka - float z; // Z wierzchoka + float x; // X wierzchołka + float y; // Y wierzchołka + float z; // Z wierzchołka float nx; // X wektora normalnego float ny; // Y wektora normalnego float nz; // Z wektora normalnego @@ -26,14 +26,14 @@ class CVertNormTex class CMesh { // wsparcie dla VBO public: - int m_nVertexCount; // liczba wierzchokw + int m_nVertexCount; // liczba wierzchołków CVertNormTex *m_pVNT; - unsigned int m_nVBOVertices; // numer VBO z wierzchokami + unsigned int m_nVBOVertices; // numer VBO z wierzchołkami CMesh(); ~CMesh(); void MakeArray(int n); // tworzenie tablicy z elementami VNT void BuildVBOs(bool del = true); // zamiana tablic na VBO - void Clear(); // zwolnienie zasobw + void Clear(); // zwolnienie zasobów bool StartVBO(); void EndVBO(); bool StartColorVBO(); diff --git a/World.cpp b/World.cpp index c8187d52..e27d535e 100644 --- a/World.cpp +++ b/World.cpp @@ -39,9 +39,9 @@ http://mozilla.org/MPL/2.0/. typedef void(APIENTRY *FglutBitmapCharacter)(void *font, int character); // typ funkcji FglutBitmapCharacter glutBitmapCharacterDLL = NULL; // deklaracja zmiennej -HINSTANCE hinstGLUT32 = NULL; // wskanik do GLUT32.DLL +HINSTANCE hinstGLUT32 = NULL; // wskaźnik do GLUT32.DLL // GLUTAPI void APIENTRY glutBitmapCharacterDLL(void *font, int character); -TDynamicObject *Controlled = NULL; // pojazd, ktry prowadzimy +TDynamicObject *Controlled = NULL; // pojazd, który prowadzimy const double fTimeMax = 1.00; //[s] maksymalny czas aktualizacji w jednek klatce @@ -55,21 +55,21 @@ TWorld::TWorld() KeyEvents[i] = NULL; // eventy wyzwalane klawiszami cyfrowymi Global::iSlowMotion = 0; // Global::changeDynObj=NULL; - OutText1 = ""; // teksty wywietlane na ekranie + OutText1 = ""; // teksty wyświetlane na ekranie OutText2 = ""; OutText3 = ""; - iCheckFPS = 0; // kiedy znw sprawdzi FPS, eby wycza optymalizacji od razu do zera + iCheckFPS = 0; // kiedy znów sprawdzić FPS, żeby wyłączać optymalizacji od razu do zera pDynamicNearest = NULL; - fTimeBuffer = 0.0; // bufor czasu aktualizacji dla staego kroku fizyki - fMaxDt = 0.01; //[s] pocztkowy krok czasowy fizyki + fTimeBuffer = 0.0; // bufor czasu aktualizacji dla stałego kroku fizyki + fMaxDt = 0.01; //[s] początkowy krok czasowy fizyki fTime50Hz = 0.0; // bufor czasu dla komunikacji z PoKeys } TWorld::~TWorld() { - Global::bManageNodes = false; // Ra: wyczenie wyrejestrowania, bo si sypie + Global::bManageNodes = false; // Ra: wyłączenie wyrejestrowania, bo się sypie TrainDelete(); - // Ground.Free(); //Ra: usunicie obiektw przed usuniciem dwikw - sypie si + // Ground.Free(); //Ra: usunięcie obiektów przed usunięciem dźwięków - sypie się TSoundsManager::Free(); TModelsManager::Free(); TTexturesManager::Free(); @@ -79,16 +79,16 @@ TWorld::~TWorld() } void TWorld::TrainDelete(TDynamicObject *d) -{ // usunicie pojazdu prowadzonego przez uytkownika +{ // usunięcie pojazdu prowadzonego przez użytkownika if (d) if (Train) if (Train->Dynamic() != d) - return; // nie tego usuwa - delete Train; // i nie ma czym sterowa + return; // nie tego usuwać + delete Train; // i nie ma czym sterować Train = NULL; - Controlled = NULL; // tego te ju nie ma + Controlled = NULL; // tego też już nie ma mvControlled = NULL; - Global::pUserDynamic = NULL; // tego te nie ma + Global::pUserDynamic = NULL; // tego też nie ma }; GLvoid TWorld::glPrint(const char *txt) // custom GL "Print" routine @@ -110,7 +110,7 @@ GLvoid TWorld::glPrint(const char *txt) // custom GL "Print" routine } } -/* Ra: do opracowania: wybor karty graficznej ~Intel gdy s dwie... +/* Ra: do opracowania: wybor karty graficznej ~Intel gdy są dwie... BOOL GetDisplayMonitorInfo(int nDeviceIndex, LPSTR lpszMonitorInfo) { FARPROC EnumDisplayDevices; @@ -169,7 +169,7 @@ bool TWorld::Init(HWND NhWnd, HDC hDC) { auto timestart = std::chrono::system_clock::now(); Global::hWnd = NhWnd; // do WM_COPYDATA - Global::pCamera = &Camera; // Ra: wskanik potrzebny do likwidacji drga + Global::pCamera = &Camera; // Ra: wskaźnik potrzebny do likwidacji drgań Global::detonatoryOK = true; WriteLog("Starting MaSzyna rail vehicle simulator."); WriteLog(Global::asVersion); @@ -197,9 +197,9 @@ bool TWorld::Init(HWND NhWnd, HDC hDC) } else Global::detonatoryOK = true; - // Ra: umieszczone w EU07.cpp jako nie chce dziaa + // Ra: umieszczone w EU07.cpp jakoś nie chce działać while( glver.rfind( '.' ) > glver.find( '.' ) ) { - glver = glver.substr( 0, glver.rfind( '.' ) - 1 ); // obcicie od drugiej kropki + glver = glver.substr( 0, glver.rfind( '.' ) - 1 ); // obcięcie od drugiej kropki } double ogl; try @@ -210,28 +210,28 @@ bool TWorld::Init(HWND NhWnd, HDC hDC) { ogl = 0.0; } - if (Global::fOpenGL > 0.0) // jeli bya wpisane maksymalna wersja w EU07.INI + if (Global::fOpenGL > 0.0) // jeśli była wpisane maksymalna wersja w EU07.INI { - if (ogl > 0.0) // zakadajc, e si odczytao dobrze - if (ogl < Global::fOpenGL) // a karta oferuje nisz wersj ni wpisana - Global::fOpenGL = ogl; // to przyjc to z karty + if (ogl > 0.0) // zakładając, że się odczytało dobrze + if (ogl < Global::fOpenGL) // a karta oferuje niższą wersję niż wpisana + Global::fOpenGL = ogl; // to przyjąc to z karty } - else if (ogl < 1.3) // sprztowa deompresja DDS zwykle wymaga 1.3 - Error("Missed OpenGL 1.3+ drivers!"); // bd np. gdy wersja 1.1, a nie ma wpisu w EU07.INI - Global::bOpenGL_1_5 = (Global::fOpenGL >= 1.5); // s fragmentaryczne animacje VBO + else if (ogl < 1.3) // sprzętowa deompresja DDS zwykle wymaga 1.3 + Error("Missed OpenGL 1.3+ drivers!"); // błąd np. gdy wersja 1.1, a nie ma wpisu w EU07.INI + Global::bOpenGL_1_5 = (Global::fOpenGL >= 1.5); // są fragmentaryczne animacje VBO WriteLog("Supported extensions:"); WriteLog((char *)glGetString(GL_EXTENSIONS)); if (GL_ARB_vertex_buffer_object) // czy jest VBO w karcie graficznej { if( std::string( (char *)glGetString(GL_VENDOR) ).find("Intel") != std::string::npos ) // wymuszenie tylko dla kart Intel - { // karty Intel nie nadaj si do grafiki 3D, ale robimy wyjtek, bo to w kocu symulator + { // karty Intel nie nadają się do grafiki 3D, ale robimy wyjątek, bo to w końcu symulator Global::iMultisampling = 0; // to robi problemy na "Intel(R) HD Graphics Family" - czarny ekran if (Global::fOpenGL >= - 1.4) // 1.4 miao obsug VBO, ale bez opcji modyfikacji fragmentu bufora - Global::bUseVBO = true; // VBO wczane tylko, jeli jest obsuga oraz nie ustawiono - // niszego numeru + 1.4) // 1.4 miało obsługę VBO, ale bez opcji modyfikacji fragmentu bufora + Global::bUseVBO = true; // VBO włączane tylko, jeśli jest obsługa oraz nie ustawiono + // niższego numeru } if (Global::bUseVBO) WriteLog("Ra: The VBO is found and will be used."); @@ -241,17 +241,17 @@ bool TWorld::Init(HWND NhWnd, HDC hDC) else { WriteLog("Ra: No VBO found - Display Lists used. Graphics card too old?"); - Global::bUseVBO = false; // moe by wczone parametrem w INI + Global::bUseVBO = false; // może być włączone parametrem w INI } - if (Global::bDecompressDDS) // jeli sprztowa (domylnie jest false) + if (Global::bDecompressDDS) // jeśli sprzętowa (domyślnie jest false) WriteLog("DDS textures support at OpenGL level is disabled in INI file."); else { Global::bDecompressDDS = - !(GL_EXT_texture_compression_s3tc); // czy obsugiwane? - if (Global::bDecompressDDS) // czy jest obsuga DDS w karcie graficznej + !(GL_EXT_texture_compression_s3tc); // czy obsługiwane? + if (Global::bDecompressDDS) // czy jest obsługa DDS w karcie graficznej WriteLog("DDS textures are not supported."); - else // brak obsugi DDS - trzeba wczy programow dekompresj + else // brak obsługi DDS - trzeba włączyć programową dekompresję WriteLog("DDS textures are supported."); } if (Global::iMultisampling) @@ -264,7 +264,7 @@ bool TWorld::Init(HWND NhWnd, HDC hDC) WriteLog("Max texture size: " + std::to_string(Global::iMaxTextureSize)); } /*-----------------------Render Initialization----------------------*/ - if (Global::fOpenGL >= 1.2) // ponisze nie dziaa w 1.1 + if (Global::fOpenGL >= 1.2) // poniższe nie działa w 1.1 glTexEnvf(TEXTURE_FILTER_CONTROL_EXT, TEXTURE_LOD_BIAS_EXT, -1); GLfloat FogColor[] = {1.0f, 1.0f, 1.0f, 1.0f}; glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix @@ -294,7 +294,7 @@ bool TWorld::Init(HWND NhWnd, HDC hDC) glEnable(GL_DEPTH_TEST); // McZapkie:261102-uruchomienie polprzezroczystosci (na razie linie) pod kierunkiem Marcina - // if (Global::bRenderAlpha) //Ra: wywalam t flag + // if (Global::bRenderAlpha) //Ra: wywalam tę flagę { WriteLog("glEnable(GL_BLEND);"); glEnable(GL_BLEND); @@ -359,13 +359,13 @@ bool TWorld::Init(HWND NhWnd, HDC hDC) Global::lightPos[2] = lp.z; Global::lightPos[3] = 0.0f; - // Ra: wiata by sensowniej byo ustawia po wczytaniu scenerii + // Ra: światła by sensowniej było ustawiać po wczytaniu scenerii - // Ra: szcztkowe wiato rozproszone - eby byo cokolwiek wida w ciemnoci + // Ra: szczątkowe światło rozproszone - żeby było cokolwiek widać w ciemności WriteLog("glLightModelfv(GL_LIGHT_MODEL_AMBIENT,darkLight);"); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, Global::darkLight); - // Ra: wiato 0 - gwne wiato zewntrzne (Soce, Ksiyc) + // Ra: światło 0 - główne światło zewnętrzne (Słońce, Księżyc) WriteLog("glLightfv(GL_LIGHT0,GL_AMBIENT,ambientLight);"); glLightfv(GL_LIGHT0, GL_AMBIENT, Global::ambientDayLight); WriteLog("glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuseLight);"); @@ -377,7 +377,7 @@ bool TWorld::Init(HWND NhWnd, HDC hDC) WriteLog("glEnable(GL_LIGHT0);"); glEnable(GL_LIGHT0); - // glColor() ma zmienia kolor wybrany w glColorMaterial() + // glColor() ma zmieniać kolor wybrany w glColorMaterial() WriteLog("glEnable(GL_COLOR_MATERIAL);"); glEnable(GL_COLOR_MATERIAL); @@ -419,10 +419,10 @@ bool TWorld::Init(HWND NhWnd, HDC hDC) /*--------------------Render Initialization End---------------------*/ - WriteLog("Font init"); // pocztek inicjacji fontw 2D - if (Global::bGlutFont) // jeli wybrano GLUT font, prbujemy zlinkowa GLUT32.DLL + WriteLog("Font init"); // początek inicjacji fontów 2D + if (Global::bGlutFont) // jeśli wybrano GLUT font, próbujemy zlinkować GLUT32.DLL { - UINT mode = SetErrorMode(SEM_NOOPENFILEERRORBOX); // aby nie wrzeszcza, e znale nie moe + UINT mode = SetErrorMode(SEM_NOOPENFILEERRORBOX); // aby nie wrzeszczał, że znaleźć nie może hinstGLUT32 = LoadLibrary(TEXT("GLUT32.DLL")); // get a handle to the DLL module SetErrorMode(mode); // If the handle is valid, try to get the function address. @@ -434,10 +434,10 @@ bool TWorld::Init(HWND NhWnd, HDC hDC) if (glutBitmapCharacterDLL) WriteLog("Used font from GLUT32.DLL."); else - Global::bGlutFont = false; // nie udao si, trzeba sprbowa na Display List + Global::bGlutFont = false; // nie udało się, trzeba spróbować na Display List } if (!Global::bGlutFont) - { // jeli bezGLUTowy font + { // jeśli bezGLUTowy font HFONT font; // Windows Font ID base = glGenLists(96); // storage for 96 characters font = CreateFont(-15, // height of font @@ -595,7 +595,7 @@ bool TWorld::Init(HWND NhWnd, HDC hDC) WriteLog(buff); TGroundNode *nPlayerTrain = NULL; if (Global::asHumanCtrlVehicle != "ghostview") - nPlayerTrain = Ground.DynamicFind(Global::asHumanCtrlVehicle); // szukanie w tych z obsad + nPlayerTrain = Ground.DynamicFind(Global::asHumanCtrlVehicle); // szukanie w tych z obsadą if (nPlayerTrain) { Train = new TTrain(); @@ -603,7 +603,7 @@ bool TWorld::Init(HWND NhWnd, HDC hDC) { Controlled = Train->Dynamic(); mvControlled = Controlled->ControlledFind()->MoverParameters; - Global::pUserDynamic = Controlled; // renerowanie pojazdu wzgldem kabiny + Global::pUserDynamic = Controlled; // renerowanie pojazdu względem kabiny WriteLog("Player train init OK"); if (Global::detonatoryOK) { @@ -616,7 +616,7 @@ bool TWorld::Init(HWND NhWnd, HDC hDC) else { Error("Player train init failed!"); - FreeFlyModeFlag = true; // Ra: automatycznie wczone latanie + FreeFlyModeFlag = true; // Ra: automatycznie włączone latanie if (Global::detonatoryOK) { glRasterPos2f(-0.25f, -0.20f); @@ -639,7 +639,7 @@ bool TWorld::Init(HWND NhWnd, HDC hDC) glPrint("Wybrany pojazd nie istnieje w scenerii!"); } } - FreeFlyModeFlag = true; // Ra: automatycznie wczone latanie + FreeFlyModeFlag = true; // Ra: automatycznie włączone latanie SwapBuffers(hDC); // swap buffers (double buffering) Controlled = NULL; mvControlled = NULL; @@ -647,8 +647,8 @@ bool TWorld::Init(HWND NhWnd, HDC hDC) } glEnable(GL_DEPTH_TEST); // Ground.pTrain=Train; - // if (!Global::bMultiplayer) //na razie wczone - { // eventy aktywowane z klawiatury tylko dla jednego uytkownika + // if (!Global::bMultiplayer) //na razie włączone + { // eventy aktywowane z klawiatury tylko dla jednego użytkownika KeyEvents[0] = Ground.FindEvent("keyctrl00"); KeyEvents[1] = Ground.FindEvent("keyctrl01"); KeyEvents[2] = Ground.FindEvent("keyctrl02"); @@ -671,7 +671,7 @@ bool TWorld::Init(HWND NhWnd, HDC hDC) WriteLog( "Load time: " + std::to_string( std::chrono::duration_cast(( std::chrono::system_clock::now() - timestart )).count() ) + " seconds"); - if (DebugModeFlag) // w Debugmode automatyczne wczenie AI + if (DebugModeFlag) // w Debugmode automatyczne włączenie AI if (Train) if (Train->Dynamic()->Mechanik) Train->Dynamic()->Mechanik->TakeControl(true); @@ -679,27 +679,27 @@ bool TWorld::Init(HWND NhWnd, HDC hDC) }; void TWorld::OnKeyDown(int cKey) -{ //(cKey) to kod klawisza, cyfrowe i literowe si zgadzaj - // Ra 2014-09: tu by mona doda tabel konwersji: 256 wirtualnych kodw w kontekcie dwch - // przecznikw [Shift] i [Ctrl] - // na kady kod wirtualny niech przypadaj 4 bajty: 2 dla nacinicia i 2 dla zwolnienia - // powtrzone 256 razy da 1kB na kady stan przecznikw, cznie bdzie 4kB pierwszej tabeli +{ //(cKey) to kod klawisza, cyfrowe i literowe się zgadzają + // Ra 2014-09: tu by można dodać tabelę konwersji: 256 wirtualnych kodów w kontekście dwóch + // przełączników [Shift] i [Ctrl] + // na każdy kod wirtualny niech przypadają 4 bajty: 2 dla naciśnięcia i 2 dla zwolnienia + // powtórzone 256 razy da 1kB na każdy stan przełączników, łącznie będzie 4kB pierwszej tabeli // przekodowania if (!Global::iPause) - { // podczas pauzy klawisze nie dziaaj + { // podczas pauzy klawisze nie działają std::string info = "Key pressed: ["; if (Console::Pressed(VK_SHIFT)) info += "Shift]+["; if (Console::Pressed(VK_CONTROL)) info += "Ctrl]+["; - if (cKey > 192) // co tam jeszcze ciekawego jest? + if (cKey > 192) // coś tam jeszcze ciekawego jest? { if (cKey < 255) // 255 to [Fn] w laptopach WriteLog(info + (char)(cKey - 128) + "]"); } else if (cKey >= 186) WriteLog(info + std::string(";=,-./~").substr(cKey - 186, 1) + "]"); - else if (cKey > 123) // co tam jeszcze ciekawego jest? + else if (cKey > 123) // coś tam jeszcze ciekawego jest? WriteLog(info + std::to_string(cKey) + "]"); // numer klawisza else if (cKey >= 112) // funkcyjne WriteLog(info + "F" + std::to_string(cKey - 111) + "]"); @@ -716,7 +716,7 @@ void TWorld::OnKeyDown(int cKey) WriteLog(info + "Home]"); else if (cKey == '#') WriteLog(info + "End]"); - else if (cKey > 'Z') //eby nie logowa kursorw + else if (cKey > 'Z') //żeby nie logować kursorów WriteLog(info + std::to_string(cKey) + "]"); // numer klawisza } if ((cKey <= '9') ? (cKey >= '0') : false) // klawisze cyfrowe @@ -724,23 +724,23 @@ void TWorld::OnKeyDown(int cKey) int i = cKey - '0'; // numer klawisza if (Console::Pressed(VK_SHIFT)) { // z [Shift] uruchomienie eventu - if (!Global::iPause) // podczas pauzy klawisze nie dziaaj + if (!Global::iPause) // podczas pauzy klawisze nie działają if (KeyEvents[i]) Ground.AddToQuery(KeyEvents[i], NULL); } - else // zapamitywanie kamery moe dziaa podczas pauzy - if (FreeFlyModeFlag) // w trybie latania mona przeskakiwa do ustawionych kamer + else // zapamiętywanie kamery może działać podczas pauzy + if (FreeFlyModeFlag) // w trybie latania można przeskakiwać do ustawionych kamer if ((Global::iTextMode != VK_F12) && - (Global::iTextMode != VK_F3)) // ograniczamy uycie kamer + (Global::iTextMode != VK_F3)) // ograniczamy użycie kamer { if ((!Global::pFreeCameraInit[i].x && !Global::pFreeCameraInit[i].y && !Global::pFreeCameraInit[i].z)) - { // jeli kamera jest w punkcie zerowym, zapamitanie wsprzdnych i ktw + { // jeśli kamera jest w punkcie zerowym, zapamiętanie współrzędnych i kątów Global::pFreeCameraInit[i] = Camera.Pos; Global::pFreeCameraInitAngle[i].x = Camera.Pitch; Global::pFreeCameraInitAngle[i].y = Camera.Yaw; Global::pFreeCameraInitAngle[i].z = Camera.Roll; - // logowanie, eby mona byo do scenerii przepisa + // logowanie, żeby można było do scenerii przepisać WriteLog( "camera " + std::to_string( Global::pFreeCameraInit[i].x ) + " " + std::to_string(Global::pFreeCameraInit[i].y ) + " " + @@ -752,16 +752,16 @@ void TWorld::OnKeyDown(int cKey) std::to_string(RadToDeg(Global::pFreeCameraInitAngle[i].z)) + " " + std::to_string(i) + " endcamera"); } - else // rwnie przeskakiwanie - { // Ra: to z t kamer (Camera.Pos i Global::pCameraPosition) jest troch bez sensu + else // również przeskakiwanie + { // Ra: to z tą kamerą (Camera.Pos i Global::pCameraPosition) jest trochę bez sensu Global::SetCameraPosition( - Global::pFreeCameraInit[i]); // nowa pozycja dla generowania obiektw + Global::pFreeCameraInit[i]); // nowa pozycja dla generowania obiektów Ground.Silence(Camera.Pos); // wyciszenie wszystkiego z poprzedniej pozycji Camera.Init(Global::pFreeCameraInit[i], Global::pFreeCameraInitAngle[i]); // przestawienie } } - // bdzie jeszcze zaczanie sprzgw z [Ctrl] + // będzie jeszcze załączanie sprzęgów z [Ctrl] } else if ((cKey >= VK_F1) ? (cKey <= VK_F12) : false) { @@ -771,31 +771,31 @@ void TWorld::OnKeyDown(int cKey) case VK_F3: case VK_F5: // przesiadka do innego pojazdu case VK_F8: // FPS - case VK_F9: // wersja, typ wywietlania, bdy OpenGL + case VK_F9: // wersja, typ wyświetlania, błędy OpenGL case VK_F10: if (Global::iTextMode == cKey) Global::iTextMode = (Global::iPause && (cKey != VK_F1) ? VK_F1 : - 0); // wyczenie napisw, chyba e pauza + 0); // wyłączenie napisów, chyba że pauza else Global::iTextMode = cKey; break; case VK_F2: // parametry pojazdu - if (Global::iTextMode == cKey) // jeli kolejne nacinicie + if (Global::iTextMode == cKey) // jeśli kolejne naciśnięcie ++Global::iScreenMode[cKey - VK_F1]; // kolejny ekran else - { // pierwsze nacinicie daje pierwszy (tzn. zerowy) ekran + { // pierwsze naciśnięcie daje pierwszy (tzn. zerowy) ekran Global::iTextMode = cKey; Global::iScreenMode[cKey - VK_F1] = 0; } break; - case VK_F12: // co tam jeszcze + case VK_F12: // coś tam jeszcze if (Console::Pressed(VK_CONTROL) && Console::Pressed(VK_SHIFT)) - DebugModeFlag = !DebugModeFlag; // taka opcjonalna funkcja, moe si czasem przyda - /* //Ra 2F1P: teraz wczanie i wyczanie klawiszami cyfrowymi po uyciu [F12] + DebugModeFlag = !DebugModeFlag; // taka opcjonalna funkcja, może się czasem przydać + /* //Ra 2F1P: teraz włączanie i wyłączanie klawiszami cyfrowymi po użyciu [F12] else if (Console::Pressed(VK_SHIFT)) {//odpalenie logu w razie "W" - if ((Global::iWriteLogEnabled&2)==0) //nie byo okienka + if ((Global::iWriteLogEnabled&2)==0) //nie było okienka {//otwarcie okna AllocConsole(); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN); @@ -820,46 +820,46 @@ void TWorld::OnKeyDown(int cKey) break; } // if (cKey!=VK_F4) - return; // nie s przekazywane do pojazdu wcale + return; // nie są przekazywane do pojazdu wcale } - if (Global::iTextMode == VK_F10) // wywietlone napisy klawiszem F10 + if (Global::iTextMode == VK_F10) // wyświetlone napisy klawiszem F10 { // i potwierdzenie - Global::iTextMode = (cKey == 'Y') ? -1 : 0; // flaga wyjcia z programu - return; // nie przekazujemy do pocigu + Global::iTextMode = (cKey == 'Y') ? -1 : 0; // flaga wyjścia z programu + return; // nie przekazujemy do pociągu } else if ((Global::iTextMode == VK_F12) ? (cKey >= '0') && (cKey <= '9') : false) - { // tryb konfiguracji debugmode (przestawianie kamery ju wyczone + { // tryb konfiguracji debugmode (przestawianie kamery już wyłączone if (!Console::Pressed(VK_SHIFT)) // bez [Shift] { if (cKey == '1') - Global::iWriteLogEnabled ^= 1; // wcz/wycz logowanie do pliku + Global::iWriteLogEnabled ^= 1; // włącz/wyłącz logowanie do pliku else if (cKey == '2') - { // wcz/wycz okno konsoli + { // włącz/wyłącz okno konsoli Global::iWriteLogEnabled ^= 2; - if ((Global::iWriteLogEnabled & 2) == 0) // nie byo okienka + if ((Global::iWriteLogEnabled & 2) == 0) // nie było okienka { // otwarcie okna - AllocConsole(); // jeli konsola ju jest, to zwrci bd; uwalnia nie ma po - // co, bo si odczy + AllocConsole(); // jeśli konsola już jest, to zwróci błąd; uwalniać nie ma po + // co, bo się odłączy SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN); } } - // else if (cKey=='3') Global::iWriteLogEnabled^=4; //wypisywanie nazw torw + // else if (cKey=='3') Global::iWriteLogEnabled^=4; //wypisywanie nazw torów } } else if (cKey == 3) //[Ctrl]+[Break] - { // hamowanie wszystkich pojazdw w okolicy + { // hamowanie wszystkich pojazdów w okolicy if (Controlled->MoverParameters->Radio) Ground.RadioStop(Camera.Pos); } - else if (!Global::iPause) //||(cKey==VK_F4)) //podczas pauzy sterownaie nie dziaa, F4 tak + else if (!Global::iPause) //||(cKey==VK_F4)) //podczas pauzy sterownaie nie działa, F4 tak if (Train) if (Controlled) if ((Controlled->Controller == Humandriver) ? true : DebugModeFlag || (cKey == 'Q')) Train->OnKeyDown(cKey); // przekazanie klawisza do kabiny - if (FreeFlyModeFlag) // aby nie odluniao wagonu za lokomotyw - { // operacje wykonywane na dowolnym pojedzie, przeniesione tu z kabiny - if (cKey == Global::Keys[k_Releaser]) // odluniacz - { // dziaa globalnie, sprawdzi zasig + if (FreeFlyModeFlag) // aby nie odluźniało wagonu za lokomotywą + { // operacje wykonywane na dowolnym pojeździe, przeniesione tu z kabiny + if (cKey == Global::Keys[k_Releaser]) // odluźniacz + { // działa globalnie, sprawdzić zasięg TDynamicObject *temp = Global::DynamicNearest(); if (temp) { @@ -875,15 +875,15 @@ void TWorld::OnKeyDown(int cKey) } } } - else if (cKey == Global::Keys[k_Heating]) // Ra: klawisz nie jest najszczliwszy - { // zmiana prny/adowny; Ra: zabrane z kabiny + else if (cKey == Global::Keys[k_Heating]) // Ra: klawisz nie jest najszczęśliwszy + { // zmiana próżny/ładowny; Ra: zabrane z kabiny TDynamicObject *temp = Global::DynamicNearest(); if (temp) { if (Console::Pressed(VK_SHIFT) ? temp->MoverParameters->IncBrakeMult() : temp->MoverParameters->DecBrakeMult()) if (Train) - { // dwik oczywicie jest w kabinie + { // dźwięk oczywiście jest w kabinie Train->dsbSwitch->SetVolume(DSBVOLUME_MAX); Train->dsbSwitch->Play(0, 0, 0); } @@ -891,7 +891,7 @@ void TWorld::OnKeyDown(int cKey) } else if (cKey == Global::Keys[k_EndSign]) { // Ra 2014-07: zabrane z kabiny - TDynamicObject *tmp = Global::CouplerNearest(); // domylnie wyszukuje do 20m + TDynamicObject *tmp = Global::CouplerNearest(); // domyślnie wyszukuje do 20m if (tmp) { int CouplNr = (LengthSquared3(tmp->HeadPosition() - Camera.Pos) > @@ -900,20 +900,20 @@ void TWorld::OnKeyDown(int cKey) -1) * tmp->DirectionGet(); if (CouplNr < 0) - CouplNr = 0; // z [-1,1] zrobi [0,1] - int mask, set = 0; // Ra: [Shift]+[Ctrl]+[T] odpala mi jak idiotyczn zmian + CouplNr = 0; // z [-1,1] zrobić [0,1] + int mask, set = 0; // Ra: [Shift]+[Ctrl]+[T] odpala mi jakąś idiotyczną zmianę // tapety pulpitu :/ if (GetAsyncKeyState(VK_SHIFT) < 0) // z [Shift] zapalanie - set = mask = 64; // bez [Ctrl] zaoy tabliczki + set = mask = 64; // bez [Ctrl] założyć tabliczki else if (GetAsyncKeyState(VK_CONTROL) < 0) - set = mask = 2 + 32; // z [Ctrl] zapali wiata czerwone + set = mask = 2 + 32; // z [Ctrl] zapalić światła czerwone else - mask = 2 + 32 + 64; // wyczanie ciga wszystko + mask = 2 + 32 + 64; // wyłączanie ściąga wszystko if (((tmp->iLights[CouplNr]) & mask) != set) { tmp->iLights[CouplNr] = (tmp->iLights[CouplNr] & ~mask) | set; if (Train) - { // Ra: ten dwik z kabiny to przegicie, ale na razie zostawiam + { // Ra: ten dźwięk z kabiny to przegięcie, ale na razie zostawiam Train->dsbSwitch->SetVolume(DSBVOLUME_MAX); Train->dsbSwitch->Play(0, 0, 0); } @@ -934,7 +934,7 @@ void TWorld::OnKeyDown(int cKey) else if (temp->MoverParameters->LocalBrake != ManualBrake) if (temp->MoverParameters->IncLocalBrakeLevelFAST()) if (Train) - { // dwik oczywicie jest w kabinie + { // dźwięk oczywiście jest w kabinie Train->dsbPneumaticRelay->SetVolume(-80); Train->dsbPneumaticRelay->Play(0, 0, 0); } @@ -954,7 +954,7 @@ void TWorld::OnKeyDown(int cKey) else if (temp->MoverParameters->LocalBrake != ManualBrake) if (temp->MoverParameters->DecLocalBrakeLevelFAST()) if (Train) - { // dwik oczywicie jest w kabinie + { // dźwięk oczywiście jest w kabinie Train->dsbPneumaticRelay->SetVolume(-80); Train->dsbPneumaticRelay->Play(0, 0, 0); } @@ -969,8 +969,8 @@ void TWorld::OnKeyDown(int cKey) } void TWorld::OnKeyUp(int cKey) -{ // zwolnienie klawisza; (cKey) to kod klawisza, cyfrowe i literowe si zgadzaj - if (!Global::iPause) // podczas pauzy sterownaie nie dziaa +{ // zwolnienie klawisza; (cKey) to kod klawisza, cyfrowe i literowe się zgadzają + if (!Global::iPause) // podczas pauzy sterownaie nie działa if (Train) if (Controlled) if ((Controlled->Controller == Humandriver) ? true : DebugModeFlag || (cKey == 'Q')) @@ -983,14 +983,14 @@ void TWorld::OnMouseMove(double x, double y) } void TWorld::InOutKey() -{ // przeczenie widoku z kabiny na zewntrzny i odwrotnie +{ // przełączenie widoku z kabiny na zewnętrzny i odwrotnie FreeFlyModeFlag = !FreeFlyModeFlag; // zmiana widoku if (FreeFlyModeFlag) - { // jeeli poza kabin, przestawiamy w jej okolic - OK - Global::pUserDynamic = NULL; // bez renderowania wzgldem kamery + { // jeżeli poza kabiną, przestawiamy w jej okolicę - OK + Global::pUserDynamic = NULL; // bez renderowania względem kamery if (Train) { // Train->Dynamic()->ABuSetModelShake(vector3(0,0,0)); - Train->Silence(); // wyczenie dwikw kabiny + Train->Silence(); // wyłączenie dźwięków kabiny Train->Dynamic()->bDisplayCab = false; DistantView(); } @@ -999,21 +999,21 @@ void TWorld::InOutKey() { // jazda w kabinie if (Train) { - Global::pUserDynamic = Controlled; // renerowanie wzgldem kamery + Global::pUserDynamic = Controlled; // renerowanie względem kamery Train->Dynamic()->bDisplayCab = true; Train->Dynamic()->ABuSetModelShake( - vector3(0, 0, 0)); // zerowanie przesunicia przed powrotem? + vector3(0, 0, 0)); // zerowanie przesunięcia przed powrotem? // Camera.Stop(); //zatrzymanie ruchu Train->MechStop(); - FollowView(); // na pozycj mecha + FollowView(); // na pozycję mecha } else - FreeFlyModeFlag = true; // nadal poza kabin + FreeFlyModeFlag = true; // nadal poza kabiną } }; void TWorld::DistantView() -{ // ustawienie widoku pojazdu z zewntrz +{ // ustawienie widoku pojazdu z zewnątrz if (Controlled) // jest pojazd do prowadzenia? { // na prowadzony Camera.Pos = @@ -1023,8 +1023,8 @@ void TWorld::DistantView() Camera.LookAt = Controlled->GetPosition(); Camera.RaLook(); // jednorazowe przestawienie kamery } - else if (pDynamicNearest) // jeli jest pojazd wykryty blisko - { // patrzenie na najbliszy pojazd + else if (pDynamicNearest) // jeśli jest pojazd wykryty blisko + { // patrzenie na najbliższy pojazd Camera.Pos = pDynamicNearest->GetPosition() + (pDynamicNearest->MoverParameters->ActiveCab >= 0 ? 30 : -30) * pDynamicNearest->VectorFront() + @@ -1035,33 +1035,33 @@ void TWorld::DistantView() }; void TWorld::FollowView(bool wycisz) -{ // ustawienie ledzenia pojazdu - // ABu 180404 powrot mechanika na siedzenie albo w okolic pojazdu +{ // ustawienie śledzenia pojazdu + // ABu 180404 powrot mechanika na siedzenie albo w okolicę pojazdu // if (Console::Pressed(VK_F4)) Global::iViewMode=VK_F4; - // Ra: na zewntrz wychodzimy w Train.cpp - Camera.Reset(); // likwidacja obrotw - patrzy horyzontalnie na poudnie + // Ra: na zewnątrz wychodzimy w Train.cpp + Camera.Reset(); // likwidacja obrotów - patrzy horyzontalnie na południe if (Controlled) // jest pojazd do prowadzenia? { vector3 camStara = Camera.Pos; // przestawianie kamery jest bez sensu: do przerobienia na potem // Controlled->ABuSetModelShake(vector3(0,0,0)); if (FreeFlyModeFlag) - { // jeeli poza kabin, przestawiamy w jej okolic - OK + { // jeżeli poza kabiną, przestawiamy w jej okolicę - OK if (Train) Train->Dynamic()->ABuSetModelShake( - vector3(0, 0, 0)); // wyczenie trzsienia na si? + vector3(0, 0, 0)); // wyłączenie trzęsienia na siłę? // Camera.Pos=Train->pMechPosition+Normalize(Train->GetDirection())*20; DistantView(); // przestawienie kamery - //eby nie bylo numerw z 'fruwajacym' lokiem - konsekwencja bujania puda + //żeby nie bylo numerów z 'fruwajacym' lokiem - konsekwencja bujania pudła Global::SetCameraPosition( - Camera.Pos); // tu ustawi now, bo od niej licz si odlegoci - Ground.Silence(camStara); // wyciszenie dwikw z poprzedniej pozycji + Camera.Pos); // tu ustawić nową, bo od niej liczą się odległości + Ground.Silence(camStara); // wyciszenie dźwięków z poprzedniej pozycji } else if (Train) { // korekcja ustawienia w kabinie - OK vector3 camStara = Camera.Pos; // przestawianie kamery jest bez sensu: do przerobienia na potem - // Ra: czy to tu jest potrzebne, bo przelicza si kawaek dalej? + // Ra: czy to tu jest potrzebne, bo przelicza się kawałek dalej? Camera.Pos = Train->pMechPosition; // Train.GetPosition1(); Camera.Roll = atan(Train->pMechShake.x * Train->fMechRoll); // hustanie kamery na boki Camera.Pitch -= @@ -1077,9 +1077,9 @@ void TWorld::FollowView(bool wycisz) Train->pMechOffset.z = Train->pMechSittingPosition.z; Global::SetCameraPosition( Train->Dynamic() - ->GetPosition()); // tu ustawi now, bo od niej licz si odlegoci + ->GetPosition()); // tu ustawić nową, bo od niej liczą się odległości if (wycisz) // trzymanie prawego w kabinie daje marny efekt - Ground.Silence(camStara); // wyciszenie dwikw z poprzedniej pozycji + Ground.Silence(camStara); // wyciszenie dźwięków z poprzedniej pozycji } } else @@ -1103,16 +1103,16 @@ bool TWorld::Update() if (iCheckFPS) --iCheckFPS; else - { // jak doszo do zera, to sprawdzamy wydajno + { // jak doszło do zera, to sprawdzamy wydajność if (Timer::GetFPS() < Global::fFpsMin) { Global::iSegmentsRendered -= Random(10); // floor(0.5+Global::iSegmentsRendered/Global::fRadiusFactor); - if (Global::iSegmentsRendered < 10) // jeli jest co zmniejsza - Global::iSegmentsRendered = 10; // 10=minimalny promie to 600m + if (Global::iSegmentsRendered < 10) // jeśli jest co zmniejszać + Global::iSegmentsRendered = 10; // 10=minimalny promień to 600m } - else if (Timer::GetFPS() > Global::fFpsMax) // jeli jest duo FPS - if (Global::iSegmentsRendered < Global::iFpsRadiusMax) // jeli jest co zwiksza + else if (Timer::GetFPS() > Global::fFpsMax) // jeśli jest dużo FPS + if (Global::iSegmentsRendered < Global::iFpsRadiusMax) // jeśli jest co zwiększać { Global::iSegmentsRendered += Random(5); // floor(0.5+Global::iSegmentsRendered*Global::fRadiusFactor); @@ -1123,59 +1123,59 @@ bool TWorld::Update() { Global::iSlowMotion = (Global::iSlowMotion << 1) + 1; // zapalenie kolejnego bitu if (Global::iSlowMotionMask & 1) - if (Global::iMultisampling) // a multisampling jest wczony - glDisable(GL_MULTISAMPLE); // wyczenie multisamplingu powinno poprawi FPS + if (Global::iMultisampling) // a multisampling jest włączony + glDisable(GL_MULTISAMPLE); // wyłączenie multisamplingu powinno poprawić FPS } else if ((Timer::GetFPS() > 20) && Global::iSlowMotion) - { // FPS si zwikszy, mona wczy bajery + { // FPS się zwiększył, można włączyć bajery Global::iSlowMotion = (Global::iSlowMotion >> 1); // zgaszenie bitu - if (Global::iSlowMotion == 0) // jeli jest pena prdko - if (Global::iMultisampling) // a multisampling jest wczony + if (Global::iSlowMotion == 0) // jeśli jest pełna prędkość + if (Global::iMultisampling) // a multisampling jest włączony glEnable(GL_MULTISAMPLE); } /* if (!Global::bPause) if (GetFPS()<=5) - {//zwikszenie kroku fizyki przy sabym FPS + {//zwiększenie kroku fizyki przy słabym FPS if (fMaxDt<0.05) - {fMaxDt=0.05; //Ra: tak nie moe by, bo s problemy na sprzgach + {fMaxDt=0.05; //Ra: tak nie może być, bo są problemy na sprzęgach WriteLog("Phisics step switched to 0.05s!"); } } else if (GetFPS()>12) if (fMaxDt>0.01) - {//powrt do podstawowego kroku fizyki + {//powrót do podstawowego kroku fizyki fMaxDt=0.01; WriteLog("Phisics step switched to 0.01s!"); } */ - iCheckFPS = 0.25 * Timer::GetFPS(); // tak za 0.25 sekundy sprawdzi ponownie (jeszcze przycina?) + iCheckFPS = 0.25 * Timer::GetFPS(); // tak za 0.25 sekundy sprawdzić ponownie (jeszcze przycina?) } Timer::UpdateTimers(Global::iPause); if (!Global::iPause) - { // jak pauza, to nie ma po co tego przelicza + { // jak pauza, to nie ma po co tego przeliczać GlobalTime->UpdateMTableTime(Timer::GetDeltaTime()); // McZapkie-300302: czas rozkladowy - // Ra 2014-07: przeliczenie kta czasu (do animacji zalenych od czasu) + // Ra 2014-07: przeliczenie kąta czasu (do animacji zależnych od czasu) Global::fTimeAngleDeg = GlobalTime->hh * 15.0 + GlobalTime->mm * 0.25 + GlobalTime->mr / 240.0; Global::fClockAngleDeg[0] = 36.0 * (int(GlobalTime->mr) % 10); // jednostki sekund - Global::fClockAngleDeg[1] = 36.0 * (int(GlobalTime->mr) / 10); // dziesitki sekund + Global::fClockAngleDeg[1] = 36.0 * (int(GlobalTime->mr) / 10); // dziesiątki sekund Global::fClockAngleDeg[2] = 36.0 * (GlobalTime->mm % 10); // jednostki minut - Global::fClockAngleDeg[3] = 36.0 * (GlobalTime->mm / 10); // dziesitki minut + Global::fClockAngleDeg[3] = 36.0 * (GlobalTime->mm / 10); // dziesiątki minut Global::fClockAngleDeg[4] = 36.0 * (GlobalTime->hh % 10); // jednostki godzin - Global::fClockAngleDeg[5] = 36.0 * (GlobalTime->hh / 10); // dziesitki godzin + Global::fClockAngleDeg[5] = 36.0 * (GlobalTime->hh / 10); // dziesiątki godzin if (Global::fMoveLight >= 0.0) - { // testowo ruch wiata - // double a=Global::fTimeAngleDeg/180.0*M_PI-M_PI; //kt godzinny w radianach + { // testowo ruch światła + // double a=Global::fTimeAngleDeg/180.0*M_PI-M_PI; //kąt godzinny w radianach double a = fmod(Global::fTimeAngleDeg, 360.0) / 180.0 * M_PI - - M_PI; // kt godzinny w radianach - //(a) jest traktowane jako czas miejscowy, nie uwzgldniajcy stref czasowych ani czasu + M_PI; // kąt godzinny w radianach + //(a) jest traktowane jako czas miejscowy, nie uwzględniający stref czasowych ani czasu // letniego - // aby wyznaczy stref czasow, trzeba uwzgldni poudnik miejscowy - // aby uwzgldni czas letni, trzeba sprawdzi dzie roku - double L = Global::fLatitudeDeg / 180.0 * M_PI; // szeroko geograficzna + // aby wyznaczyć strefę czasową, trzeba uwzględnić południk miejscowy + // aby uwzględnić czas letni, trzeba sprawdzić dzień roku + double L = Global::fLatitudeDeg / 180.0 * M_PI; // szerokość geograficzna double H = asin(cos(L) * cos(Global::fSunDeclination) * cos(a) + - sin(L) * sin(Global::fSunDeclination)); // kt ponad horyzontem + sin(L) * sin(Global::fSunDeclination)); // kąt ponad horyzontem // double A=asin(cos(d)*sin(M_PI-a)/cos(H)); // Declination=((0.322003-22.971*cos(t)-0.357898*cos(2*t)-0.14398*cos(3*t)+3.94638*sin(t)+0.019334*sin(2*t)+0.05928*sin(3*t)))*Pi/180 // Altitude=asin(sin(Declination)*sin(latitude)+cos(Declination)*cos(latitude)*cos((15*(time-12))*(Pi/180))); @@ -1185,17 +1185,17 @@ bool TWorld::Update() // dSin_Latitude*dCos_HourAngle ); double A = atan2(sin(a), tan(Global::fSunDeclination) * cos(L) - sin(L) * cos(a)); vector3 lp = vector3(sin(A), tan(H), cos(A)); - lp = Normalize(lp); // przeliczenie na wektor dugoci 1.0 + lp = Normalize(lp); // przeliczenie na wektor długości 1.0 Global::lightPos[0] = (float)lp.x; Global::lightPos[1] = (float)lp.y; Global::lightPos[2] = (float)lp.z; glLightfv(GL_LIGHT0, GL_POSITION, Global::lightPos); // daylight position if (H > 0) - { // soce ponad horyzontem + { // słońce ponad horyzontem Global::ambientDayLight[0] = Global::ambientLight[0]; Global::ambientDayLight[1] = Global::ambientLight[1]; Global::ambientDayLight[2] = Global::ambientLight[2]; - if (H > 0.02) // ponad 1.146 zaczynaj si cienie + if (H > 0.02) // ponad 1.146° zaczynają się cienie { Global::diffuseDayLight[0] = Global::diffuseLight[0]; // od wschodu do zachodu maksimum ??? @@ -1208,7 +1208,7 @@ bool TWorld::Update() else { Global::diffuseDayLight[0] = - 50 * H * Global::diffuseLight[0]; // wschd albo zachd + 50 * H * Global::diffuseLight[0]; // wschód albo zachód Global::diffuseDayLight[1] = 50 * H * Global::diffuseLight[1]; Global::diffuseDayLight[2] = 50 * H * Global::diffuseLight[2]; Global::specularDayLight[0] = @@ -1218,9 +1218,9 @@ bool TWorld::Update() } } else - { // soce pod horyzontem + { // słońce pod horyzontem GLfloat lum = 3.1831 * (H > -0.314159 ? 0.314159 + H : - 0.0); // po zachodzie ambient si ciemnia + 0.0); // po zachodzie ambient się ściemnia Global::ambientDayLight[0] = lum * Global::ambientLight[0]; Global::ambientDayLight[1] = lum * Global::ambientLight[1]; Global::ambientDayLight[2] = lum * Global::ambientLight[2]; @@ -1237,12 +1237,12 @@ bool TWorld::Update() // back_red = 0.3 * (1.0 - sin_t); // back_green = 0.9 * sin_t; // back_blue = sin_t + 0.4, 1.0; - // aktualizacja wiate + // aktualizacja świateł glLightfv(GL_LIGHT0, GL_AMBIENT, Global::ambientDayLight); glLightfv(GL_LIGHT0, GL_DIFFUSE, Global::diffuseDayLight); glLightfv(GL_LIGHT0, GL_SPECULAR, Global::specularDayLight); } - Global::fLuminance = // to posuy rwnie do zapalania latar + Global::fLuminance = // to posłuży również do zapalania latarń +0.150 * (Global::diffuseDayLight[0] + Global::ambientDayLight[0]) // R + 0.295 * (Global::diffuseDayLight[1] + Global::ambientDayLight[1]) // G + 0.055 * (Global::diffuseDayLight[2] + Global::ambientDayLight[2]); // B @@ -1256,23 +1256,23 @@ bool TWorld::Update() fog[0] = Global::FogColor[0] * 4.0 * Global::fLuminance; fog[1] = Global::FogColor[1] * 4.0 * Global::fLuminance; fog[2] = Global::FogColor[2] * 4.0 * Global::fLuminance; - glFogfv(GL_FOG_COLOR, fog); // nocny kolor mgy + glFogfv(GL_FOG_COLOR, fog); // nocny kolor mgły } else - glFogfv(GL_FOG_COLOR, Global::FogColor); // kolor mgy + glFogfv(GL_FOG_COLOR, Global::FogColor); // kolor mgły glClearColor(sky.x, sky.y, sky.z, 0.0); // kolor nieba } - } // koniec dziaa niewykonywanych podczas pauzy - // Console::Update(); //tu jest zalene od FPS, co nie jest korzystne + } // koniec działań niewykonywanych podczas pauzy + // Console::Update(); //tu jest zależne od FPS, co nie jest korzystne if (Global::bActive) - { // obsuga ruchu kamery tylko gdy okno jest aktywne + { // obsługa ruchu kamery tylko gdy okno jest aktywne if (Console::Pressed(VK_LBUTTON)) { - Camera.Reset(); // likwidacja obrotw - patrzy horyzontalnie na poudnie - // if (!FreeFlyModeFlag) //jeli wewntrz - patrzymy do tyu + Camera.Reset(); // likwidacja obrotów - patrzy horyzontalnie na południe + // if (!FreeFlyModeFlag) //jeśli wewnątrz - patrzymy do tyłu // Camera.LookAt=Train->pMechPosition-Normalize(Train->GetDirection())*10; if (Controlled ? LengthSquared3(Controlled->GetPosition() - Camera.Pos) < 2250000 : - false) // gdy bliej ni 1.5km + false) // gdy bliżej niż 1.5km Camera.LookAt = Controlled->GetPosition(); else { @@ -1280,14 +1280,14 @@ bool TWorld::Update() Ground.DynamicNearest(Camera.Pos, 300); // szukaj w promieniu 300m if (!d) d = Ground.DynamicNearest(Camera.Pos, - 1000); // dalej szukanie, jesli bliej nie ma - if (d && pDynamicNearest) // jeli jaki jest znaleziony wczeniej + 1000); // dalej szukanie, jesli bliżej nie ma + if (d && pDynamicNearest) // jeśli jakiś jest znaleziony wcześniej if (100.0 * LengthSquared3(d->GetPosition() - Camera.Pos) > LengthSquared3(pDynamicNearest->GetPosition() - Camera.Pos)) - d = pDynamicNearest; // jeli najbliszy nie jest 10 razy bliej ni - // poprzedni najbliszy, zostaje poprzedni + d = pDynamicNearest; // jeśli najbliższy nie jest 10 razy bliżej niż + // poprzedni najbliższy, zostaje poprzedni if (d) - pDynamicNearest = d; // zmiana na nowy, jeli co znaleziony niepusty + pDynamicNearest = d; // zmiana na nowy, jeśli coś znaleziony niepusty if (pDynamicNearest) Camera.LookAt = pDynamicNearest->GetPosition(); } @@ -1295,41 +1295,41 @@ bool TWorld::Update() Camera.RaLook(); // jednorazowe przestawienie kamery } else if (Console::Pressed(VK_RBUTTON)) //||Console::Pressed(VK_F4)) - FollowView(false); // bez wyciszania dwikw + FollowView(false); // bez wyciszania dźwięków else if (Global::iTextMode == -1) { // tu mozna dodac dopisywanie do logu przebiegu lokomotywy WriteLog("Number of textures used: " + std::to_string(Global::iTextures)); return false; } - Camera.Update(); // uwzgldnienie ruchu wywoanego klawiszami + Camera.Update(); // uwzględnienie ruchu wywołanego klawiszami } // koniec bloku pomijanego przy nieaktywnym oknie - // poprzednie jako tam dziaao - double dt = Timer::GetDeltaRenderTime(); // nie uwzgldnia pauzowania ani mnoenia czasu + // poprzednie jakoś tam działało + double dt = Timer::GetDeltaRenderTime(); // nie uwzględnia pauzowania ani mnożenia czasu fTime50Hz += - dt; // w pauzie te trzeba zlicza czas, bo przy duym FPS bdzie problem z odczytem ramek + dt; // w pauzie też trzeba zliczać czas, bo przy dużym FPS będzie problem z odczytem ramek if (fTime50Hz >= 0.2) - Console::Update(); // to i tak trzeba wywoywa + Console::Update(); // to i tak trzeba wywoływać dt = Timer::GetDeltaTime(); // 0.0 gdy pauza fTimeBuffer += dt; //[s] dodanie czasu od poprzedniej ramki if (fTimeBuffer >= fMaxDt) // jest co najmniej jeden krok; normalnie 0.01s - { // Ra: czas dla fizyki jest skwantowany - fizyk lepiej przelicza staym krokiem - // tak mona np. moc silnikw itp., ale ruch musi by przeliczany w kadej klatce, bo + { // Ra: czas dla fizyki jest skwantowany - fizykę lepiej przeliczać stałym krokiem + // tak można np. moc silników itp., ale ruch musi być przeliczany w każdej klatce, bo // inaczej skacze - Global::tranTexts.Update(); // obiekt obsugujcy stenogramy dwikw na ekranie - Console::Update(); // obsuga cykli PoKeys (np. aktualizacja wyj analogowych) + Global::tranTexts.Update(); // obiekt obsługujący stenogramy dźwięków na ekranie + Console::Update(); // obsługa cykli PoKeys (np. aktualizacja wyjść analogowych) double iter = - ceil(fTimeBuffer / fMaxDt); // ile krokw si zmiecio od ostatniego sprawdzania? - int n = int(iter); // ile krokw jako int + ceil(fTimeBuffer / fMaxDt); // ile kroków się zmieściło od ostatniego sprawdzania? + int n = int(iter); // ile kroków jako int fTimeBuffer -= iter * fMaxDt; // reszta czasu na potem (do bufora) if (n > 20) - n = 20; // Ra: jeeli FPS jest zatrwaajco niski, to fizyka nie moe zaj cakowicie + n = 20; // Ra: jeżeli FPS jest zatrważająco niski, to fizyka nie może zająć całkowicie // procesora #if 0 - Ground.UpdatePhys(fMaxDt,n); //Ra: teraz czas kroku jest (wzgldnie) stay + Ground.UpdatePhys(fMaxDt,n); //Ra: teraz czas kroku jest (względnie) stały if (DebugModeFlag) - if (Global::bActive) //nie przyspiesza, gdy jedzie w tle :) + if (Global::bActive) //nie przyspieszać, gdy jedzie w tle :) if (GetAsyncKeyState(VK_ESCAPE)<0) - {//yB doda przyspieszacz fizyki + {//yB dodał przyspieszacz fizyki Ground.UpdatePhys(fMaxDt,n); Ground.UpdatePhys(fMaxDt,n); Ground.UpdatePhys(fMaxDt,n); @@ -1337,10 +1337,10 @@ bool TWorld::Update() } #endif } - // awaria PoKeys moga wczy pauz - przekaza informacj - if (Global::iMultiplayer) // dajemy zna do serwera o wykonaniu + // awaria PoKeys mogła włączyć pauzę - przekazać informację + if (Global::iMultiplayer) // dajemy znać do serwera o wykonaniu if (iPause != Global::iPause) - { // przesanie informacji o pauzie do programu nadzorujcego + { // przesłanie informacji o pauzie do programu nadzorującego Ground.WyslijParam(5, 3); // ramka 5 z czasem i stanem zapauzowania iPause = Global::iPause; } @@ -1350,18 +1350,18 @@ bool TWorld::Update() { iter = ceil(dt / fMaxDt); n = iter; - dt = dt / iter; // Ra: fizyk lepiej by byo przelicza ze staym krokiem + dt = dt / iter; // Ra: fizykę lepiej by było przeliczać ze stałym krokiem if (n > 20) n = 20; // McZapkie-081103: przesuniecie granicy FPS z 10 na 5 } // else n=1; // blablabla - // Ground.UpdatePhys(dt,n); //na razie tu //2014-12: yB przenis do Ground.Update() :( - Ground.Update(dt, n); // tu zrobi tylko coklatkow aktualizacj przesuni + // Ground.UpdatePhys(dt,n); //na razie tu //2014-12: yB przeniósł do Ground.Update() :( + Ground.Update(dt, n); // tu zrobić tylko coklatkową aktualizację przesunięć if (DebugModeFlag) - if (Global::bActive) // nie przyspiesza, gdy jedzie w tle :) + if (Global::bActive) // nie przyspieszać, gdy jedzie w tle :) if (GetAsyncKeyState(VK_ESCAPE) < 0) - { // yB doda przyspieszacz fizyki + { // yB dodał przyspieszacz fizyki Ground.Update(dt, n); Ground.Update(dt, n); Ground.Update(dt, n); @@ -1371,9 +1371,9 @@ bool TWorld::Update() if (Camera.Type == tp_Follow) { if (Train) - { // jeli jazda w kabinie, przeliczy trzeba parametry kamery + { // jeśli jazda w kabinie, przeliczyć trzeba parametry kamery Train->UpdateMechPosition(dt / - Global::fTimeSpeed); // ograniczy telepanie po przyspieszeniu + Global::fTimeSpeed); // ograniczyć telepanie po przyspieszeniu vector3 tempangle; double modelrotate; tempangle = @@ -1382,38 +1382,38 @@ bool TWorld::Update() if (Console::Pressed(VK_CONTROL) ? (Console::Pressed(Global::Keys[k_MechLeft]) || Console::Pressed(Global::Keys[k_MechRight])) : false) - { // jeli lusterko lewe albo prawe (bez rzucania na razie) + { // jeśli lusterko lewe albo prawe (bez rzucania na razie) bool lr = Console::Pressed(Global::Keys[k_MechLeft]); #if 0 - Camera.Pos=Train->MirrorPosition(lr); //robocza warto - if (Controlled->MoverParameters->ActiveCab<0) lr=!lr; //w drugiej kabinie odwrotnie jest rodek - Camera.LookAt=Controlled->GetPosition()+vector3(lr?2.0:-2.0,Camera.Pos.y,0); //troch na zewntrz, uy szerokoci pojazdu + Camera.Pos=Train->MirrorPosition(lr); //robocza wartość + if (Controlled->MoverParameters->ActiveCab<0) lr=!lr; //w drugiej kabinie odwrotnie jest środek + Camera.LookAt=Controlled->GetPosition()+vector3(lr?2.0:-2.0,Camera.Pos.y,0); //trochę na zewnątrz, użyć szerokości pojazdu //Camera.LookAt=Train->pMechPosition+Train->GetDirection()*Train->Dynamic()->MoverParameters->ActiveCab; Camera.Pos+=Controlled->GetPosition(); //Camera.RaLook(); //jednorazowe przestawienie kamery Camera.Yaw=0; //odchylenie na bok od Camera.LookAt #else - // Camera.Yaw powinno by wyzerowane, aby po powrocie patrze do przodu + // Camera.Yaw powinno być wyzerowane, aby po powrocie patrzeć do przodu Camera.Pos = Controlled->GetPosition() + Train->MirrorPosition(lr); // pozycja lusterka Camera.Yaw = 0; // odchylenie na bok od Camera.LookAt if (Train->Dynamic()->MoverParameters->ActiveCab == 0) Camera.LookAt = Camera.Pos - Train->GetDirection(); // gdy w korytarzu else if (Console::Pressed(VK_SHIFT)) - { // patrzenie w bok przez szyb + { // patrzenie w bok przez szybę Camera.LookAt = Camera.Pos - (lr ? -1 : 1) * Train->Dynamic()->VectorLeft() * Train->Dynamic()->MoverParameters->ActiveCab; Global::SetCameraRotation(-modelrotate); } else - { // patrzenie w kierunku osi pojazdu, z uwzgldnieniem kabiny - jakby z lusterka, + { // patrzenie w kierunku osi pojazdu, z uwzględnieniem kabiny - jakby z lusterka, // ale bez odbicia Camera.LookAt = Camera.Pos - Train->GetDirection() * Train->Dynamic()->MoverParameters->ActiveCab; //-1 albo 1 Global::SetCameraRotation(M_PI - - modelrotate); // tu ju trzeba uwzgldni lusterka + modelrotate); // tu już trzeba uwzględnić lusterka } #endif Camera.Roll = @@ -1426,12 +1426,12 @@ bool TWorld::Update() { // patrzenie standardowe Camera.Pos = Train->pMechPosition; // Train.GetPosition1(); if (!Global::iPause) - { // podczas pauzy nie przelicza ktw przypadkowymi wartociami + { // podczas pauzy nie przeliczać kątów przypadkowymi wartościami Camera.Roll = atan(Train->pMechShake.x * Train->fMechRoll); // hustanie kamery na boki Camera.Pitch -= atan(Train->vMechVelocity.z * Train->fMechPitch); // hustanie kamery przod tyl //Ra: tu - // jest uciekanie kamery w gr!!! + // jest uciekanie kamery w górę!!! } // ABu011104: rzucanie pudlem vector3 temp; @@ -1447,13 +1447,13 @@ bool TWorld::Update() if (Train->Dynamic()->MoverParameters->ActiveCab == 0) Camera.LookAt = Train->pMechPosition + Train->GetDirection(); // gdy w korytarzu - else // patrzenie w kierunku osi pojazdu, z uwzgldnieniem kabiny + else // patrzenie w kierunku osi pojazdu, z uwzględnieniem kabiny Camera.LookAt = Train->pMechPosition + Train->GetDirection() * Train->Dynamic()->MoverParameters->ActiveCab; //-1 albo 1 Camera.vUp = Train->GetUp(); Global::SetCameraRotation(Camera.Yaw - - modelrotate); // tu ju trzeba uwzgldni lusterka + modelrotate); // tu już trzeba uwzględnić lusterka } } } @@ -1462,9 +1462,9 @@ bool TWorld::Update() Global::SetCameraRotation(Camera.Yaw - M_PI); } Ground.CheckQuery(); - // przy 0.25 smuga ganie o 6:37 w Quarku, a mogaby ju 5:40 - // Ra 2014-12: przy 0.15 si skaryli, e nie wida smug => zmieniem na 0.25 - if (Train) // jeli nie usunity + // przy 0.25 smuga gaśnie o 6:37 w Quarku, a mogłaby już 5:40 + // Ra 2014-12: przy 0.15 się skarżyli, że nie widać smug => zmieniłem na 0.25 + if (Train) // jeśli nie usunięty Global::bSmudge = FreeFlyModeFlag ? false : ((Train->Dynamic()->fShade <= 0.0) ? (Global::fLuminance <= 0.25) : @@ -1483,22 +1483,22 @@ bool TWorld::Update() if ((Train->Dynamic()->mdKabina != Train->Dynamic()->mdModel) && Train->Dynamic()->bDisplayCab && !FreeFlyModeFlag) { - vector3 pos = Train->Dynamic()->GetPosition(); // wszprzdne pojazdu z kabin - // glTranslatef(pos.x,pos.y,pos.z); //przesunicie o wektor (tak byo i trzso) - // aby pozby si cho troch trzsienia, trzeba by nie przelicza kabiny do punktu + vector3 pos = Train->Dynamic()->GetPosition(); // wszpółrzędne pojazdu z kabiną + // glTranslatef(pos.x,pos.y,pos.z); //przesunięcie o wektor (tak było i trzęsło) + // aby pozbyć się choć trochę trzęsienia, trzeba by nie przeliczać kabiny do punktu // zerowego scenerii - glLoadIdentity(); // zacz od macierzy jedynkowej - Camera.SetCabMatrix(pos); // widok z kamery po przesuniciu - glMultMatrixd(Train->Dynamic()->mMatrix.getArray()); // ta macierz nie ma przesunicia + glLoadIdentity(); // zacząć od macierzy jedynkowej + Camera.SetCabMatrix(pos); // widok z kamery po przesunięciu + glMultMatrixd(Train->Dynamic()->mMatrix.getArray()); // ta macierz nie ma przesunięcia //*yB: moje smuuugi 1 if (Global::bSmudge) - { // Ra: uwzgldniem zacienienie pojazdu przy zapalaniu smug - // 1. warunek na smug wyznaczyc wczeniej - // 2. jeli smuga wczona, nie renderowa pojazdu uytkownika w DynObj - // 3. jeli smuga waczona, wyrenderowa pojazd uytkownia po dodaniu smugi do sceny + { // Ra: uwzględniłem zacienienie pojazdu przy zapalaniu smug + // 1. warunek na smugę wyznaczyc wcześniej + // 2. jeśli smuga włączona, nie renderować pojazdu użytkownika w DynObj + // 3. jeśli smuga właczona, wyrenderować pojazd użytkownia po dodaniu smugi do sceny if (Train->Controlled()->Battery) - { // troch na skrty z t bateri + { // trochę na skróty z tą baterią if (Global::bOldSmudge == true) { glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_ONE); @@ -1511,11 +1511,11 @@ bool TWorld::Update() glBindTexture(GL_TEXTURE_2D, light); // Select our texture glBegin(GL_QUADS); float fSmudge = - Train->Dynamic()->MoverParameters->DimHalf.y + 7; // gdzie zaczyna smug + Train->Dynamic()->MoverParameters->DimHalf.y + 7; // gdzie zaczynać smugę if (Train->Controlled()->iLights[0] & 21) { // wystarczy jeden zapalony z przodu glTexCoord2f(0, 0); - glVertex3f(15.0, 0.0, +fSmudge); // rysowanie wzgldem pooenia modelu + glVertex3f(15.0, 0.0, +fSmudge); // rysowanie względem położenia modelu glTexCoord2f(1, 0); glVertex3f(-15.0, 0.0, +fSmudge); glTexCoord2f(1, 1); @@ -1524,7 +1524,7 @@ bool TWorld::Update() glVertex3f(15.0, 2.5, 250.0); } if (Train->Controlled()->iLights[1] & 21) - { // wystarczy jeden zapalony z tyu + { // wystarczy jeden zapalony z tyłu glTexCoord2f(0, 0); glVertex3f(-15.0, 0.0, -fSmudge); glTexCoord2f(1, 0); @@ -1538,7 +1538,7 @@ bool TWorld::Update() glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_DEPTH_TEST); - // glEnable(GL_LIGHTING); //i tak si wczy potem + // glEnable(GL_LIGHTING); //i tak się włączy potem glEnable(GL_FOG); } else @@ -1553,7 +1553,7 @@ bool TWorld::Update() glBindTexture(GL_TEXTURE_2D, light); // Select our texture //float ddl = (0.15*Global::diffuseDayLight[0]+0.295*Global::diffuseDayLight[1]+0.055*Global::diffuseDayLight[2]); //0.24:0 glBegin(GL_QUADS); - float fSmudge = Train->Dynamic()->MoverParameters->DimHalf.y + 7; // gdzie zaczyna smug + float fSmudge = Train->Dynamic()->MoverParameters->DimHalf.y + 7; // gdzie zaczynać smugę if (Train->Controlled()->iLights[0] & 21) { // wystarczy jeden zapalony z przodu for (int i = 15; i <= 35; i++) @@ -1569,7 +1569,7 @@ bool TWorld::Update() } } if (Train->Controlled()->iLights[1] & 21) - { // wystarczy jeden zapalony z tyu + { // wystarczy jeden zapalony z tyłu for (int i = 15; i <= 35; i++) { float z = i * i * i * 0.01f;//25/4; @@ -1587,20 +1587,20 @@ bool TWorld::Update() // glEnable(GL_DEPTH_TEST); glAlphaFunc(GL_GREATER, 0.04); glDepthFunc(GL_LEQUAL); - glEnable(GL_LIGHTING); //i tak si wczy potem + glEnable(GL_LIGHTING); //i tak się włączy potem glEnable(GL_FOG); } } - glEnable(GL_LIGHTING); // po renderowaniu smugi jest to wyczone - // Ra: pojazd uytkownika naleao by renderowa po smudze, aby go nie rozwietlaa - Global::bSmudge = false; // aby model uytkownika si teraz wyrenderowa + glEnable(GL_LIGHTING); // po renderowaniu smugi jest to wyłączone + // Ra: pojazd użytkownika należało by renderować po smudze, aby go nie rozświetlała + Global::bSmudge = false; // aby model użytkownika się teraz wyrenderował Train->Dynamic()->Render(); - Train->Dynamic()->RenderAlpha(); // przezroczyste fragmenty pojazdw na torach + Train->Dynamic()->RenderAlpha(); // przezroczyste fragmenty pojazdów na torach } // yB: moje smuuugi 1 - koniec*/ else - glEnable(GL_LIGHTING); // po renderowaniu drutw moe by to wyczone + glEnable(GL_LIGHTING); // po renderowaniu drutów może być to wyłączone - if (Train->Dynamic()->mdKabina) // bo moga znikn przy przechodzeniu do innego pojazdu + if (Train->Dynamic()->mdKabina) // bo mogła zniknąć przy przechodzeniu do innego pojazdu { // oswietlenie kabiny GLfloat ambientCabLight[4] = {0.5f, 0.5f, 0.5f, 1.0f}; GLfloat diffuseCabLight[4] = {0.5f, 0.5f, 0.5f, 1.0f}; @@ -1612,7 +1612,7 @@ bool TWorld::Update() specularCabLight[li] = Global::specularDayLight[li] * 0.5; } switch (Train->Dynamic()->MyTrack->eEnvironment) - { // wpyw wieta zewntrznego + { // wpływ świetła zewnętrznego case e_canyon: { for (int li = 0; li < 3; li++) @@ -1633,11 +1633,11 @@ bool TWorld::Update() } break; } - switch (Train->iCabLightFlag) // Ra: uzelenic od napicia w obwodzie sterowania + switch (Train->iCabLightFlag) // Ra: uzeleżnic od napięcia w obwodzie sterowania { // hunter-091012: uzaleznienie jasnosci od przetwornicy - case 0: //wiato wewntrzne zgaszone + case 0: //światło wewnętrzne zgaszone break; - case 1: //wiato wewntrzne przygaszone (255 216 176) + case 1: //światło wewnętrzne przygaszone (255 216 176) if (Train->Dynamic()->MoverParameters->ConverterFlag == true) // jasnosc dla zalaczonej przetwornicy { @@ -1660,7 +1660,7 @@ bool TWorld::Update() ambientCabLight[i] = Global::ambientDayLight[i] * 0.9; } break; - case 2: //wiato wewntrzne zapalone (255 216 176) + case 2: //światło wewnętrzne zapalone (255 216 176) if (Train->Dynamic()->MoverParameters->ConverterFlag == true) // jasnosc dla zalaczonej przetwornicy { @@ -1688,7 +1688,7 @@ bool TWorld::Update() glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseCabLight); glLightfv(GL_LIGHT0, GL_SPECULAR, specularCabLight); if (Global::bUseVBO) - { // renderowanie z uyciem VBO + { // renderowanie z użyciem VBO Train->Dynamic()->mdKabina->RaRender(0.0, Train->Dynamic()->ReplacableSkinID, Train->Dynamic()->iAlpha); Train->Dynamic()->mdKabina->RaRenderAlpha( @@ -1701,7 +1701,7 @@ bool TWorld::Update() Train->Dynamic()->mdKabina->RenderAlpha(0.0, Train->Dynamic()->ReplacableSkinID, Train->Dynamic()->iAlpha); } - // przywrcenie standardowych, bo zawsze s zmieniane + // przywrócenie standardowych, bo zawsze są zmieniane glLightfv(GL_LIGHT0, GL_AMBIENT, Global::ambientDayLight); glLightfv(GL_LIGHT0, GL_DIFFUSE, Global::diffuseDayLight); glLightfv(GL_LIGHT0, GL_SPECULAR, Global::specularDayLight); @@ -1785,12 +1785,12 @@ bool TWorld::Update() }; */ if (Global::changeDynObj) - { // ABu zmiana pojazdu - przejcie do innego - // Ra: to nie moe by tak robione, to zbytnia proteza jest - Train->Silence(); // wyczenie dwikw opuszczanej kabiny - if (Train->Dynamic()->Mechanik) // AI moe sobie samo pj - if (!Train->Dynamic()->Mechanik->AIControllFlag) // tylko jeli rcznie prowadzony - { // jeli prowadzi AI, to mu nie robimy dywersji! + { // ABu zmiana pojazdu - przejście do innego + // Ra: to nie może być tak robione, to zbytnia proteza jest + Train->Silence(); // wyłączenie dźwięków opuszczanej kabiny + if (Train->Dynamic()->Mechanik) // AI może sobie samo pójść + if (!Train->Dynamic()->Mechanik->AIControllFlag) // tylko jeśli ręcznie prowadzony + { // jeśli prowadzi AI, to mu nie robimy dywersji! Train->Dynamic()->MoverParameters->CabDeactivisation(); Train->Dynamic()->Controller = AIdriver; // Train->Dynamic()->MoverParameters->SecuritySystem.Status=0; //rozwala CA w EZT @@ -1806,12 +1806,12 @@ bool TWorld::Update() /* if (Train->Dynamic()->MoverParameters->ActiveCab==-1) { - temp=Train->Dynamic()->NextConnected; //pojazd od strony sprzgu 1 + temp=Train->Dynamic()->NextConnected; //pojazd od strony sprzęgu 1 CabNr=(Train->Dynamic()->NextConnectedNo==0)?1:-1; } else { - temp=Train->Dynamic()->PrevConnected; //pojazd od strony sprzgu 0 + temp=Train->Dynamic()->PrevConnected; //pojazd od strony sprzęgu 0 CabNr=(Train->Dynamic()->PrevConnectedNo==0)?1:-1; } */ @@ -1823,16 +1823,16 @@ bool TWorld::Update() /// SafeDelete(Train->Dynamic()->Mechanik); // Train->Dynamic()->mdKabina=NULL; - if (Train->Dynamic()->Mechanik) // AI moe sobie samo pj - if (!Train->Dynamic()->Mechanik->AIControllFlag) // tylko jeli rcznie prowadzony - Train->Dynamic()->Mechanik->MoveTo(temp); // przsunicie obiektu zarzdzajcego + if (Train->Dynamic()->Mechanik) // AI może sobie samo pójść + if (!Train->Dynamic()->Mechanik->AIControllFlag) // tylko jeśli ręcznie prowadzony + Train->Dynamic()->Mechanik->MoveTo(temp); // przsunięcie obiektu zarządzającego // Train->DynamicObject=NULL; Train->DynamicSet(temp); Controlled = temp; mvControlled = Controlled->ControlledFind()->MoverParameters; Global::asHumanCtrlVehicle = Train->Dynamic()->GetName(); - if (Train->Dynamic()->Mechanik) // AI moe sobie samo pj - if (!Train->Dynamic()->Mechanik->AIControllFlag) // tylko jeli rcznie prowadzony + if (Train->Dynamic()->Mechanik) // AI może sobie samo pójść + if (!Train->Dynamic()->Mechanik->AIControllFlag) // tylko jeśli ręcznie prowadzony { Train->Dynamic()->MoverParameters->LimPipePress = Controlled->MoverParameters->PipePress; @@ -1840,7 +1840,7 @@ bool TWorld::Update() // Train->Dynamic()->MoverParameters->SecuritySystem.Status=1; // Train->Dynamic()->MoverParameters->ActiveCab=CabNr; Train->Dynamic() - ->MoverParameters->CabActivisation(); // zaczenie rozrzdu (wirtualne kabiny) + ->MoverParameters->CabActivisation(); // załączenie rozrządu (wirtualne kabiny) Train->Dynamic()->Controller = Humandriver; Train->Dynamic()->MechInside = true; // Train->Dynamic()->Mechanik=new @@ -1852,12 +1852,12 @@ bool TWorld::Update() Train->Dynamic()->MoverParameters->TypeName + ".mmd"); if (!FreeFlyModeFlag) { - Global::pUserDynamic = Controlled; // renerowanie wzgldem kamery + Global::pUserDynamic = Controlled; // renerowanie względem kamery Train->Dynamic()->bDisplayCab = true; Train->Dynamic()->ABuSetModelShake( - vector3(0, 0, 0)); // zerowanie przesunicia przed powrotem? + vector3(0, 0, 0)); // zerowanie przesunięcia przed powrotem? Train->MechStop(); - FollowView(); // na pozycj mecha + FollowView(); // na pozycję mecha } Global::changeDynObj = NULL; } @@ -1873,16 +1873,16 @@ bool TWorld::Update() glTranslatef(0.0f, 0.0f, -0.50f); if (Global::iTextMode == VK_F1) - { // tekst pokazywany po wciniciu [F1] + { // tekst pokazywany po wciśnięciu [F1] // Global::iViewMode=VK_F1; - glColor3f(1.0f, 1.0f, 1.0f); // a, damy biaym + glColor3f(1.0f, 1.0f, 1.0f); // a, damy białym OutText1 = "Time: " + to_string((int)GlobalTime->hh) + ":"; - int i = GlobalTime->mm; // bo inaczej potrafi zrobi "hh:010" + int i = GlobalTime->mm; // bo inaczej potrafi zrobić "hh:010" if (i < 10) OutText1 += "0"; OutText1 += to_string(i); // minuty OutText1 += ":"; - i = floor(GlobalTime->mr); // bo inaczej potrafi zrobi "hh:mm:010" + i = floor(GlobalTime->mr); // bo inaczej potrafi zrobić "hh:mm:010" if (i < 10) OutText1 += "0"; OutText1 += to_string(i); @@ -1892,7 +1892,7 @@ bool TWorld::Update() if (Controlled->Mechanik) { OutText2 = Controlled->Mechanik->Relation(); - if (!OutText2.empty()) // jeli jest podana relacja, to dodajemy punkt nastpnego + if (!OutText2.empty()) // jeśli jest podana relacja, to dodajemy punkt następnego // zatrzymania OutText2 = Global::Bezogonkow(OutText2 + ": -> " + Controlled->Mechanik->NextStop(), @@ -1902,10 +1902,10 @@ bool TWorld::Update() // double CtrlPosNo=mvControlled->MainCtrlPosNo; // OutText2="defrot="+FloatToStrF(1+0.4*(CtrlPos/CtrlPosNo),ffFixed,2,5); OutText3 = ""; // Pomoc w sterowaniu - [F9]"; - // OutText3=AnsiString(Global::pCameraRotationDeg); //kt kamery wzgldem pnocy + // OutText3=AnsiString(Global::pCameraRotationDeg); //kąt kamery względem północy } else if (Global::iTextMode == VK_F12) - { // opcje wczenia i wyczenia logowania + { // opcje włączenia i wyłączenia logowania OutText1 = "[0] Debugmode " + std::string(DebugModeFlag ? "(on)" : "(off)"); OutText2 = "[1] log.txt " + std::string((Global::iWriteLogEnabled & 1) ? "(on)" : "(off)"); OutText3 = "[2] Console " + std::string((Global::iWriteLogEnabled & 2) ? "(on)" : "(off)"); @@ -1917,14 +1917,14 @@ bool TWorld::Update() if (tmp) { if (Global::iScreenMode[Global::iTextMode - VK_F1] == 0) - { // jeli domylny ekran po pierwszym naciniciu + { // jeśli domyślny ekran po pierwszym naciśnięciu OutText3 = ""; OutText1 = "Vehicle name: " + tmp->MoverParameters->Name; // yB OutText1+="; d: "+FloatToStrF(tmp->ABuGetDirection(),ffFixed,2,0); // OutText1=FloatToStrF(tmp->MoverParameters->Couplers[0].CouplingFlag,ffFixed,3,2)+", // "; // OutText1+=FloatToStrF(tmp->MoverParameters->Couplers[1].CouplingFlag,ffFixed,3,2); - if (tmp->Mechanik) // jeli jest prowadzcy + if (tmp->Mechanik) // jeśli jest prowadzący { // ostatnia komenda dla AI OutText1 += ", command: " + tmp->Mechanik->OrderCurrent(); } @@ -2001,7 +2001,7 @@ bool TWorld::Update() // yB if(tmp->MoverParameters->BrakeSubsystem==Knorr) OutText2+=" Knorr"; // yB if(tmp->MoverParameters->BrakeSubsystem==Oerlikon) OutText2+=" Oerlikon"; // yB if(tmp->MoverParameters->BrakeSubsystem==Hik) OutText2+=" Hik"; - // yB if(tmp->MoverParameters->BrakeSubsystem==WeLu) OutText2+=" estinghas"; + // yB if(tmp->MoverParameters->BrakeSubsystem==WeLu) OutText2+=" Łestinghałs"; // OutText2= " GetFirst: // "+AnsiString(tmp->GetFirstDynamic(1)->MoverParameters->Name)+" Damage // status="+tmp->MoverParameters->EngineDescription(0)+" Engine status: "; @@ -2073,14 +2073,14 @@ bool TWorld::Update() */ OutText4 = ""; if (tmp->Mechanik) - { // o ile jest kto w rodku + { // o ile jest ktoś w środku // OutText4=tmp->Mechanik->StopReasonText(); - // if (!OutText4.IsEmpty()) OutText4+="; "; //aby adniejszy odstp by + // if (!OutText4.IsEmpty()) OutText4+="; "; //aby ładniejszy odstęp był // if (Controlled->Mechanik && (Controlled->Mechanik->AIControllFlag==AIdriver)) std::string flags = "bwaccmlshhhoibsgvdp; "; // flagi AI (definicja w Driver.h) for (int i = 0, j = 1; i < 19; ++i, j <<= 1) if (tmp->Mechanik->DrivigFlags() & j) // jak bit ustawiony - flags[i + 1] = std::toupper(flags[i + 1]); // ^= 0x20; // to zmiana na wielk liter + flags[i + 1] = std::toupper(flags[i + 1]); // ^= 0x20; // to zmiana na wielką literę OutText4 = flags; OutText4 += ("Driver: Vd=") + @@ -2093,16 +2093,16 @@ bool TWorld::Update() (" VRd=") + to_string(tmp->Mechanik->VelRoad, 0); if (tmp->Mechanik->VelNext == 0.0) if (tmp->Mechanik->eSignNext) - { // jeli ma zapamitany event semafora - // if (!OutText4.IsEmpty()) OutText4+=", "; //aby adniejszy odstp by + { // jeśli ma zapamiętany event semafora + // if (!OutText4.IsEmpty()) OutText4+=", "; //aby ładniejszy odstęp był OutText4 += " (" + Global::Bezogonkow(tmp->Mechanik->eSignNext->asName) + ")"; // nazwa eventu semafora } } if (!OutText4.empty()) - OutText4 += "; "; // aby adniejszy odstp by - // informacja o sprzgach nawet bez mechanika + OutText4 += "; "; // aby ładniejszy odstęp był + // informacja o sprzęgach nawet bez mechanika OutText4 += "C0=" + (tmp->PrevConnected ? tmp->PrevConnected->GetName() + ":" + @@ -2120,23 +2120,23 @@ bool TWorld::Update() WriteLog(OutText3); WriteLog(OutText4); } - } // koniec treci podstawowego ekranu FK_V2 + } // koniec treści podstawowego ekranu FK_V2 else { // ekran drugi, czyli tabelka skanowania AI - if (tmp->Mechanik) //eby bya tabelka, musi by AI - { // tabelka jest na uytek testujcych scenerie, wic nie musi by "adna" - glColor3f(1.0f, 1.0f, 1.0f); // a, damy zielony. GF: jednak biay + 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(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: // "+AnsiString(tmp->Mechanik->scanback); OutText1 = "Time: " + to_string((int)GlobalTime->hh) + ":"; - int i = GlobalTime->mm; // bo inaczej potrafi zrobi "hh:010" + int i = GlobalTime->mm; // bo inaczej potrafi zrobić "hh:010" if (i < 10) OutText1 += "0"; OutText1 += to_string(i); // minuty OutText1 += ":"; - i = floor(GlobalTime->mr); // bo inaczej potrafi zrobi "hh:mm:010" + i = floor(GlobalTime->mr); // bo inaczej potrafi zrobić "hh:mm:010" if (i < 10) OutText1 += "0"; OutText1 += to_string(i); @@ -2146,7 +2146,7 @@ bool TWorld::Update() glPrint(Global::Bezogonkow(OutText1).c_str()); i = -1; while ((OutText1 = tmp->Mechanik->TableText(++i)) != "") - { // wywietlenie pozycji z tabelki + { // wyświetlenie pozycji z tabelki glRasterPos2f(-0.25f, 0.19f - 0.01f * i); glPrint(Global::Bezogonkow(OutText1).c_str()); } @@ -2163,8 +2163,8 @@ bool TWorld::Update() (" VSig=") + to_string(tmp->Mechanik->VelSignal, 0); if (tmp->Mechanik->VelNext == 0.0) if (tmp->Mechanik->eSignNext) - { // jeli ma zapamitany event semafora - // if (!OutText4.IsEmpty()) OutText4+=", "; //aby adniejszy odstp by + { // jeśli ma zapamiętany event semafora + // if (!OutText4.IsEmpty()) OutText4+=", "; //aby ładniejszy odstęp był OutText4 += " (" + Global::Bezogonkow(tmp->Mechanik->eSignNext->asName) + ")"; // nazwa eventu semafora @@ -2173,14 +2173,14 @@ bool TWorld::Update() glPrint(Global::Bezogonkow(OutText4).c_str()); } } // koniec ekanu skanowania - } // koniec obsugi, gdy mamy wskanik do pojazdu + } // koniec obsługi, gdy mamy wskaźnik do pojazdu else - { // wywietlenie wsprzdnych w scenerii oraz kta kamery, gdy nie mamy wskanika + { // wyświetlenie współrzędnych w scenerii oraz kąta kamery, gdy nie mamy wskaźnika OutText1 = "Camera position: " + to_string(Camera.Pos.x, 2) + " " + to_string(Camera.Pos.y, 2) + " " + to_string(Camera.Pos.z, 2); OutText1 += ", azimuth: " + - to_string(180.0 - RadToDeg(Camera.Yaw), 0); // ma by azymut, czyli 0 na pnocy i ronie na wschd + to_string(180.0 - RadToDeg(Camera.Yaw), 0); // ma być azymut, czyli 0 na północy i rośnie na wschód OutText1 += " " + std::string("S SEE NEN NWW SW") @@ -2190,34 +2190,34 @@ bool TWorld::Update() // http://www.eu07.pl"); // OutText3="enrot="+FloatToStrF(Controlled->MoverParameters->enrot,ffFixed,6,2); // OutText3="; n="+FloatToStrF(Controlled->MoverParameters->n,ffFixed,6,2); - } // koniec treci podstawowego ekranu FK_V2 + } // koniec treści podstawowego ekranu FK_V2 else if (Global::iTextMode == VK_F5) { // przesiadka do innego pojazdu - if (FreeFlyModeFlag) // jeli tryb latania + if (FreeFlyModeFlag) // jeśli tryb latania { - TDynamicObject *tmp = Ground.DynamicNearest(Camera.Pos, 50, true); //apiemy z obsad + TDynamicObject *tmp = Ground.DynamicNearest(Camera.Pos, 50, true); //łapiemy z obsadą if (tmp) if (tmp != Controlled) { - if (Controlled) // jeli mielismy pojazd - if (Controlled->Mechanik) // na skutek jakiego bdu moe czasem znikn + if (Controlled) // jeśli mielismy pojazd + if (Controlled->Mechanik) // na skutek jakiegoś błędu może czasem zniknąć Controlled->Mechanik->TakeControl(true); // oddajemy dotychczasowy AI if (DebugModeFlag ? true : tmp->MoverParameters->Vel <= 5.0) { Controlled = tmp; // przejmujemy nowy mvControlled = Controlled->ControlledFind()->MoverParameters; if (Train) - Train->Silence(); // wyciszenie dwikw opuszczanego pojazdu + Train->Silence(); // wyciszenie dźwięków opuszczanego pojazdu else - Train = new TTrain(); // jeli niczym jeszcze nie jedzilismy + Train = new TTrain(); // jeśli niczym jeszcze nie jeździlismy if (Train->Init(Controlled)) { // przejmujemy sterowanie if (!DebugModeFlag) // w DebugMode nadal prowadzi AI Controlled->Mechanik->TakeControl(false); } else - SafeDelete(Train); // i nie ma czym sterowa - // Global::pUserDynamic=Controlled; //renerowanie pojazdu wzgldem kabiny + SafeDelete(Train); // i nie ma czym sterować + // Global::pUserDynamic=Controlled; //renerowanie pojazdu względem kabiny // Global::iTextMode=VK_F4; if (Train) InOutKey(); // do kabiny @@ -2303,7 +2303,7 @@ bool TWorld::Update() Acc = (Controlled->MoverParameters->Vel - VelPrev) / 3.6; VelPrev = Controlled->MoverParameters->Vel; } - OutText2 += ("; As=") + to_string(Acc/*Controlled->MoverParameters->AccS*/, 2); // przyspieszenie wzdune + OutText2 += ("; As=") + to_string(Acc/*Controlled->MoverParameters->AccS*/, 2); // przyspieszenie wzdłużne // OutText2+=AnsiString("; P=")+FloatToStrF(mvControlled->EnginePower,ffFixed,6,1); OutText3 += ("cyl.ham. ") + to_string(Controlled->MoverParameters->BrakePress, 2); @@ -2318,7 +2318,7 @@ bool TWorld::Update() if (Controlled->MoverParameters->EngineType == ElectricInductionMotor) { // glTranslatef(0.0f,0.0f,-0.50f); - glColor3f(1.0f, 1.0f, 1.0f); // a, damy biaym + glColor3f(1.0f, 1.0f, 1.0f); // a, damy białym for (int i = 0; i <= 20; i++) { glRasterPos2f(-0.25f, 0.16f - 0.01f * i); @@ -2465,9 +2465,9 @@ bool TWorld::Update() if (Global::detonatoryOK) { - // if (Console::Pressed(VK_F9)) ShowHints(); //to nie dziaa prawidowo - prosili wyczy + // if (Console::Pressed(VK_F9)) ShowHints(); //to nie działa prawidłowo - prosili wyłączyć if (Global::iTextMode == VK_F9) - { // informacja o wersji, sposobie wywietlania i bdach OpenGL + { // informacja o wersji, sposobie wyświetlania i błędach OpenGL // Global::iViewMode=VK_F9; OutText1 = Global::asVersion; // informacja o wersji OutText2 = std::string("Rendering mode: ") + (Global::bUseVBO ? "VBO" : "Display Lists"); @@ -2482,7 +2482,7 @@ bool TWorld::Update() } } if (Global::iTextMode == VK_F3) - { // wywietlenie rozkadu jazdy, na razie jakkolwiek + { // wyświetlenie rozkładu jazdy, na razie jakkolwiek TDynamicObject *tmp = FreeFlyModeFlag ? Ground.DynamicNearest(Camera.Pos) : Controlled; // w trybie latania lokalizujemy wg mapy @@ -2491,9 +2491,9 @@ bool TWorld::Update() if (tmp->Mechanik) { tt = tmp->Mechanik->Timetable(); - if (tt) // musi by rozkad - { // wywietlanie rozkadu - glColor3f(1.0f, 1.0f, 1.0f); // a, damy biaym + if (tt) // musi być rozkład + { // wyświetlanie rozkładu + glColor3f(1.0f, 1.0f, 1.0f); // a, damy białym // glTranslatef(0.0f,0.0f,-0.50f); glRasterPos2f(-0.25f, 0.20f); OutText1 = tmp->Mechanik->Relation() + " (" + @@ -2506,8 +2506,8 @@ bool TWorld::Update() glPrint("|----------------------------|-------|-------|-----|"); TMTableLine *t; for (int i = tmp->Mechanik->iStationStart; i <= tt->StationCount; ++i) - { // wywietlenie pozycji z rozkadu - t = tt->TimeTable + i; // linijka rozkadu + { // wyświetlenie pozycji z rozkładu + t = tt->TimeTable + i; // linijka rozkładu OutText1 = (t->StationName + " ").substr(0, 26); OutText2 = (t->Ah >= 0) ? @@ -2520,7 +2520,7 @@ bool TWorld::Update() std::string(" "); OutText4 = " " + to_string(t->vmax, 0); OutText4 = OutText4.substr(OutText4.length() - 3, - 3); // z wyrwnaniem do prawej + 3); // z wyrównaniem do prawej // if (AnsiString(t->StationWare).Pos("@")) OutText1 = "| " + OutText1 + " | " + OutText2 + " | " + OutText3 + " | " + OutText4 + " | " + t->StationWare; @@ -2529,7 +2529,7 @@ bool TWorld::Update() if ((tmp->Mechanik->iStationStart < tt->StationIndex) ? (i < tt->StationIndex) : false) - { // czas min i odjazd by, to nazwa stacji bdzie na zielono + { // czas minął i odjazd był, to nazwa stacji będzie na zielono glColor3f(0.0f, 1.0f, 0.0f); // zielone glRasterPos2f( -0.25f, @@ -2540,9 +2540,9 @@ bool TWorld::Update() // kolor, // dziwne... glPrint(Global::Bezogonkow(OutText1, true).c_str()); - glColor3f(1.0f, 1.0f, 1.0f); // a reszta biaym + glColor3f(1.0f, 1.0f, 1.0f); // a reszta białym } - else // normalne wywietlanie, bez zmiany kolorw + else // normalne wyświetlanie, bez zmiany kolorów glPrint(Global::Bezogonkow(OutText1, true).c_str()); glRasterPos2f(-0.25f, 0.17f - 0.02f * (i - tmp->Mechanik->iStationStart)); @@ -2578,8 +2578,8 @@ bool TWorld::Update() } } // if ((Global::iTextMode!=VK_F3)) - { // stenogramy dwikw (ukry, gdy tabelka skanowania lub rozkad?) - glColor3f(1.0f, 1.0f, 0.0f); //te + { // stenogramy dźwięków (ukryć, gdy tabelka skanowania lub rozkład?) + glColor3f(1.0f, 1.0f, 0.0f); //żółte for (int i = 0; i < 5; ++i) { // kilka linijek if (Global::asTranscript[i].empty()) @@ -2608,7 +2608,7 @@ bool TWorld::Render() glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix glLoadIdentity(); - Camera.SetMatrix(); // ustawienie macierzy kamery wzgldem pocztku scenerii + Camera.SetMatrix(); // ustawienie macierzy kamery względem początku scenerii glLightfv(GL_LIGHT0, GL_POSITION, Global::lightPos); if (!Global::bWireFrame) @@ -2631,7 +2631,7 @@ bool TWorld::Render() if (!Ground.RenderAlphaDL(Camera.Pos)) return false; } - TSubModel::iInstance = (int)(Train ? Train->Dynamic() : 0); //eby nie robi cudzych animacji + TSubModel::iInstance = (int)(Train ? Train->Dynamic() : 0); //żeby nie robić cudzych animacji // if (Camera.Type==tp_Follow) if (Train) Train->Update(); @@ -2639,13 +2639,13 @@ bool TWorld::Render() // if (Controlled) // Train->RenderAlpha(); glFlush(); - // Global::bReCompile=false; //Ra: ju zrobiona rekompilacja + // Global::bReCompile=false; //Ra: już zrobiona rekompilacja ResourceManager::Sweep(Timer::GetSimulationTime()); return true; }; void TWorld::ShowHints(void) -{ // Ra: nie uywa tego, bo le dziaa +{ // Ra: nie używać tego, bo źle działa glBindTexture(GL_TEXTURE_2D, 0); glColor4f(0.3f, 1.0f, 0.3f, 1.0f); glLoadIdentity(); @@ -2786,11 +2786,11 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz) if (pRozkaz->iSygn == 'EU07') switch (pRozkaz->iComm) { - case 0: // odesanie identyfikatora wersji + case 0: // odesłanie identyfikatora wersji CommLog( Now() + " " + std::to_string(pRozkaz->iComm) + " version" + " rcvd"); - Ground.WyslijString(Global::asVersion, 0); // przedsatwienie si + Ground.WyslijString(Global::asVersion, 0); // przedsatwienie się break; - case 1: // odesanie identyfikatora wersji + case 1: // odesłanie identyfikatora wersji CommLog( Now() + " " + std::to_string(pRozkaz->iComm) + " scenery" + " rcvd"); Ground.WyslijString(Global::SceneryFile, 1); // nazwa scenerii break; @@ -2804,7 +2804,7 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz) if (e) if ((e->Type == tp_Multiple) || (e->Type == tp_Lights) || bool(e->evJoined)) // tylko jawne albo niejawne Multiple - Ground.AddToQuery(e, NULL); // drugi parametr to dynamic wywoujcy - tu + Ground.AddToQuery(e, NULL); // drugi parametr to dynamic wywołujący - tu // brak } break; @@ -2812,7 +2812,7 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz) if (Global::iMultiplayer) { int i = - int(pRozkaz->cString[8]); // dugo pierwszego acucha (z przodu dwa floaty) + int(pRozkaz->cString[8]); // długość pierwszego łańcucha (z przodu dwa floaty) CommLog( to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " " + std::string(pRozkaz->cString + 11 + i, (unsigned)(pRozkaz->cString[10 + i])) + @@ -2825,12 +2825,12 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz) { t->DynamicObject->Mechanik->PutCommand(std::string(pRozkaz->cString + 9, i), pRozkaz->fPar[0], pRozkaz->fPar[1], - NULL, stopExt); // floaty s z przodu + NULL, stopExt); // floaty są z przodu WriteLog("AI command: " + std::string(pRozkaz->cString + 9, i)); } } break; - case 4: // badanie zajtoci toru + case 4: // badanie zajętości toru { CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " " + std::string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + " rcvd"); @@ -2841,7 +2841,7 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz) Ground.WyslijWolny(t->asName); } break; - case 5: // ustawienie parametrw + case 5: // ustawienie parametrów { CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " params " + to_string(*pRozkaz->iPar) + " rcvd"); @@ -2849,9 +2849,9 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz) if (*pRozkaz->iPar & 1) // ustawienie czasu { double t = pRozkaz->fPar[1]; - GlobalTime->dd = floor(t); // niby nie powinno by dnia, ale... + GlobalTime->dd = floor(t); // niby nie powinno być dnia, ale... if (Global::fMoveLight >= 0) - Global::fMoveLight = t; // trzeba by deklinacj Soca przeliczy + Global::fMoveLight = t; // trzeba by deklinację Słońca przeliczyć GlobalTime->hh = floor(24 * t) - 24.0 * GlobalTime->dd; GlobalTime->mm = floor(60 * 24 * t) - 60.0 * (24.0 * GlobalTime->dd + GlobalTime->hh); @@ -2861,49 +2861,49 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz) } if (*pRozkaz->iPar & 2) { // ustawienie flag zapauzowania - Global::iPause = pRozkaz->fPar[2]; // zakadamy, e wysyajcy wie, co robi + Global::iPause = pRozkaz->fPar[2]; // zakładamy, że wysyłający wie, co robi } } break; - case 6: // pobranie parametrw ruchu pojazdu + case 6: // pobranie parametrów ruchu pojazdu if (Global::iMultiplayer) - { // Ra 2014-12: to ma dziaa rwnie dla pojazdw bez obsady + { // Ra 2014-12: to ma działać również dla pojazdów bez obsady CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " " + std::string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + " rcvd"); - if (pRozkaz->cString[0]) // jeli dugo nazwy jest niezerowa - { // szukamy pierwszego pojazdu o takiej nazwie i odsyamy parametry ramk #7 + if (pRozkaz->cString[0]) // jeśli długość nazwy jest niezerowa + { // szukamy pierwszego pojazdu o takiej nazwie i odsyłamy parametry ramką #7 TGroundNode *t; if (pRozkaz->cString[1] == '*') t = Ground.DynamicFind( - Global::asHumanCtrlVehicle); // nazwa pojazdu uytkownika + Global::asHumanCtrlVehicle); // nazwa pojazdu użytkownika else t = Ground.DynamicFindAny(std::string( pRozkaz->cString + 1, (unsigned)pRozkaz->cString[0])); // nazwa pojazdu if (t) - Ground.WyslijNamiary(t); // wysanie informacji o pojedzie + Ground.WyslijNamiary(t); // wysłanie informacji o pojeździe } else - { // dla pustego wysyamy ramki 6 z nazwami pojazdw AI (jeli potrzebne wszystkie, - // to rozpozna np. "*") + { // dla pustego wysyłamy ramki 6 z nazwami pojazdów AI (jeśli potrzebne wszystkie, + // to rozpoznać np. "*") Ground.DynamicList(); } } break; - case 8: // ponowne wysanie informacji o zajtych odcinkach toru + case 8: // ponowne wysłanie informacji o zajętych odcinkach toru CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " all busy track" + " rcvd"); Ground.TrackBusyList(); break; - case 9: // ponowne wysanie informacji o zajtych odcinkach izolowanych + case 9: // ponowne wysłanie informacji o zajętych odcinkach izolowanych CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " all busy isolated" + " rcvd"); Ground.IsolatedBusyList(); break; - case 10: // badanie zajtoci jednego odcinka izolowanego + case 10: // badanie zajętości jednego odcinka izolowanego CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " " + std::string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + " rcvd"); Ground.IsolatedBusy(std::string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0]))); break; - case 11: // ustawienie parametrw ruchu pojazdu + case 11: // ustawienie parametrów ruchu pojazdu // Ground.IsolatedBusy(AnsiString(pRozkaz->cString+1,(unsigned)(pRozkaz->cString[0]))); break; case 12: // skrocona ramka parametrow pojazdow AI (wszystkich!!) @@ -2917,12 +2917,12 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz) CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " " + std::string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + " rcvd"); - if (pRozkaz->cString[1]) // jeli dugo nazwy jest niezerowa - { // szukamy pierwszego pojazdu o takiej nazwie i odsyamy parametry ramk #13 + if (pRozkaz->cString[1]) // jeśli długość nazwy jest niezerowa + { // szukamy pierwszego pojazdu o takiej nazwie i odsyłamy parametry ramką #13 TGroundNode *t; if (pRozkaz->cString[2] == '*') t = Ground.DynamicFind( - Global::asHumanCtrlVehicle); // nazwa pojazdu uytkownika + Global::asHumanCtrlVehicle); // nazwa pojazdu użytkownika else t = Ground.DynamicFindAny( std::string(pRozkaz->cString + 2, @@ -2933,15 +2933,15 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz) while (d) { d->Damage(pRozkaz->cString[0]); - d = d->Next(); // pozostae te + d = d->Next(); // pozostałe też } d = t->DynamicObject->Prev(); while (d) { d->Damage(pRozkaz->cString[0]); - d = d->Prev(); // w drug stron te + d = d->Prev(); // w drugą stronę też } - Ground.WyslijUszkodzenia(t->asName, t->DynamicObject->MoverParameters->EngDmgFlag); // zwrot informacji o pojedzie + Ground.WyslijUszkodzenia(t->asName, t->DynamicObject->MoverParameters->EngDmgFlag); // zwrot informacji o pojeździe } } // Ground.IsolatedBusy(AnsiString(pRozkaz->cString+1,(unsigned)(pRozkaz->cString[0]))); @@ -2951,7 +2951,7 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz) //--------------------------------------------------------------------------- void TWorld::ModifyTGA(const std::string &dir) -{ // rekurencyjna modyfikacje plikw TGA +{ // rekurencyjna modyfikacje plików TGA /* TODO: implement version without Borland stuff TSearchRec sr; if (FindFirst(dir + "*.*", faDirectory | faArchive, sr) == 0) @@ -2959,7 +2959,7 @@ void TWorld::ModifyTGA(const std::string &dir) do { if (sr.Name[1] != '.') - if ((sr.Attr & faDirectory)) // jeli katalog, to rekurencja + if ((sr.Attr & faDirectory)) // jeśli katalog, to rekurencja ModifyTGA(dir + sr.Name + "/"); else if (sr.Name.LowerCase().SubString(sr.Name.Length() - 3, 4) == ".tga") TTexturesManager::GetTextureID(NULL, NULL, AnsiString(dir + sr.Name).c_str()); @@ -2969,10 +2969,10 @@ void TWorld::ModifyTGA(const std::string &dir) */ }; //--------------------------------------------------------------------------- -std::string last; // zmienne uywane w rekurencji +std::string last; // zmienne używane w rekurencji double shift = 0; void TWorld::CreateE3D(std::string const &dir, bool dyn) -{ // rekurencyjna generowanie plikw E3D +{ // rekurencyjna generowanie plików E3D /* TODO: remove Borland file access stuff TTrack *trk; @@ -2983,42 +2983,42 @@ void TWorld::CreateE3D(std::string const &dir, bool dyn) do { if (sr.Name[1] != '.') - if ((sr.Attr & faDirectory)) // jeli katalog, to rekurencja + if ((sr.Attr & faDirectory)) // jeśli katalog, to rekurencja CreateE3D(dir + sr.Name + "\\", dyn); else if (dyn) { if (sr.Name.LowerCase().SubString(sr.Name.Length() - 3, 4) == ".mmd") { - // konwersja pojazdw bdzie uomna, bo nie poustawiaj si animacje na - // submodelach okrelonych w MMD + // konwersja pojazdów będzie ułomna, bo nie poustawiają się animacje na + // submodelach określonych w MMD // TModelsManager::GetModel(AnsiString(dir+sr.Name).c_str(),true); if (last != dir) { // utworzenie toru dla danego pojazdu last = dir; trk = TTrack::Create400m(1, shift); - shift += 10.0; // nastpny tor bdzie deczko dalej, aby nie zabi FPS + shift += 10.0; // następny tor będzie deczko dalej, aby nie zabić FPS at = 400.0; // if (shift>1000) break; //bezpiecznik } TGroundNode *tmp = new TGroundNode(); tmp->DynamicObject = new TDynamicObject(); - // Global::asCurrentTexturePath=dir; //pojazdy maj tekstury we wasnych + // Global::asCurrentTexturePath=dir; //pojazdy mają tekstury we własnych // katalogach at -= tmp->DynamicObject->Init( "", string((dir.SubString(9, dir.Length() - 9)).c_str()), "none", string(sr.Name.SubString(1, sr.Name.Length() - 4).c_str()), trk, at, "nobody", 0.0, "none", 0.0, "", false, ""); - // po wczytaniu CHK zrobi ptl po adunkach, aby kady z nich skonwertowa + // po wczytaniu CHK zrobić pętlę po ładunkach, aby każdy z nich skonwertować AnsiString loads, load; - loads = AnsiString(tmp->DynamicObject->MoverParameters->LoadAccepted.c_str()); // typy adunkw + loads = AnsiString(tmp->DynamicObject->MoverParameters->LoadAccepted.c_str()); // typy ładunków if (!loads.IsEmpty()) { - loads += ","; // przecinek na kocu + loads += ","; // przecinek na końcu int i = loads.Pos(","); while (i > 1) - { // wypadao by sprawdzi, czy T3D adunku jest + { // wypadało by sprawdzić, czy T3D ładunku jest load = loads.SubString(1, i - 1); - if (FileExists(dir + load + ".t3d")) // o ile jest plik adunku, bo + if (FileExists(dir + load + ".t3d")) // o ile jest plik ładunku, bo // inaczej nie ma to sensu if (!FileExists( dir + load + @@ -3027,12 +3027,12 @@ void TWorld::CreateE3D(std::string const &dir, bool dyn) "", dir.SubString(9, dir.Length() - 9).c_str(), "none", sr.Name.SubString(1, sr.Name.Length() - 4).c_str(), trk, at, "nobody", 0.0, "none", 1.0, load.c_str(), false, ""); - loads.Delete(1, i); // usunicie z nastpujcym przecinkiem + loads.Delete(1, i); // usunięcie z następującym przecinkiem i = loads.Pos(","); } } if (tmp->DynamicObject->iCabs) - { // jeli ma jakkolwiek kabin + { // jeśli ma jakąkolwiek kabinę delete Train; Train = new TTrain(); if (tmp->DynamicObject->iCabs & 1) @@ -3056,7 +3056,7 @@ void TWorld::CreateE3D(std::string const &dir, bool dyn) } } else if (sr.Name.LowerCase().SubString(sr.Name.Length() - 3, 4) == ".t3d") - { // z modelami jest prociej + { // z modelami jest prościej Global::asCurrentTexturePath = dir.c_str(); TModelsManager::GetModel(AnsiString(dir + sr.Name).c_str(), false); } @@ -3067,7 +3067,7 @@ void TWorld::CreateE3D(std::string const &dir, bool dyn) }; //--------------------------------------------------------------------------- void TWorld::CabChange(TDynamicObject *old, TDynamicObject *now) -{ // ewentualna zmiana kabiny uytkownikowi +{ // ewentualna zmiana kabiny użytkownikowi if (Train) if (Train->Dynamic() == old) Global::changeDynObj = now; // uruchomienie protezy diff --git a/World.h b/World.h index 0c6589f3..3b5a7b1c 100644 --- a/World.h +++ b/World.h @@ -47,17 +47,17 @@ class TWorld TTrain *Train; TDynamicObject *pDynamicNearest; bool Paused; - GLuint base; // numer DL dla znakw w napisach + GLuint base; // numer DL dla znaków w napisach GLuint light; // numer tekstury dla smugi TSky Clouds; TEvent *KeyEvents[10]; // eventy wyzwalane z klawiaury - TMoverParameters *mvControlled; // wskanik na czon silnikowy, do wywietlania jego parametrw - int iCheckFPS; // kiedy znw sprawdzi FPS, eby wycza optymalizacji od razu do zera + TMoverParameters *mvControlled; // wskaźnik na człon silnikowy, do wyświetlania jego parametrów + int iCheckFPS; // kiedy znów sprawdzić FPS, żeby wyłączać optymalizacji od razu do zera double fTime50Hz; // bufor czasu dla komunikacji z PoKeys - double fTimeBuffer; // bufor czasu aktualizacji dla staego kroku fizyki - double fMaxDt; //[s] krok czasowy fizyki (0.01 dla normalnych warunkw) + double fTimeBuffer; // bufor czasu aktualizacji dla stałego kroku fizyki + double fMaxDt; //[s] krok czasowy fizyki (0.01 dla normalnych warunków) int iPause; // wykrywanie zmian w zapauzowaniu - double VelPrev; // poprzednia prdko + double VelPrev; // poprzednia prędkość int tprev; // poprzedni czas double Acc; // przyspieszenie styczne public: diff --git a/dumb3d.h b/dumb3d.h index ecce43ba..c0516bc4 100644 --- a/dumb3d.h +++ b/dumb3d.h @@ -110,9 +110,9 @@ class vector3 // scalar_t e[3]; // }; bool inline Equal(vector3 *v) - { // sprawdzenie odlegoci punktw + { // sprawdzenie odległości punktów if (std::fabs(x - v->x) > 0.02) - return false; // szecian zamiast kuli + return false; // sześcian zamiast kuli if (std::fabs(z - v->z) > 0.02) return false; if (std::fabs(y - v->y) > 0.02) @@ -190,7 +190,7 @@ class matrix4x4 inline matrix4x4 &ProjectionMatrix(bool perspective, scalar_t l, scalar_t r, scalar_t t, scalar_t b, scalar_t n, scalar_t f); void InitialRotate() - { // taka specjalna rotacja, nie ma co ciga trygonometrii + { // taka specjalna rotacja, nie ma co ciągać trygonometrii double f; for (int i = 0; i < 16; i += 4) { @@ -201,7 +201,7 @@ class matrix4x4 } }; inline bool IdentityIs() - { // sprawdzenie jednostkowoci + { // sprawdzenie jednostkowości for (int i = 0; i < 16; ++i) if (e[i] != ((i % 5) ? 0.0 : 1.0)) // jedynki tylko na 0, 5, 10 i 15 return false; diff --git a/mtable.cpp b/mtable.cpp index 7250c2ff..d64f8f18 100644 --- a/mtable.cpp +++ b/mtable.cpp @@ -18,9 +18,9 @@ http://mozilla.org/MPL/2.0/. TMTableTime *Mtable::GlobalTime; double CompareTime(double t1h, double t1m, double t2h, double t2m) /*roznica czasu w minutach*/ -// zwraca rnic czasu -// jeli pierwsza jest aktualna, a druga rozkadowa, to ujemna oznacza opnienie -// na dusz met trzeba uwzgldni dat, jakby opnienia miay przekracza 12h (towarowych) +// zwraca różnicę czasu +// jeśli pierwsza jest aktualna, a druga rozkładowa, to ujemna oznacza opóżnienie +// na dłuższą metę trzeba uwzględnić datę, jakby opóżnienia miały przekraczać 12h (towarowych) { double t; @@ -28,11 +28,11 @@ double CompareTime(double t1h, double t1m, double t2h, double t2m) /*roznica cza return 0; else { - t = (t2h - t1h) * 60 + t2m - t1m; // jeli t2=00:05, a t1=23:50, to rnica wyjdzie ujemna - if ((t < -720)) // jeli rnica przekracza 12h na minus + t = (t2h - t1h) * 60 + t2m - t1m; // jeśli t2=00:05, a t1=23:50, to różnica wyjdzie ujemna + if ((t < -720)) // jeśli różnica przekracza 12h na minus t = t + 1440; // to dodanie doby minut;else - if ((t > 720)) // jeli przekracza 12h na plus - t = t - 1440; // to odjcie doby minut + if ((t > 720)) // jeśli przekracza 12h na plus + t = t - 1440; // to odjęcie doby minut return t; } } @@ -46,7 +46,7 @@ double TTrainParameters::CheckTrainLatency() } double TTrainParameters::WatchMTable(double DistCounter) -{ // zwraca odleglo do najblizszej stacji z zatrzymaniem +{ // zwraca odleglość do najblizszej stacji z zatrzymaniem double dist; if (Direction == 1) @@ -57,48 +57,48 @@ double TTrainParameters::WatchMTable(double DistCounter) } std::string TTrainParameters::NextStop() -{ // pobranie nazwy nastpnego miejsca zatrzymania +{ // pobranie nazwy następnego miejsca zatrzymania if (StationIndex <= StationCount) - return "PassengerStopPoint:" + NextStationName; // nazwa nastpnego przystanku; + return "PassengerStopPoint:" + NextStationName; // nazwa następnego przystanku; else - return "[End of route]"; //e niby koniec + return "[End of route]"; //że niby koniec } bool TTrainParameters::IsStop() -{ // zapytanie, czy zatrzymywa na nastpnym punkcie rozkadu +{ // zapytanie, czy zatrzymywać na następnym punkcie rozkładu if ((StationIndex < StationCount)) return TimeTable[StationIndex].Ah >= 0; //-1 to brak postoju else - return true; // na ostatnim si zatrzyma zawsze + return true; // na ostatnim się zatrzymać zawsze } bool TTrainParameters::UpdateMTable(double hh, double mm, std::string NewName) -/*odfajkowanie dojechania do stacji (NewName) i przeliczenie opnienia*/ +/*odfajkowanie dojechania do stacji (NewName) i przeliczenie opóźnienia*/ { bool OK; OK = false; - if (StationIndex <= StationCount) // Ra: "<=", bo ostatni przystanek jest traktowany wyjtkowo + if (StationIndex <= StationCount) // Ra: "<=", bo ostatni przystanek jest traktowany wyjątkowo { - if (NewName == NextStationName) // jeli dojechane do nastpnego - { // Ra: wywoanie moe by powtarzane, jak stoi na W4 + if (NewName == NextStationName) // jeśli dojechane do następnego + { // Ra: wywołanie może być powtarzane, jak stoi na W4 if (TimeTable[StationIndex + 1].km - TimeTable[StationIndex].km < 0) // to jest bez sensu Direction = -1; else Direction = 1; // prowizorka bo moze byc zmiana kilometrazu - // ustalenie, czy opniony (porwnanie z czasem odjazdu) + // ustalenie, czy opóźniony (porównanie z czasem odjazdu) LastStationLatency = CompareTime(hh, mm, TimeTable[StationIndex].Dh, TimeTable[StationIndex].Dm); - // inc(StationIndex); //przejcie do nastpnej pozycji StationIndex<=StationCount + // inc(StationIndex); //przejście do następnej pozycji StationIndex<=StationCount if (StationIndex < - StationCount) // Ra: "<", bo dodaje 1 przy przejciu do nastpnej stacji - { // jeli nie ostatnia stacja - NextStationName = TimeTable[StationIndex + 1].StationName; // zapamitanie nazwy + StationCount) // Ra: "<", bo dodaje 1 przy przejściu do następnej stacji + { // jeśli nie ostatnia stacja + NextStationName = TimeTable[StationIndex + 1].StationName; // zapamiętanie nazwy TTVmax = TimeTable[StationIndex + 1] - .vmax; // Ra: nowa prdko rozkadowa na kolejnym odcinku + .vmax; // Ra: nowa prędkość rozkładowa na kolejnym odcinku } else // gdy ostatnia stacja - NextStationName = ""; // nie ma nastpnej stacji + NextStationName = ""; // nie ma następnej stacji OK = true; } } @@ -106,29 +106,29 @@ bool TTrainParameters::UpdateMTable(double hh, double mm, std::string NewName) } void TTrainParameters::StationIndexInc() -{ // przejcie do nastpnej pozycji StationIndex<=StationCount +{ // przejście do następnej pozycji StationIndex<=StationCount ++StationIndex; } bool TTrainParameters::IsTimeToGo(double hh, double mm) -// sprawdzenie, czy mona ju odjecha z aktualnego zatrzymania -// StationIndex to numer nastpnego po dodarciu do aktualnego +// sprawdzenie, czy można już odjechać z aktualnego zatrzymania +// StationIndex to numer następnego po dodarciu do aktualnego { if ((StationIndex < 1)) - return true; // przed pierwsz jecha + return true; // przed pierwszą jechać else if ((StationIndex < StationCount)) - { // oprcz ostatniego przystanku + { // oprócz ostatniego przystanku if ((TimeTable[StationIndex].Ah < 0)) // odjazd z poprzedniego - return true; // czas przyjazdu nie by podany - przelot + return true; // czas przyjazdu nie był podany - przelot else return CompareTime(hh, mm, TimeTable[StationIndex].Dh, TimeTable[StationIndex].Dm) <= 0; } - else // gdy rozkad si skoczy - return false; // dalej nie jecha + else // gdy rozkład się skończył + return false; // dalej nie jechać } std::string TTrainParameters::ShowRelation() -/*zwraca informacj o relacji*/ +/*zwraca informację o relacji*/ { // if (Relation1=TimeTable[1].StationName) and (Relation2=TimeTable[StationCount].StationName) if ((Relation1 != "") && (Relation2 != "")) @@ -138,13 +138,13 @@ std::string TTrainParameters::ShowRelation() } TTrainParameters::TTrainParameters(std::string NewTrainName) -/*wstpne ustawienie parametrw rozkadu jazdy*/ +/*wstępne ustawienie parametrów rozkładu jazdy*/ { NewName(NewTrainName); } void TTrainParameters::NewName(std::string NewTrainName) -/*wstpne ustawienie parametrw rozkadu jazdy*/ +/*wstępne ustawienie parametrów rozkładu jazdy*/ { TrainName = NewTrainName; StationCount = 0; @@ -176,15 +176,15 @@ void TTrainParameters::NewName(std::string NewTrainName) } void TTrainParameters::UpdateVelocity(int StationCount, double vActual) -// zapisywanie prdkoci maksymalnej do wczeniejszych odcinkw -// wywoywane z numerem ostatniego przetworzonego przystanku +// zapisywanie prędkości maksymalnej do wcześniejszych odcinków +// wywoływane z numerem ostatniego przetworzonego przystanku { int i = StationCount; // TTVmax:=vActual; {PROWIZORKA!!!} while ((i >= 0) && (TimeTable[i].vmax == -1)) { - TimeTable[i].vmax = vActual; // prdko dojazdu do przystanku i - --i; // ewentualnie do poprzedniego te + TimeTable[i].vmax = vActual; // prędkość dojazdu do przystanku i + --i; // ewentualnie do poprzedniego też } } @@ -194,7 +194,7 @@ void TTrainParameters::UpdateVelocity(int StationCount, double vActual) //} bool TTrainParameters::LoadTTfile(std::string scnpath, int iPlus, double vmax) -// wczytanie pliku-tabeli z rozkadem przesunitym o (fPlus); (vMax) nie ma znaczenia +// wczytanie pliku-tabeli z rozkładem przesuniętym o (fPlus); (vMax) nie ma znaczenia { std::string lines; std::string s; @@ -202,42 +202,42 @@ bool TTrainParameters::LoadTTfile(std::string scnpath, int iPlus, double vmax) bool EndTable; double vActual; int i; - int time; // do zwikszania czasu + int time; // do zwiększania czasu int ConversionError = 0; EndTable = false; if ((TrainName == "")) - { // jeli pusty rozkad - // UpdateVelocity(StationCount,vMax); //ograniczenie do prdkoci startowej + { // jeśli pusty rozkład + // UpdateVelocity(StationCount,vMax); //ograniczenie do prędkości startowej } else { ConversionError = 666; vActual = -1; s = scnpath + TrainName + ".txt"; - // Ra 2014-09: ustali zasady wyznaczenia pierwotnego pliku przy przesunitych rozkadach - // (kolejny pocig dostaje numer +2) + // Ra 2014-09: ustalić zasady wyznaczenia pierwotnego pliku przy przesuniętych rozkładach + // (kolejny pociąg dostaje numer +2) fin.open(s.c_str()); // otwieranie pliku if (!fin.is_open()) - { // jeli nie ma pliku + { // jeśli nie ma pliku vmax = atoi(TrainName.c_str()); // nie ma pliku ale jest liczba if ((vmax > 10) && (vmax < 200)) { - TTVmax = vmax; // Ra 2014-07: zamiast rozkadu mona poda Vmax - UpdateVelocity(StationCount, vmax); // ograniczenie do prdkoci startowej + TTVmax = vmax; // Ra 2014-07: zamiast rozkładu można podać Vmax + UpdateVelocity(StationCount, vmax); // ograniczenie do prędkości startowej ConversionError = 0; } else - ConversionError = -8; /*Ra: ten bd jest niepotrzebny*/ + ConversionError = -8; /*Ra: ten błąd jest niepotrzebny*/ } else - { /*analiza rozkadu jazdy*/ + { /*analiza rozkładu jazdy*/ ConversionError = 0; while (fin.good() && !((ConversionError != 0) || EndTable)) { std::getline(fin, lines); /*wczytanie linii*/ - if (lines.find("___________________") != std::string::npos) /*linia pozioma grna*/ + if (lines.find("___________________") != std::string::npos) /*linia pozioma górna*/ { fin >> s; if (s == "[") /*lewy pion*/ @@ -247,7 +247,7 @@ bool TTrainParameters::LoadTTfile(std::string scnpath, int iPlus, double vmax) do { fin >> s; - } while (!(s == "|") || (fin.eof())); /*rodkowy pion*/ + } while (!(s == "|") || (fin.eof())); /*środkowy pion*/ } } else if (lines == "") @@ -255,11 +255,11 @@ bool TTrainParameters::LoadTTfile(std::string scnpath, int iPlus, double vmax) fin.close(); break; } - fin >> s; /*nazwa pocigu*/ - // if LowerCase(s)<>ExtractFileName(TrainName) then {musi by taka sama, jak nazwa + fin >> s; /*nazwa pociągu*/ + // if LowerCase(s)<>ExtractFileName(TrainName) then {musi być taka sama, jak nazwa // pliku} - // ConversionError:=-7 {bd niezgodnoci} - TrainName = s; // nadanie nazwy z pliku TXT (bez cieki do pliku) + // ConversionError:=-7 {błąd niezgodności} + TrainName = s; // nadanie nazwy z pliku TXT (bez ścieżki do pliku) // else { /*czytaj naglowek*/ while (fin >> s || !fin.bad()) @@ -272,7 +272,7 @@ bool TTrainParameters::LoadTTfile(std::string scnpath, int iPlus, double vmax) { if (s == "[") break; - } // while (!() || (fin.eof())); /*pierwsza linia z relacj*/ + } // while (!() || (fin.eof())); /*pierwsza linia z relacją*/ while (fin >> s || !fin.bad()) { if (s != "|") @@ -287,7 +287,7 @@ bool TTrainParameters::LoadTTfile(std::string scnpath, int iPlus, double vmax) if (s == "Relacja") break; } // while ( - // !( || (fin.eof()))); /*druga linia z relacj*/ + // !( || (fin.eof()))); /*druga linia z relacją*/ while (fin >> s || !fin.bad()) { if (s == "|") @@ -427,8 +427,8 @@ bool TTrainParameters::LoadTTfile(std::string scnpath, int iPlus, double vmax) else { record->Dh = record->Ah; // odjazd o tej samej, co przyjazd (dla - // ostatniego te) - record->Dm = record->Am; // bo s uywane do wyliczenia opnienia + // ostatniego też) + record->Dm = record->Am; // bo są używane do wyliczenia opóźnienia // po dojechaniu } if ((record->Ah >= 0)) @@ -476,7 +476,7 @@ bool TTrainParameters::LoadTTfile(std::string scnpath, int iPlus, double vmax) } if (ConversionError == 0) { - if ((TimeTable[1].StationName == Relation1)) // jeli nazwa pierwszego zgodna z relacj + if ((TimeTable[1].StationName == Relation1)) // jeśli nazwa pierwszego zgodna z relacją if ((TimeTable[1].Ah < 0)) // a nie podany czas przyjazdu { // to mamy zatrzymanie na pierwszym, a nie przelot TimeTable[1].Ah = TimeTable[1].Dh; @@ -485,10 +485,10 @@ bool TTrainParameters::LoadTTfile(std::string scnpath, int iPlus, double vmax) // NextStationName:=TimeTable[1].StationName; /* TTVmax:=TimeTable[1].vmax; */ } - if ((iPlus != 0)) // jeeli jest przesunicie rozkadu + if ((iPlus != 0)) // jeżeli jest przesunięcie rozkładu { long i_end = StationCount + 1; - for (i = 1; i < i_end; ++i) // bez with, bo ciko si przenosi na C++ + for (i = 1; i < i_end; ++i) // bez with, bo ciężko się przenosi na C++ { if ((TimeTable[i].Ah >= 0)) { @@ -511,20 +511,20 @@ void TMTableTime::UpdateMTableTime(double deltaT) // dodanie czasu (deltaT) w sekundach, z przeliczeniem godziny { mr = mr + deltaT; // dodawanie sekund - while (mr > 60.0) // przeliczenie sekund do waciwego przedziau + while (mr > 60.0) // przeliczenie sekund do właściwego przedziału { mr = mr - 60.0; ++mm; } - while (mm > 59) // przeliczenie minut do waciwego przedziau + while (mm > 59) // przeliczenie minut do właściwego przedziału { mm = mm - 60; ++hh; } - while (hh > 23) // przeliczenie godzin do waciwego przedziau + while (hh > 23) // przeliczenie godzin do właściwego przedziału { hh = hh - 24; - ++dd; // zwikszenie numeru dnia + ++dd; // zwiększenie numeru dnia } GameTime = GameTime + deltaT; } @@ -543,7 +543,7 @@ TMTableTime::TMTableTime(int InitH, int InitM, int InitSRH, int InitSRM, int Ini } bool TTrainParameters::DirectionChange() -// sprawdzenie, czy po zatrzymaniu wykona kolejne komendy +// sprawdzenie, czy po zatrzymaniu wykonać kolejne komendy { if ((StationIndex > 0) && (StationIndex < StationCount)) // dla ostatniej stacji nie if (TimeTable[StationIndex].StationWare.find("@") != std::string::npos) diff --git a/mtable.h b/mtable.h index 013ddd0b..4aaed254 100644 --- a/mtable.h +++ b/mtable.h @@ -14,11 +14,11 @@ http://mozilla.org/MPL/2.0/. namespace Mtable { -static int const MaxTTableSize = 100; // mona by to robi dynamicznie +static int const MaxTTableSize = 100; // można by to robić dynamicznie static char const *hrsd = "."; -// Ra: pozycja zerowa rozkadu chyba nie ma sensu -// Ra: numeracja przystankw jest 1..StationCount +// Ra: pozycja zerowa rozkładu chyba nie ma sensu +// Ra: numeracja przystanków jest 1..StationCount struct TMTableLine { @@ -61,8 +61,8 @@ class TTrainParameters std::string LocSeries; // seria (typ) pojazdu double LocLoad; TMTable TimeTable; - int StationCount; // ilo przystankw (0-techniczny) - int StationIndex; // numer najbliszego (aktualnego) przystanku + int StationCount; // ilość przystanków (0-techniczny) + int StationIndex; // numer najbliższego (aktualnego) przystanku std::string NextStationName; double LastStationLatency; int Direction; /*kierunek jazdy w/g kilometrazu*/ diff --git a/parser.cpp b/parser.cpp index af5a0264..4d48193d 100644 --- a/parser.cpp +++ b/parser.cpp @@ -27,7 +27,7 @@ cParser::cParser(std::string Stream, buffertype Type, std::string Path, bool tr) // build comments map mComments.insert(commentmap::value_type("/*", "*/")); mComments.insert(commentmap::value_type("//", "\n")); - // mComments.insert(commentmap::value_type("--","\n")); //Ra: to chyba nie uywane + // mComments.insert(commentmap::value_type("--","\n")); //Ra: to chyba nie używane // store to calculate sub-sequent includes from relative path mPath = Path; // reset pointers and attach proper type of buffer @@ -69,9 +69,9 @@ bool cParser::getTokens(int Count, bool ToLower, const char *Break) { /* if (LoadTraction==true) - trtest="niemaproblema"; //wczytywa + trtest="niemaproblema"; //wczytywać else - trtest="x"; //nie wczytywa + trtest="x"; //nie wczytywać */ int i; this->str(""); @@ -99,7 +99,7 @@ bool cParser::getTokens(int Count, bool ToLower, const char *Break) std::string cParser::readToken(bool ToLower, const char *Break) { std::string token = ""; - size_t pos; // pocztek podmienianego cigu + size_t pos; // początek podmienianego ciągu // see if there's include parsing going on. clean up when it's done. if (mIncludeParser) { @@ -112,11 +112,11 @@ std::string cParser::readToken(bool ToLower, const char *Break) { std::string parameter = token.substr(pos + 2, token.find(")", pos) - pos + 2); // numer parametru - token.erase(pos, token.find(")", pos) - pos + 1); // najpierw usunicie "(pN)" + token.erase(pos, token.find(")", pos) - pos + 1); // najpierw usunięcie "(pN)" size_t nr = atoi(parameter.c_str()) - 1; if (nr < parameters.size()) { - token.insert(pos, parameters.at(nr)); // wklejenie wartoci parametru + token.insert(pos, parameters.at(nr)); // wklejenie wartości parametru if (ToLower) for (; pos < token.length(); ++pos) token[pos] = tolower(token[pos]); @@ -149,14 +149,14 @@ std::string cParser::readToken(bool ToLower, const char *Break) // launch child parser if include directive found. // NOTE: parameter collecting uses default set of token separators. if (token.compare("include") == 0) - { // obsuga include + { // obsługa include std::string includefile = readToken(ToLower); // nazwa pliku if (LoadTraction ? true : ((includefile.find("tr/") == std::string::npos) && (includefile.find("tra/") == std::string::npos))) { // std::string trtest2="niemaproblema"; //nazwa odporna na znalezienie "tr/" - // if (trtest=="x") //jeli nie wczytywa drutw - // trtest2=includefile; //kopiowanie cieki do pliku + // if (trtest=="x") //jeśli nie wczytywać drutów + // trtest2=includefile; //kopiowanie ścieżki do pliku std::string parameter = readToken(false); // w parametrach nie zmniejszamy while( (parameter.empty() == false) && (parameter.compare("end") != 0) ) @@ -192,12 +192,12 @@ bool cParser::trimComments(std::string &String) } std::string cParser::readComment(const std::string Break) -{ // pobieranie znakw a do znalezienia znacznika koca +{ // pobieranie znaków aż do znalezienia znacznika końca std::string token = ""; while (mStream->peek() != EOF) { // o ile nie koniec pliku token += mStream->get(); // pobranie znaku - if (token.find(Break) != std::string::npos) // szukanie znacznika koca + if (token.find(Break) != std::string::npos) // szukanie znacznika końca break; } return token; diff --git a/resource.h b/resource.h index 7fb9d9b6..52fca2ce 100644 Binary files a/resource.h and b/resource.h differ diff --git a/sky.cpp b/sky.cpp index 21d20b92..fd622f47 100644 --- a/sky.cpp +++ b/sky.cpp @@ -33,7 +33,7 @@ void TSky::Init() void TSky::Render() { if (mdCloud) - { // jeli jest model nieba + { // jeśli jest model nieba glPushMatrix(); // glDisable(GL_DEPTH_TEST); glTranslatef(Global::pCameraPosition.x, Global::pCameraPosition.y, diff --git a/sky.h b/sky.h index c7d43372..709c2887 100644 --- a/sky.h +++ b/sky.h @@ -1,3 +1,11 @@ +/* +This Source Code Form is subject to the +terms of the Mozilla Public License, v. +2.0. If a copy of the MPL was not +distributed with this file, You can +obtain one at +http://mozilla.org/MPL/2.0/. +*/ //--------------------------------------------------------------------------- #pragma once @@ -17,11 +25,3 @@ class TSky }; //--------------------------------------------------------------------------- -/* -This Source Code Form is subject to the -terms of the Mozilla Public License, v. -2.0. If a copy of the MPL was not -distributed with this file, You can -obtain one at -http://mozilla.org/MPL/2.0/. -*/ \ No newline at end of file diff --git a/usefull.h b/usefull.h index 07dc7828..aabeba22 100644 --- a/usefull.h +++ b/usefull.h @@ -13,11 +13,11 @@ http://mozilla.org/MPL/2.0/. //#define B2(t) (3*t*t*(1-t)) //#define B3(t) (3*t*(1-t)*(1-t)) //#define B4(t) ((1-t)*(1-t)*(1-t)) -// Ra: to jest mocno nieoptymalne: 10+3*4=22 mnoenia, 6 odejmowa, 3*3=9 dodawa -// Ra: po przeliczeniu wspczynnikw mamy: 3*3=9 mnoe i 3*3=9 dodawa +// Ra: to jest mocno nieoptymalne: 10+3*4=22 mnożenia, 6 odejmowań, 3*3=9 dodawań +// Ra: po przeliczeniu współczynników mamy: 3*3=9 mnożeń i 3*3=9 dodawań //#define Interpolate(t,p1,cp1,cp2,p2) (B4(t)*p1+B3(t)*cp1+B2(t)*cp2+B1(t)*p2) -// Ra: "delete NULL" nic nie zrobi, wic "if (a!=NULL)" jest zbdne +// Ra: "delete NULL" nic nie zrobi, więc "if (a!=NULL)" jest zbędne //#define SafeFree(a) if (a!=NULL) free(a) //#define M_PI = 3.141592653589793 @@ -34,7 +34,7 @@ http://mozilla.org/MPL/2.0/. #define sign(x) ((x) < 0 ? -1 : ((x) > 0 ? 1 : 0)) -#define DegToRad(a) ((M_PI / 180.0) * (a)) //(a) w nawiasie, bo moe by dodawaniem +#define DegToRad(a) ((M_PI / 180.0) * (a)) //(a) w nawiasie, bo może być dodawaniem #define RadToDeg(r) ((180.0 / M_PI) * (r)) #define Fix(a, b, c) \