diff --git a/Console.cpp b/Console.cpp index dadab34e..438bca1f 100644 --- a/Console.cpp +++ b/Console.cpp @@ -14,47 +14,48 @@ http://mozilla.org/MPL/2.0/. #include "PoKeys55.h" #include "LPT.h" #include "mczapkie/mctools.h" +#include "MWD.h" // maciek001: obsluga portu COM //--------------------------------------------------------------------------- -// 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); @@ -107,19 +108,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; -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 +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 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] } @@ -129,6 +131,7 @@ Console::~Console() { delete PoKeys55[0]; delete PoKeys55[1]; + delete MWD; }; void Console::ModeSet(int m, int h) @@ -138,24 +141,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; } @@ -165,25 +168,34 @@ 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; } break; + case 5: // maciek001: MWD OK + MWD = new MWDComm(); + if(!(MWD->Open())){ + delete MWD; + iMode = 0; + Global::iFeedbackMode = 0; + WriteLog("COM Port not open!"); + } + break; } return 0; }; 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]; @@ -192,103 +204,154 @@ void Console::Off() PoKeys55[1] = NULL; delete LPT; LPT = NULL; + if(iMode == 5 || MWD->GetMWDState()){ + delete MWD; // maciek001: zamykanie portu COM i takie tam inne ;) + MWD = NULL; + } }; 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)); } }; 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 + out5: HASLER */ + if(mask & 0x0001) if(iBits & 1){ + MWD->WriteDataBuff[4] |= 1<<7; // SHP HASLER teďż˝ + if(!MWD->bSHPstate){ + MWD->bSHPstate = true; + MWD->bPrzejazdSHP = true; + }else MWD->bPrzejazdSHP = false; + } + else{ + MWD->WriteDataBuff[4] &= ~(1<<7); + MWD->bPrzejazdSHP = false; + MWD->bSHPstate = false; + } + if(mask & 0x0002) if(iBits & 2) MWD->WriteDataBuff[4] |= 1<<6; // CA + else MWD->WriteDataBuff[4] &= ~(1<<6); + if(mask & 0x0004) if(iBits & 4) MWD->WriteDataBuff[4] |= 1<<1; // jazda na oporach rozruchowych + else MWD->WriteDataBuff[4] &= ~(1<<1); + if(mask & 0x0008) if(iBits & 8) 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 + else MWD->WriteDataBuff[5] &= ~(1<<4); + if(mask & 0x0020) if(iBits & 0x20) MWD->WriteDataBuff[4] |= 1<<0; // styczniki liniowe + else MWD->WriteDataBuff[5] &= ~(1<<0); + if(mask & 0x0040) if(iBits & 0x40) MWD->WriteDataBuff[4] |= 1<<2; // po?lizg + else MWD->WriteDataBuff[4] &= ~(1<<2); + if(mask & 0x0080) if(iBits & 0x80) MWD->WriteDataBuff[5] |= 1<<2; // (nadmiarowy) przetwornicy? ++ + else MWD->WriteDataBuff[5] &= ~(1<<2); + if(mask & 0x0100) if(iBits & 0x100) MWD->WriteDataBuff[5] |= 1<<7; // nadmiarowy spr??arki + else MWD->WriteDataBuff[5] &= ~(1<<7); + if(mask & 0x0200) if(iBits & 0x200) MWD->WriteDataBuff[2] |= 1<<1; // wentylatory i opory + else MWD->WriteDataBuff[2] &= ~(1<<1); + if(mask & 0x0400) if(iBits & 0x400) MWD->WriteDataBuff[2] |= 1<<2; // wysoki rozruch + else MWD->WriteDataBuff[2] &= ~(1<<2); + if(mask & 0x0800) if(iBits & 0x800) 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 + else MWD->bHamowanie = false; + if(mask & 0x2000) if(iBits & 0x2000) MWD->WriteDataBuff[6] |= 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 + else MWD->WriteDataBuff[6] &= ~(1<<7); + //if(mask & 0x8000) if(iBits & 0x8000) MWD->WriteDataBuff[1] |= 1<<7; (puste) + //else MWD->WriteDataBuff[0] &= ~(1<<7); + break; } }; 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]) { @@ -300,7 +363,7 @@ 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); } @@ -312,27 +375,64 @@ 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�� + { + unsigned int iliczba ; + if(x==0){ + iliczba = (unsigned int) floor((y / (Global::fMWDzg[0] * 10) * Global::fMWDzg[1]) + 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 + MWD->WriteDataBuff[10] = (unsigned char)(iliczba>>8); + MWD->WriteDataBuff[9] = (unsigned char)iliczba; + }else if(x==2){ + iliczba = (unsigned int) floor((y / (Global::fMWDph[0] * 10) * Global::fMWDph[1]) + 0.5); // cylinder hamulcowy + MWD->WriteDataBuff[8] = (unsigned char)(iliczba>>8); + MWD->WriteDataBuff[7] = (unsigned char)iliczba; + }else if(x==3){ + iliczba = (unsigned int) floor((y / Global::fMWDvolt[0] * Global::fMWDvolt[1]) + 0.5); // woltomierz WN + MWD->WriteDataBuff[14] = (unsigned char)(iliczba>>8); + MWD->WriteDataBuff[13] = (unsigned char)iliczba; + }else if(x==4){ + iliczba = (unsigned int)floor((y / Global::fMWDamp[0] * Global::fMWDamp[1]) + 0.5); // amp WN 1 + MWD->WriteDataBuff[16] = (unsigned char)(iliczba>>8); + MWD->WriteDataBuff[15] = (unsigned char)iliczba; + }else if(x==5){ + iliczba = (unsigned int)floor((y / Global::fMWDamp[0] * Global::fMWDamp[1]) + 0.5); // amp WN 2 + MWD->WriteDataBuff[18] = (unsigned char)(iliczba>>8); + MWD->WriteDataBuff[17] = (unsigned char)iliczba; + }else if(x==6){ + iliczba = (unsigned int)floor((y / Global::fMWDamp[0] * Global::fMWDamp[1]) + 0.5); // amp WN 3 + MWD->WriteDataBuff[20] = (unsigned int)(iliczba>>8); + MWD->WriteDataBuff[19] = (unsigned char)iliczba; + }else if(x==7) 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 + { + MWD->Run(); + } }; float Console::AnalogGet(int x) -{ // pobranie wartości analogowej +{ // pobranie wartoďż˝ci analogowej if (iMode == 4) if (PoKeys55[0]) return PoKeys55[0]->fAnalog[x]; @@ -340,19 +440,33 @@ float Console::AnalogGet(int x) }; float Console::AnalogCalibrateGet(int x) -{ // pobranie i kalibracja wartości analogowej, jeśli nie ma PoKeys zwraca NULL - if (iMode == 4 && PoKeys55[0]) - { - float b = PoKeys55[0]->fAnalog[x]; - return (((((Global::fCalibrateIn[x][5] * b) + Global::fCalibrateIn[x][4]) * b + - Global::fCalibrateIn[x][3]) * b + Global::fCalibrateIn[x][2]) * b + - Global::fCalibrateIn[x][1]) *b + Global::fCalibrateIn[x][0]; - } - return -1.0; //odcięcie +{ // pobranie i kalibracja wartoďż˝ci analogowej, jeďż˝li nie ma PoKeys zwraca NULL + if (iMode == 4 && PoKeys55[0]) + { + float b = PoKeys55[0]->fAnalog[x]; + return (((((Global::fCalibrateIn[x][5] * b) + Global::fCalibrateIn[x][4]) * b + + Global::fCalibrateIn[x][3]) * b + Global::fCalibrateIn[x][2]) * b + + Global::fCalibrateIn[x][1]) *b + Global::fCalibrateIn[x][0]; + } + if(iMode == 5 && MWD) // maciek001: obs?uga hamulc?w (wej?? analogowych) OK + { + float b = MWD->fAnalog[x]; + //b = b*(Global::fMWDAnalogCalib[x][0]-Global::fMWDAnalogCalib[x][1])/Global::fMWDAnalogCalib[x][3]+Global::fMWDAnalogCalib[x][1]/Global::fMWDAnalogCalib[x][3]; + b = (b-Global::fMWDAnalogCalib[x][1])/(Global::fMWDAnalogCalib[x][1]-Global::fMWDAnalogCalib[x][0]); + switch(x) + { + case 0: return (b*8-2); + break; + case 1: return (b*10); + break; + default: return 0; + } + } + 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]; @@ -360,35 +474,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 500e9abf..af51f56b 100644 --- a/Console.h +++ b/Console.h @@ -13,6 +13,7 @@ http://mozilla.org/MPL/2.0/. class TConsoleDevice; // urządzenie podłączalne za pomocą DLL class TPoKeys55; class TLPT; +class MWDComm; // maciek001: dodana obsluga portu COM // klasy konwersji znaków wprowadzanych z klawiatury class TKeyTrans @@ -31,6 +32,7 @@ class Console static int iBits; // podstawowy zestaw lampek 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 współpracy z pulpitem (PoKeys) // używając klawiatury, każdy pojazd powinien mieć własny stan przełączników diff --git a/Console/MWD.cpp b/Console/MWD.cpp new file mode 100644 index 00000000..5ba6a48b --- /dev/null +++ b/Console/MWD.cpp @@ -0,0 +1,687 @@ +/* +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/. +*/ + +/* + Program obsługi portu COM i innych na potrzeby sterownika MWDevice + (oraz innych wykorzystujących komunikację przez port COM) + dla Symulatora Pojazdów Szynowych MaSzyna + author: Maciej Witek 2016 + Autor nie ponosi odpowiedzialności za niewłaciwe używanie lub działanie programu! +*/ + +#include "MWD.h" +#include "Logs.h" +#include "Globals.h" +#include "World.h" + +#include + +#define BYTETOWRITE 31 /* ilość bajtów przesyłanych z MaSzyny*/ +#define BYTETOREAD 16 /* ilość bajtów przesyłanych do MaSzyny*/ + +HANDLE hComm; + +MWDComm::MWDComm() // konstruktor +{ + MWDTime = 0; + bSHPstate = false; + bPrzejazdSHP = false; + bKabina1 = true; // pasuje wyciągnąć dane na temat kabiny i ustawiać te dwa parametry! + bKabina2 = false; + bHamowanie = false; + bCzuwak = false; + + bRysik1H = false; + bRysik1L = false; + bRysik2H = false; + bRysik2L = false; + + bocznik = 0; + nastawnik = 0; + kierunek = 0; + bnkMask = 0; + + int i=0; + while(i 0) return 1; + else return 0; +} + +bool MWDComm::ReadData() // odbieranie danych + odczyta danych analogowych i zapis do zmiennych +{ + DWORD bytes_read; + ReadFile(hComm, &ReadDataBuff[0], BYTETOREAD, &bytes_read, NULL); + + fAnalog[0] = (float)((ReadDataBuff[9]<<8)+ReadDataBuff[8]) / Global::fMWDAnalogCalib[0][3]; //4095.0f; //max wartosc wynikająca z rozdzielczości + fAnalog[1] = (float)((ReadDataBuff[11]<<8)+ReadDataBuff[10]) / Global::fMWDAnalogCalib[1][3]; + fAnalog[2] = (float)((ReadDataBuff[13]<<8)+ReadDataBuff[12]) / Global::fMWDAnalogCalib[2][3]; + fAnalog[3] = (float)((ReadDataBuff[15]<<8)+ReadDataBuff[14]) / Global::fMWDAnalogCalib[3][3]; + CheckData(); + + return TRUE; +} + +bool MWDComm::SendData() // wysyłanie danych +{ + DWORD bytes_write; + DWORD fdwEvtMask; + + WriteFile(hComm, &WriteDataBuff[0], BYTETOWRITE, &bytes_write, NULL); + + return TRUE; +} + +bool MWDComm::Run() // wywoływanie obsługi MWD + generacja większego opóźnienia +{ + MWDTime++; + if(!(MWDTime%5)) + { + if(GetMWDState()) + { + SendData(); + if (Global::bMWDInputDataEnable) ReadData(); + return 1; + }else + { + WriteLog("Port COM: connection ERROR!"); + // może spróbować się połączyć znowu? + return 0; + } + MWDTime = 0; + } +} + +bool MWDComm::CheckData() // sprawdzanie wejść cyfrowych i odpowiednie sterowanie maszyną +{ + int i=0; + while(i<6) + { + maskData[i] = ReadDataBuff[i]^lastStateData[i]; + lastStateData[i] = ReadDataBuff[i]; + i++; + } + /* + Rozpiska portów! + Port0: 0 NC odblok. przek. sprężarki i wentyl. oporów + 1 M wyłącznik wył. szybkiego + 2 Shift+M impuls załączający wył. szybki + 3 N odblok. przekaźników nadmiarowych i różnicowego obwodu głównego + 4 NC rezerwa + 5 Ctrl+N odblok. przek. nadmiarowych przetwornicy, ogrzewania pociągu i różnicowych obw. pomocniczych + 6 L wył. styczników liniowych + 7 SPACE kasowanie czuwaka + + Port1: 0 NC + 1 (Shift) X przetwornica + 2 (Shift) C sprężarka + 3 S piasecznice + 4 (Shift) H ogrzewanie składu + 5 przel. hamowania Shift+B pspbpwy Ctrl+B pospieszny B towarowy + 6 przel. hamowania + 7 (Shift) F rozruch w/n + + Port2: 0 (Shift) P pantograf przedni + 1 (Shift) O pantograf tylni + 2 ENTER przyhamowanie przy poślizgu + 3 () przyciemnienie świateł + 4 () przyciemnienie świateł + 5 NUM6 odluźniacz + 6 a syrena lok W + 7 A syrena lok N + + Port3: 0 Shift+J bateria + 1 + 2 + 3 + 4 + 5 + 6 + 7 + */ + + /* po przełączeniu bistabilnego najpierw wciskamy klawisz i przy następnym + wejściu w pętlę MWD puszczamy bo inaczej nie działa */ + + // wciskanie przycisków klawiatury + /*PORT0*/ + if(maskData[0] & 0x02 && lastStateData[0] & 0x02) KeyBoard('M',1); // wyłączenie wyłącznika szybkiego + else KeyBoard('M',0); // monostabilny + if(maskData[0] & 0x04 && lastStateData[0] & 0x04) { // impuls załączający wyłącznik szybki + KeyBoard(0x10,1); // monostabilny + KeyBoard('M',1); + }else{ + KeyBoard('M',0); + KeyBoard(0x10,0); + } + if(maskData[0] & 0x08 && lastStateData[0] & 0x08) KeyBoard('N',1); // odblok nadmiarowego silników trakcyjnych + else KeyBoard('N',0); // monostabilny + if(maskData[0] & 0x20 && lastStateData[0] & 0x20) { // odblok nadmiarowego przetwornicy, ogrzewania poc. + KeyBoard(0x11,1); // różnicowego obwodów pomocniczych + KeyBoard('N',1); // monostabilny + }else{ + KeyBoard('N',0); + KeyBoard(0x11,0); + } + if(maskData[0] & 0x40 && lastStateData[0] & 0x40) KeyBoard('L',1); // wył. styczników liniowych + else KeyBoard('L',0); // monostabilny + if(maskData[0] & 0x80 && lastStateData[0] & 0x80) KeyBoard(0x20,1); // kasowanie czuwaka/SHP + else KeyBoard(0x20,0); // kasowanie czuwaka/SHP + + /*PORT1*/ + + // puszczanie przycisku bistabilnego klawiatury + if(maskSwitch[1]&0x02){ + if(bitSwitch[1] &0x02){ + KeyBoard('X',0); + KeyBoard(0x10,0); + }else KeyBoard('X',0); + maskSwitch[1] &= ~0x02; + } + if(maskSwitch[1]&0x04){ + if(bitSwitch[1] &0x04){ + KeyBoard('C',0); + KeyBoard(0x10,0); + }else KeyBoard('C',0); + maskSwitch[1] &= ~0x04; + } + if(maskSwitch[1]&0x10){ + if(bitSwitch[1] &0x10){ + KeyBoard('H',0); + KeyBoard(0x10,0); + }else KeyBoard('H',0); + maskSwitch[1] &= ~0x10; + } + if(maskSwitch[1] & 0x20 || maskSwitch[1] & 0x40){ + if(maskSwitch[1] & 0x20) KeyBoard(0x10,0); + if(maskSwitch[1] & 0x40) KeyBoard(0x11,0); + KeyBoard('B',0); + maskSwitch[1] &= ~0x60; + } + if(maskSwitch[1]&0x80){ + if(bitSwitch[1] &0x80){ + KeyBoard('F',0); + KeyBoard(0x10,0); + }else KeyBoard('F',0); + maskSwitch[1] &= ~0x80; + } + + + if(maskData[1] & 0x02 && lastStateData[1] & 0x02) { // przetwornica + KeyBoard(0x10,1); // bistabilny + KeyBoard('X',1); + maskSwitch[1] |= 0x02; + bitSwitch[1] |= 0x02; + }else{ + maskSwitch[1] |= 0x02; + bitSwitch[1] &= ~0x02; + KeyBoard('X',1); + } + if(maskData[1] & 0x04 && lastStateData[1] & 0x04) { // sprężarka + KeyBoard(0x10,1); // bistabilny + KeyBoard('C',1); + maskSwitch[1] |= 0x04; + bitSwitch[1] |= 0x04; + }else{ + maskSwitch[1] |= 0x04; + bitSwitch[1] &= ~0x04; + KeyBoard('C',1); + } + if(maskData[1] & 0x08 && lastStateData[1] & 0x08) KeyBoard('S',1); // piasecznica + else KeyBoard('S',0); // monostabilny + if(maskData[1] & 0x10 && lastStateData[1] & 0x10) { // ogrzewanie składu + KeyBoard(0x11,1); // bistabilny + KeyBoard('H',1); + maskSwitch[1] |= 0x10; + bitSwitch[1] |= 0x10; + }else{ + maskSwitch[1] |= 0x10; + bitSwitch[1] &= ~0x10; + KeyBoard('H',1); + } + if(maskData[1] & 0x20 || maskData[1] & 0x40){ // przełącznik hamowania + if(lastStateData[1] & 0x20){ // Shift+B + KeyBoard(0x10,1); + maskSwitch[1] |= 0x20; + }else if(lastStateData[1] & 0x40){ // Ctrl+B + KeyBoard(0x11,1); + maskSwitch[1] |= 0x40; + } + KeyBoard('B',1); + } + + if(maskData[1] & 0x80 && lastStateData[1] & 0x80) { // rozruch wysoki/niski + KeyBoard(0x10,1); // bistabilny + KeyBoard('F',1); + maskSwitch[1] |= 0x80; + bitSwitch[1] |= 0x80; + }else{ + maskSwitch[1] |= 0x80; + bitSwitch[1] &= ~0x80; + KeyBoard('F',1); + } + + + /*PORT2*/ + + if(maskSwitch[2]&0x01){ + if(bitSwitch[2] &0x01){ + KeyBoard('P',0); + KeyBoard(0x10,0); + }else KeyBoard('P',0); + maskSwitch[2] &= ~0x01; + } + if(maskSwitch[2]&0x02){ + if(bitSwitch[2] &0x02){ + KeyBoard('O',0); + KeyBoard(0x10,0); + }else KeyBoard('O',0); + maskSwitch[2] &= ~0x02; + } + + + if(maskData[2] & 0x01 && lastStateData[2] & 0x01) { // pantograf przedni + KeyBoard(0x10,1); // bistabilny + KeyBoard('P',1); + maskSwitch[2] |= 0x01; + bitSwitch[2] |= 0x01; + }else{ + maskSwitch[2] |= 0x01; + bitSwitch[2] &= ~0x01; + KeyBoard('P',1); + } + if(maskData[2] & 0x02 && lastStateData[2] & 0x02) { // pantograf tylni + KeyBoard(0x10,1); // bistabilny + KeyBoard('O',1); + maskSwitch[2] |= 0x02; + bitSwitch[2] |= 0x02; + }else{ + maskSwitch[2] |= 0x02; + bitSwitch[2] &= ~0x02; + KeyBoard('O',1); + } + if(maskData[2] & 0x04 && lastStateData[2] & 0x04) { // przyhamowanie przy poślizgu + KeyBoard(0x10,1); // monostabilny + KeyBoard(0x0D,1); + }else{ + + KeyBoard(0x0D,0); + KeyBoard(0x10,0); + } + /*if(maskData[2] & 0x08 && lastStateData[2] & 0x08){ // przyciemnienie świateł + KeyBoard(' ',0); // bistabilny + KeyBoard(0x10,1); + KeyBoard(' ',1); + }else{ + KeyBoard(' ',0); + KeyBoard(0x10,0); + KeyBoard(' ',1); + } + if(maskData[2] & 0x10 && lastStateData[2] & 0x10) { // przyciemnienie świateł + KeyBoard(' ',0); // bistabilny + KeyBoard(0x11,1); + KeyBoard(' ',1); + }else{ + KeyBoard(' ',0); + KeyBoard(0x11,0); + KeyBoard(' ',1); + }*/ + if(maskData[2] & 0x20 && lastStateData[2] & 0x20) KeyBoard(0x66,1); // odluźniacz + else KeyBoard(0x66,0); // monostabilny + if(maskData[2] & 0x40 && lastStateData[2] & 0x40) { // syrena wysoka + KeyBoard(0x10,1); // monostabilny + KeyBoard('A',1); + }else{ + KeyBoard('A',0); + KeyBoard(0x10,0); + } + if(maskData[2] & 0x80 && lastStateData[2] & 0x80) KeyBoard('A',1); // syrena niska + else KeyBoard('A',0); // monostabilny + + + /*PORT3*/ + + if(maskSwitch[3]&0x01){ + if(bitSwitch[3] &0x01){ + KeyBoard('J',0); + KeyBoard(0x10,0); + }else KeyBoard('J',0); + maskSwitch[3] &= ~0x01; + } + + if(maskData[3] & 0x01 && lastStateData[3] & 0x01) { // bateria + KeyBoard(0x10,1); // bistabilny + KeyBoard('J',1); + maskSwitch[3] |= 0x01; + bitSwitch[3] |= 0x01; + }else{ + maskSwitch[3] |= 0x01; + bitSwitch[3] &= ~0x01; + KeyBoard('J',1); + } + + /* + if(maskData[3] & 0x04 && lastStateData[1] & 0x04) { KeyBoard(0x10,1); + KeyBoard('C',1); // + KeyBoard('C',0); + KeyBoard(0x10,0); + }else{ KeyBoard('C',1); // + KeyBoard('C',0); + } + if(maskData[3] & 0x08 && lastStateData[1] & 0x08) KeyBoard('S',1); // + else KeyBoard('S',0); + + + if(maskData[3] & 0x10 && lastStateData[1] & 0x10) { + KeyBoard(0x11,1); + KeyBoard('H',1); + }else{ KeyBoard('H',0); + KeyBoard(0x11,0); + } + if(maskData[3] & 0x20 && lastStateData[1] & 0x20) { + KeyBoard(0x11,1); + KeyBoard(' ',1); + }else{ KeyBoard(' ',0); + KeyBoard(0x11,0); + } + if(maskData[3] & 0x40 && lastStateData[1] & 0x40) { + KeyBoard(0x10,1); + KeyBoard(' ',1); + }else{ KeyBoard(' ',0); + KeyBoard(0x10,0); + } + if(maskData[3] & 0x80 && lastStateData[1] & 0x80) { + KeyBoard(0x10,1); + KeyBoard('F',1); + }else{ KeyBoard('F',0); + KeyBoard(0x10,0); + } + + /*PORT4*//* + if(maskData[4] & 0x02 && lastStateData[1] & 0x02) { + KeyBoard(0x10,1); + KeyBoard('X',1); // + KeyBoard('X',0); + KeyBoard(0x10,0); + }else{ KeyBoard('X',1); // + KeyBoard('X',0); + } + if(maskData[4] & 0x04 && lastStateData[1] & 0x04) { + KeyBoard(0x10,1); + KeyBoard('C',1); // + KeyBoard('C',0); + KeyBoard(0x10,0); + }else{ KeyBoard('C',1); // + KeyBoard('C',0); + } + if(maskData[4] & 0x08 && lastStateData[1] & 0x08) KeyBoard('S',1); // + else KeyBoard('S',0); + + + if(maskData[4] & 0x10 && lastStateData[1] & 0x10) { + KeyBoard(0x11,1); + KeyBoard('H',1); + }else{ KeyBoard('H',0); + KeyBoard(0x11,0); + } + if(maskData[4] & 0x20 && lastStateData[1] & 0x20) { + KeyBoard(0x11,1); + KeyBoard(' ',1); + }else{ KeyBoard(' ',0); + KeyBoard(0x11,0); + } + if(maskData[4] & 0x40 && lastStateData[1] & 0x40) { + KeyBoard(0x10,1); + KeyBoard(' ',1); + }else{ KeyBoard(' ',0); + KeyBoard(0x10,0); + } + if(maskData[4] & 0x80 && lastStateData[1] & 0x80) { + KeyBoard(0x10,1); + KeyBoard('F',1); + }else{ KeyBoard('F',0); + KeyBoard(0x10,0); + } + + /*PORT5*//* + if(maskData[5] & 0x02 && lastStateData[1] & 0x02) { + KeyBoard(0x10,1); + KeyBoard('X',1); // + KeyBoard('X',0); + KeyBoard(0x10,0); + }else{ KeyBoard('X',1); // + KeyBoard('X',0); + } + if(maskData[5] & 0x04 && lastStateData[1] & 0x04) { + KeyBoard(0x10,1); + KeyBoard('C',1); // + KeyBoard('C',0); + KeyBoard(0x10,0); + }else{ KeyBoard('C',1); // + KeyBoard('C',0); + } + if(maskData[5] & 0x08 && lastStateData[1] & 0x08) KeyBoard('S',1); // + else KeyBoard('S',0); + + + if(maskData[5] & 0x10 && lastStateData[1] & 0x10) { + KeyBoard(0x11,1); + KeyBoard('H',1); + }else{ KeyBoard('H',0); + KeyBoard(0x11,0); + } + if(maskData[5] & 0x20 && lastStateData[1] & 0x20) { + KeyBoard(0x11,1); + KeyBoard(' ',1); + }else{ KeyBoard(' ',0); + KeyBoard(0x11,0); + } + if(maskData[5] & 0x40 && lastStateData[1] & 0x40) { + KeyBoard(0x10,1); + KeyBoard(' ',1); + }else{ KeyBoard(' ',0); + KeyBoard(0x10,0); + } + if(maskData[5] & 0x80 && lastStateData[1] & 0x80) { + KeyBoard(0x10,1); + KeyBoard('F',1); + }else{ KeyBoard('F',0); + KeyBoard(0x10,0); + }//*/ + + /* NASTAWNIK, BOCZNIK i KIERUNEK */ + + if(bnkMask & 1){ //puszczanie klawiszy + KeyBoard(0x6B,0); + bnkMask &= ~1; + } + if(bnkMask & 2){ + KeyBoard(0x6D,0); + bnkMask &= ~2; + } + if(bnkMask & 4){ + KeyBoard(0x6F,0); + bnkMask &= ~4; + } + if(bnkMask & 8){ + KeyBoard(0x6A,0); + bnkMask &= ~8; + } + + if(nastawnik < ReadDataBuff[6]) + { + bnkMask |= 1; + nastawnik++; + KeyBoard(0x6B,1); //wciśnij + i dodaj 1 do nastawnika + } + if(nastawnik > ReadDataBuff[6]) + { + bnkMask |= 2; + nastawnik--; + KeyBoard(0x6D,1); //wciśnij - i odejmij 1 do nastawnika + } + if(bocznik < ReadDataBuff[7]) + { + bnkMask |= 4; + bocznik++; + KeyBoard(0x6F,1); //wciśnij / i dodaj 1 do bocznika + } + if(bocznik > ReadDataBuff[7]) + { + bnkMask |= 8; + bocznik--; + KeyBoard(0x6A,1); //wciśnij * i odejmij 1 do bocznika + } + + /* Obsługa HASLERA */ + if(ReadDataBuff[0] & 0x80) bCzuwak = true; + + if(bKabina1){ // logika rysika 1 + bRysik1H = true; + bRysik1L = false; + if(bPrzejazdSHP) bRysik1H = false; + }else if(bKabina2){ + bRysik1L = true; + bRysik1H = false; + if(bPrzejazdSHP) bRysik1L = false; + }else{ + bRysik1H = false; + bRysik1L = false; + } + + if(bHamowanie){ // logika rysika 2 + bRysik2H = false; + bRysik2L = true; + }else{ + if(bCzuwak) bRysik2H = true; + else bRysik2H = false; + bRysik2L = false; + } + bCzuwak = false; + if(bRysik1H)WriteDataBuff[6] |= 1<<0; + else WriteDataBuff[6] &= ~(1<<0); + if(bRysik1L)WriteDataBuff[6] |= 1<<1; + else WriteDataBuff[6] &= ~(1<<1); + if(bRysik2H)WriteDataBuff[6] |= 1<<2; + else WriteDataBuff[6] &= ~(1<<2); + if(bRysik2L)WriteDataBuff[6] |= 1<<3; + else WriteDataBuff[6] &= ~(1<<3); +} + +void MWDComm::KeyBoard(int key, bool s) // emulacja klawiatury +{ + INPUT ip; + // Set up a generic keyboard event. + ip.type = INPUT_KEYBOARD; + ip.ki.wScan = 0; // hardware scan code for key + ip.ki.time = 0; + ip.ki.dwExtraInfo = 0; + + ip.ki.wVk = key; // virtual-key code for the "a" key + + if(s){// Press the "A" key + ip.ki.dwFlags = 0; // 0 for key press + SendInput(1, &ip, sizeof(INPUT)); + }else{ + ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release + SendInput(1, &ip, sizeof(INPUT)); + } + + //return 1; +} + + diff --git a/Console/MWD.h b/Console/MWD.h new file mode 100644 index 00000000..25297b58 --- /dev/null +++ b/Console/MWD.h @@ -0,0 +1,111 @@ +/* +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/. +*/ + +/* + Program obsługi portu COM i innych na potrzeby sterownika MWDevice + (oraz innych wykorzystujących komunikację przez port COM) + dla Symulatora Pojazdów Szynowych MaSzyna + author: Maciej Witek 2016 + Autor nie ponosi odpowiedzialności za niewłaciwe używanie lub działanie programu! +*/ + + +#ifndef MWDH +#define MWDH +//--------------------------------------------------------------------------- + +typedef unsigned char BYTE; +typedef unsigned long DWORD; + +class MWDComm +{ +private: + int MWDTime; // + char lastStateData[6], maskData[6],maskSwitch[6], bitSwitch[6]; + int bocznik, nastawnik, kierunek; + char bnkMask; + + bool ReadData(); //BYTE *pReadDataBuff); + bool SendData(); //BYTE *pWriteDataBuff); + bool CheckData(); //sprawdzanie zmian wejść i kontrola mazaków HASLERA + void KeyBoard(int key, bool s); + + bool bRysik1H; + bool bRysik1L; + bool bRysik2H; + bool bRysik2L; + +public: + bool Open(); // Otwarcie portu + bool Close(); // Zamknięcie portu + bool Run(); // Obsługa portu + bool GetMWDState(); // sprawdź czy port jest otwarty, 0 zamknięty, 1 otwarty + + // zmienne do rysików HASLERA + bool bSHPstate; + bool bPrzejazdSHP; + bool bKabina1; + bool bKabina2; + bool bHamowanie; + bool bCzuwak; + + + + float fAnalog[4]; // trzymanie danych z wejść analogowych + + BYTE ReadDataBuff[17]; // bufory danych + BYTE WriteDataBuff[31]; + + MWDComm(); //konstruktor + ~MWDComm(); //destruktor +}; +#endif + + +/* + INFO - zmiany dokonane w innych plikach niezbędne do prawidłowego działania: + + Console.cpp: + Console::AnalogCalibrateGet - obsługa kranów hamulców + Console::Update - wywoływanie obsługi MWD + Console::ValueSet - obsługa manometrów, mierników WN (PWM-y) + Console::BitsUpdate - ustawiania lampek + Console::Off - zamykanie portu COM + Console::On - otwieranie portu COM + Console::~Console - usuwanie MWD (jest też w Console OFF) + + MWDComm * Console::MWD = NULL; - luzem, obiekt i wskaźnik(?) + dodatkowo zmieniłem int na long int dla BitSet i BitClear oraz iBits + + Train.cpp: + if (Global::iFeedbackMode == 5) - pobieranie prędkości, manometrów i mierników WN + if (ggBrakeCtrl.SubModel) - możliwość sterowania hamulcem zespolonym + if (ggLocalBrake.SubModel) - możliwość sterowania hamulcem lokomotywy + + Globals.h: + dodano zmienne dla MWD + Globals.cpp: + dodano inicjalizaję zmiennych i odczyt z ini ustawień + + Wpisy do pliku eu07.ini + + //maciek001 MWD + comportname COM3 // wybór portu COM + mwdbaudrate 500000 + + mwdbreakenable yes // czy załączyć sterowanie hamulcami? blokuje klawiature + mwdbreak 1 255 0 255 // hamulec zespolony + mwdbreak 2 255 0 255 // hamulec lokomotywy + + mwdzbiornikglowny 0.82 255 + mwdprzewodglowny 0.7 255 + mwdcylinderhamulcowy 0.43 255 + mwdwoltomierzwn 4000 255 + mwdamperomierzwn 800 255 +*/ diff --git a/Driver.cpp b/Driver.cpp index da3bf869..f5898f5e 100644 --- a/Driver.cpp +++ b/Driver.cpp @@ -988,8 +988,10 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN 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 fLastStopExpDist = @@ -1153,6 +1155,10 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN 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 @@ -1378,7 +1384,7 @@ 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 tableki."); + 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 diff --git a/Driver.h b/Driver.h index e4f6aba4..e475d387 100644 --- a/Driver.h +++ b/Driver.h @@ -244,6 +244,7 @@ class TController double VelLimit; // predkość zadawana przez event jednokierunkowego ograniczenia prędkości public: double VelSignalLast; // prędkość zadana na ostatnim semaforze + double VelSignalNext; // prędkość zadana na następnym semaforze double VelLimitLast; // prędkość zadana przez ograniczenie double VelRoad; // aktualna prędkość drogowa (ze znaku W27) // (PutValues albo komendą) diff --git a/DynObj.cpp b/DynObj.cpp index f23b3504..eaf38c0e 100644 --- a/DynObj.cpp +++ b/DynObj.cpp @@ -28,45 +28,45 @@ http://mozilla.org/MPL/2.0/. #include "Ground.h" //bo Global::pGround->bDynamicRemove #include "Event.h" #include "Driver.h" -#include "Camera.h" //bo likwidujemy trzęsienie +#include "Camera.h" //bo likwidujemy trzďż˝sienie #include "Console.h" #include "Traction.h" -// Ra: taki zapis funkcjonuje lepiej, ale może nie jest optymalny +// Ra: taki zapis funkcjonuje lepiej, ale moďż˝e nie jest optymalny #define vWorldFront Math3D::vector3(0, 0, 1) #define vWorldUp Math3D::vector3(0, 1, 0) #define vWorldLeft CrossProduct(vWorldUp, vWorldFront) -// Ra: bo te poniżej to się powielały w każdym module odobno +// Ra: bo te poniďż˝ej to siďż˝ powielaďż˝y w kaďż˝dym module odobno // vector3 vWorldFront=vector3(0,0,1); // vector3 vWorldUp=vector3(0,1,0); // vector3 vWorldLeft=CrossProduct(vWorldUp,vWorldFront); #define M_2PI 6.283185307179586476925286766559; -const float maxrot = (M_PI / 3.0); // 60° +const float maxrot = (M_PI / 3.0); // 60ďż˝ //--------------------------------------------------------------------------- void TAnimPant::AKP_4E() -{ // ustawienie wymiarów dla pantografu AKP-4E - vPos = vector3(0, 0, 0); // przypisanie domyśnych współczynników do pantografów +{ // ustawienie wymiarďż˝w dla pantografu AKP-4E + vPos = vector3(0, 0, 0); // przypisanie domyďż˝nych wsp��czynnikďż˝w do pantografďż˝w fLenL1 = 1.22; // 1.176289 w modelach fLenU1 = 1.755; // 1.724482197 w modelach - fHoriz = 0.535; // 0.54555075 przesunięcie ślizgu w długości pojazdu względem + fHoriz = 0.535; // 0.54555075 przesuniďż˝cie ďż˝lizgu w dďż˝ugoďż˝ci pojazdu wzglďż˝dem // osi obrotu dolnego // ramienia - fHeight = 0.07; // wysokość ślizgu ponad oś obrotu - fWidth = 0.635; // połowa szerokości ślizgu, 0.635 dla AKP-1 i AKP-4E + fHeight = 0.07; // wysoko�� ďż˝lizgu ponad oďż˝ obrotu + fWidth = 0.635; // poďż˝owa szerokoďż˝ci ďż˝lizgu, 0.635 dla AKP-1 i AKP-4E fAngleL0 = DegToRad(2.8547285515689267247882521833308); - fAngleL = fAngleL0; // początkowy kąt dolnego ramienia - // fAngleU0=acos((1.22*cos(fAngleL)+0.535)/1.755); //górne ramię - fAngleU0 = acos((fLenL1 * cos(fAngleL) + fHoriz) / fLenU1); // górne ramię - fAngleU = fAngleU0; // początkowy kąt - // PantWys=1.22*sin(fAngleL)+1.755*sin(fAngleU); //wysokość początkowa - PantWys = fLenL1 * sin(fAngleL) + fLenU1 * sin(fAngleU) + fHeight; // wysokość początkowa + fAngleL = fAngleL0; // poczďż˝tkowy kďż˝t dolnego ramienia + // fAngleU0=acos((1.22*cos(fAngleL)+0.535)/1.755); //gďż˝rne ramiďż˝ + fAngleU0 = acos((fLenL1 * cos(fAngleL) + fHoriz) / fLenU1); // gďż˝rne ramiďż˝ + fAngleU = fAngleU0; // poczďż˝tkowy kďż˝t + // PantWys=1.22*sin(fAngleL)+1.755*sin(fAngleU); //wysoko�� poczďż˝tkowa + PantWys = fLenL1 * sin(fAngleL) + fLenU1 * sin(fAngleU) + fHeight; // wysoko�� poczďż˝tkowa PantTraction = PantWys; hvPowerWire = NULL; fWidthExtra = 0.381; //(2.032m-1.027)/2 - // poza obszarem roboczym jest aproksymacja łamaną o 5 odcinkach + // poza obszarem roboczym jest aproksymacja ďż˝amanďż˝ o 5 odcinkach fHeightExtra[0] = 0.0; //+0.0762 fHeightExtra[1] = -0.01; //+0.1524 fHeightExtra[2] = -0.03; //+0.2286 @@ -75,18 +75,18 @@ void TAnimPant::AKP_4E() }; //--------------------------------------------------------------------------- int TAnim::TypeSet(int i, int fl) -{ // ustawienie typu animacji i zależnej od - // niego ilości animowanych submodeli - fMaxDist = -1.0; // normalnie nie pokazywać +{ // ustawienie typu animacji i zaleďż˝nej od + // niego iloďż˝ci animowanych submodeli + fMaxDist = -1.0; // normalnie nie pokazywaďż˝ switch (i) - { // maska 0x000F: ile używa wskaźników na submodele (0 gdy jeden, + { // maska 0x000F: ile uďż˝ywa wskaďż˝nikďż˝w na submodele (0 gdy jeden, // wtedy bez tablicy) // maska 0x00F0: - // 0-osie,1-drzwi,2-obracane,3-zderzaki,4-wózki,5-pantografy,6-tłoki - // maska 0xFF00: ile używa liczb float dla współczynników i stanu + // 0-osie,1-drzwi,2-obracane,3-zderzaki,4-wďż˝zki,5-pantografy,6-tďż˝oki + // maska 0xFF00: ile uďż˝ywa liczb float dla wsp��czynnikďż˝w i stanu case 0: iFlags = 0x000; - break; // 0-oś + break; // 0-oďż˝ case 1: iFlags = 0x010; break; // 1-drzwi @@ -94,13 +94,13 @@ int TAnim::TypeSet(int i, int fl) iFlags = 0x020; fParam = fl ? new float[fl] : NULL; iFlags += fl << 8; - break; // 2-wahacz, dźwignia itp. + break; // 2-wahacz, dďż˝wignia itp. case 3: iFlags = 0x030; break; // 3-zderzak case 4: iFlags = 0x040; - break; // 4-wózek + break; // 4-wďż˝zek case 5: // 5-pantograf - 5 submodeli iFlags = 0x055; fParamPants = new TAnimPant(); @@ -108,143 +108,143 @@ int TAnim::TypeSet(int i, int fl) break; case 6: iFlags = 0x068; - break; // 6-tłok i rozrząd - 8 submodeli + break; // 6-tďż˝ok i rozrzďż˝d - 8 submodeli default: iFlags = 0; } yUpdate = nullptr; - return iFlags & 15; // ile wskaźników rezerwować dla danego typu animacji + return iFlags & 15; // ile wskaďż˝nikďż˝w rezerwowaďż˝ dla danego typu animacji }; TAnim::TAnim() -{ // potrzebne to w ogóle? +{ // potrzebne to w ogďż˝le? iFlags = -1; // nieznany typ - destruktor nic nie usuwa }; TAnim::~TAnim() { // usuwanie animacji switch (iFlags & 0xF0) - { // usuwanie struktur, zależnie ile zostało stworzonych - case 0x20: // 2-wahacz, dźwignia itp. + { // usuwanie struktur, zaleďż˝nie ile zostaďż˝o stworzonych + case 0x20: // 2-wahacz, dďż˝wignia itp. delete fParam; break; case 0x50: // 5-pantograf delete fParamPants; break; - case 0x60: // 6-tłok i rozrząd + case 0x60: // 6-tďż˝ok i rozrzďż˝d break; } }; void TAnim::Parovoz(){ - // animowanie tłoka i rozrządu parowozu + // animowanie tďż˝oka i rozrzďż˝du parowozu }; //--------------------------------------------------------------------------- TDynamicObject * TDynamicObject::FirstFind(int &coupler_nr, int cf) -{ // szukanie skrajnego połączonego pojazdu w pociagu +{ // szukanie skrajnego po��czonego pojazdu w pociagu // od strony sprzegu (coupler_nr) obiektu (start) TDynamicObject *temp = this; - for (int i = 0; i < 300; i++) // ograniczenie do 300 na wypadek zapętlenia składu + for (int i = 0; i < 300; i++) // ograniczenie do 300 na wypadek zapďż˝tlenia skďż˝adu { if (!temp) - return NULL; // Ra: zabezpieczenie przed ewentaulnymi błędami sprzęgów + return NULL; // Ra: zabezpieczenie przed ewentaulnymi b��dami sprzďż˝gďż˝w if ((temp->MoverParameters->Couplers[coupler_nr].CouplingFlag & cf) != cf) - return temp; // nic nie ma już dalej podłączone sprzęgiem cf + return temp; // nic nie ma juďż˝ dalej pod��czone sprzďż˝giem cf if (coupler_nr == 0) - { // jeżeli szukamy od sprzęgu 0 - if (temp->PrevConnected) // jeśli mamy coś z przodu + { // jeďż˝eli szukamy od sprzďż˝gu 0 + if (temp->PrevConnected) // jeďż˝li mamy coďż˝ z przodu { - if (temp->PrevConnectedNo == 0) // jeśli pojazd od strony sprzęgu 0 jest odwrócony - coupler_nr = 1 - coupler_nr; // to zmieniamy kierunek sprzęgu + if (temp->PrevConnectedNo == 0) // jeďż˝li pojazd od strony sprzďż˝gu 0 jest odwrďż˝cony + coupler_nr = 1 - coupler_nr; // to zmieniamy kierunek sprzďż˝gu temp = temp->PrevConnected; // ten jest od strony 0 } else - return temp; // jeśli jednak z przodu nic nie ma + return temp; // jeďż˝li jednak z przodu nic nie ma } else { if (temp->NextConnected) { - if (temp->NextConnectedNo == 1) // jeśli pojazd od strony sprzęgu 1 jest odwrócony - coupler_nr = 1 - coupler_nr; // to zmieniamy kierunek sprzęgu + if (temp->NextConnectedNo == 1) // jeďż˝li pojazd od strony sprzďż˝gu 1 jest odwrďż˝cony + coupler_nr = 1 - coupler_nr; // to zmieniamy kierunek sprzďż˝gu temp = temp->NextConnected; // ten pojazd jest od strony 1 } else - return temp; // jeśli jednak z tyłu nic nie ma + return temp; // jeďż˝li jednak z tyďż˝u nic nie ma } } - return NULL; // to tylko po wyczerpaniu pętli + return NULL; // to tylko po wyczerpaniu pďż˝tli }; //--------------------------------------------------------------------------- float TDynamicObject::GetEPP() -{ // szukanie skrajnego połączonego pojazdu w +{ // szukanie skrajnego po��czonego pojazdu w // pociagu // od strony sprzegu (coupler_nr) obiektu (start) TDynamicObject *temp = this; int coupler_nr = 0; float eq = 0, am = 0; - for (int i = 0; i < 300; i++) // ograniczenie do 300 na wypadek zapętlenia składu + for (int i = 0; i < 300; i++) // ograniczenie do 300 na wypadek zapďż˝tlenia skďż˝adu { if (!temp) - break; // Ra: zabezpieczenie przed ewentaulnymi błędami sprzęgów + break; // Ra: zabezpieczenie przed ewentaulnymi b��dami sprzďż˝gďż˝w eq += temp->MoverParameters->PipePress * temp->MoverParameters->Dim.L; am += temp->MoverParameters->Dim.L; if ((temp->MoverParameters->Couplers[coupler_nr].CouplingFlag & 2) != 2) - break; // nic nie ma już dalej podłączone + break; // nic nie ma juďż˝ dalej pod��czone if (coupler_nr == 0) - { // jeżeli szukamy od sprzęgu 0 - if (temp->PrevConnected) // jeśli mamy coś z przodu + { // jeďż˝eli szukamy od sprzďż˝gu 0 + if (temp->PrevConnected) // jeďż˝li mamy coďż˝ z przodu { - if (temp->PrevConnectedNo == 0) // jeśli pojazd od strony sprzęgu 0 jest odwrócony - coupler_nr = 1 - coupler_nr; // to zmieniamy kierunek sprzęgu + if (temp->PrevConnectedNo == 0) // jeďż˝li pojazd od strony sprzďż˝gu 0 jest odwrďż˝cony + coupler_nr = 1 - coupler_nr; // to zmieniamy kierunek sprzďż˝gu temp = temp->PrevConnected; // ten jest od strony 0 } else - break; // jeśli jednak z przodu nic nie ma + break; // jeďż˝li jednak z przodu nic nie ma } else { if (temp->NextConnected) { - if (temp->NextConnectedNo == 1) // jeśli pojazd od strony sprzęgu 1 jest odwrócony - coupler_nr = 1 - coupler_nr; // to zmieniamy kierunek sprzęgu + if (temp->NextConnectedNo == 1) // jeďż˝li pojazd od strony sprzďż˝gu 1 jest odwrďż˝cony + coupler_nr = 1 - coupler_nr; // to zmieniamy kierunek sprzďż˝gu temp = temp->NextConnected; // ten pojazd jest od strony 1 } else - break; // jeśli jednak z tyłu nic nie ma + break; // jeďż˝li jednak z tyďż˝u nic nie ma } } temp = this; coupler_nr = 1; - for (int i = 0; i < 300; i++) // ograniczenie do 300 na wypadek zapętlenia składu + for (int i = 0; i < 300; i++) // ograniczenie do 300 na wypadek zapďż˝tlenia skďż˝adu { if (!temp) - break; // Ra: zabezpieczenie przed ewentaulnymi błędami sprzęgów + break; // Ra: zabezpieczenie przed ewentaulnymi b��dami sprzďż˝gďż˝w eq += temp->MoverParameters->PipePress * temp->MoverParameters->Dim.L; am += temp->MoverParameters->Dim.L; if ((temp->MoverParameters->Couplers[coupler_nr].CouplingFlag & 2) != 2) - break; // nic nie ma już dalej podłączone + break; // nic nie ma juďż˝ dalej pod��czone if (coupler_nr == 0) - { // jeżeli szukamy od sprzęgu 0 - if (temp->PrevConnected) // jeśli mamy coś z przodu + { // jeďż˝eli szukamy od sprzďż˝gu 0 + if (temp->PrevConnected) // jeďż˝li mamy coďż˝ z przodu { - if (temp->PrevConnectedNo == 0) // jeśli pojazd od strony sprzęgu 0 jest odwrócony - coupler_nr = 1 - coupler_nr; // to zmieniamy kierunek sprzęgu + if (temp->PrevConnectedNo == 0) // jeďż˝li pojazd od strony sprzďż˝gu 0 jest odwrďż˝cony + coupler_nr = 1 - coupler_nr; // to zmieniamy kierunek sprzďż˝gu temp = temp->PrevConnected; // ten jest od strony 0 } else - break; // jeśli jednak z przodu nic nie ma + break; // jeďż˝li jednak z przodu nic nie ma } else { if (temp->NextConnected) { - if (temp->NextConnectedNo == 1) // jeśli pojazd od strony sprzęgu 1 jest odwrócony - coupler_nr = 1 - coupler_nr; // to zmieniamy kierunek sprzęgu + if (temp->NextConnectedNo == 1) // jeďż˝li pojazd od strony sprzďż˝gu 1 jest odwrďż˝cony + coupler_nr = 1 - coupler_nr; // to zmieniamy kierunek sprzďż˝gu temp = temp->NextConnected; // ten pojazd jest od strony 1 } else - break; // jeśli jednak z tyłu nic nie ma + break; // jeďż˝li jednak z tyďż˝u nic nie ma } } eq -= MoverParameters->PipePress * MoverParameters->Dim.L; @@ -254,43 +254,43 @@ float TDynamicObject::GetEPP() //--------------------------------------------------------------------------- TDynamicObject * TDynamicObject::GetFirstDynamic(int cpl_type, int cf) -{ // Szukanie skrajnego połączonego pojazdu w pociagu +{ // Szukanie skrajnego po��czonego pojazdu w pociagu // od strony sprzegu (cpl_type) obiektu szukajacego // Ra: wystarczy jedna funkcja do szukania w obu kierunkach - return FirstFind(cpl_type, cf); // używa referencji + return FirstFind(cpl_type, cf); // uďż˝ywa referencji }; /* TDynamicObject* TDynamicObject::GetFirstCabDynamic(int cpl_type) -{//ZiomalCl: szukanie skrajnego obiektu z kabiną +{//ZiomalCl: szukanie skrajnego obiektu z kabinďż˝ TDynamicObject* temp=this; int coupler_nr=cpl_type; - for (int i=0;i<300;i++) //ograniczenie do 300 na wypadek zapętlenia składu + for (int i=0;i<300;i++) //ograniczenie do 300 na wypadek zapďż˝tlenia skďż˝adu { if (!temp) - return NULL; //Ra: zabezpieczenie przed ewentaulnymi błędami sprzęgów + return NULL; //Ra: zabezpieczenie przed ewentaulnymi b��dami sprzďż˝gďż˝w if (temp->MoverParameters->CabNo!=0&&temp->MoverParameters->SandCapacity!=0) - return temp; //nic nie ma już dalej podłączone + return temp; //nic nie ma juďż˝ dalej pod��czone if (temp->MoverParameters->Couplers[coupler_nr].CouplingFlag==0) return NULL; if (coupler_nr==0) - {//jeżeli szukamy od sprzęgu 0 - if (temp->PrevConnectedNo==0) //jeśli pojazd od strony sprzęgu 0 jest -odwrócony - coupler_nr=1-coupler_nr; //to zmieniamy kierunek sprzęgu + {//jeďż˝eli szukamy od sprzďż˝gu 0 + if (temp->PrevConnectedNo==0) //jeďż˝li pojazd od strony sprzďż˝gu 0 jest +odwrďż˝cony + coupler_nr=1-coupler_nr; //to zmieniamy kierunek sprzďż˝gu if (temp->PrevConnected) temp=temp->PrevConnected; //ten jest od strony 0 } else { - if (temp->NextConnectedNo==1) //jeśli pojazd od strony sprzęgu 1 jest -odwrócony - coupler_nr=1-coupler_nr; //to zmieniamy kierunek sprzęgu + if (temp->NextConnectedNo==1) //jeďż˝li pojazd od strony sprzďż˝gu 1 jest +odwrďż˝cony + coupler_nr=1-coupler_nr; //to zmieniamy kierunek sprzďż˝gu if (temp->NextConnected) temp=temp->NextConnected; //ten pojazd jest od strony 1 } } - return NULL; //to tylko po wyczerpaniu pętli + return NULL; //to tylko po wyczerpaniu pďż˝tli }; */ @@ -301,7 +301,7 @@ void TDynamicObject::ABuSetModelShake(vector3 mShake) int TDynamicObject::GetPneumatic(bool front, bool red) { - int x, y, z; // 1=prosty, 2=skośny + int x, y, z; // 1=prosty, 2=skoďż˝ny if (red) { if (front) @@ -325,13 +325,13 @@ int TDynamicObject::GetPneumatic(bool front, bool red) x = btPneumatic2.GetStatus(); y = btPneumatic2r.GetStatus(); } - z = 0; // brak węży? + z = 0; // brak w��y? if ((x == 1) && (y == 1)) z = 3; // dwa proste if ((x == 2) && (y == 0)) - z = 1; // lewy skośny, brak prawego + z = 1; // lewy skoďż˝ny, brak prawego if ((x == 0) && (y == 2)) - z = 2; // brak lewego, prawy skośny + z = 2; // brak lewego, prawy skoďż˝ny return z; } @@ -343,20 +343,20 @@ void TDynamicObject::SetPneumatic(bool front, bool red) tamten = 0; ten = GetPneumatic(front, red); // 1=lewy skos,2=prawy skos,3=dwa proste if (front) - if (PrevConnected) // pojazd od strony sprzęgu 0 + if (PrevConnected) // pojazd od strony sprzďż˝gu 0 tamten = PrevConnected->GetPneumatic((PrevConnectedNo == 0 ? true : false), red); if (!front) - if (NextConnected) // pojazd od strony sprzęgu 1 + if (NextConnected) // pojazd od strony sprzďż˝gu 1 tamten = NextConnected->GetPneumatic((NextConnectedNo == 0 ? true : false), red); - if (ten == tamten) // jeśli układ jest symetryczny + if (ten == tamten) // jeďż˝li ukďż˝ad jest symetryczny switch (ten) { case 1: x = 2; - break; // mamy lewy skos, dać lewe skosy + break; // mamy lewy skos, daďż˝ lewe skosy case 2: x = 3; - break; // mamy prawy skos, dać prawe skosy + break; // mamy prawy skos, daďż˝ prawe skosy case 3: // wszystkie cztery na prosto if (MoverParameters->Couplers[front ? 0 : 1].Render) x = 1; @@ -382,14 +382,14 @@ void TDynamicObject::SetPneumatic(bool front, bool red) cp1 = x; else sp1 = x; - } // który pokazywać z przodu + } // ktďż˝ry pokazywaďż˝ z przodu else { if (red) cp2 = x; else sp2 = x; - } // który pokazywać z tyłu + } // ktďż˝ry pokazywaďż˝ z tyďż˝u } void TDynamicObject::UpdateAxle(TAnim *pAnim) @@ -398,7 +398,7 @@ void TDynamicObject::UpdateAxle(TAnim *pAnim) }; void TDynamicObject::UpdateBoogie(TAnim *pAnim) -{ // animacja wózka +{ // animacja wďż˝zka pAnim->smAnimated->SetRotate(float3(1, 0, 0), *pAnim->dWheelAngle); }; @@ -406,9 +406,9 @@ void TDynamicObject::UpdateDoorTranslate(TAnim *pAnim) { // animacja drzwi - przesuw // WriteLog("Dla drzwi nr:", i); // WriteLog("Wspolczynnik", DoorSpeedFactor[i]); - // Ra: te współczynniki są bez sensu, bo modyfikują wektor przesunięcia - // w efekcie drzwi otwierane na zewnątrz będą odlatywac dowolnie daleko :) - // ograniczyłem zakres ruchu funkcją max + // Ra: te wsp��czynniki sďż˝ bez sensu, bo modyfikujďż˝ wektor przesuniďż˝cia + // w efekcie drzwi otwierane na zewnďż˝trz bďż˝dďż˝ odlatywac dowolnie daleko :) + // ograniczyďż˝em zakres ruchu funkcjďż˝ max if (pAnim->smAnimated) { if (pAnim->iNumber & 1) @@ -421,10 +421,10 @@ void TDynamicObject::UpdateDoorTranslate(TAnim *pAnim) }; void TDynamicObject::UpdateDoorRotate(TAnim *pAnim) -{ // animacja drzwi - obrót +{ // animacja drzwi - obrďż˝t if (pAnim->smAnimated) { // if (MoverParameters->DoorOpenMethod==2) //obrotowe - // albo dwójłomne (trzeba kombinowac + // albo dwďż˝jďż˝omne (trzeba kombinowac // submodelami i ShiftL=90,R=180) if (pAnim->iNumber & 1) pAnim->smAnimated->SetRotate(float3(1, 0, 0), dDoorMoveR); @@ -434,55 +434,55 @@ void TDynamicObject::UpdateDoorRotate(TAnim *pAnim) }; void TDynamicObject::UpdateDoorFold(TAnim *pAnim) -{ // animacja drzwi - obrót +{ // animacja drzwi - obrďż˝t if (pAnim->smAnimated) { // if (MoverParameters->DoorOpenMethod==2) //obrotowe - // albo dwójłomne (trzeba kombinowac + // albo dwďż˝jďż˝omne (trzeba kombinowac // submodelami i ShiftL=90,R=180) if (pAnim->iNumber & 1) { pAnim->smAnimated->SetRotate(float3(0, 0, 1), dDoorMoveR); - TSubModel *sm = pAnim->smAnimated->ChildGet(); // skrzydło mniejsze + TSubModel *sm = pAnim->smAnimated->ChildGet(); // skrzydďż˝o mniejsze if (sm) { - sm->SetRotate(float3(0, 0, 1), -dDoorMoveR - dDoorMoveR); // skrzydło większe + sm->SetRotate(float3(0, 0, 1), -dDoorMoveR - dDoorMoveR); // skrzydďż˝o wiďż˝ksze sm = sm->ChildGet(); if (sm) - sm->SetRotate(float3(0, 1, 0), dDoorMoveR); // podnóżek? + sm->SetRotate(float3(0, 1, 0), dDoorMoveR); // podn��ek? } } else { pAnim->smAnimated->SetRotate(float3(0, 0, 1), dDoorMoveL); // SubModel->SetRotate(float3(0,1,0),fValue*360.0); - TSubModel *sm = pAnim->smAnimated->ChildGet(); // skrzydło mniejsze + TSubModel *sm = pAnim->smAnimated->ChildGet(); // skrzydďż˝o mniejsze if (sm) { - sm->SetRotate(float3(0, 0, 1), -dDoorMoveL - dDoorMoveL); // skrzydło większe + sm->SetRotate(float3(0, 0, 1), -dDoorMoveL - dDoorMoveL); // skrzydďż˝o wiďż˝ksze sm = sm->ChildGet(); if (sm) - sm->SetRotate(float3(0, 1, 0), dDoorMoveL); // podnóżek? + sm->SetRotate(float3(0, 1, 0), dDoorMoveL); // podn��ek? } } } }; void TDynamicObject::UpdatePant(TAnim *pAnim) -{ // animacja pantografu - 4 obracane ramiona, ślizg piąty +{ // animacja pantografu - 4 obracane ramiona, ďż˝lizg piďż˝ty float a, b, c; a = RadToDeg(pAnim->fParamPants->fAngleL - pAnim->fParamPants->fAngleL0); b = RadToDeg(pAnim->fParamPants->fAngleU - pAnim->fParamPants->fAngleU0); c = a + b; if (pAnim->smElement[0]) - pAnim->smElement[0]->SetRotate(float3(-1, 0, 0), a); // dolne ramię + pAnim->smElement[0]->SetRotate(float3(-1, 0, 0), a); // dolne ramiďż˝ if (pAnim->smElement[1]) pAnim->smElement[1]->SetRotate(float3(1, 0, 0), a); if (pAnim->smElement[2]) - pAnim->smElement[2]->SetRotate(float3(1, 0, 0), c); // górne ramię + pAnim->smElement[2]->SetRotate(float3(1, 0, 0), c); // gďż˝rne ramiďż˝ if (pAnim->smElement[3]) pAnim->smElement[3]->SetRotate(float3(-1, 0, 0), c); if (pAnim->smElement[4]) - pAnim->smElement[4]->SetRotate(float3(-1, 0, 0), b); //ślizg + pAnim->smElement[4]->SetRotate(float3(-1, 0, 0), b); //ďż˝lizg }; void TDynamicObject::UpdateDoorPlug(TAnim *pAnim) @@ -503,22 +503,22 @@ void TDynamicObject::UpdateDoorPlug(TAnim *pAnim) }; void TDynamicObject::UpdateLeverDouble(TAnim *pAnim) -{ // animacja gałki zależna od double +{ // animacja gaďż˝ki zaleďż˝na od double pAnim->smAnimated->SetRotate(float3(1, 0, 0), pAnim->fSpeed * *pAnim->fDoubleBase); }; void TDynamicObject::UpdateLeverFloat(TAnim *pAnim) -{ // animacja gałki zależna od float +{ // animacja gaďż˝ki zaleďż˝na od float pAnim->smAnimated->SetRotate(float3(1, 0, 0), pAnim->fSpeed * *pAnim->fFloatBase); }; void TDynamicObject::UpdateLeverInt(TAnim *pAnim) -{ // animacja gałki zależna od int +{ // animacja gaďż˝ki zaleďż˝na od int pAnim->smAnimated->SetRotate(float3(1, 0, 0), pAnim->fSpeed * *pAnim->iIntBase); }; void TDynamicObject::UpdateLeverEnum(TAnim *pAnim) -{ // ustawienie kąta na - // wartość wskazaną przez +{ // ustawienie kďż˝ta na + // warto�� wskazanďż˝ przez // int z tablicy fParam - // pAnim->fParam[0]; - dodać lepkość + // pAnim->fParam[0]; - dodaďż˝ lepko�� pAnim->smAnimated->SetRotate(float3(1, 0, 0), pAnim->fParam[*pAnim->iIntBase]); }; @@ -530,23 +530,23 @@ void __inline TDynamicObject::ABuLittleUpdate(double ObjSqrDist) // obiektach, // ktorych i tak nie widac // NBMX wrzesien, MC listopad: zuniwersalnione - btnOn = false; // czy przywrócić stan domyślny po renderowaniu + btnOn = false; // czy przywrďż˝ciďż˝ stan domyďż˝lny po renderowaniu - if (mdLoad) // tymczasowo ładunek na poziom podłogi + if (mdLoad) // tymczasowo ďż˝adunek na poziom podďż˝ogi if (vFloor.z > 0.0) mdLoad->GetSMRoot()->SetTranslate(modelShake + vFloor); - if (ObjSqrDist < 160000) // gdy bliżej niż 400m + if (ObjSqrDist < 160000) // gdy bliďż˝ej niďż˝ 400m { for (int i = 0; i < iAnimations; ++i) // wykonanie kolejnych animacji if (ObjSqrDist < pAnimations[i].fMaxDist) - if (pAnimations[i].yUpdate) // jeśli zdefiniowana funkcja + if (pAnimations[i].yUpdate) // jeďż˝li zdefiniowana funkcja pAnimations[i].yUpdate(pAnimations + - i); // aktualizacja animacji (położenia submodeli - if (ObjSqrDist < 2500) // gdy bliżej niż 50m + i); // aktualizacja animacji (poďż˝oďż˝enia submodeli + if (ObjSqrDist < 2500) // gdy bliďż˝ej niďż˝ 50m { // ABu290105: rzucanie pudlem - // te animacje wymagają bananów w modelach! + // te animacje wymagajďż˝ bananďż˝w w modelach! mdModel->GetSMRoot()->SetTranslate(modelShake); if (mdKabina) mdKabina->GetSMRoot()->SetTranslate(modelShake); @@ -871,7 +871,7 @@ void __inline TDynamicObject::ABuLittleUpdate(double ObjSqrDist) if (Mechanik) { // rysowanie figurki mechanika /* - if (smMechanik0) // mechanik od strony sprzęgu 0 + if (smMechanik0) // mechanik od strony sprzďż˝gu 0 if (smMechanik1) // jak jest drugi, to pierwszego jedynie pokazujemy smMechanik0->iVisible = MoverParameters->ActiveCab > 0; else @@ -879,9 +879,9 @@ void __inline TDynamicObject::ABuLittleUpdate(double ObjSqrDist) smMechanik0->iVisible = (MoverParameters->ActiveCab != 0); smMechanik0->SetRotate( float3(0, 0, 1), - MoverParameters->ActiveCab >= 0 ? 0 : 180); // obrót względem osi Z + MoverParameters->ActiveCab >= 0 ? 0 : 180); // obrďż˝t wzglďż˝dem osi Z } - if (smMechanik1) // mechanik od strony sprzęgu 1 + if (smMechanik1) // mechanik od strony sprzďż˝gu 1 smMechanik1->iVisible = MoverParameters->ActiveCab < 0; */ if (MoverParameters->ActiveCab > 0) @@ -896,12 +896,12 @@ void __inline TDynamicObject::ABuLittleUpdate(double ObjSqrDist) } } // ABu: Przechyly na zakretach - // Ra: przechyłkę załatwiamy na etapie przesuwania modelu - // if (ObjSqrDist<80000) ABuModelRoll(); //przechyłki od 400m + // Ra: przechyďż˝kďż˝ zaďż˝atwiamy na etapie przesuwania modelu + // if (ObjSqrDist<80000) ABuModelRoll(); //przechyďż˝ki od 400m } if (MoverParameters->Battery) - { // sygnały czoła pociagu //Ra: wyświetlamy bez - // ograniczeń odległości, by były widoczne z + { // sygnaďż˝y czoďż˝a pociagu //Ra: wyďż˝wietlamy bez + // ograniczeďż˝ odlegďż˝oďż˝ci, by byďż˝y widoczne z // daleka if (TestFlag(iLights[0], 1)) { @@ -946,62 +946,62 @@ void __inline TDynamicObject::ABuLittleUpdate(double ObjSqrDist) double ABuAcos(const vector3 &calc_temp) { // Odpowiednik funkcji Arccos, bo cos // mi tam nie dzialalo. - return atan2(-calc_temp.x, calc_temp.z); // Ra: tak prościej + return atan2(-calc_temp.x, calc_temp.z); // Ra: tak proďż˝ciej } TDynamicObject * TDynamicObject::ABuFindNearestObject(TTrack *Track, TDynamicObject *MyPointer, int &CouplNr) { // zwraca wskaznik do obiektu znajdujacego sie na torze - // (Track), którego sprzęg jest najblizszy + // (Track), ktďż˝rego sprzďż˝g jest najblizszy // kamerze - // służy np. do łączenia i rozpinania sprzęgów + // sďż˝uďż˝y np. do ��czenia i rozpinania sprzďż˝gďż˝w // WE: Track - tor, na ktorym odbywa sie poszukiwanie // MyPointer - wskaznik do obiektu szukajacego - // WY: CouplNr - który sprzęg znalezionego obiektu jest bliższy kamerze + // WY: CouplNr - ktďż˝ry sprzďż˝g znalezionego obiektu jest bliďż˝szy kamerze // Uwaga! Jesli CouplNr==-2 to szukamy njblizszego obiektu, a nie sprzegu!!! if ((Track->iNumDynamics) > 0) - { // o ile w ogóle jest co przeglądać na tym torze + { // o ile w ogďż˝le jest co przeglďż˝daďż˝ na tym torze // vector3 poz; //pozycja pojazdu XYZ w scenerii - // vector3 kon; //wektor czoła względem środka pojazdu wzglęem początku toru - vector3 tmp; // wektor pomiędzy kamerą i sprzęgiem - double dist; // odległość + // vector3 kon; //wektor czoďż˝a wzglďż˝dem ďż˝rodka pojazdu wzglďż˝em poczďż˝tku toru + vector3 tmp; // wektor pomiďż˝dzy kamerďż˝ i sprzďż˝giem + double dist; // odlegďż˝o�� for (int i = 0; i < Track->iNumDynamics; i++) { if (CouplNr == -2) { // wektor [kamera-obiekt] - poszukiwanie obiektu tmp = Global::GetCameraPosition() - Track->Dynamics[i]->vPosition; - dist = tmp.x * tmp.x + tmp.y * tmp.y + tmp.z * tmp.z; // odległość do kwadratu - if (dist < 100.0) // 10 metrów + dist = tmp.x * tmp.x + tmp.y * tmp.y + tmp.z * tmp.z; // odlegďż˝o�� do kwadratu + if (dist < 100.0) // 10 metrďż˝w return Track->Dynamics[i]; } - else // jeśli (CouplNr) inne niz -2, szukamy sprzęgu + else // jeďż˝li (CouplNr) inne niz -2, szukamy sprzďż˝gu { // wektor [kamera-sprzeg0], potem [kamera-sprzeg1] // Powinno byc wyliczone, ale nie zaszkodzi drugi raz: - //(bo co, jesli nie wykonuje sie obrotow wozkow?) - Ra: ale zawsze są + //(bo co, jesli nie wykonuje sie obrotow wozkow?) - Ra: ale zawsze sďż˝ // liczone - // współrzędne sprzęgów + // wsp��rzďż˝dne sprzďż˝gďż˝w // Track->Dynamics[i]->modelRot.z=ABuAcos(Track->Dynamics[i]->Axle0.pPosition-Track->Dynamics[i]->Axle1.pPosition); - // poz=Track->Dynamics[i]->vPosition; //pozycja środka pojazdu - // kon=vector3( //położenie przodu względem środka + // poz=Track->Dynamics[i]->vPosition; //pozycja ďż˝rodka pojazdu + // kon=vector3( //poďż˝oďż˝enie przodu wzglďż˝dem ďż˝rodka // -((0.5*Track->Dynamics[i]->MoverParameters->Dim.L)*sin(Track->Dynamics[i]->modelRot.z)), - // 0, //yyy... jeśli duże pochylenie i długi pojazd, to może być problem + // 0, //yyy... jeďż˝li duďż˝e pochylenie i dďż˝ugi pojazd, to moďż˝e byďż˝ problem // +((0.5*Track->Dynamics[i]->MoverParameters->Dim.L)*cos(Track->Dynamics[i]->modelRot.z)) //); tmp = Global::GetCameraPosition() - - Track->Dynamics[i]->vCoulpler[0]; // Ra: pozycje sprzęgów też są zawsze liczone - dist = tmp.x * tmp.x + tmp.y * tmp.y + tmp.z * tmp.z; // odległość do kwadratu - if (dist < 25.0) // 5 metrów + Track->Dynamics[i]->vCoulpler[0]; // Ra: pozycje sprzďż˝gďż˝w teďż˝ sďż˝ zawsze liczone + dist = tmp.x * tmp.x + tmp.y * tmp.y + tmp.z * tmp.z; // odlegďż˝o�� do kwadratu + if (dist < 25.0) // 5 metrďż˝w { CouplNr = 0; return Track->Dynamics[i]; } tmp = Global::GetCameraPosition() - Track->Dynamics[i]->vCoulpler[1]; - dist = tmp.x * tmp.x + tmp.y * tmp.y + tmp.z * tmp.z; // odległość do kwadratu - if (dist < 25.0) // 5 metrów + dist = tmp.x * tmp.x + tmp.y * tmp.y + tmp.z * tmp.z; // odlegďż˝o�� do kwadratu + if (dist < 25.0) // 5 metrďż˝w { CouplNr = 1; return Track->Dynamics[i]; @@ -1017,21 +1017,21 @@ TDynamicObject * TDynamicObject::ABuScanNearestObject(TTrack *Track, double Scan double ScanDist, int &CouplNr) { // skanowanie toru w poszukiwaniu obiektu najblizszego // kamerze - // double MyScanDir=ScanDir; //Moja orientacja na torze. //Ra: nie używane + // double MyScanDir=ScanDir; //Moja orientacja na torze. //Ra: nie uďż˝ywane if (ABuGetDirection() < 0) ScanDir = -ScanDir; TDynamicObject *FoundedObj; FoundedObj = - ABuFindNearestObject(Track, this, CouplNr); // zwraca numer sprzęgu znalezionego pojazdu + ABuFindNearestObject(Track, this, CouplNr); // zwraca numer sprzďż˝gu znalezionego pojazdu if (FoundedObj == NULL) { double ActDist; // Przeskanowana odleglosc. double CurrDist = 0; // Aktualna dlugosc toru. if (ScanDir >= 0) ActDist = - Track->Length() - RaTranslationGet(); //???-przesunięcie wózka względem Point1 toru + Track->Length() - RaTranslationGet(); //???-przesuniďż˝cie wďż˝zka wzglďż˝dem Point1 toru else - ActDist = RaTranslationGet(); // przesunięcie wózka względem Point1 toru + ActDist = RaTranslationGet(); // przesuniďż˝cie wďż˝zka wzglďż˝dem Point1 toru while (ActDist < ScanDist) { ActDist += CurrDist; @@ -1045,7 +1045,7 @@ TDynamicObject * TDynamicObject::ABuScanNearestObject(TTrack *Track, double Scan else Track = Track->CurrentNext(); } - else // do tyłu + else // do tyďż˝u { if (Track->iPrevDirection) Track = Track->CurrentPrev(); @@ -1071,24 +1071,24 @@ TDynamicObject * TDynamicObject::ABuScanNearestObject(TTrack *Track, double Scan // ABu 01.11.04 poczatek wyliczania przechylow pudla ********************** void TDynamicObject::ABuModelRoll() -{ // ustawienie przechyłki pojazdu i jego - // zawartości - // Ra: przechyłkę załatwiamy na etapie przesuwania modelu +{ // ustawienie przechyďż˝ki pojazdu i jego + // zawartoďż˝ci + // Ra: przechyďż˝kďż˝ zaďż˝atwiamy na etapie przesuwania modelu } // ABu 06.05.04 poczatek wyliczania obrotow wozkow ********************** void TDynamicObject::ABuBogies() { // Obracanie wozkow na zakretach. Na razie - // uwzględnia tylko zakręty, + // uwzglďż˝dnia tylko zakrďż˝ty, // bez zadnych gorek i innych przeszkod. if ((smBogie[0] != NULL) && (smBogie[1] != NULL)) { - // modelRot.z=ABuAcos(Axle0.pPosition-Axle1.pPosition); //kąt obrotu pojazdu + // modelRot.z=ABuAcos(Axle0.pPosition-Axle1.pPosition); //kďż˝t obrotu pojazdu // [rad] // bogieRot[0].z=ABuAcos(Axle0.pPosition-Axle3.pPosition); bogieRot[0].z = Axle0.vAngles.z; - bogieRot[0] = RadToDeg(modelRot - bogieRot[0]); // mnożenie wektora przez stałą + bogieRot[0] = RadToDeg(modelRot - bogieRot[0]); // mnoďż˝enie wektora przez sta�� smBogie[0]->SetRotateXYZ(bogieRot[0]); // bogieRot[1].z=ABuAcos(Axle2.pPosition-Axle1.pPosition); bogieRot[1].z = Axle1.vAngles.z; @@ -1112,19 +1112,19 @@ void TDynamicObject::ABuCheckMyTrack() OldTrack->RemoveDynamicObject(this); NewTrack->AddDynamicObject(this); } - iAxleFirst = 0; // pojazd powiązany z przednią osią - Axle0 + iAxleFirst = 0; // pojazd powiďż˝zany z przedniďż˝ osiďż˝ - Axle0 } -// Ra: w poniższej funkcji jest problem ze sprzęgami +// Ra: w poniďż˝szej funkcji jest problem ze sprzďż˝gami TDynamicObject * TDynamicObject::ABuFindObject(TTrack *Track, int ScanDir, BYTE &CouplFound, double &dist) -{ // Zwraca wskaźnik najbliższego obiektu znajdującego się - // na torze w określonym kierunku, ale tylko wtedy, kiedy - // obiekty mogą się zderzyć, tzn. nie mijają się. +{ // Zwraca wskaďż˝nik najbliďż˝szego obiektu znajdujďż˝cego siďż˝ + // na torze w okreďż˝lonym kierunku, ale tylko wtedy, kiedy + // obiekty mogďż˝ siďż˝ zderzyďż˝, tzn. nie mijajďż˝ siďż˝. // WE: Track - tor, na ktorym odbywa sie poszukiwanie, - // MyPointer - wskaznik do obiektu szukajacego. //Ra: zamieniłem na "this" - // ScanDir - kierunek szukania na torze (+1:w stronę Point2, -1:w stronę + // MyPointer - wskaznik do obiektu szukajacego. //Ra: zamieniďż˝em na "this" + // ScanDir - kierunek szukania na torze (+1:w stronďż˝ Point2, -1:w stronďż˝ // Point1) // MyScanDir - kierunek szukania obiektu szukajacego (na jego torze); Ra: // nie potrzebne @@ -1133,67 +1133,67 @@ TDynamicObject * TDynamicObject::ABuFindObject(TTrack *Track, int ScanDir, // WY: wskaznik do znalezionego obiektu. // CouplFound - nr sprzegu znalezionego obiektu if (Track->iNumDynamics > 0) - { // sens szukania na tym torze jest tylko, gdy są na nim pojazdy + { // sens szukania na tym torze jest tylko, gdy sďż˝ na nim pojazdy double ObjTranslation; // pozycja najblizszego obiektu na torze - double MyTranslation; // pozycja szukającego na torze - double MinDist = Track->Length(); // najmniejsza znaleziona odleglość - // (zaczynamy od długości toru) - double TestDist; // robocza odległość od kolejnych pojazdów na danym odcinku + double MyTranslation; // pozycja szukajďż˝cego na torze + double MinDist = Track->Length(); // najmniejsza znaleziona odleglo�� + // (zaczynamy od dďż˝ugoďż˝ci toru) + double TestDist; // robocza odlegďż˝o�� od kolejnych pojazdďż˝w na danym odcinku int iMinDist = -1; // indeks wykrytego obiektu // if (Track->iNumDynamics>1) - // iMinDist+=0; //tymczasowo pułapka + // iMinDist+=0; //tymczasowo puďż˝apka if (MyTrack == Track) // gdy szukanie na tym samym torze - MyTranslation = RaTranslationGet(); // położenie wózka względem Point1 toru + MyTranslation = RaTranslationGet(); // poďż˝oďż˝enie wďż˝zka wzglďż˝dem Point1 toru else // gdy szukanie na innym torze if (ScanDir > 0) - MyTranslation = 0; // szukanie w kierunku Point2 (od zera) - jesteśmy w Point1 + MyTranslation = 0; // szukanie w kierunku Point2 (od zera) - jesteďż˝my w Point1 else - MyTranslation = MinDist; // szukanie w kierunku Point1 (do zera) - jesteśmy w Point2 + MyTranslation = MinDist; // szukanie w kierunku Point1 (do zera) - jesteďż˝my w Point2 if (ScanDir >= 0) - { // jeśli szukanie w kierunku Point2 + { // jeďż˝li szukanie w kierunku Point2 for (int i = 0; i < Track->iNumDynamics; i++) - { // pętla po pojazdach - if (Track->Dynamics[i] != this) // szukający się nie liczy + { // pďż˝tla po pojazdach + if (Track->Dynamics[i] != this) // szukajďż˝cy siďż˝ nie liczy { TestDist = (Track->Dynamics[i]->RaTranslationGet()) - - MyTranslation; // odległogłość tamtego od szukającego + MyTranslation; // odlegďż˝ogďż˝o�� tamtego od szukajďż˝cego if ((TestDist > 0) && (TestDist <= MinDist)) - { // gdy jest po właściwej stronie i bliżej - // niż jakiś wcześniejszy + { // gdy jest po wďż˝aďż˝ciwej stronie i bliďż˝ej + // niďż˝ jakiďż˝ wczeďż˝niejszy CouplFound = (Track->Dynamics[i]->RaDirectionGet() > 0) ? 1 : 0; // to, bo (ScanDir>=0) - if (Track->iCategoryFlag & 254) // trajektoria innego typu niż tor kolejowy - { // dla torów nie ma sensu tego sprawdzać, rzadko co jedzie po + if (Track->iCategoryFlag & 254) // trajektoria innego typu niďż˝ tor kolejowy + { // dla torďż˝w nie ma sensu tego sprawdzaďż˝, rzadko co jedzie po // jednej - // szynie i się mija - // Ra: mijanie samochodów wcale nie jest proste + // szynie i siďż˝ mija + // Ra: mijanie samochodďż˝w wcale nie jest proste // Przesuniecie wzgledne pojazdow. Wyznaczane, zeby sprawdzic, // czy pojazdy faktycznie sie zderzaja (moga byc przesuniete // w/m siebie tak, ze nie zachodza na siebie i wtedy sie mijaja). - double RelOffsetH; // wzajemna odległość poprzeczna - if (CouplFound) // my na tym torze byśmy byli w kierunku Point2 - // dla CouplFound=1 są zwroty zgodne - istotna różnica - // przesunięć + double RelOffsetH; // wzajemna odlegďż˝o�� poprzeczna + if (CouplFound) // my na tym torze byďż˝my byli w kierunku Point2 + // dla CouplFound=1 sďż˝ zwroty zgodne - istotna r��nica + // przesuni�� RelOffsetH = (MoverParameters->OffsetTrackH - Track->Dynamics[i]->MoverParameters->OffsetTrackH); else - // dla CouplFound=0 są zwroty przeciwne - przesunięcia sumują - // się + // dla CouplFound=0 sďż˝ zwroty przeciwne - przesuniďż˝cia sumujďż˝ + // siďż˝ RelOffsetH = (MoverParameters->OffsetTrackH + Track->Dynamics[i]->MoverParameters->OffsetTrackH); if (RelOffsetH < 0) RelOffsetH = -RelOffsetH; if (RelOffsetH + RelOffsetH > MoverParameters->Dim.W + Track->Dynamics[i]->MoverParameters->Dim.W) - continue; // odległość większa od połowy sumy szerokości - + continue; // odlegďż˝o�� wiďż˝ksza od poďż˝owy sumy szerokoďż˝ci - // kolizji - // nie będzie - // jeśli zahaczenie jest niewielkie, a jest miejsce na poboczu, to - // zjechać na pobocze + // nie bďż˝dzie + // jeďż˝li zahaczenie jest niewielkie, a jest miejsce na poboczu, to + // zjechaďż˝ na pobocze } iMinDist = i; // potencjalna kolizja - MinDist = TestDist; // odleglość pomiędzy aktywnymi osiami pojazdów + MinDist = TestDist; // odleglo�� pomiďż˝dzy aktywnymi osiami pojazdďż˝w } } } @@ -1205,153 +1205,153 @@ TDynamicObject * TDynamicObject::ABuFindObject(TTrack *Track, int ScanDir, if (Track->Dynamics[i] != this) { TestDist = MyTranslation - - (Track->Dynamics[i]->RaTranslationGet()); //???-przesunięcie wózka - // względem Point1 toru + (Track->Dynamics[i]->RaTranslationGet()); //???-przesuniďż˝cie wďż˝zka + // wzglďż˝dem Point1 toru if ((TestDist > 0) && (TestDist < MinDist)) { CouplFound = (Track->Dynamics[i]->RaDirectionGet() > 0) ? 0 : 1; // odwrotnie, bo (ScanDir<0) - if (Track->iCategoryFlag & 254) // trajektoria innego typu niż tor kolejowy - { // dla torów nie ma sensu tego sprawdzać, rzadko co jedzie po + if (Track->iCategoryFlag & 254) // trajektoria innego typu niďż˝ tor kolejowy + { // dla torďż˝w nie ma sensu tego sprawdzaďż˝, rzadko co jedzie po // jednej - // szynie i się mija - // Ra: mijanie samochodów wcale nie jest proste - // Przesunięcie względne pojazdów. Wyznaczane, żeby sprawdzić, - // czy pojazdy faktycznie się zderzają (mogą być przesunięte - // w/m siebie tak, że nie zachodzą na siebie i wtedy sie mijają). - double RelOffsetH; // wzajemna odległość poprzeczna - if (CouplFound) // my na tym torze byśmy byli w kierunku Point1 - // dla CouplFound=1 są zwroty zgodne - istotna różnica - // przesunięć + // szynie i siďż˝ mija + // Ra: mijanie samochodďż˝w wcale nie jest proste + // Przesuniďż˝cie wzglďż˝dne pojazdďż˝w. Wyznaczane, ďż˝eby sprawdziďż˝, + // czy pojazdy faktycznie siďż˝ zderzajďż˝ (mogďż˝ byďż˝ przesuniďż˝te + // w/m siebie tak, ďż˝e nie zachodzďż˝ na siebie i wtedy sie mijajďż˝). + double RelOffsetH; // wzajemna odlegďż˝o�� poprzeczna + if (CouplFound) // my na tym torze byďż˝my byli w kierunku Point1 + // dla CouplFound=1 sďż˝ zwroty zgodne - istotna r��nica + // przesuni�� RelOffsetH = (MoverParameters->OffsetTrackH - Track->Dynamics[i]->MoverParameters->OffsetTrackH); else - // dla CouplFound=0 są zwroty przeciwne - przesunięcia sumują - // się + // dla CouplFound=0 sďż˝ zwroty przeciwne - przesuniďż˝cia sumujďż˝ + // siďż˝ RelOffsetH = (MoverParameters->OffsetTrackH + Track->Dynamics[i]->MoverParameters->OffsetTrackH); if (RelOffsetH < 0) RelOffsetH = -RelOffsetH; if (RelOffsetH + RelOffsetH > MoverParameters->Dim.W + Track->Dynamics[i]->MoverParameters->Dim.W) - continue; // odległość większa od połowy sumy szerokości - + continue; // odlegďż˝o�� wiďż˝ksza od poďż˝owy sumy szerokoďż˝ci - // kolizji - // nie będzie + // nie bďż˝dzie } iMinDist = i; // potencjalna kolizja - MinDist = TestDist; // odleglość pomiędzy aktywnymi osiami pojazdów + MinDist = TestDist; // odleglo�� pomiďż˝dzy aktywnymi osiami pojazdďż˝w } } } } - dist += MinDist; // doliczenie odległości przeszkody albo długości odcinka + dist += MinDist; // doliczenie odlegďż˝oďż˝ci przeszkody albo dďż˝ugoďż˝ci odcinka // do przeskanowanej - // odległości + // odlegďż˝oďż˝ci return (iMinDist >= 0) ? Track->Dynamics[iMinDist] : NULL; } - dist += Track->Length(); // doliczenie długości odcinka do przeskanowanej - // odległości - return NULL; // nie ma pojazdów na torze, to jest NULL + dist += Track->Length(); // doliczenie dďż˝ugoďż˝ci odcinka do przeskanowanej + // odlegďż˝oďż˝ci + return NULL; // nie ma pojazdďż˝w na torze, to jest NULL } int TDynamicObject::DettachStatus(int dir) -{ // sprawdzenie odległości sprzęgów +{ // sprawdzenie odlegďż˝oďż˝ci sprzďż˝gďż˝w // rzeczywistych od strony (dir): - // 0=przód,1=tył - // Ra: dziwne, że ta funkcja nie jest używana + // 0=przďż˝d,1=tyďż˝ + // Ra: dziwne, ďż˝e ta funkcja nie jest uďż˝ywana if (!MoverParameters->Couplers[dir].CouplingFlag) - return 0; // jeśli nic nie podłączone, to jest OK - return (MoverParameters->DettachStatus(dir)); // czy jest w odpowiedniej odległości? + return 0; // jeďż˝li nic nie pod��czone, to jest OK + return (MoverParameters->DettachStatus(dir)); // czy jest w odpowiedniej odlegďż˝oďż˝ci? } int TDynamicObject::Dettach(int dir) -{ // rozłączenie sprzęgów rzeczywistych od - // strony (dir): 0=przód,1=tył - // zwraca maskę bitową aktualnych sprzegów (0 jeśli rozłączony) +{ // roz��czenie sprzďż˝gďż˝w rzeczywistych od + // strony (dir): 0=przďż˝d,1=tyďż˝ + // zwraca maskďż˝ bitowďż˝ aktualnych sprzegďż˝w (0 jeďż˝li roz��czony) if (ctOwner) - { // jeśli pojazd ma przypisany obiekt nadzorujący skład, to póki - // są wskaźniki + { // jeďż˝li pojazd ma przypisany obiekt nadzorujďż˝cy skďż˝ad, to pďż˝ki + // sďż˝ wskaďż˝niki TDynamicObject *d = this; while (d) { - d->ctOwner = NULL; // usuwanie właściciela + d->ctOwner = NULL; // usuwanie wďż˝aďż˝ciciela d = d->Prev(); } d = Next(); while (d) { - d->ctOwner = NULL; // usuwanie właściciela - d = d->Next(); // i w drugą stronę + d->ctOwner = NULL; // usuwanie wďż˝aďż˝ciciela + d = d->Next(); // i w drugďż˝ stronďż˝ } } - if (MoverParameters->Couplers[dir].CouplingFlag) // odczepianie, o ile coś podłączone + if (MoverParameters->Couplers[dir].CouplingFlag) // odczepianie, o ile coďż˝ pod��czone MoverParameters->Dettach(dir); return MoverParameters->Couplers[dir] - .CouplingFlag; // sprzęg po rozłączaniu (czego się nie da odpiąć + .CouplingFlag; // sprzďż˝g po roz��czaniu (czego siďż˝ nie da odpi�� } void TDynamicObject::CouplersDettach(double MinDist, int MyScanDir) -{ // funkcja rozłączajaca podłączone sprzęgi, - // jeśli odległość przekracza (MinDist) - // MinDist - dystans minimalny, dla ktorego mozna rozłączać +{ // funkcja roz��czajaca pod��czone sprzďż˝gi, + // jeďż˝li odlegďż˝o�� przekracza (MinDist) + // MinDist - dystans minimalny, dla ktorego mozna roz��czaďż˝ if (MyScanDir > 0) { - if (PrevConnected) // pojazd od strony sprzęgu 0 + if (PrevConnected) // pojazd od strony sprzďż˝gu 0 { if (MoverParameters->Couplers[0].CoupleDist > - MinDist) // sprzęgi wirtualne zawsze przekraczają + MinDist) // sprzďż˝gi wirtualne zawsze przekraczajďż˝ { if ((PrevConnectedNo ? PrevConnected->NextConnected : PrevConnected->PrevConnected) == this) - { // Ra: nie rozłączamy znalezionego, jeżeli nie do nas - // podłączony (może jechać w + { // Ra: nie roz��czamy znalezionego, jeďż˝eli nie do nas + // pod��czony (moďż˝e jechaďż˝ w // innym kierunku) PrevConnected->MoverParameters->Couplers[PrevConnectedNo].Connected = NULL; if (PrevConnectedNo == 0) { - PrevConnected->PrevConnectedNo = 2; // sprzęg 0 nie podłączony + PrevConnected->PrevConnectedNo = 2; // sprzďż˝g 0 nie pod��czony PrevConnected->PrevConnected = NULL; } else if (PrevConnectedNo == 1) { - PrevConnected->NextConnectedNo = 2; // sprzęg 1 nie podłączony + PrevConnected->NextConnectedNo = 2; // sprzďż˝g 1 nie pod��czony PrevConnected->NextConnected = NULL; } } - // za to zawsze odłączamy siebie + // za to zawsze od��czamy siebie PrevConnected = NULL; - PrevConnectedNo = 2; // sprzęg 0 nie podłączony + PrevConnectedNo = 2; // sprzďż˝g 0 nie pod��czony MoverParameters->Couplers[0].Connected = NULL; } } } else { - if (NextConnected) // pojazd od strony sprzęgu 1 + if (NextConnected) // pojazd od strony sprzďż˝gu 1 { if (MoverParameters->Couplers[1].CoupleDist > - MinDist) // sprzęgi wirtualne zawsze przekraczają + MinDist) // sprzďż˝gi wirtualne zawsze przekraczajďż˝ { if ((NextConnectedNo ? NextConnected->NextConnected : NextConnected->PrevConnected) == this) - { // Ra: nie rozłączamy znalezionego, jeżeli nie do nas - // podłączony (może jechać w + { // Ra: nie roz��czamy znalezionego, jeďż˝eli nie do nas + // pod��czony (moďż˝e jechaďż˝ w // innym kierunku) NextConnected->MoverParameters->Couplers[NextConnectedNo].Connected = NULL; if (NextConnectedNo == 0) { - NextConnected->PrevConnectedNo = 2; // sprzęg 0 nie podłączony + NextConnected->PrevConnectedNo = 2; // sprzďż˝g 0 nie pod��czony NextConnected->PrevConnected = NULL; } else if (NextConnectedNo == 1) { - NextConnected->NextConnectedNo = 2; // sprzęg 1 nie podłączony + NextConnected->NextConnectedNo = 2; // sprzďż˝g 1 nie pod��czony NextConnected->NextConnected = NULL; } } NextConnected = NULL; - NextConnectedNo = 2; // sprzęg 1 nie podłączony + NextConnectedNo = 2; // sprzďż˝g 1 nie pod��czony MoverParameters->Couplers[1].Connected = NULL; } } @@ -1359,41 +1359,41 @@ void TDynamicObject::CouplersDettach(double MinDist, int MyScanDir) } void TDynamicObject::ABuScanObjects(int ScanDir, double ScanDist) -{ // skanowanie toru w poszukiwaniu kolidujących pojazdów - // ScanDir - określa kierunek poszukiwania zależnie od zwrotu prędkości +{ // skanowanie toru w poszukiwaniu kolidujďż˝cych pojazdďż˝w + // ScanDir - okreďż˝la kierunek poszukiwania zaleďż˝nie od zwrotu prďż˝dkoďż˝ci // pojazdu // ScanDir=1 - od strony Coupler0, ScanDir=-1 - od strony Coupler1 - int MyScanDir = ScanDir; // zapamiętanie kierunku poszukiwań na torze - // początkowym, względem sprzęgów - TTrackFollower *FirstAxle = (MyScanDir > 0 ? &Axle0 : &Axle1); // można by to trzymać w trainset - TTrack *Track = FirstAxle->GetTrack(); // tor na którym "stoi" skrajny wózek - // (może być inny niż tor pojazdu) - if (FirstAxle->GetDirection() < 0) // czy oś jest ustawiona w stronę Point1? - ScanDir = -ScanDir; // jeśli tak, to kierunek szukania będzie przeciwny - // (teraz względem + int MyScanDir = ScanDir; // zapamiďż˝tanie kierunku poszukiwaďż˝ na torze + // poczďż˝tkowym, wzglďż˝dem sprzďż˝gďż˝w + TTrackFollower *FirstAxle = (MyScanDir > 0 ? &Axle0 : &Axle1); // moďż˝na by to trzymaďż˝ w trainset + TTrack *Track = FirstAxle->GetTrack(); // tor na ktďż˝rym "stoi" skrajny wďż˝zek + // (moďż˝e byďż˝ inny niďż˝ tor pojazdu) + if (FirstAxle->GetDirection() < 0) // czy oďż˝ jest ustawiona w stronďż˝ Point1? + ScanDir = -ScanDir; // jeďż˝li tak, to kierunek szukania bďż˝dzie przeciwny + // (teraz wzglďż˝dem // toru) - BYTE MyCouplFound; // numer sprzęgu do podłączenia w obiekcie szukajacym + BYTE MyCouplFound; // numer sprzďż˝gu do pod��czenia w obiekcie szukajacym MyCouplFound = (MyScanDir < 0) ? 1 : 0; - BYTE CouplFound; // numer sprzęgu w znalezionym obiekcie (znaleziony wypełni) + BYTE CouplFound; // numer sprzďż˝gu w znalezionym obiekcie (znaleziony wypeďż˝ni) TDynamicObject *FoundedObj; // znaleziony obiekt - double ActDist = 0; // przeskanowana odleglość; odległość do zawalidrogi + double ActDist = 0; // przeskanowana odleglo��; odlegďż˝o�� do zawalidrogi FoundedObj = ABuFindObject(Track, ScanDir, CouplFound, - ActDist); // zaczynamy szukać na tym samym torze + ActDist); // zaczynamy szukaďż˝ na tym samym torze /* - if (FoundedObj) //jak coś znajdzie, to śledzimy - {//powtórzenie wyszukiwania tylko do zastawiania pułepek podczas testów - if (ABuGetDirection()<0) ScanDir=ScanDir; //ustalenie kierunku względem toru + if (FoundedObj) //jak coďż˝ znajdzie, to ďż˝ledzimy + {//powtďż˝rzenie wyszukiwania tylko do zastawiania puďż˝epek podczas testďż˝w + if (ABuGetDirection()<0) ScanDir=ScanDir; //ustalenie kierunku wzglďż˝dem toru FoundedObj=ABuFindObject(Track,this,ScanDir,CouplFound); } */ if (DebugModeFlag) - if (FoundedObj) // kod służący do logowania błędów + if (FoundedObj) // kod sďż˝u��cy do logowania b��dďż˝w if (CouplFound == 0) { if (FoundedObj->PrevConnected) - if (FoundedObj->PrevConnected != this) // odświeżenie tego samego się nie liczy + if (FoundedObj->PrevConnected != this) // odďż˝wieďż˝enie tego samego siďż˝ nie liczy WriteLog("0! Coupler warning on " + asName + ":" + to_string(MyCouplFound) + " - " + FoundedObj->asName + ":0 connected to " + FoundedObj->PrevConnected->asName + ":" + @@ -1402,64 +1402,64 @@ void TDynamicObject::ABuScanObjects(int ScanDir, double ScanDist) else { if (FoundedObj->NextConnected) - if (FoundedObj->NextConnected != this) // odświeżenie tego samego się nie liczy + if (FoundedObj->NextConnected != this) // odďż˝wieďż˝enie tego samego siďż˝ nie liczy WriteLog("0! Coupler warning on " + asName + ":" + to_string(MyCouplFound) + " - " + FoundedObj->asName + ":1 connected to " + FoundedObj->NextConnected->asName + ":" + to_string(FoundedObj->NextConnectedNo)); } - if (FoundedObj == NULL) // jeśli nie ma na tym samym, szukamy po okolicy + if (FoundedObj == NULL) // jeďż˝li nie ma na tym samym, szukamy po okolicy { // szukanie najblizszego toru z jakims obiektem // praktycznie przeklejone z TraceRoute()... // double CurrDist=0; //aktualna dlugosc toru - if (ScanDir >= 0) // uwzględniamy kawalek przeanalizowanego wcześniej toru - ActDist = Track->Length() - FirstAxle->GetTranslation(); // odległość osi od Point2 toru + if (ScanDir >= 0) // uwzglďż˝dniamy kawalek przeanalizowanego wczeďż˝niej toru + ActDist = Track->Length() - FirstAxle->GetTranslation(); // odlegďż˝o�� osi od Point2 toru else - ActDist = FirstAxle->GetTranslation(); // odległość osi od Point1 toru + ActDist = FirstAxle->GetTranslation(); // odlegďż˝o�� osi od Point1 toru while (ActDist < ScanDist) { - // ActDist+=CurrDist; //odległość już przeanalizowana + // ActDist+=CurrDist; //odlegďż˝o�� juďż˝ przeanalizowana if (ScanDir > 0) // w kierunku Point2 toru { if (Track ? Track->iNextDirection : - false) // jeśli następny tor jest podpięty od Point2 + false) // jeďż˝li nastďż˝pny tor jest podpiďż˝ty od Point2 ScanDir = -ScanDir; // to zmieniamy kierunek szukania na tym torze - Track = Track->CurrentNext(); // potem dopiero zmieniamy wskaźnik + Track = Track->CurrentNext(); // potem dopiero zmieniamy wskaďż˝nik } else // w kierunku Point1 { if (Track ? !Track->iPrevDirection : - true) // jeśli poprzedni tor nie jest podpięty od Point2 + true) // jeďż˝li poprzedni tor nie jest podpiďż˝ty od Point2 ScanDir = -ScanDir; // to zmieniamy kierunek szukania na tym torze - Track = Track->CurrentPrev(); // potem dopiero zmieniamy wskaźnik + Track = Track->CurrentPrev(); // potem dopiero zmieniamy wskaďż˝nik } if (Track) { // jesli jest kolejny odcinek toru // CurrDist=Track->Length(); //doliczenie tego toru do przejrzanego // dystandu FoundedObj = ABuFindObject(Track, ScanDir, CouplFound, - ActDist); // przejrzenie pojazdów tego toru + ActDist); // przejrzenie pojazdďż˝w tego toru if (FoundedObj) { - // ActDist=ScanDist; //wyjście z pętli poszukiwania + // ActDist=ScanDist; //wyjďż˝cie z pďż˝tli poszukiwania break; } } - else // jeśli toru nie ma, to wychodzimy + else // jeďż˝li toru nie ma, to wychodzimy { - ActDist = ScanDist + 1.0; // koniec przeglądania torów + ActDist = ScanDist + 1.0; // koniec przeglďż˝dania torďż˝w break; } } - } // Koniec szukania najbliższego toru z jakimś obiektem. - // teraz odczepianie i jeśli coś się znalazło, doczepianie. + } // Koniec szukania najbliďż˝szego toru z jakimďż˝ obiektem. + // teraz odczepianie i jeďż˝li coďż˝ siďż˝ znalazďż˝o, doczepianie. if (MyScanDir > 0 ? PrevConnected : NextConnected) if ((MyScanDir > 0 ? PrevConnected : NextConnected) != FoundedObj) - CouplersDettach(1.0, MyScanDir); // odłączamy, jeśli dalej niż metr - // i łączenie sprzęgiem wirtualnym + CouplersDettach(1.0, MyScanDir); // od��czamy, jeďż˝li dalej niďż˝ metr + // i ��czenie sprzďż˝giem wirtualnym if (FoundedObj) - { // siebie można bezpiecznie podłączyć jednostronnie do + { // siebie moďż˝na bezpiecznie pod��czyďż˝ jednostronnie do // znalezionego MoverParameters->Attach(MyCouplFound, CouplFound, FoundedObj->MoverParameters, ctrain_virtual); @@ -1467,20 +1467,20 @@ void TDynamicObject::ABuScanObjects(int ScanDir, double ScanDist) // renderujemy if (MyCouplFound == 0) { - PrevConnected = FoundedObj; // pojazd od strony sprzęgu 0 + PrevConnected = FoundedObj; // pojazd od strony sprzďż˝gu 0 PrevConnectedNo = CouplFound; } else { - NextConnected = FoundedObj; // pojazd od strony sprzęgu 1 + NextConnected = FoundedObj; // pojazd od strony sprzďż˝gu 1 NextConnectedNo = CouplFound; } if (FoundedObj->MoverParameters->Couplers[CouplFound].CouplingFlag == ctrain_virtual) - { // Ra: wpinamy się wirtualnym tylko jeśli znaleziony - // ma wirtualny sprzęg + { // Ra: wpinamy siďż˝ wirtualnym tylko jeďż˝li znaleziony + // ma wirtualny sprzďż˝g FoundedObj->MoverParameters->Attach(CouplFound, MyCouplFound, this->MoverParameters, ctrain_virtual); - if (CouplFound == 0) // jeśli widoczny sprzęg 0 znalezionego + if (CouplFound == 0) // jeďż˝li widoczny sprzďż˝g 0 znalezionego { if (DebugModeFlag) if (FoundedObj->PrevConnected) @@ -1492,7 +1492,7 @@ void TDynamicObject::ABuScanObjects(int ScanDir, double ScanDist) FoundedObj->PrevConnected = this; FoundedObj->PrevConnectedNo = MyCouplFound; } - else // jeśli widoczny sprzęg 1 znalezionego + else // jeďż˝li widoczny sprzďż˝g 1 znalezionego { if (DebugModeFlag) if (FoundedObj->NextConnected) @@ -1505,24 +1505,24 @@ void TDynamicObject::ABuScanObjects(int ScanDir, double ScanDist) FoundedObj->NextConnectedNo = MyCouplFound; } } - // Ra: jeśli dwa samochody się mijają na odcinku przed zawrotką, to - // odległość między nimi - // nie może być liczona w linii prostej! + // Ra: jeďż˝li dwa samochody siďż˝ mijajďż˝ na odcinku przed zawrotkďż˝, to + // odlegďż˝o�� miďż˝dzy nimi + // nie moďż˝e byďż˝ liczona w linii prostej! fTrackBlock = MoverParameters->Couplers[MyCouplFound] - .CoupleDist; // odległość do najbliższego pojazdu w linii prostej - if (Track->iCategoryFlag > 1) // jeśli samochód + .CoupleDist; // odlegďż˝o�� do najbliďż˝szego pojazdu w linii prostej + if (Track->iCategoryFlag > 1) // jeďż˝li samochďż˝d if (ActDist > MoverParameters->Dim.L + FoundedObj->MoverParameters->Dim - .L) // przeskanowana odległość większa od długości pojazdów - // else if (ActDistasName); } - else // nic nie znalezione, to nie ma przeszkód + else // nic nie znalezione, to nie ma przeszkďż˝d fTrackBlock = 10000.0; } //----------ABu: koniec skanowania pojazdow @@ -1544,8 +1544,8 @@ TDynamicObject::TDynamicObject() bDisplayCab = false; // 030303 bBrakeAcc = false; NextConnected = PrevConnected = NULL; - NextConnectedNo = PrevConnectedNo = 2; // ABu: Numery sprzegow. 2=nie podłączony - CouplCounter = 50; // będzie sprawdzać na początku + NextConnectedNo = PrevConnectedNo = 2; // ABu: Numery sprzegow. 2=nie pod��czony + CouplCounter = 50; // bďż˝dzie sprawdzaďż˝ na poczďż˝tku asName = ""; bEnabled = true; MyTrack = NULL; @@ -1554,7 +1554,7 @@ TDynamicObject::TDynamicObject() for (int i = 0; i < MaxAxles; i++) dRailPosition[i] = 0.0; for (int i = 0; i < MaxAxles; i++) - dWheelsPosition[i] = 0.0; // będzie wczytane z MMD + dWheelsPosition[i] = 0.0; // bďż˝dzie wczytane z MMD iAxles = 0; dWheelAngle[0] = 0.0; dWheelAngle[1] = 0.0; @@ -1576,7 +1576,7 @@ TDynamicObject::TDynamicObject() ReplacableSkinID[2] = 0; ReplacableSkinID[3] = 0; ReplacableSkinID[4] = 0; - iAlpha = 0x30300030; // tak gdy tekstury wymienne nie mają przezroczystości + iAlpha = 0x30300030; // tak gdy tekstury wymienne nie majďż˝ przezroczystoďż˝ci // smWiazary[0]=smWiazary[1]=NULL; smWahacze[0] = smWahacze[1] = smWahacze[2] = smWahacze[3] = NULL; fWahaczeAmp = 0; @@ -1597,44 +1597,44 @@ TDynamicObject::TDynamicObject() eng_frq_act = 1; eng_turbo = 0; cp1 = cp2 = sp1 = sp2 = 0; - iDirection = 1; // stoi w kierunku tradycyjnym (0, gdy jest odwrócony) - iAxleFirst = 0; // numer pierwszej osi w kierunku ruchu (przełączenie - // następuje, gdy osie sa na + iDirection = 1; // stoi w kierunku tradycyjnym (0, gdy jest odwrďż˝cony) + iAxleFirst = 0; // numer pierwszej osi w kierunku ruchu (prze��czenie + // nastďż˝puje, gdy osie sa na // tym samym torze) - iInventory = 0; // flagi bitowe posiadanych submodeli (zaktualizuje się po + iInventory = 0; // flagi bitowe posiadanych submodeli (zaktualizuje siďż˝ po // wczytaniu MMD) - RaLightsSet(0, 0); // początkowe zerowanie stanu świateł - // Ra: domyślne ilości animacji dla zgodności wstecz (gdy brak ilości podanych + RaLightsSet(0, 0); // poczďż˝tkowe zerowanie stanu ďż˝wiateďż˝ + // Ra: domyďż˝lne iloďż˝ci animacji dla zgodnoďż˝ci wstecz (gdy brak iloďż˝ci podanych // w MMD) // ustawienie liczby modeli animowanych podczas konstruowania obiektu a nie na 0 - // prowadzi prosto do wysypów jeśli źle zdefiniowane mmd + // prowadzi prosto do wysypďż˝w jeďż˝li ďż˝le zdefiniowane mmd iAnimType[ANIM_WHEELS] = 0; // 0-osie (8) iAnimType[ANIM_DOORS] = 0; // 1-drzwi (8) iAnimType[ANIM_LEVERS] = 0; // 2-wahacze (4) - np. nogi konia iAnimType[ANIM_BUFFERS] = 0; // 3-zderzaki (4) - iAnimType[ANIM_BOOGIES] = 0; // 4-wózki (2) + iAnimType[ANIM_BOOGIES] = 0; // 4-wďż˝zki (2) iAnimType[ANIM_PANTS] = 0; // 5-pantografy (2) - iAnimType[ANIM_STEAMS] = 0; // 6-tłoki (napęd parowozu) - iAnimations = 0; // na razie nie ma żadnego + iAnimType[ANIM_STEAMS] = 0; // 6-tďż˝oki (napďż˝d parowozu) + iAnimations = 0; // na razie nie ma ďż˝adnego pAnimations = NULL; pAnimated = NULL; - fShade = 0.0; // standardowe oświetlenie na starcie - iHornWarning = 1; // numer syreny do użycia po otrzymaniu sygnału do jazdy - asDestination = "none"; // stojący nigdzie nie jedzie + fShade = 0.0; // standardowe oďż˝wietlenie na starcie + iHornWarning = 1; // numer syreny do uďż˝ycia po otrzymaniu sygnaďż˝u do jazdy + asDestination = "none"; // stojďż˝cy nigdzie nie jedzie pValveGear = NULL; // Ra: tymczasowo iCabs = 0; // maski bitowe modeli kabin smBrakeSet = NULL; // nastawa hamulca (wajcha) - smLoadSet = NULL; // nastawa ładunku (wajcha) - smWiper = NULL; // wycieraczka (poniekąd też wajcha) - fScanDist = 300.0; // odległość skanowania, zwiększana w trybie łączenia - ctOwner = NULL; // na początek niczyj - iOverheadMask = 0; // maska przydzielana przez AI pojazdom posiadającym - // pantograf, aby wymuszały - // jazdę bezprądową - tmpTraction.TractionVoltage = 0; // Ra 2F1H: prowizorka, trzeba przechować - // napięcie, żeby nie wywalało WS pod + smLoadSet = NULL; // nastawa ďż˝adunku (wajcha) + smWiper = NULL; // wycieraczka (poniekďż˝d teďż˝ wajcha) + fScanDist = 300.0; // odlegďż˝o�� skanowania, zwiďż˝kszana w trybie ��czenia + ctOwner = NULL; // na poczďż˝tek niczyj + iOverheadMask = 0; // maska przydzielana przez AI pojazdom posiadajďż˝cym + // pantograf, aby wymuszaďż˝y + // jazdďż˝ bezprďż˝dowďż˝ + tmpTraction.TractionVoltage = 0; // Ra 2F1H: prowizorka, trzeba przechowaďż˝ + // napiďż˝cie, ďż˝eby nie wywalaďż˝o WS pod // izolatorem - fAdjustment = 0.0; // korekcja odległości pomiędzy wózkami (np. na łukach) + fAdjustment = 0.0; // korekcja odlegďż˝oďż˝ci pomiďż˝dzy wďż˝zkami (np. na ďż˝ukach) } TDynamicObject::~TDynamicObject() @@ -1642,9 +1642,9 @@ TDynamicObject::~TDynamicObject() // parametrow fizycznych SafeDelete(Mechanik); SafeDelete(MoverParameters); - // Ra: wyłączanie dźwięków powinno być dodane w ich destruktorach, ale się + // Ra: wy��czanie dďż˝wiďż˝kďż˝w powinno byďż˝ dodane w ich destruktorach, ale siďż˝ // sypie - /* to też się sypie + /* to teďż˝ siďż˝ sypie for (int i=0;iiLights; // wskaźnik na stan własnych świateł - // (zmienimy dla rozrządczych EZT) - // McZapkie: TypeName musi byc nazwą CHK/MMD pojazdu + iLights = MoverParameters->iLights; // wskaďż˝nik na stan wďż˝asnych ďż˝wiateďż˝ + // (zmienimy dla rozrzďż˝dczych EZT) + // McZapkie: TypeName musi byc nazwďż˝ CHK/MMD pojazdu if (!MoverParameters->LoadFIZ(asBaseDir)) - { // jak wczytanie CHK się nie uda, to błąd + { // jak wczytanie CHK siďż˝ nie uda, to b��d if (ConversionError == -8) ErrorLog("Missed file: " + BaseDir + "\\" + Type_Name + ".fiz"); Error("Cannot load dynamic object " + asName + " from:\r\n" + BaseDir + "\\" + Type_Name + ".fiz\r\nError " + to_string(ConversionError) + " in line " + to_string(LineCount)); - return 0.0; // zerowa długość to brak pojazdu + return 0.0; // zerowa dďż˝ugo�� to brak pojazdu } - bool driveractive = (fVel != 0.0); // jeśli prędkość niezerowa, to aktywujemy ruch + bool driveractive = (fVel != 0.0); // jeďż˝li prďż˝dko�� niezerowa, to aktywujemy ruch if (!MoverParameters->CheckLocomotiveParameters( driveractive, (fVel > 0 ? 1 : -1) * Cab * @@ -1737,7 +1737,7 @@ TDynamicObject::Init(std::string Name, // nazwa pojazdu, np. "EU07-424" { Error("Parameters mismatch: dynamic object " + asName + " from\n" + BaseDir + "\\" + Type_Name); - return 0.0; // zerowa długość to brak pojazdu + return 0.0; // zerowa dďż˝ugo�� to brak pojazdu } // ustawienie pozycji hamulca MoverParameters->LocalBrakePos = 0; @@ -1758,9 +1758,9 @@ TDynamicObject::Init(std::string Name, // nazwa pojazdu, np. "EU07-424" // przestawieniu przez Pascal // dodatkowe parametry yB - MoreParams += "."; // wykonuje o jedną iterację za mało, więc trzeba mu dodać - // kropkę na koniec - int kropka = MoreParams.find("."); // znajdź kropke + MoreParams += "."; // wykonuje o jednďż˝ iteracjďż˝ za maďż˝o, wiďż˝c trzeba mu dodaďż˝ + // kropkďż˝ na koniec + int kropka = MoreParams.find("."); // znajdďż˝ kropke std::string ActPar; // na parametry while (kropka != std::string::npos) // jesli sa kropki jeszcze { @@ -1871,7 +1871,7 @@ TDynamicObject::Init(std::string Name, // nazwa pojazdu, np. "EU07-424" MoverParameters->DecBrakeMult(); MoverParameters->DecBrakeMult(); } // dwa razy w dol - if (ActPar.find('H') != std::string::npos) // ladowny I (dla P-Ł dalej prozny) + if (ActPar.find('H') != std::string::npos) // ladowny I (dla P-ďż˝ dalej prozny) { MoverParameters->IncBrakeMult(); MoverParameters->IncBrakeMult(); @@ -1893,71 +1893,71 @@ TDynamicObject::Init(std::string Name, // nazwa pojazdu, np. "EU07-424" } // koniec while kropka - if (MoverParameters->CategoryFlag & 2) // jeśli samochód - { // ustawianie samochodow na poboczu albo na środku drogi - if (Track->fTrackWidth < 3.5) // jeśli droga wąska - MoverParameters->OffsetTrackH = 0.0; // to stawiamy na środku, niezależnie od stanu + if (MoverParameters->CategoryFlag & 2) // jeďż˝li samochďż˝d + { // ustawianie samochodow na poboczu albo na ďż˝rodku drogi + if (Track->fTrackWidth < 3.5) // jeďż˝li droga wďż˝ska + MoverParameters->OffsetTrackH = 0.0; // to stawiamy na ďż˝rodku, niezaleďż˝nie od stanu // ruchu - else if (driveractive) // od 3.5m do 8.0m jedzie po środku pasa, dla - // szerszych w odległości + else if (driveractive) // od 3.5m do 8.0m jedzie po ďż˝rodku pasa, dla + // szerszych w odlegďż˝oďż˝ci // 1.5m MoverParameters->OffsetTrackH = Track->fTrackWidth <= 8.0 ? -Track->fTrackWidth * 0.25 : -1.5; - else // jak stoi, to kołem na poboczu i pobieramy szerokość razem z + else // jak stoi, to koďż˝em na poboczu i pobieramy szeroko�� razem z // poboczem, ale nie z // chodnikiem MoverParameters->OffsetTrackH = -0.5 * (Track->WidthTotal() - MoverParameters->Dim.W) + 0.05; - iHornWarning = 0; // nie będzie trąbienia po podaniu zezwolenia na jazdę - if (fDist < 0.0) //-0.5*MoverParameters->Dim.L) //jeśli jest przesunięcie do tyłu - if (!Track->CurrentPrev()) // a nie ma tam odcinka i trzeba by coś - // wygenerować - fDist = -fDist; // to traktujemy, jakby przesunięcie było w drugą stronę + iHornWarning = 0; // nie bďż˝dzie trďż˝bienia po podaniu zezwolenia na jazdďż˝ + if (fDist < 0.0) //-0.5*MoverParameters->Dim.L) //jeďż˝li jest przesuniďż˝cie do tyďż˝u + if (!Track->CurrentPrev()) // a nie ma tam odcinka i trzeba by coďż˝ + // wygenerowaďż˝ + fDist = -fDist; // to traktujemy, jakby przesuniďż˝cie byďż˝o w drugďż˝ stronďż˝ } // w wagonie tez niech jedzie // if (MoverParameters->MainCtrlPosNo>0 && // if (MoverParameters->CabNo!=0) if (DriverType != "") - { // McZapkie-040602: jeśli coś siedzi w pojeździe - if (Name == Global::asHumanCtrlVehicle) // jeśli pojazd wybrany do prowadzenia + { // McZapkie-040602: jeďż˝li coďż˝ siedzi w pojeďż˝dzie + if (Name == Global::asHumanCtrlVehicle) // jeďż˝li pojazd wybrany do prowadzenia { if (DebugModeFlag ? false : MoverParameters->EngineType != Dumb) // jak nie Debugmode i nie jest dumbem - Controller = Humandriver; // wsadzamy tam sterującego - else // w przeciwnym razie trzeba włączyć pokazywanie kabiny + Controller = Humandriver; // wsadzamy tam sterujďż˝cego + else // w przeciwnym razie trzeba w��czyďż˝ pokazywanie kabiny bDisplayCab = true; } - // McZapkie-151102: rozkład jazdy czytany z pliku *.txt z katalogu w którym + // McZapkie-151102: rozkďż˝ad jazdy czytany z pliku *.txt z katalogu w ktďż˝rym // jest sceneria if (DriverType == "1" || DriverType == "2") { // McZapkie-110303: mechanik i rozklad tylko gdy jest obsada // MoverParameters->ActiveCab=MoverParameters->CabNo; //ustalenie aktywnej // kabiny - // (rozrząd) + // (rozrzďż˝d) Mechanik = new TController(Controller, this, Aggressive); - if (TrainName.empty()) // jeśli nie w składzie + if (TrainName.empty()) // jeďż˝li nie w skďż˝adzie { - Mechanik->DirectionInitial(); // załączenie rozrządu (wirtualne kabiny) itd. + Mechanik->DirectionInitial(); // za��czenie rozrzďż˝du (wirtualne kabiny) itd. Mechanik->PutCommand( "Timetable:", iDirection ? -fVel : fVel, 0, - NULL); // tryb pociągowy z ustaloną prędkością (względem sprzęgów) + NULL); // tryb pociďż˝gowy z ustalonďż˝ prďż˝dkoďż˝ciďż˝ (wzglďż˝dem sprzďż˝gďż˝w) } // if (TrainName!="none") // Mechanik->PutCommand("Timetable:"+TrainName,fVel,0,NULL); } else if (DriverType == "p") - { // obserwator w charakterze pasażera - // Ra: to jest niebezpieczne, bo w razie co będzie pomagał hamulcem - // bezpieczeństwa + { // obserwator w charakterze pasaďż˝era + // Ra: to jest niebezpieczne, bo w razie co bďż˝dzie pomagaďż˝ hamulcem + // bezpieczeďż˝stwa Mechanik = new TController(Controller, this, Easyman, false); } } // McZapkie-250202 - iAxles = (MaxAxles < MoverParameters->NAxles) ? MaxAxles : MoverParameters->NAxles; // ilość osi + iAxles = (MaxAxles < MoverParameters->NAxles) ? MaxAxles : MoverParameters->NAxles; // ilo�� osi // wczytywanie z pliku nazwatypu.mmd, w tym model LoadMMediaFile(asBaseDir, Type_Name, asReplacableSkin); - // McZapkie-100402: wyszukiwanie submodeli sprzegów - btCoupler1.Init("coupler1", mdModel, false); // false - ma być wyłączony + // McZapkie-100402: wyszukiwanie submodeli sprzegďż˝w + btCoupler1.Init("coupler1", mdModel, false); // false - ma byďż˝ wy��czony btCoupler2.Init("coupler2", mdModel, false); btCPneumatic1.Init("cpneumatic1", mdModel); btCPneumatic2.Init("cpneumatic2", mdModel); @@ -1977,7 +1977,7 @@ TDynamicObject::Init(std::string Name, // nazwa pojazdu, np. "EU07-424" btEndSignals21.Init("endsignal23", mdModel, false); btEndSignals13.Init("endsignal12", mdModel, false); btEndSignals23.Init("endsignal22", mdModel, false); - iInventory |= btEndSignals11.Active() ? 0x01 : 0; // informacja, czy ma poszczególne światła + iInventory |= btEndSignals11.Active() ? 0x01 : 0; // informacja, czy ma poszczegďż˝lne ďż˝wiatďż˝a iInventory |= btEndSignals21.Active() ? 0x02 : 0; iInventory |= btEndSignals13.Active() ? 0x04 : 0; iInventory |= btEndSignals23.Active() ? 0x08 : 0; @@ -1992,7 +1992,7 @@ TDynamicObject::Init(std::string Name, // nazwa pojazdu, np. "EU07-424" iInventory |= btEndSignalsTab2.Active() ? 0x80 : 0; // ABu Uwaga! tu zmienic w modelu! btHeadSignals11.Init("headlamp13", mdModel, false); // lewe - btHeadSignals12.Init("headlamp11", mdModel, false); // górne + btHeadSignals12.Init("headlamp11", mdModel, false); // gďż˝rne btHeadSignals13.Init("headlamp12", mdModel, false); // prawe btHeadSignals21.Init("headlamp23", mdModel, false); btHeadSignals22.Init("headlamp21", mdModel, false); @@ -2001,7 +2001,7 @@ TDynamicObject::Init(std::string Name, // nazwa pojazdu, np. "EU07-424" btMechanik2.Init("mechanik2", mdLowPolyInt, false); TurnOff(); // resetowanie zmiennych submodeli // wyszukiwanie zderzakow - if (mdModel) // jeśli ma w czym szukać + if (mdModel) // jeďż˝li ma w czym szukaďż˝ for (int i = 0; i < 2; i++) { asAnimName = std::string("buffer_left0") + to_string(i + 1); @@ -2013,45 +2013,45 @@ TDynamicObject::Init(std::string Name, // nazwa pojazdu, np. "EU07-424" if (smBuforPrawy[i]) smBuforPrawy[i]->WillBeAnimated(); } - for (int i = 0; i < iAxles; i++) // wyszukiwanie osi (0 jest na końcu, dlatego dodajemy - // długość?) + for (int i = 0; i < iAxles; i++) // wyszukiwanie osi (0 jest na koďż˝cu, dlatego dodajemy + // dďż˝ugo��?) dRailPosition[i] = (Reversed ? -dWheelsPosition[i] : (dWheelsPosition[i] + MoverParameters->Dim.L)) + fDist; // McZapkie-250202 end. - Track->AddDynamicObject(this); // wstawiamy do toru na pozycję 0, a potem przesuniemy + Track->AddDynamicObject(this); // wstawiamy do toru na pozycjďż˝ 0, a potem przesuniemy // McZapkie: zmieniono na ilosc osi brane z chk // iNumAxles=(MoverParameters->NAxles>3 ? 4 : 2 ); iNumAxles = 2; // McZapkie-090402: odleglosc miedzy czopami skretu lub osiami fAxleDist = Max0R(MoverParameters->BDist, MoverParameters->ADist); if (fAxleDist < 0.2) - fAxleDist = 0.2; //żeby się dało wektory policzyć - if (fAxleDist > MoverParameters->Dim.L - 0.2) // nie mogą być za daleko - fAxleDist = MoverParameters->Dim.L - 0.2; // bo będzie "walenie w mur" + fAxleDist = 0.2; //ďż˝eby siďż˝ daďż˝o wektory policzyďż˝ + if (fAxleDist > MoverParameters->Dim.L - 0.2) // nie mogďż˝ byďż˝ za daleko + fAxleDist = MoverParameters->Dim.L - 0.2; // bo bďż˝dzie "walenie w mur" double fAxleDistHalf = fAxleDist * 0.5; // WriteLog("Dynamic "+Type_Name+" of length "+MoverParameters->Dim.L+" at // "+AnsiString(fDist)); - // if (Cab) //jeśli ma obsadę - zgodność wstecz, jeśli tor startowy ma Event0 - // if (Track->Event0) //jeśli tor ma Event0 - // if (fDist>=0.0) //jeśli jeśli w starych sceneriach początek składu byłby - // wysunięty na ten + // if (Cab) //jeďż˝li ma obsadďż˝ - zgodno�� wstecz, jeďż˝li tor startowy ma Event0 + // if (Track->Event0) //jeďż˝li tor ma Event0 + // if (fDist>=0.0) //jeďż˝li jeďż˝li w starych sceneriach poczďż˝tek skďż˝adu byďż˝by + // wysuniďż˝ty na ten // tor - // if (fDist<=0.5*MoverParameters->Dim.L+0.2) //ale nie jest wysunięty - // fDist+=0.5*MoverParameters->Dim.L+0.2; //wysunąć go na ten tor - // przesuwanie pojazdu tak, aby jego początek był we wskazanym miejcu - fDist -= 0.5 * MoverParameters->Dim.L; // dodajemy pół długości pojazdu, bo - // ustawiamy jego środek (zliczanie na + // if (fDist<=0.5*MoverParameters->Dim.L+0.2) //ale nie jest wysuniďż˝ty + // fDist+=0.5*MoverParameters->Dim.L+0.2; //wysun�� go na ten tor + // przesuwanie pojazdu tak, aby jego poczďż˝tek byďż˝ we wskazanym miejcu + fDist -= 0.5 * MoverParameters->Dim.L; // dodajemy p�� dďż˝ugoďż˝ci pojazdu, bo + // ustawiamy jego ďż˝rodek (zliczanie na // minus) switch (iNumAxles) - { // Ra: pojazdy wstawiane są na tor początkowy, a potem + { // Ra: pojazdy wstawiane sďż˝ na tor poczďż˝tkowy, a potem // przesuwane case 2: // ustawianie osi na torze Axle0.Init(Track, this, iDirection ? 1 : -1); Axle0.Move((iDirection ? fDist : -fDist) + fAxleDistHalf, false); Axle1.Init(Track, this, iDirection ? 1 : -1); Axle1.Move((iDirection ? fDist : -fDist) - fAxleDistHalf, - false); // false, żeby nie generować eventów + false); // false, ďż˝eby nie generowaďż˝ eventďż˝w // Axle2.Init(Track,this,iDirection?1:-1); // Axle2.Move((iDirection?fDist:-fDist)-fAxleDistHalft+0.01),false); // Axle3.Init(Track,this,iDirection?1:-1); @@ -2070,25 +2070,25 @@ TDynamicObject::Init(std::string Name, // nazwa pojazdu, np. "EU07-424" // Axle3.Move((iDirection?fDist:-fDist)+(fAxleDistHalf-MoverParameters->ADist*0.5),false); break; } - Move(0.0001); // potrzebne do wyliczenia aktualnej pozycji; nie może być zero, + Move(0.0001); // potrzebne do wyliczenia aktualnej pozycji; nie moďż˝e byďż˝ zero, // bo nie przeliczy // pozycji - // teraz jeszcze trzeba przypisać pojazdy do nowego toru, bo przesuwanie - // początkowe osi nie - // zrobiło tego - ABuCheckMyTrack(); // zmiana toru na ten, co oś Axle0 (oś z przodu) - TLocation loc; // Ra: ustawienie pozycji do obliczania sprzęgów + // teraz jeszcze trzeba przypisaďż˝ pojazdy do nowego toru, bo przesuwanie + // poczďż˝tkowe osi nie + // zrobiďż˝o tego + ABuCheckMyTrack(); // zmiana toru na ten, co oďż˝ Axle0 (oďż˝ z przodu) + TLocation loc; // Ra: ustawienie pozycji do obliczania sprzďż˝gďż˝w loc.X = -vPosition.x; loc.Y = vPosition.z; loc.Z = vPosition.y; MoverParameters->Loc = loc; // normalnie przesuwa ComputeMovement() w Update() - // pOldPos4=Axle1.pPosition; //Ra: nie używane + // pOldPos4=Axle1.pPosition; //Ra: nie uďż˝ywane // pOldPos1=Axle0.pPosition; // ActualTrack= GetTrack(); //McZapkie-030303 // ABuWozki 060504 - if (mdModel) // jeśli ma w czym szukać + if (mdModel) // jeďż˝li ma w czym szukaďż˝ { - smBogie[0] = mdModel->GetFromName("bogie1"); // Ra: bo nazwy są małymi + smBogie[0] = mdModel->GetFromName("bogie1"); // Ra: bo nazwy sďż˝ maďż˝ymi smBogie[1] = mdModel->GetFromName("bogie2"); if (!smBogie[0]) smBogie[0] = mdModel->GetFromName("boogie01"); // Ra: alternatywna nazwa @@ -2102,14 +2102,14 @@ TDynamicObject::Init(std::string Name, // nazwa pojazdu, np. "EU07-424" // ABu: zainicjowanie zmiennej, zeby nic sie nie ruszylo // w pierwszej klatce, potem juz liczona prawidlowa wartosc masy MoverParameters->ComputeConstans(); - /*Ra: to nie działa - Event0 musi być wykonywany ciągle - if (fVel==0.0) //jeśli stoi - if (MoverParameters->CabNo!=0) //i ma kogoś w kabinie + /*Ra: to nie dziaďż˝a - Event0 musi byďż˝ wykonywany ciďż˝gle + if (fVel==0.0) //jeďż˝li stoi + if (MoverParameters->CabNo!=0) //i ma kogoďż˝ w kabinie if (Track->Event0) //a jest w tym torze event od stania RaAxleEvent(Track->Event0); //dodanie eventu stania do kolejki */ - vFloor = vector3(0, 0, MoverParameters->Floor); // wektor podłogi dla wagonów, przesuwa ładunek - return MoverParameters->Dim.L; // długość większa od zera oznacza OK; 2mm docisku? + vFloor = vector3(0, 0, MoverParameters->Floor); // wektor podďż˝ogi dla wagonďż˝w, przesuwa ďż˝adunek + return MoverParameters->Dim.L; // dďż˝ugo�� wiďż˝ksza od zera oznacza OK; 2mm docisku? } void TDynamicObject::FastMove(double fDistance) @@ -2120,49 +2120,49 @@ void TDynamicObject::FastMove(double fDistance) void TDynamicObject::Move(double fDistance) { // przesuwanie pojazdu po // trajektorii polega na - // przesuwaniu poszczególnych osi - // Ra: wartość prędkości 2km/h ma ograniczyć aktywację eventów w przypadku - // drgań - if (Axle0.GetTrack() == Axle1.GetTrack()) // przed przesunięciem - { // powiązanie pojazdu z osią można zmienić tylko wtedy, gdy skrajne osie są + // przesuwaniu poszczegďż˝lnych osi + // Ra: warto�� prďż˝dkoďż˝ci 2km/h ma ograniczyďż˝ aktywacjďż˝ eventďż˝w w przypadku + // drgaďż˝ + if (Axle0.GetTrack() == Axle1.GetTrack()) // przed przesuniďż˝ciem + { // powiďż˝zanie pojazdu z osiďż˝ moďż˝na zmieniďż˝ tylko wtedy, gdy skrajne osie sďż˝ // na tym samym torze if (MoverParameters->Vel > 2) //|[km/h]| nie ma sensu zmiana osi, jesli pojazd drga na postoju iAxleFirst = (MoverParameters->V >= 0.0) ? 1 : - 0; //[m/s] ?1:0 - aktywna druga oś w kierunku jazdy - // aktualnie eventy aktywuje druga oś, żeby AI nie wyłączało sobie semafora + 0; //[m/s] ?1:0 - aktywna druga oďż˝ w kierunku jazdy + // aktualnie eventy aktywuje druga oďż˝, ďż˝eby AI nie wy��czaďż˝o sobie semafora // za szybko } if (fDistance > 0.0) - { // gdy ruch w stronę sprzęgu 0, doliczyć korektę do osi 1 - bEnabled &= Axle0.Move(fDistance, !iAxleFirst); // oś z przodu pojazdu - bEnabled &= Axle1.Move(fDistance /*-fAdjustment*/, iAxleFirst); // oś z tyłu pojazdu + { // gdy ruch w stronďż˝ sprzďż˝gu 0, doliczyďż˝ korektďż˝ do osi 1 + bEnabled &= Axle0.Move(fDistance, !iAxleFirst); // oďż˝ z przodu pojazdu + bEnabled &= Axle1.Move(fDistance /*-fAdjustment*/, iAxleFirst); // oďż˝ z tyďż˝u pojazdu } else if (fDistance < 0.0) - { // gdy ruch w stronę sprzęgu 1, doliczyć korektę do osi 0 - bEnabled &= Axle1.Move(fDistance, iAxleFirst); // oś z tyłu pojazdu prusza się pierwsza - bEnabled &= Axle0.Move(fDistance /*-fAdjustment*/, !iAxleFirst); // oś z przodu pojazdu + { // gdy ruch w stronďż˝ sprzďż˝gu 1, doliczyďż˝ korektďż˝ do osi 0 + bEnabled &= Axle1.Move(fDistance, iAxleFirst); // oďż˝ z tyďż˝u pojazdu prusza siďż˝ pierwsza + bEnabled &= Axle0.Move(fDistance /*-fAdjustment*/, !iAxleFirst); // oďż˝ z przodu pojazdu } else // gf: bez wywolania Move na postoju nie ma event0 { - bEnabled &= Axle1.Move(fDistance, iAxleFirst); // oś z tyłu pojazdu prusza się pierwsza - bEnabled &= Axle0.Move(fDistance, !iAxleFirst); // oś z przodu pojazdu + bEnabled &= Axle1.Move(fDistance, iAxleFirst); // oďż˝ z tyďż˝u pojazdu prusza siďż˝ pierwsza + bEnabled &= Axle0.Move(fDistance, !iAxleFirst); // oďż˝ z przodu pojazdu } - if (fDistance != 0.0) // nie liczyć ponownie, jeśli stoi - { // liczenie pozycji pojazdu tutaj, bo jest używane w wielu miejscach - vPosition = 0.5 * (Axle1.pPosition + Axle0.pPosition); //środek między skrajnymi osiami - vFront = Axle0.pPosition - Axle1.pPosition; // wektor pomiędzy skrajnymi osiami + if (fDistance != 0.0) // nie liczyďż˝ ponownie, jeďż˝li stoi + { // liczenie pozycji pojazdu tutaj, bo jest uďż˝ywane w wielu miejscach + vPosition = 0.5 * (Axle1.pPosition + Axle0.pPosition); //ďż˝rodek miďż˝dzy skrajnymi osiami + vFront = Axle0.pPosition - Axle1.pPosition; // wektor pomiďż˝dzy skrajnymi osiami // Ra 2F1J: to nie jest stabilne (powoduje rzucanie taborem) i wymaga // dopracowania - fAdjustment = vFront.Length() - fAxleDist; // na łuku będzie ujemny - // if (fabs(fAdjustment)>0.02) //jeśli jest zbyt dużo, to rozłożyć na kilka - // przeliczeń + fAdjustment = vFront.Length() - fAxleDist; // na ďż˝uku bďż˝dzie ujemny + // if (fabs(fAdjustment)>0.02) //jeďż˝li jest zbyt duďż˝o, to rozďż˝oďż˝yďż˝ na kilka + // przeliczeďż˝ // (wygasza drgania?) - //{//parę centymetrów trzeba by już skorygować; te błędy mogą się też - // generować na ostrych - //łukach - // fAdjustment*=0.5; //w jednym kroku korygowany jest ułamek błędu + //{//parďż˝ centymetrďż˝w trzeba by juďż˝ skorygowaďż˝; te b��dy mogďż˝ siďż˝ teďż˝ + // generowaďż˝ na ostrych + //ďż˝ukach + // fAdjustment*=0.5; //w jednym kroku korygowany jest uďż˝amek b��du //} // else // fAdjustment=0.0; @@ -2170,60 +2170,60 @@ void TDynamicObject::Move(double fDistance) vLeft = Normalize(CrossProduct(vWorldUp, vFront)); // wektor poziomy w lewo, // normalizacja potrzebna z powodu // pochylenia (vFront) - vUp = CrossProduct(vFront, vLeft); // wektor w górę, będzie jednostkowy - modelRot.z = atan2(-vFront.x, vFront.z); // kąt obrotu pojazdu [rad]; z ABuBogies() - double a = ((Axle1.GetRoll() + Axle0.GetRoll())); // suma przechyłek + vUp = CrossProduct(vFront, vLeft); // wektor w gďż˝rďż˝, bďż˝dzie jednostkowy + modelRot.z = atan2(-vFront.x, vFront.z); // kďż˝t obrotu pojazdu [rad]; z ABuBogies() + double a = ((Axle1.GetRoll() + Axle0.GetRoll())); // suma przechyďż˝ek if (a != 0.0) - { // wyznaczanie przechylenia tylko jeśli jest przechyłka - // można by pobrać wektory normalne z toru... - mMatrix.Identity(); // ta macierz jest potrzebna głównie do wyświetlania - mMatrix.Rotation(a * 0.5, vFront); // obrót wzdłuż osi o przechyłkę - vUp = mMatrix * vUp; // wektor w górę pojazdu (przekręcenie na przechyłce) + { // wyznaczanie przechylenia tylko jeďż˝li jest przechyďż˝ka + // moďż˝na by pobraďż˝ wektory normalne z toru... + mMatrix.Identity(); // ta macierz jest potrzebna g��wnie do wyďż˝wietlania + mMatrix.Rotation(a * 0.5, vFront); // obrďż˝t wzdďż˝uďż˝ osi o przechyďż˝kďż˝ + vUp = mMatrix * vUp; // wektor w gďż˝rďż˝ pojazdu (przekrďż˝cenie na przechyďż˝ce) // vLeft=mMatrix*DynamicObject->vLeft; - // vUp=CrossProduct(vFront,vLeft); //wektor w górę + // vUp=CrossProduct(vFront,vLeft); //wektor w gďż˝rďż˝ // vLeft=Normalize(CrossProduct(vWorldUp,vFront)); //wektor w lewo vLeft = Normalize(CrossProduct(vUp, vFront)); // wektor w lewo - // vUp=CrossProduct(vFront,vLeft); //wektor w górę + // vUp=CrossProduct(vFront,vLeft); //wektor w gďż˝rďż˝ } - mMatrix.Identity(); // to też można by od razu policzyć, ale potrzebne jest - // do wyświetlania - mMatrix.BasisChange(vLeft, vUp, vFront); // przesuwanie jest jednak rzadziej niż + mMatrix.Identity(); // to teďż˝ moďż˝na by od razu policzyďż˝, ale potrzebne jest + // do wyďż˝wietlania + mMatrix.BasisChange(vLeft, vUp, vFront); // przesuwanie jest jednak rzadziej niďż˝ // renderowanie mMatrix = Inverse(mMatrix); // wyliczenie macierzy dla pojazdu (potrzebna - // tylko do wyświetlania?) + // tylko do wyďż˝wietlania?) // if (MoverParameters->CategoryFlag&2) - { // przesunięcia są używane po wyrzuceniu pociągu z toru - vPosition.x += MoverParameters->OffsetTrackH * vLeft.x; // dodanie przesunięcia w bok + { // przesuniďż˝cia sďż˝ uďż˝ywane po wyrzuceniu pociďż˝gu z toru + vPosition.x += MoverParameters->OffsetTrackH * vLeft.x; // dodanie przesuniďż˝cia w bok vPosition.z += MoverParameters->OffsetTrackH * vLeft.z; // vLeft jest wektorem poprzecznym - // if () na przechyłce będzie dodatkowo zmiana wysokości samochodu - vPosition.y += MoverParameters->OffsetTrackV; // te offsety są liczone przez moverparam + // if () na przechyďż˝ce bďż˝dzie dodatkowo zmiana wysokoďż˝ci samochodu + vPosition.y += MoverParameters->OffsetTrackV; // te offsety sďż˝ liczone przez moverparam } - // Ra: skopiowanie pozycji do fizyki, tam potrzebna do zrywania sprzęgów + // Ra: skopiowanie pozycji do fizyki, tam potrzebna do zrywania sprzďż˝gďż˝w // MoverParameters->Loc.X=-vPosition.x; //robi to {Fast}ComputeMovement() // MoverParameters->Loc.Y= vPosition.z; // MoverParameters->Loc.Z= vPosition.y; - // obliczanie pozycji sprzęgów do liczenia zderzeń - vector3 dir = (0.5 * MoverParameters->Dim.L) * vFront; // wektor sprzęgu - vCoulpler[0] = vPosition + dir; // współrzędne sprzęgu na początku - vCoulpler[1] = vPosition - dir; // współrzędne sprzęgu na końcu + // obliczanie pozycji sprzďż˝gďż˝w do liczenia zderzeďż˝ + vector3 dir = (0.5 * MoverParameters->Dim.L) * vFront; // wektor sprzďż˝gu + vCoulpler[0] = vPosition + dir; // wsp��rzďż˝dne sprzďż˝gu na poczďż˝tku + vCoulpler[1] = vPosition - dir; // wsp��rzďż˝dne sprzďż˝gu na koďż˝cu MoverParameters->vCoulpler[0] = vCoulpler[0]; // tymczasowo kopiowane na inny poziom MoverParameters->vCoulpler[1] = vCoulpler[1]; // bCameraNear= - // if (bCameraNear) //jeśli istotne są szczegóły (blisko kamery) + // if (bCameraNear) //jeďż˝li istotne sďż˝ szczeg��y (blisko kamery) { // przeliczenie cienia - TTrack *t0 = Axle0.GetTrack(); // już po przesunięciu + TTrack *t0 = Axle0.GetTrack(); // juďż˝ po przesuniďż˝ciu TTrack *t1 = Axle1.GetTrack(); - if ((t0->eEnvironment == e_flat) && (t1->eEnvironment == e_flat)) // może być + if ((t0->eEnvironment == e_flat) && (t1->eEnvironment == e_flat)) // moďż˝e byďż˝ // e_bridge... - fShade = 0.0; // standardowe oświetlenie + fShade = 0.0; // standardowe oďż˝wietlenie else - { // jeżeli te tory mają niestandardowy stopień zacienienia + { // jeďż˝eli te tory majďż˝ niestandardowy stopieďż˝ zacienienia // (e_canyon, e_tunnel) if (t0->eEnvironment == t1->eEnvironment) { switch (t0->eEnvironment) - { // typ zmiany oświetlenia + { // typ zmiany oďż˝wietlenia case e_canyon: fShade = 0.65; break; // zacienienie w kanionie @@ -2232,14 +2232,14 @@ void TDynamicObject::Move(double fDistance) break; // zacienienie w tunelu } } - else // dwa różne - { // liczymy proporcję - double d = Axle0.GetTranslation(); // aktualne położenie na torze + else // dwa r��ne + { // liczymy proporcjďż˝ + double d = Axle0.GetTranslation(); // aktualne poďż˝oďż˝enie na torze if (Axle0.GetDirection() < 0) - d = t0->fTrackLength - d; // od drugiej strony liczona długość - d /= fAxleDist; // rozsataw osi procentowe znajdowanie się na torze + d = t0->fTrackLength - d; // od drugiej strony liczona dďż˝ugo�� + d /= fAxleDist; // rozsataw osi procentowe znajdowanie siďż˝ na torze switch (t0->eEnvironment) - { // typ zmiany oświetlenia - zakładam, że + { // typ zmiany oďż˝wietlenia - zakďż˝adam, ďż˝e // drugi tor ma e_flat case e_canyon: fShade = (d * 0.65) + (1.0 - d); @@ -2249,7 +2249,7 @@ void TDynamicObject::Move(double fDistance) break; // zacienienie w tunelu } switch (t1->eEnvironment) - { // typ zmiany oświetlenia - zakładam, że + { // typ zmiany oďż˝wietlenia - zakďż˝adam, ďż˝e // pierwszy tor ma e_flat case e_canyon: fShade = d + (1.0 - d) * 0.65; @@ -2265,19 +2265,19 @@ void TDynamicObject::Move(double fDistance) }; void TDynamicObject::AttachPrev(TDynamicObject *Object, int iType) -{ // Ra: doczepia Object na końcu - // składu (nazwa funkcji może być - // myląca) - // Ra: używane tylko przy wczytywaniu scenerii +{ // Ra: doczepia Object na koďż˝cu + // skďż˝adu (nazwa funkcji moďż˝e byďż˝ + // mylďż˝ca) + // Ra: uďż˝ywane tylko przy wczytywaniu scenerii /* - //Ra: po wstawieniu pojazdu do scenerii nie miał on ustawionej pozycji, teraz - już ma + //Ra: po wstawieniu pojazdu do scenerii nie miaďż˝ on ustawionej pozycji, teraz + juďż˝ ma TLocation loc; loc.X=-vPosition.x; loc.Y=vPosition.z; loc.Z=vPosition.y; - MoverParameters->Loc=loc; //Ra: do obliczania sprzęgów, na starcie nie są - przesunięte + MoverParameters->Loc=loc; //Ra: do obliczania sprzďż˝gďż˝w, na starcie nie sďż˝ + przesuniďż˝te loc.X=-Object->vPosition.x; loc.Y=Object->vPosition.z; loc.Z=Object->vPosition.y; @@ -2289,42 +2289,42 @@ void TDynamicObject::AttachPrev(TDynamicObject *Object, int iType) Object->MoverParameters->Attach(Object->iDirection ^ 1, iDirection, MoverParameters, iType, true); Object->MoverParameters->Couplers[Object->iDirection ^ 1].Render = - true; // rysowanie sprzęgu w dołączanym + true; // rysowanie sprzďż˝gu w do��czanym if (iDirection) - { //łączenie standardowe - NextConnected = Object; // normalnie doczepiamy go sobie do sprzęgu 1 + { //��czenie standardowe + NextConnected = Object; // normalnie doczepiamy go sobie do sprzďż˝gu 1 NextConnectedNo = Object->iDirection ^ 1; } else - { //łączenie odwrotne - PrevConnected = Object; // doczepiamy go sobie do sprzęgu 0, gdy stoimy odwrotnie + { //��czenie odwrotne + PrevConnected = Object; // doczepiamy go sobie do sprzďż˝gu 0, gdy stoimy odwrotnie PrevConnectedNo = Object->iDirection ^ 1; } if (Object->iDirection) - { // dołączany jest normalnie ustawiany + { // do��czany jest normalnie ustawiany Object->PrevConnected = this; // on ma nas z przodu Object->PrevConnectedNo = iDirection; } else - { // dołączany jest odwrotnie ustawiany - Object->NextConnected = this; // on ma nas z tyłu + { // do��czany jest odwrotnie ustawiany + Object->NextConnected = this; // on ma nas z tyďż˝u Object->NextConnectedNo = iDirection; } - if (MoverParameters->TrainType & dt_EZT) // w przypadku łączenia członów, - // światła w rozrządczym zależą od + if (MoverParameters->TrainType & dt_EZT) // w przypadku ��czenia czďż˝onďż˝w, + // ďż˝wiatďż˝a w rozrzďż˝dczym zale�� od // stanu w silnikowym if (MoverParameters->Couplers[iDirection].AllowedFlag & - ctrain_depot) // gdy sprzęgi łączone warsztatowo (powiedzmy) + ctrain_depot) // gdy sprzďż˝gi ��czone warsztatowo (powiedzmy) if ((MoverParameters->Power < 1.0) && (Object->MoverParameters->Power > 1.0)) // my nie mamy mocy, ale ten drugi ma - iLights = Object->MoverParameters->iLights; // to w tym z mocą będą światła - // załączane, a w tym bez tylko widoczne + iLights = Object->MoverParameters->iLights; // to w tym z mocďż˝ bďż˝dďż˝ ďż˝wiatďż˝a + // za��czane, a w tym bez tylko widoczne else if ((MoverParameters->Power > 1.0) && (Object->MoverParameters->Power < 1.0)) // my mamy moc, ale ten drugi nie ma - Object->iLights = MoverParameters->iLights; // to w tym z mocą będą światła - // załączane, a w tym bez tylko widoczne + Object->iLights = MoverParameters->iLights; // to w tym z mocďż˝ bďż˝dďż˝ ďż˝wiatďż˝a + // za��czane, a w tym bez tylko widoczne return; - // SetPneumatic(1,1); //Ra: to i tak się nie wykonywało po return + // SetPneumatic(1,1); //Ra: to i tak siďż˝ nie wykonywaďż˝o po return // SetPneumatic(1,0); // SetPneumatic(0,1); // SetPneumatic(0,0); @@ -2336,34 +2336,34 @@ bool TDynamicObject::UpdateForce(double dt, double dt1, bool FullVer) return false; if (dt > 0) MoverParameters->ComputeTotalForce(dt, dt1, - FullVer); // wywalenie WS zależy od ustawienia kierunku + FullVer); // wywalenie WS zaleďż˝y od ustawienia kierunku return true; } void TDynamicObject::LoadUpdate() -{ // przeładowanie modelu ładunku - // Ra: nie próbujemy wczytywać modeli miliony razy podczas renderowania!!! +{ // przeďż˝adowanie modelu ďż˝adunku + // Ra: nie prďż˝bujemy wczytywaďż˝ modeli miliony razy podczas renderowania!!! if ((mdLoad == NULL) && (MoverParameters->Load > 0)) { std::string asLoadName = - asBaseDir + MoverParameters->LoadType + ".t3d"; // zapamiętany katalog pojazdu + asBaseDir + MoverParameters->LoadType + ".t3d"; // zapamiďż˝tany katalog pojazdu // asLoadName=MoverParameters->LoadType; // if (MoverParameters->LoadType!=AnsiString("passengers")) - Global::asCurrentTexturePath = asBaseDir; // bieżąca ścieżka do tekstur to dynamic/... - mdLoad = TModelsManager::GetModel(asLoadName.c_str()); // nowy ładunek + Global::asCurrentTexturePath = asBaseDir; // bie��ca ďż˝cieďż˝ka do tekstur to dynamic/... + mdLoad = TModelsManager::GetModel(asLoadName.c_str()); // nowy ďż˝adunek Global::asCurrentTexturePath = std::string(szTexturePath); // z powrotem defaultowa sciezka do tekstur - // Ra: w MMD można by zapisać położenie modelu ładunku (np. węgiel) w - // zależności od - // załadowania + // Ra: w MMD moďż˝na by zapisaďż˝ poďż˝oďż˝enie modelu ďż˝adunku (np. wďż˝giel) w + // zaleďż˝noďż˝ci od + // zaďż˝adowania } else if (MoverParameters->Load == 0) - mdLoad = NULL; // nie ma ładunku + mdLoad = NULL; // nie ma ďż˝adunku // if ((mdLoad==NULL)&&(MoverParameters->Load>0)) // { - // mdLoad=NULL; //Ra: to jest tu bez sensu - co autor miał na myśli? + // mdLoad=NULL; //Ra: to jest tu bez sensu - co autor miaďż˝ na myďż˝li? // } - MoverParameters->LoadStatus &= 3; // po zakończeniu będzie równe zero + MoverParameters->LoadStatus &= 3; // po zakoďż˝czeniu bďż˝dzie rďż˝wne zero }; /* @@ -2448,13 +2448,13 @@ void TDynamicObject::UpdatePos() /* Ra: - Powinny być dwie funkcje wykonujące aktualizację fizyki. Jedna wykonująca -krok obliczeń, powtarzana odpowiednią liczbę razy, a druga wykonująca zbiorczą -aktualzację mniej istotnych elementów. - Ponadto należało by ustalić odległość składów od kamery i jeśli przekracza -ona np. 10km, to traktować składy jako uproszczone, np. bez wnikania w siły -na sprzęgach, opóźnienie działania hamulca itp. Oczywiście musi mieć to pewną -histerezę czasową, aby te tryby pracy nie przełączały się zbyt szybko. + Powinny byďż˝ dwie funkcje wykonujďż˝ce aktualizacjďż˝ fizyki. Jedna wykonujďż˝ca +krok obliczeďż˝, powtarzana odpowiedniďż˝ liczbďż˝ razy, a druga wykonujďż˝ca zbiorczďż˝ +aktualzacjďż˝ mniej istotnych elementďż˝w. + Ponadto naleďż˝aďż˝o by ustaliďż˝ odlegďż˝o�� skďż˝adďż˝w od kamery i jeďż˝li przekracza +ona np. 10km, to traktowaďż˝ skďż˝ady jako uproszczone, np. bez wnikania w siďż˝y +na sprzďż˝gach, op��nienie dziaďż˝ania hamulca itp. Oczywiďż˝cie musi mieďż˝ to pewnďż˝ +histerezďż˝ czasowďż˝, aby te tryby pracy nie prze��czaďż˝y siďż˝ zbyt szybko. */ bool TDynamicObject::Update(double dt, double dt1) @@ -2462,17 +2462,17 @@ bool TDynamicObject::Update(double dt, double dt1) if (dt == 0) return true; // Ra: pauza if (!MoverParameters->PhysicActivation && - !MechInside) // to drugie, bo będąc w maszynowym blokuje się fizyka + !MechInside) // to drugie, bo bďż˝dďż˝c w maszynowym blokuje siďż˝ fizyka return true; // McZapkie: wylaczanie fizyki gdy nie potrzeba if (!MyTrack) - return false; // pojazdy postawione na torach portalowych mają MyTrack==NULL + return false; // pojazdy postawione na torach portalowych majďż˝ MyTrack==NULL if (!bEnabled) - return false; // a normalnie powinny mieć bEnabled==false + return false; // a normalnie powinny mieďż˝ bEnabled==false - // Ra: przeniosłem - no już lepiej tu, niż w wyświetlaniu! + // Ra: przeniosďż˝em - no juďż˝ lepiej tu, niďż˝ w wyďż˝wietlaniu! // if ((MoverParameters->ConverterFlag==false) && // (MoverParameters->TrainType!=dt_ET22)) - // Ra: to nie może tu być, bo wyłącza sprężarkę w rozrządczym EZT! + // Ra: to nie moďż˝e tu byďż˝, bo wy��cza spr��arkďż˝ w rozrzďż˝dczym EZT! // if // ((MoverParameters->ConverterFlag==false)&&(MoverParameters->CompressorPower!=0)) // MoverParameters->CompressorFlag=false; @@ -2481,7 +2481,7 @@ bool TDynamicObject::Update(double dt, double dt1) // McZapkie-260202 if ((MoverParameters->EnginePowerSource.SourceType == CurrentCollector) && - (MoverParameters->Power > 1.0)) // aby rozrządczy nie opuszczał silnikowemu + (MoverParameters->Power > 1.0)) // aby rozrzďż˝dczy nie opuszczaďż˝ silnikowemu if ((MechInside) || (MoverParameters->TrainType == dt_EZT)) { // if @@ -2490,21 +2490,21 @@ bool TDynamicObject::Update(double dt, double dt1) if (MoverParameters->PantPress < (MoverParameters->TrainType == dt_EZT ? 2.4 : 3.5)) { // 3.5 wg // http://www.transportszynowy.pl/eu06-07pneumat.php - //"Wyłączniki ciśnieniowe odbieraków prądu wyłączają sterowanie - // wyłącznika szybkiego - // oraz uniemożliwiają podniesienie odbieraków prądu, gdy w instalacji - // rozrządu - // ciśnienie spadnie poniżej wartości 3,5 bara." - // Ra 2013-12: Niebugocław mówi, że w EZT podnoszą się przy 2.5 + //"Wy��czniki ciďż˝nieniowe odbierakďż˝w prďż˝du wy��czajďż˝ sterowanie + // wy��cznika szybkiego + // oraz uniemoďż˝liwiajďż˝ podniesienie odbierakďż˝w prďż˝du, gdy w instalacji + // rozrzďż˝du + // ciďż˝nienie spadnie poniďż˝ej wartoďż˝ci 3,5 bara." + // Ra 2013-12: Niebugocďż˝aw mďż˝wi, ďż˝e w EZT podnoszďż˝ siďż˝ przy 2.5 // if (!MoverParameters->PantCompFlag) // MoverParameters->PantVolume=MoverParameters->CompressedVolume; - MoverParameters->PantFront(false); // opuszczenie pantografów przy niskim ciśnieniu + MoverParameters->PantFront(false); // opuszczenie pantografďż˝w przy niskim ciďż˝nieniu MoverParameters->PantRear(false); // to idzie w ukrotnieniu, a nie powinno... } // Winger - automatyczne wylaczanie malej sprezarki else if (MoverParameters->PantPress >= 4.8) MoverParameters->PantCompFlag = false; - } // Ra: do Mover to trzeba przenieść, żeby AI też mogło sobie podpompować + } // Ra: do Mover to trzeba przenie��, ďż˝eby AI teďż˝ mogďż˝o sobie podpompowaďż˝ double dDOMoveLen; @@ -2519,31 +2519,31 @@ bool TDynamicObject::Update(double dt, double dt1) // TTrackShape ts; // ts.R=MyTrack->fRadius; // if (ABuGetDirection()<0) ts.R=-ts.R; - // ts.R=MyTrack->fRadius; //ujemne promienie są już zamienione przy + // ts.R=MyTrack->fRadius; //ujemne promienie sďż˝ juďż˝ zamienione przy // wczytywaniu if (Axle0.vAngles.z != Axle1.vAngles.z) - { // wyliczenie promienia z obrotów - // osi - modyfikację zgłosił youBy - ts.R = Axle0.vAngles.z - Axle1.vAngles.z; // różnica może dawać stałą ±M_2PI + { // wyliczenie promienia z obrotďż˝w + // osi - modyfikacjďż˝ zgďż˝osiďż˝ youBy + ts.R = Axle0.vAngles.z - Axle1.vAngles.z; // r��nica moďż˝e dawaďż˝ sta�� ďż˝M_2PI if (ts.R > M_PI) ts.R -= M_2PI else if (ts.R < -M_PI) ts.R += M_2PI; // normalizacja // ts.R=fabs(0.5*MoverParameters->BDist/sin(ts.R*0.5)); ts.R = -0.5 * MoverParameters->BDist / sin(ts.R * 0.5); if ((ts.R > 15000.0) || (ts.R < -15000.0)) - ts.R = 0.0; // szkoda czasu na zbyt duże promienie, 4km to promień nie - // wymagający - // przechyłki + ts.R = 0.0; // szkoda czasu na zbyt duďż˝e promienie, 4km to promieďż˝ nie + // wymagajďż˝cy + // przechyďż˝ki } else ts.R = 0.0; // ts.R=ComputeRadius(Axle1.pPosition,Axle2.pPosition,Axle3.pPosition,Axle0.pPosition); - // Ra: składową pochylenia wzdłużnego mamy policzoną w jednostkowym wektorze + // Ra: skďż˝adowďż˝ pochylenia wzdďż˝uďż˝nego mamy policzonďż˝ w jednostkowym wektorze // vFront ts.Len = 1.0; // Max0R(MoverParameters->BDist,MoverParameters->ADist); ts.dHtrack = -vFront.y; // Axle1.pPosition.y-Axle0.pPosition.y; //wektor - // między skrajnymi osiami + // miďż˝dzy skrajnymi osiami // (!!!odwrotny) - ts.dHrail = (Axle1.GetRoll() + Axle0.GetRoll()) * 0.5; //średnia przechyłka pudła + ts.dHrail = (Axle1.GetRoll() + Axle0.GetRoll()) * 0.5; //ďż˝rednia przechyďż˝ka pudďż˝a // TTrackParam tp; tp.Width = MyTrack->fTrackWidth; // McZapkie-250202 @@ -2561,15 +2561,15 @@ bool TDynamicObject::Update(double dt, double dt1) MoverParameters->InsideConsist = false; } // napiecie sieci trakcyjnej - // Ra 15-01: przeliczenie poboru prądu powinno być robione wcześniej, żeby na - // tym etapie były - // znane napięcia + // Ra 15-01: przeliczenie poboru prďż˝du powinno byďż˝ robione wczeďż˝niej, ďż˝eby na + // tym etapie byďż˝y + // znane napiďż˝cia // TTractionParam tmpTraction; // tmpTraction.TractionVoltage=0; if (MoverParameters->EnginePowerSource.SourceType == CurrentCollector) { // dla EZT tylko silnikowy // if (Global::bLiveTraction) - { // Ra 2013-12: to niżej jest chyba trochę bez sensu + { // Ra 2013-12: to niďż˝ej jest chyba trochďż˝ bez sensu double v = MoverParameters->PantRearVolt; if (v == 0.0) { @@ -2577,28 +2577,28 @@ bool TDynamicObject::Update(double dt, double dt1) if (v == 0.0) if ((MoverParameters->TrainType & (dt_EZT | dt_ET40 | dt_ET41 | dt_ET42)) && MoverParameters->EngineType != - ElectricInductionMotor) // dwuczłony mogą mieć sprzęg WN + ElectricInductionMotor) // dwuczďż˝ony mogďż˝ mieďż˝ sprzďż˝g WN v = MoverParameters->GetTrainsetVoltage(); // ostatnia szansa } if (v != 0.0) - { // jeśli jest zasilanie + { // jeďż˝li jest zasilanie NoVoltTime = 0; tmpTraction.TractionVoltage = v; } else { /* - if (MoverParameters->Vel>0.1f) //jeśli jedzie - if (NoVoltTime==0.0) //tylko przy pierwszym zaniku napięcia + if (MoverParameters->Vel>0.1f) //jeďż˝li jedzie + if (NoVoltTime==0.0) //tylko przy pierwszym zaniku napiďż˝cia if (MoverParameters->PantFrontUp||MoverParameters->PantRearUp) //if ((pants[0].fParamPants->PantTraction>1.0)||(pants[1].fParamPants->PantTraction>1.0)) - {//wspomagacz usuwania problemów z siecią + {//wspomagacz usuwania problemďż˝w z sieciďż˝ if (!Global::iPause) - {//Ra: tymczasowa teleportacja do miejsca, gdzie brakuje prądu + {//Ra: tymczasowa teleportacja do miejsca, gdzie brakuje prďż˝du Global::SetCameraPosition(vPosition+vector3(0,0,5)); //nowa pozycja dla - generowania obiektów + generowania obiektďż˝w Global::pCamera->Init(vPosition+vector3(0,0,5),Global::pFreeCameraInitAngle[0]); //przestawienie } @@ -2606,30 +2606,30 @@ bool TDynamicObject::Update(double dt, double dt1) wszystkiego z poprzedniej pozycji Globa:iPause|=1; //tymczasowe zapauzowanie, gdy problem z - siecią + sieciďż˝ } */ NoVoltTime = NoVoltTime + dt; - if (NoVoltTime > 0.2) // jeśli brak zasilania dłużej niż 0.2 sekundy (25km/h pod + if (NoVoltTime > 0.2) // jeďż˝li brak zasilania dďż˝uďż˝ej niďż˝ 0.2 sekundy (25km/h pod // izolatorem daje 0.15s) - { // Ra 2F1H: prowizorka, trzeba przechować napięcie, żeby nie wywalało + { // Ra 2F1H: prowizorka, trzeba przechowaďż˝ napiďż˝cie, ďż˝eby nie wywalaďż˝o // WS pod // izolatorem - if (MoverParameters->Vel > 0.5) // jeśli jedzie + if (MoverParameters->Vel > 0.5) // jeďż˝li jedzie if (MoverParameters->PantFrontUp || - MoverParameters->PantRearUp) // Ra 2014-07: doraźna blokada logowania - // zimnych lokomotyw - zrobić to trzeba + MoverParameters->PantRearUp) // Ra 2014-07: doraďż˝na blokada logowania + // zimnych lokomotyw - zrobiďż˝ to trzeba // inaczej - // if (NoVoltTime>0.02) //tu można ograniczyć czas rozłączenia + // if (NoVoltTime>0.02) //tu moďż˝na ograniczyďż˝ czas roz��czenia // if (DebugModeFlag) //logowanie nie zawsze if ((MoverParameters->Mains) && ((MoverParameters->EngineType != ElectricInductionMotor) || (MoverParameters->GetTrainsetVoltage() < 0.1f))) - { // Ra 15-01: logować tylko, jeśli WS załączony + { // Ra 15-01: logowaďż˝ tylko, jeďż˝li WS za��czony // yB 16-03: i nie jest to asynchron zasilany z daleka // if (MoverParameters->PantFrontUp&&pants) - // Ra 15-01: bezwzględne współrzędne pantografu nie są dostępne, - // więc lepiej się tego nie zaloguje + // Ra 15-01: bezwzglďż˝dne wsp��rzďż˝dne pantografu nie sďż˝ dostďż˝pne, + // wiďż˝c lepiej siďż˝ tego nie zaloguje ErrorLog("Voltage loss: by " + MoverParameters->Name + " at " + to_string(vPosition.x, 2, 7) + " " + to_string(vPosition.y, 2, 7) + " " + @@ -2644,23 +2644,23 @@ bool TDynamicObject::Update(double dt, double dt1) // "+FloatToStrF(vPosition.z,ffFixed,7,2)+", time // "+FloatToStrF(NoVoltTime,ffFixed,7,2)); } - // Ra 2F1H: nie było sensu wpisywać tu zera po upływie czasu, bo - // zmienna była - // tymczasowa, a napięcie zerowane od razu + // Ra 2F1H: nie byďż˝o sensu wpisywaďż˝ tu zera po upďż˝ywie czasu, bo + // zmienna byďż˝a + // tymczasowa, a napiďż˝cie zerowane od razu tmpTraction.TractionVoltage = 0; // Ra 2013-12: po co tak? - // pControlled->MainSwitch(false); //może tak? + // pControlled->MainSwitch(false); //moďż˝e tak? } } } - // else //Ra: nie no, trzeba podnieść pantografy, jak nie będzie drutu, to - // będą miały prąd - // po osiągnięciu 1.4m + // else //Ra: nie no, trzeba podnie�� pantografy, jak nie bďż˝dzie drutu, to + // bďż˝dďż˝ miaďż˝y prďż˝d + // po osiďż˝gniďż˝ciu 1.4m // tmpTraction.TractionVoltage=0.95*MoverParameters->EnginePowerSource.MaxVoltage; } else tmpTraction.TractionVoltage = 0.95 * MoverParameters->EnginePowerSource.MaxVoltage; tmpTraction.TractionFreq = 0; - tmpTraction.TractionMaxCurrent = 7500; // Ra: chyba za dużo? powinno wywalać przy 1500 + tmpTraction.TractionMaxCurrent = 7500; // Ra: chyba za duďż˝o? powinno wywalaďż˝ przy 1500 tmpTraction.TractionResistivity = 0.3; // McZapkie: predkosc w torze przekazac do TrackParam @@ -2669,7 +2669,7 @@ bool TDynamicObject::Update(double dt, double dt1) tp.Velmax = MyTrack->VelocityGet(); if (Mechanik) - { // Ra 2F3F: do Driver.cpp to przenieść? + { // Ra 2F3F: do Driver.cpp to przenie��? MoverParameters->EqvtPipePress = GetEPP(); // srednie cisnienie w PG if ((Mechanik->Primary()) && (MoverParameters->EngineType == ElectricInductionMotor)) // jesli glowny i z @@ -2726,7 +2726,7 @@ bool TDynamicObject::Update(double dt, double dt1) FrED -= Min0R(p->MoverParameters->eimv[eimv_Fr], 0) * 1000; // chwilowo realizowane ED -> do pneumatyki Frj += Max0R(p->MoverParameters->eimv[eimv_Fr], 0) * - 1000;// chwilowo realizowany napęd -> do utrzymującego + 1000;// chwilowo realizowany napďż˝d -> do utrzymujďż˝cego masa += p->MoverParameters->TotalMass; osie += p->MoverParameters->NAxles; } @@ -2926,30 +2926,30 @@ bool TDynamicObject::Update(double dt, double dt1) // Mechanik->LastReactionTime=0; // } - Mechanik->UpdateSituation(dt1); // przebłyski świadomości AI + Mechanik->UpdateSituation(dt1); // przebďż˝yski ďż˝wiadomoďż˝ci AI } // fragment "z EXE Kursa" - if (MoverParameters->Mains) // nie wchodzić w funkcję bez potrzeby + if (MoverParameters->Mains) // nie wchodziďż˝ w funkcjďż˝ bez potrzeby if ((!MoverParameters->Battery) && (Controller == Humandriver) && (MoverParameters->EngineType != DieselEngine) && (MoverParameters->EngineType != WheelsDriven)) - { // jeśli bateria wyłączona, a nie diesel ani drezyna + { // jeďż˝li bateria wy��czona, a nie diesel ani drezyna // reczna - if (MoverParameters->MainSwitch(false)) // wyłączyć zasilanie + if (MoverParameters->MainSwitch(false)) // wy��czyďż˝ zasilanie MoverParameters->EventFlag = true; } if (MoverParameters->TrainType == dt_ET42) - { // powinny być wszystkie dwuczłony oraz EZT + { // powinny byďż˝ wszystkie dwuczďż˝ony oraz EZT /* - //Ra: to jest bez sensu, bo wyłącza WS przy przechodzeniu przez - "wewnętrzne" kabiny (z + //Ra: to jest bez sensu, bo wy��cza WS przy przechodzeniu przez + "wewnďż˝trzne" kabiny (z powodu ActiveCab) - //trzeba to zrobić inaczej, np. dla członu A sprawdzać, czy jest B - //albo sprawdzać w momencie załączania WS i zmiany w sprzęgach + //trzeba to zrobiďż˝ inaczej, np. dla czďż˝onu A sprawdzaďż˝, czy jest B + //albo sprawdzaďż˝ w momencie za��czania WS i zmiany w sprzďż˝gach if (((TestFlag(MoverParameters->Couplers[1].CouplingFlag,ctrain_controll))&&(MoverParameters->ActiveCab>0)&&(NextConnected->MoverParameters->TrainType!=dt_ET42))||((TestFlag(MoverParameters->Couplers[0].CouplingFlag,ctrain_controll))&&(MoverParameters->ActiveCab<0)&&(PrevConnected->MoverParameters->TrainType!=dt_ET42))) - {//sprawdzenie, czy z tyłu kabiny mamy drugi człon + {//sprawdzenie, czy z tyďż˝u kabiny mamy drugi czďż˝on if (MoverParameters->MainSwitch(false)) MoverParameters->EventFlag=true; } @@ -2967,11 +2967,11 @@ bool TDynamicObject::Update(double dt, double dt1) GetdMoveLen() + MoverParameters->ComputeMovement(dt, dt1, ts, tp, tmpTraction, l, r); // yB: zeby zawsze wrzucalo w jedna strone zakretu MoverParameters->AccN *= -ABuGetDirection(); - // if (dDOMoveLen!=0.0) //Ra: nie może być, bo blokuje Event0 + // if (dDOMoveLen!=0.0) //Ra: nie moďż˝e byďż˝, bo blokuje Event0 Move(dDOMoveLen); - if (!bEnabled) // usuwane pojazdy nie mają toru - { // pojazd do usunięcia - Global::pGround->bDynamicRemove = true; // sprawdzić + if (!bEnabled) // usuwane pojazdy nie majďż˝ toru + { // pojazd do usuniďż˝cia + Global::pGround->bDynamicRemove = true; // sprawdziďż˝ return false; } Global::ABuDebug = dDOMoveLen / dt1; @@ -2982,7 +2982,7 @@ bool TDynamicObject::Update(double dt, double dt1) // taka prowizorka zeby sciszyc stukot dalekiej lokomotywy double ObjectDist; double vol = 0; - // double freq; //Ra: nie używane + // double freq; //Ra: nie uďż˝ywane ObjectDist = SquareMagnitude(Global::pCameraPosition - vPosition); // McZapkie-270202 if (MyTrack->fSoundDistance != -1) @@ -3090,7 +3090,7 @@ bool TDynamicObject::Update(double dt, double dt1) } */ if ((MoverParameters->TrainType == dt_ET40) || (MoverParameters->TrainType == dt_EP05)) { // dla ET40 i EU05 automatyczne cofanie nastawnika - i tak - // nie będzie to działać dobrze... + // nie bďż˝dzie to dziaďż˝aďż˝ dobrze... /* if ((MoverParameters->MainCtrlPos>MoverParameters->MainCtrlActualPos)&&(abs(MoverParameters->Im)>MoverParameters->IminHi)) { @@ -3104,7 +3104,7 @@ bool TDynamicObject::Update(double dt, double dt1) if ((!Console::Pressed(Global::Keys[k_DecMainCtrl])) && (MoverParameters->MainCtrlPos < MoverParameters->MainCtrlActualPos)) { - MoverParameters->IncMainCtrl(1); // Ra 15-01: a to nie miało być tylko cofanie? + MoverParameters->IncMainCtrl(1); // Ra 15-01: a to nie miaďż˝o byďż˝ tylko cofanie? } } @@ -3112,53 +3112,53 @@ bool TDynamicObject::Update(double dt, double dt1) { // McZapkie-050402: krecenie kolami: dWheelAngle[0] += 114.59155902616464175359630962821 * MoverParameters->V * dt1 / MoverParameters->WheelDiameterL; // przednie toczne - dWheelAngle[1] += MoverParameters->nrot * dt1 * 360.0; // napędne + dWheelAngle[1] += MoverParameters->nrot * dt1 * 360.0; // napďż˝dne dWheelAngle[2] += 114.59155902616464175359630962821 * MoverParameters->V * dt1 / MoverParameters->WheelDiameterT; // tylne toczne if (dWheelAngle[0] > 360.0) - dWheelAngle[0] -= 360.0; // a w drugą stronę jak się kręcą? + dWheelAngle[0] -= 360.0; // a w drugďż˝ stronďż˝ jak siďż˝ krďż˝cďż˝? if (dWheelAngle[1] > 360.0) dWheelAngle[1] -= 360.0; if (dWheelAngle[2] > 360.0) dWheelAngle[2] -= 360.0; } - if (pants) // pantograf może być w wagonie kuchennym albo pojeździe rewizyjnym + if (pants) // pantograf moďż˝e byďż˝ w wagonie kuchennym albo pojeďż˝dzie rewizyjnym // (np. SR61) - { // przeliczanie kątów dla pantografów - double k; // tymczasowy kąt + { // przeliczanie kďż˝tďż˝w dla pantografďż˝w + double k; // tymczasowy kďż˝t double PantDiff; - TAnimPant *p; // wskaźnik do obiektu danych pantografu + TAnimPant *p; // wskaďż˝nik do obiektu danych pantografu double fCurrent = (MoverParameters->DynamicBrakeFlag && MoverParameters->ResistorsFlag ? 0 : MoverParameters->Itot) + - MoverParameters->TotalCurrent; // prąd pobierany przez pojazd - bez + MoverParameters->TotalCurrent; // prďż˝d pobierany przez pojazd - bez // sensu z tym (TotalCurrent) // TotalCurrent to bedzie prad nietrakcyjny (niezwiazany z napedem) - // fCurrent+=fabs(MoverParameters->Voltage)*1e-6; //prąd płynący przez + // fCurrent+=fabs(MoverParameters->Voltage)*1e-6; //prďż˝d pďż˝ynďż˝cy przez // woltomierz, - // rozładowuje kondensator orgromowy 4µF - double fPantCurrent = fCurrent; // normalnie cały prąd przez jeden pantograf + // rozďż˝adowuje kondensator orgromowy 4ďż˝F + double fPantCurrent = fCurrent; // normalnie caďż˝y prďż˝d przez jeden pantograf if (pants) - if (iAnimType[ANIM_PANTS] > 1) // a jeśli są dwa pantografy //Ra 1014-11: - // proteza, trzeba zrobić sensowniej + if (iAnimType[ANIM_PANTS] > 1) // a jeďż˝li sďż˝ dwa pantografy //Ra 1014-11: + // proteza, trzeba zrobiďż˝ sensowniej if (pants[0].fParamPants->hvPowerWire && - pants[1].fParamPants->hvPowerWire) // i oba podłączone do drutów - fPantCurrent = fCurrent * 0.5; // to dzielimy prąd równo na oba (trochę bez - // sensu, ale lepiej tak niż podwoić prąd) + pants[1].fParamPants->hvPowerWire) // i oba pod��czone do drutďż˝w + fPantCurrent = fCurrent * 0.5; // to dzielimy prďż˝d rďż˝wno na oba (trochďż˝ bez + // sensu, ale lepiej tak niďż˝ podwoiďż˝ prďż˝d) for (int i = 0; i < iAnimType[ANIM_PANTS]; ++i) - { // pętla po wszystkich pantografach + { // pďż˝tla po wszystkich pantografach p = pants[i].fParamPants; if (p->PantWys < 0) - { // patograf został połamany, liczony nie będzie + { // patograf zostaďż˝ poďż˝amany, liczony nie bďż˝dzie if (p->fAngleL > p->fAngleL0) - p->fAngleL -= 0.2 * dt1; // nieco szybciej niż jak dla opuszczania + p->fAngleL -= 0.2 * dt1; // nieco szybciej niďż˝ jak dla opuszczania if (p->fAngleL < p->fAngleL0) - p->fAngleL = p->fAngleL0; // kąt graniczny + p->fAngleL = p->fAngleL0; // kďż˝t graniczny if (p->fAngleU < M_PI) - p->fAngleU += 0.5 * dt1; // górne się musi ruszać szybciej. + p->fAngleU += 0.5 * dt1; // gďż˝rne siďż˝ musi ruszaďż˝ szybciej. if (p->fAngleU > M_PI) p->fAngleU = M_PI; - if (i & 1) // zgłoszono, że po połamaniu potrafi zostać zasilanie + if (i & 1) // zgďż˝oszono, ďż˝e po poďż˝amaniu potrafi zostaďż˝ zasilanie MoverParameters->PantRearVolt = 0.0; else MoverParameters->PantFrontVolt = 0.0; @@ -3166,10 +3166,10 @@ bool TDynamicObject::Update(double dt, double dt1) } PantDiff = p->PantTraction - p->PantWys; // docelowy-aktualny switch (i) // numer pantografu - { // trzeba usunąć to rozróżnienie + { // trzeba usun�� to rozr��nienie case 0: if (Global::bLiveTraction ? false : - !p->hvPowerWire) // jeśli nie ma drutu, może pooszukiwać + !p->hvPowerWire) // jeďż˝li nie ma drutu, moďż˝e pooszukiwaďż˝ MoverParameters->PantFrontVolt = (p->PantWys >= 1.2) ? 0.95 * MoverParameters->EnginePowerSource.MaxVoltage : 0.0; @@ -3179,13 +3179,13 @@ bool TDynamicObject::Update(double dt, double dt1) if ((MoverParameters->PantFrontVolt == 0.0) && (MoverParameters->PantRearVolt == 0.0)) sPantUp.Play(vol, 0, MechInside, vPosition); - if (p->hvPowerWire) // TODO: wyliczyć trzeba prąd przypadający na + if (p->hvPowerWire) // TODO: wyliczyďż˝ trzeba prďż˝d przypadajďż˝cy na // pantograf i - // wstawić do GetVoltage() + // wstawiďż˝ do GetVoltage() { MoverParameters->PantFrontVolt = p->hvPowerWire->VoltageGet(MoverParameters->Voltage, fPantCurrent); - fCurrent -= fPantCurrent; // taki prąd płynie przez powyższy pantograf + fCurrent -= fPantCurrent; // taki prďż˝d pďż˝ynie przez powyďż˝szy pantograf } else MoverParameters->PantFrontVolt = 0.0; @@ -3195,7 +3195,7 @@ bool TDynamicObject::Update(double dt, double dt1) break; case 1: if (Global::bLiveTraction ? false : - !p->hvPowerWire) // jeśli nie ma drutu, może pooszukiwać + !p->hvPowerWire) // jeďż˝li nie ma drutu, moďż˝e pooszukiwaďż˝ MoverParameters->PantRearVolt = (p->PantWys >= 1.2) ? 0.95 * MoverParameters->EnginePowerSource.MaxVoltage : 0.0; @@ -3204,13 +3204,13 @@ bool TDynamicObject::Update(double dt, double dt1) if ((MoverParameters->PantRearVolt == 0.0) && (MoverParameters->PantFrontVolt == 0.0)) sPantUp.Play(vol, 0, MechInside, vPosition); - if (p->hvPowerWire) // TODO: wyliczyć trzeba prąd przypadający na + if (p->hvPowerWire) // TODO: wyliczyďż˝ trzeba prďż˝d przypadajďż˝cy na // pantograf i - // wstawić do GetVoltage() + // wstawiďż˝ do GetVoltage() { MoverParameters->PantRearVolt = p->hvPowerWire->VoltageGet(MoverParameters->Voltage, fPantCurrent); - fCurrent -= fPantCurrent; // taki prąd płynie przez powyższy pantograf + fCurrent -= fPantCurrent; // taki prďż˝d pďż˝ynie przez powyďż˝szy pantograf } else MoverParameters->PantRearVolt = 0.0; @@ -3218,70 +3218,70 @@ bool TDynamicObject::Update(double dt, double dt1) else MoverParameters->PantRearVolt = 0.0; break; - } // pozostałe na razie nie obsługiwane + } // pozostaďż˝e na razie nie obsďż˝ugiwane if (MoverParameters->PantPress > (MoverParameters->TrainType == dt_EZT ? 2.5 : 3.3)) // Ra 2013-12: - // Niebugocław - // mówi, że w EZT - // podnoszą się + // Niebugocďż˝aw + // mďż˝wi, ďż˝e w EZT + // podnoszďż˝ siďż˝ // przy 2.5 pantspeedfactor = 0.015 * (MoverParameters->PantPress) * - dt1; // z EXE Kursa //Ra: wysokość zależy od ciśnienia !!! + dt1; // z EXE Kursa //Ra: wysoko�� zaleďż˝y od ciďż˝nienia !!! else pantspeedfactor = 0.0; if (pantspeedfactor < 0) pantspeedfactor = 0; k = p->fAngleL; if (i ? MoverParameters->PantRearUp : - MoverParameters->PantFrontUp) // jeśli ma być podniesiony + MoverParameters->PantFrontUp) // jeďż˝li ma byďż˝ podniesiony { - if (PantDiff > 0.001) // jeśli nie dolega do drutu - { // jeśli poprzednia wysokość jest mniejsza niż pożądana, zwiększyć kąt + if (PantDiff > 0.001) // jeďż˝li nie dolega do drutu + { // jeďż˝li poprzednia wysoko�� jest mniejsza niďż˝ po��dana, zwiďż˝kszyďż˝ kďż˝t // dolnego - // ramienia zgodnie z ciśnieniem + // ramienia zgodnie z ciďż˝nieniem if (pantspeedfactor > - 0.55 * PantDiff) // 0.55 to około pochodna kąta po wysokości + 0.55 * PantDiff) // 0.55 to okoďż˝o pochodna kďż˝ta po wysokoďż˝ci k += 0.55 * PantDiff; // ograniczenie "skoku" w danej klatce else - k += pantspeedfactor; // dolne ramię - // jeśli przekroczono kąt graniczny, zablokować pantograf (wymaga + k += pantspeedfactor; // dolne ramiďż˝ + // jeďż˝li przekroczono kďż˝t graniczny, zablokowaďż˝ pantograf (wymaga // interwencji - // pociągu sieciowego) + // pociďż˝gu sieciowego) } else if (PantDiff < -0.001) - { // drut się obniżył albo pantograf + { // drut siďż˝ obniďż˝yďż˝ albo pantograf // podniesiony za wysoko - // jeśli wysokość jest zbyt duża, wyznaczyć zmniejszenie kąta - // jeśli zmniejszenie kąta jest zbyt duże, przejść do trybu łamania + // jeďż˝li wysoko�� jest zbyt duďż˝a, wyznaczyďż˝ zmniejszenie kďż˝ta + // jeďż˝li zmniejszenie kďż˝ta jest zbyt duďż˝e, przej�� do trybu ďż˝amania // pantografu - // if (PantFrontDiff<-0.05) //skok w dół o 5cm daje złąmanie + // if (PantFrontDiff<-0.05) //skok w d�� o 5cm daje z��manie // pantografu - k += 0.4 * PantDiff; // mniej niż pochodna kąta po wysokości - } // jeśli wysokość jest dobra, nic więcej nie liczyć + k += 0.4 * PantDiff; // mniej niďż˝ pochodna kďż˝ta po wysokoďż˝ci + } // jeďż˝li wysoko�� jest dobra, nic wiďż˝cej nie liczyďż˝ } else - { // jeśli ma być na dole - if (k > p->fAngleL0) // jeśli wyżej niż położenie wyjściowe - k -= 0.15 * dt1; // ruch w dół + { // jeďż˝li ma byďż˝ na dole + if (k > p->fAngleL0) // jeďż˝li wyďż˝ej niďż˝ poďż˝oďż˝enie wyjďż˝ciowe + k -= 0.15 * dt1; // ruch w d�� if (k < p->fAngleL0) - k = p->fAngleL0; // położenie minimalne + k = p->fAngleL0; // poďż˝oďż˝enie minimalne } if (k != p->fAngleL) - { //żeby nie liczyć w kilku miejscach ani gdy nie potrzeba + { //ďż˝eby nie liczyďż˝ w kilku miejscach ani gdy nie potrzeba if (k + p->fAngleU < M_PI) - { // o ile nie został osiągnięty kąt maksymalny - p->fAngleL = k; // zmieniony kąt - // wyliczyć kąt górnego ramienia z wzoru (a)cosinusowego + { // o ile nie zostaďż˝ osiďż˝gniďż˝ty kďż˝t maksymalny + p->fAngleL = k; // zmieniony kďż˝t + // wyliczyďż˝ kďż˝t gďż˝rnego ramienia z wzoru (a)cosinusowego //=acos((b*cos()+c)/a) - // p->dPantAngleT=acos((1.22*cos(k)+0.535)/1.755); //górne ramię - p->fAngleU = acos((p->fLenL1 * cos(k) + p->fHoriz) / p->fLenU1); // górne ramię - // wyliczyć aktualną wysokość z wzoru sinusowego + // p->dPantAngleT=acos((1.22*cos(k)+0.535)/1.755); //gďż˝rne ramiďż˝ + p->fAngleU = acos((p->fLenL1 * cos(k) + p->fHoriz) / p->fLenU1); // gďż˝rne ramiďż˝ + // wyliczyďż˝ aktualnďż˝ wysoko�� z wzoru sinusowego // h=a*sin()+b*sin() p->PantWys = p->fLenL1 * sin(k) + p->fLenU1 * sin(p->fAngleU) + - p->fHeight; // wysokość całości + p->fHeight; // wysoko�� caďż˝oďż˝ci } } - } // koniec pętli po pantografach + } // koniec pďż˝tli po pantografach if ((MoverParameters->PantFrontSP == false) && (MoverParameters->PantFrontUp == false)) { sPantDown.Play(vol, 0, MechInside, vPosition); @@ -3296,19 +3296,19 @@ bool TDynamicObject::Update(double dt, double dt1) { // Winger 240404 - wylaczanie sprezarki i // przetwornicy przy braku napiecia if (tmpTraction.TractionVoltage == 0) - { // to coś wyłączało dźwięk silnika w ST43! + { // to coďż˝ wy��czaďż˝o dďż˝wiďż˝k silnika w ST43! MoverParameters->ConverterFlag = false; - MoverParameters->CompressorFlag = false; // Ra: to jest wątpliwe - wyłączenie - // sprężarki powinno być w jednym miejscu! + MoverParameters->CompressorFlag = false; // Ra: to jest wďż˝tpliwe - wy��czenie + // spr��arki powinno byďż˝ w jednym miejscu! } } } else if (MoverParameters->EnginePowerSource.SourceType == InternalSource) if (MoverParameters->EnginePowerSource.PowerType == SteamPower) // if (smPatykird1[0]) - { // Ra: animacja rozrządu parowozu, na razie nieoptymalizowane - /* //Ra: tymczasowo wyłączone ze względu na porządkowanie animacji - pantografów + { // Ra: animacja rozrzďż˝du parowozu, na razie nieoptymalizowane + /* //Ra: tymczasowo wy��czone ze wzglďż˝du na porzďż˝dkowanie animacji + pantografďż˝w double fi,dx,c2,ka,kc; double sin_fi,cos_fi; double L1=1.6688888888888889; @@ -3317,11 +3317,11 @@ bool TDynamicObject::Update(double dt, double dt1) double L=5.686422222; //2558.89/450 double G1,G2,G3,ksi,sin_ksi,gam; double G1_2,G2_2,G3_2; //kwadraty - //ruch tłoków oraz korbowodów + //ruch tďż˝okďż˝w oraz korbowodďż˝w for (int i=0;i<=1;++i) - {//obie strony w ten sam sposób - fi=DegToRad(dWheelAngle[1]+(i?pant2x:pant1x)); //kąt obrotu koła dla - tłoka 1 + {//obie strony w ten sam sposďż˝b + fi=DegToRad(dWheelAngle[1]+(i?pant2x:pant1x)); //kďż˝t obrotu koďż˝a dla + tďż˝oka 1 sin_fi=sin(fi); cos_fi=cos(fi); dx=panty*cos_fi+sqrt(panth*panth-panty*panty*sin_fi*sin_fi)-panth; @@ -3332,30 +3332,30 @@ bool TDynamicObject::Update(double dt, double dt1) if (smPatykirg1[i]) //na razie zabezpieczenie smPatykirg1[i]->SetRotateXYZ(vector3(RadToDeg(ka),0,0)); //smPatykirg1[0]->SetRotate(float3(0,1,0),RadToDeg(fi)); //obracamy - //ruch drążka mimośrodkowego oraz jarzma - //korzystałem z pliku PDF "mm.pdf" (opis czworoboku + //ruch dr��ka mimoďż˝rodkowego oraz jarzma + //korzystaďż˝em z pliku PDF "mm.pdf" (opis czworoboku korbowo-wahaczowego): - //"MECHANIKA MASZYN. Szkic wykładu i laboratorium komputerowego." - //Prof. dr hab. inż. Jerzy Zajączkowski, 2007, Politechnika Łódzka - //L1 - wysokość (w pionie) osi jarzma ponad osią koła - //L2 - odległość w poziomie osi jarzma od osi koła - //Lc - długość korby mimośrodu na kole - //Lr - promień jarzma =1.0 (pozostałe przeliczone proporcjonalnie) - //L - długość drążka mimośrodowego - //fi - kąt obrotu koła - //ksi - kąt obrotu jarzma (od pionu) - //gam - odchylenie drążka mimośrodowego od poziomu + //"MECHANIKA MASZYN. Szkic wykďż˝adu i laboratorium komputerowego." + //Prof. dr hab. inďż˝. Jerzy Zajďż˝czkowski, 2007, Politechnika ��dzka + //L1 - wysoko�� (w pionie) osi jarzma ponad osiďż˝ koďż˝a + //L2 - odlegďż˝o�� w poziomie osi jarzma od osi koďż˝a + //Lc - dďż˝ugo�� korby mimoďż˝rodu na kole + //Lr - promieďż˝ jarzma =1.0 (pozostaďż˝e przeliczone proporcjonalnie) + //L - dďż˝ugo�� dr��ka mimoďż˝rodowego + //fi - kďż˝t obrotu koďż˝a + //ksi - kďż˝t obrotu jarzma (od pionu) + //gam - odchylenie dr��ka mimoďż˝rodowego od poziomu //G1=(Lr*Lr+L1*L1+L2*L2+Kc*Lc-L*L-2.0*Lc*L2*cos(fi)+2.0*Lc*L1*sin(fi))/(Lr*Lr); //G2=2.0*(L2-Lc*cos(fi))/Lr; //G3=2.0*(L1-Lc*sin(fi))/Lr; - fi=DegToRad(dWheelAngle[1]+(i?pant2x:pant1x)-96.77416667); //kąt - obrotu koła dla - tłoka 1 - //1) dla dWheelAngle[1]=0° korba jest w dół, a mimośród w stronę + fi=DegToRad(dWheelAngle[1]+(i?pant2x:pant1x)-96.77416667); //kďż˝t + obrotu koďż˝a dla + tďż˝oka 1 + //1) dla dWheelAngle[1]=0ďż˝ korba jest w d��, a mimoďż˝rďż˝d w stronďż˝ jarzma, czyli - fi=-7° - //2) dla dWheelAngle[1]=90° korba jest do tyłu, a mimośród w dół, - czyli fi=83° + fi=-7ďż˝ + //2) dla dWheelAngle[1]=90ďż˝ korba jest do tyďż˝u, a mimoďż˝rďż˝d w d��, + czyli fi=83ďż˝ sin_fi=sin(fi); cos_fi=cos(fi); G1=(1.0+L1*L1+L2*L2+Lc*Lc-L*L-2.0*Lc*L2*cos_fi+2.0*Lc*L1*sin_fi); @@ -3366,22 +3366,22 @@ bool TDynamicObject::Update(double dt, double dt1) G3_2=G3*G3; sin_ksi=(G1*G2-G3*_fm_sqrt(G2_2+G3_2-G1_2))/(G2_2+G3_2); //x1 (minus delta) - ksi=asin(sin_ksi); //kąt jarzma + ksi=asin(sin_ksi); //kďż˝t jarzma if (smPatykirg2[i]) - smPatykirg2[i]->SetRotateXYZ(vector3(RadToDeg(ksi),0,0)); //obrócenie + smPatykirg2[i]->SetRotateXYZ(vector3(RadToDeg(ksi),0,0)); //obrďż˝cenie jarzma - //1) ksi=-23°, gam= - //2) ksi=10°, gam= - //gam=acos((L2-sin_ksi-Lc*cos_fi)/L); //kąt od poziomu, liczony - względem poziomu - //gam=asin((L1-cos_ksi-Lc*sin_fi)/L); //kąt od poziomu, liczony - względem pionu - gam=atan2((L1-cos(ksi)+Lc*sin_fi),(L2-sin_ksi+Lc*cos_fi)); //kąt od + //1) ksi=-23ďż˝, gam= + //2) ksi=10ďż˝, gam= + //gam=acos((L2-sin_ksi-Lc*cos_fi)/L); //kďż˝t od poziomu, liczony + wzglďż˝dem poziomu + //gam=asin((L1-cos_ksi-Lc*sin_fi)/L); //kďż˝t od poziomu, liczony + wzglďż˝dem pionu + gam=atan2((L1-cos(ksi)+Lc*sin_fi),(L2-sin_ksi+Lc*cos_fi)); //kďż˝t od poziomu if (smPatykird2[i]) //na razie zabezpieczenie smPatykird2[i]->SetRotateXYZ(vector3(RadToDeg(-gam-ksi),0,0)); - //obrócenie drążka - mimośrodowego + //obrďż˝cenie dr��ka + mimoďż˝rodowego } */ } @@ -3389,54 +3389,54 @@ bool TDynamicObject::Update(double dt, double dt1) // NBMX Obsluga drzwi, MC: zuniwersalnione if ((dDoorMoveL < MoverParameters->DoorMaxShiftL) && (MoverParameters->DoorLeftOpened)) { - rsDoorOpen.Play(vol, 0, MechInside, vPosition); + rsDoorOpen.Play(1, 0, MechInside, vPosition); dDoorMoveL += dt1 * 0.5 * MoverParameters->DoorOpenSpeed; } if ((dDoorMoveL > 0) && (!MoverParameters->DoorLeftOpened)) { - rsDoorClose.Play(vol, 0, MechInside, vPosition); + rsDoorClose.Play(1, 0, MechInside, vPosition); dDoorMoveL -= dt1 * MoverParameters->DoorCloseSpeed; if (dDoorMoveL < 0) dDoorMoveL = 0; } if ((dDoorMoveR < MoverParameters->DoorMaxShiftR) && (MoverParameters->DoorRightOpened)) { - rsDoorOpen.Play(vol, 0, MechInside, vPosition); + rsDoorOpen.Play(1, 0, MechInside, vPosition); dDoorMoveR += dt1 * 0.5 * MoverParameters->DoorOpenSpeed; } if ((dDoorMoveR > 0) && (!MoverParameters->DoorRightOpened)) { - rsDoorClose.Play(vol, 0, MechInside, vPosition); + rsDoorClose.Play(1, 0, MechInside, vPosition); dDoorMoveR -= dt1 * MoverParameters->DoorCloseSpeed; if (dDoorMoveR < 0) dDoorMoveR = 0; } // ABu-160303 sledzenie toru przed obiektem: ******************************* - // Z obserwacji: v>0 -> Coupler 0; v<0 ->coupler1 (Ra: prędkość jest związana + // Z obserwacji: v>0 -> Coupler 0; v<0 ->coupler1 (Ra: prďż˝dko�� jest zwiďż˝zana // z pojazdem) // Rozroznienie jest tutaj, zeby niepotrzebnie nie skakac do funkcji. Nie jest // uzaleznione // od obecnosci AI, zeby uwzglednic np. jadace bez lokomotywy wagony. - // Ra: można by przenieść na poziom obiektu reprezentującego skład, aby nie - // sprawdzać środkowych - if (CouplCounter > 25) // licznik, aby nie robić za każdym razem - { // poszukiwanie czegoś do zderzenia się - fTrackBlock = 10000.0; // na razie nie ma przeszkód (na wypadek nie + // Ra: moďż˝na by przenie�� na poziom obiektu reprezentujďż˝cego skďż˝ad, aby nie + // sprawdzaďż˝ ďż˝rodkowych + if (CouplCounter > 25) // licznik, aby nie robiďż˝ za kaďż˝dym razem + { // poszukiwanie czegoďż˝ do zderzenia siďż˝ + fTrackBlock = 10000.0; // na razie nie ma przeszkďż˝d (na wypadek nie // uruchomienia skanowania) - // jeśli nie ma zwrotnicy po drodze, to tylko przeliczyć odległość? - if (MoverParameters->V > 0.03) //[m/s] jeśli jedzie do przodu (w kierunku Coupler 0) + // jeďż˝li nie ma zwrotnicy po drodze, to tylko przeliczyďż˝ odlegďż˝o��? + if (MoverParameters->V > 0.03) //[m/s] jeďż˝li jedzie do przodu (w kierunku Coupler 0) { if (MoverParameters->Couplers[0].CouplingFlag == - ctrain_virtual) // brak pojazdu podpiętego? + ctrain_virtual) // brak pojazdu podpiďż˝tego? { - ABuScanObjects(1, fScanDist); // szukanie czegoś do podłączenia + ABuScanObjects(1, fScanDist); // szukanie czegoďż˝ do pod��czenia // WriteLog(asName+" - block 0: "+AnsiString(fTrackBlock)); } } - else if (MoverParameters->V < -0.03) //[m/s] jeśli jedzie do tyłu (w kierunku Coupler 1) + else if (MoverParameters->V < -0.03) //[m/s] jeďż˝li jedzie do tyďż˝u (w kierunku Coupler 1) if (MoverParameters->Couplers[1].CouplingFlag == - ctrain_virtual) // brak pojazdu podpiętego? + ctrain_virtual) // brak pojazdu podpiďż˝tego? { ABuScanObjects(-1, fScanDist); // WriteLog(asName+" - block 1: "+AnsiString(fTrackBlock)); @@ -3444,12 +3444,12 @@ bool TDynamicObject::Update(double dt, double dt1) CouplCounter = Random(20); // ponowne sprawdzenie po losowym czasie } if (MoverParameters->Vel > 0.1) //[km/h] - ++CouplCounter; // jazda sprzyja poszukiwaniu połączenia + ++CouplCounter; // jazda sprzyja poszukiwaniu po��czenia else { - CouplCounter = 25; // a bezruch nie, ale trzeba zaktualizować odległość, bo - // zawalidroga może - // sobie pojechać + CouplCounter = 25; // a bezruch nie, ale trzeba zaktualizowaďż˝ odlegďż˝o��, bo + // zawalidroga moďż˝e + // sobie pojechaďż˝ } if (MoverParameters->DerailReason > 0) { @@ -3463,15 +3463,15 @@ bool TDynamicObject::Update(double dt, double dt1) break; case 3: ErrorLog("Bad dynamic: " + asName + " derailed due to track width"); - break; // błąd w scenerii + break; // b��d w scenerii case 4: ErrorLog("Bad dynamic: " + asName + " derailed due to wrong track type"); - break; // błąd w scenerii + break; // b��d w scenerii } - MoverParameters->DerailReason = 0; //żeby tylko raz + MoverParameters->DerailReason = 0; //ďż˝eby tylko raz } if (MoverParameters->LoadStatus) - LoadUpdate(); // zmiana modelu ładunku + LoadUpdate(); // zmiana modelu ďż˝adunku return true; // Ra: chyba tak? } @@ -3511,18 +3511,18 @@ bool TDynamicObject::FastUpdate(double dt) FastMove(dDOMoveLen); if (MoverParameters->LoadStatus) - LoadUpdate(); // zmiana modelu ładunku + LoadUpdate(); // zmiana modelu ďż˝adunku return true; // Ra: chyba tak? } // McZapkie-040402: liczenie pozycji uwzgledniajac wysokosc szyn itp. // vector3 TDynamicObject::GetPosition() -//{//Ra: pozycja pojazdu jest liczona zaraz po przesunięciu +//{//Ra: pozycja pojazdu jest liczona zaraz po przesuniďż˝ciu // return vPosition; //}; void TDynamicObject::TurnOff() -{ // wyłączenie rysowania submodeli zmiennych dla +{ // wy��czenie rysowania submodeli zmiennych dla // egemplarza pojazdu btnOn = false; btCoupler1.TurnOff(); @@ -3558,7 +3558,7 @@ void TDynamicObject::TurnOff() }; void TDynamicObject::Render() -{ // rysowanie elementów nieprzezroczystych +{ // rysowanie elementďż˝w nieprzezroczystych // youBy - sprawdzamy, czy jest sens renderowac double modelrotate; vector3 tempangle; @@ -3568,12 +3568,12 @@ void TDynamicObject::Render() double ObjSqrDist = SquareMagnitude(Global::pCameraPosition - vPosition); // koniec przeklejki if (ObjSqrDist < 500) // jak jest blisko - do 70m - modelrotate = 0.01; // mały kąt, żeby nie znikało + modelrotate = 0.01; // maďż˝y kďż˝t, ďż˝eby nie znikaďż˝o else - { // Global::pCameraRotation to kąt bewzględny w świecie (zero - na - // północ) + { // Global::pCameraRotation to kďż˝t bewzglďż˝dny w ďż˝wiecie (zero - na + // p��noc) tempangle = (vPosition - Global::pCameraPosition); // wektor od kamery - modelrotate = ABuAcos(tempangle); // określenie kąta + modelrotate = ABuAcos(tempangle); // okreďż˝lenie kďż˝ta // if (modelrotate>M_PI) modelrotate-=(2*M_PI); modelrotate += Global::pCameraRotation; } @@ -3590,10 +3590,10 @@ void TDynamicObject::Render() if (renderme) { - TSubModel::iInstance = (int)this; //żeby nie robić cudzych animacji + TSubModel::iInstance = (int)this; //ďż˝eby nie robiďż˝ cudzych animacji // AnsiString asLoadName=""; double ObjSqrDist = SquareMagnitude(Global::pCameraPosition - vPosition); - ABuLittleUpdate(ObjSqrDist); // ustawianie zmiennych submodeli dla wspólnego modelu + ABuLittleUpdate(ObjSqrDist); // ustawianie zmiennych submodeli dla wspďż˝lnego modelu // Cone(vCoulpler[0],modelRot.z,0); // Cone(vCoulpler[1],modelRot.z,1); @@ -3601,12 +3601,12 @@ void TDynamicObject::Render() // ActualTrack= GetTrack(); //McZapkie-240702 #if RENDER_CONE - { // Ra: testowe renderowanie pozycji wózków w postaci ostrosłupów, wymaga + { // Ra: testowe renderowanie pozycji wďż˝zkďż˝w w postaci ostrosďż˝upďż˝w, wymaga // GLUT32.DLL double dir = RadToDeg(atan2(vLeft.z, vLeft.x)); Axle0.Render(0); Axle1.Render(1); // bogieRot[0] - // if (PrevConnected) //renderowanie połączenia + // if (PrevConnected) //renderowanie po��czenia } #endif @@ -3614,28 +3614,28 @@ void TDynamicObject::Render() // vector3 pos= vPosition; // double ObjDist= SquareMagnitude(Global::pCameraPosition-pos); if (this == Global::pUserDynamic) - { // specjalne ustawienie, aby nie trzęsło + { // specjalne ustawienie, aby nie trzďż˝sďż˝o if (Global::bSmudge) - { // jak jest widoczna smuga, to pojazd renderować po + { // jak jest widoczna smuga, to pojazd renderowaďż˝ po // wyrenderowaniu smugi - glPopMatrix(); // a to trzeba zebrać przed wyjściem + glPopMatrix(); // a to trzeba zebraďż˝ przed wyjďż˝ciem return; } - // if (Global::pWorld->) //tu trzeba by ustawić animacje na modelu - // zewnętrznym - glLoadIdentity(); // zacząć od macierzy jedynkowej + // if (Global::pWorld->) //tu trzeba by ustawiďż˝ animacje na modelu + // zewnďż˝trznym + glLoadIdentity(); // zacz�� od macierzy jedynkowej Global::pCamera->SetCabMatrix(vPosition); // specjalne ustawienie kamery } else glTranslated(vPosition.x, vPosition.y, - vPosition.z); // standardowe przesunięcie względem początku scenerii + vPosition.z); // standardowe przesuniďż˝cie wzglďż˝dem poczďż˝tku scenerii glMultMatrixd(mMatrix.getArray()); if (fShade > 0.0) { // Ra: zmiana oswietlenia w tunelu, wykopie GLfloat ambientLight[4] = {0.5f, 0.5f, 0.5f, 1.0f}; GLfloat diffuseLight[4] = {0.5f, 0.5f, 0.5f, 1.0f}; GLfloat specularLight[4] = {0.5f, 0.5f, 0.5f, 1.0f}; - // trochę problem z ambientem w wykopie... + // trochďż˝ problem z ambientem w wykopie... for (int li = 0; li < 3; li++) { ambientLight[li] = Global::ambientDayLight[li] * fShade; @@ -3652,7 +3652,7 @@ void TDynamicObject::Render() if (FreeFlyModeFlag ? true : !mdKabina || !bDisplayCab) mdLowPolyInt->RaRender(ObjSqrDist, ReplacableSkinID, iAlpha); mdModel->RaRender(ObjSqrDist, ReplacableSkinID, iAlpha); - if (mdLoad) // renderowanie nieprzezroczystego ładunku + if (mdLoad) // renderowanie nieprzezroczystego ďż˝adunku mdLoad->RaRender(ObjSqrDist, ReplacableSkinID, iAlpha); if (mdPrzedsionek) mdPrzedsionek->RaRender(ObjSqrDist, ReplacableSkinID, iAlpha); @@ -3663,21 +3663,21 @@ void TDynamicObject::Render() if (FreeFlyModeFlag ? true : !mdKabina || !bDisplayCab) mdLowPolyInt->Render(ObjSqrDist, ReplacableSkinID, iAlpha); mdModel->Render(ObjSqrDist, ReplacableSkinID, iAlpha); - if (mdLoad) // renderowanie nieprzezroczystego ładunku + if (mdLoad) // renderowanie nieprzezroczystego ďż˝adunku mdLoad->Render(ObjSqrDist, ReplacableSkinID, iAlpha); if (mdPrzedsionek) mdPrzedsionek->Render(ObjSqrDist, ReplacableSkinID, iAlpha); } // Ra: czy ta kabina tu ma sens? - // Ra: czy nie renderuje się dwukrotnie? + // Ra: czy nie renderuje siďż˝ dwukrotnie? // Ra: dlaczego jest zablokowana w przezroczystych? - if (mdKabina) // jeśli ma model kabiny + if (mdKabina) // jeďż˝li ma model kabiny if ((mdKabina != mdModel) && bDisplayCab && FreeFlyModeFlag) { // rendering kabiny gdy jest oddzielnym modelem i // ma byc wyswietlana // ABu: tylko w trybie FreeFly, zwykly tryb w world.cpp - // Ra: świetła są ustawione dla zewnętrza danego pojazdu + // Ra: ďż˝wietďż˝a sďż˝ ustawione dla zewnďż˝trza danego 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}; @@ -3721,21 +3721,21 @@ void TDynamicObject::Render() glLightfv(GL_LIGHT0, GL_DIFFUSE, Global::diffuseDayLight); glLightfv(GL_LIGHT0, GL_SPECULAR, Global::specularDayLight); } - if (fShade != 0.0) // tylko jeśli było zmieniane - { // przywrócenie standardowego oświetlenia + if (fShade != 0.0) // tylko jeďż˝li byďż˝o zmieniane + { // przywrďż˝cenie standardowego oďż˝wietlenia glLightfv(GL_LIGHT0, GL_AMBIENT, Global::ambientDayLight); glLightfv(GL_LIGHT0, GL_DIFFUSE, Global::diffuseDayLight); glLightfv(GL_LIGHT0, GL_SPECULAR, Global::specularDayLight); } glPopMatrix(); if (btnOn) - TurnOff(); // przywrócenie domyślnych pozycji submodeli + TurnOff(); // przywrďż˝cenie domyďż˝lnych pozycji submodeli } // yB - koniec mieszania z grafika }; void TDynamicObject::RenderSounds() -{ // przeliczanie dźwięków, bo będzie - // słychać bez wyświetlania sektora z +{ // przeliczanie dďż˝wiďż˝kďż˝w, bo bďż˝dzie + // sďż˝ychaďż˝ bez wyďż˝wietlania sektora z // pojazdem // McZapkie-010302: ulepszony dzwiek silnika double freq; @@ -3813,9 +3813,9 @@ void TDynamicObject::RenderSounds() } if ((MoverParameters->DynamicBrakeFlag) && (MoverParameters->EnginePower > 0.1) && (MoverParameters->EngineType == - ElectricSeriesMotor)) // Szociu - 29012012 - jeżeli uruchomiony + ElectricSeriesMotor)) // Szociu - 29012012 - jeďż˝eli uruchomiony // jest hamulec - // elektrodynamiczny, odtwarzany jest dźwięk silnika + // elektrodynamiczny, odtwarzany jest dďż˝wiďż˝k silnika vol += 0.8; if (enginevolume > 0.0001) @@ -3927,9 +3927,9 @@ void TDynamicObject::RenderSounds() // (MoverParameters->TrainType!=dt_ET22)) // if // ((MoverParameters->ConverterFlag==false)&&(MoverParameters->CompressorPower!=0)) - // MoverParameters->CompressorFlag=false; //Ra: wywalić to stąd, tu tylko dla - // wyświetlanych! - // Ra: no to już wiemy, dlaczego pociągi jeżdżą lepiej, gdy się na nie patrzy! + // MoverParameters->CompressorFlag=false; //Ra: wywaliďż˝ to stďż˝d, tu tylko dla + // wyďż˝wietlanych! + // Ra: no to juďż˝ wiemy, dlaczego pociďż˝gi jeďż˝d�� lepiej, gdy siďż˝ na nie patrzy! // if (MoverParameters->CompressorPower==2) // MoverParameters->CompressorAllow=MoverParameters->ConverterFlag; @@ -3951,7 +3951,7 @@ void TDynamicObject::RenderSounds() // youBy - przenioslem, bo diesel tez moze miec turbo if ((MoverParameters->MainCtrlPos) >= (MoverParameters->TurboTest)) // hunter-250312: dlaczego zakomentowane? - // Ra: bo nie działało dobrze + // Ra: bo nie dziaďż˝aďż˝o dobrze { // udawanie turbo: (6.66*(eng_vol-0.85)) if (eng_turbo > 6.66 * (enginevolume - 0.8) + 0.2 * dt) @@ -4096,33 +4096,33 @@ void TDynamicObject::RenderSounds() }; void TDynamicObject::RenderAlpha() -{ // rysowanie elementów półprzezroczystych +{ // rysowanie elementďż˝w p��przezroczystych if (renderme) { - TSubModel::iInstance = (int)this; //żeby nie robić cudzych animacji + TSubModel::iInstance = (int)this; //ďż˝eby nie robiďż˝ cudzych animacji double ObjSqrDist = SquareMagnitude(Global::pCameraPosition - vPosition); - ABuLittleUpdate(ObjSqrDist); // ustawianie zmiennych submodeli dla wspólnego modelu + ABuLittleUpdate(ObjSqrDist); // ustawianie zmiennych submodeli dla wspďż˝lnego modelu glPushMatrix(); if (this == Global::pUserDynamic) - { // specjalne ustawienie, aby nie trzęsło + { // specjalne ustawienie, aby nie trzďż˝sďż˝o if (Global::bSmudge) - { // jak smuga, to rysować po smudze - glPopMatrix(); // to trzeba zebrać przed wyściem + { // jak smuga, to rysowaďż˝ po smudze + glPopMatrix(); // to trzeba zebraďż˝ przed wyďż˝ciem return; } - glLoadIdentity(); // zacząć od macierzy jedynkowej + glLoadIdentity(); // zacz�� od macierzy jedynkowej Global::pCamera->SetCabMatrix(vPosition); // specjalne ustawienie kamery } else glTranslated(vPosition.x, vPosition.y, - vPosition.z); // standardowe przesunięcie względem początku scenerii + vPosition.z); // standardowe przesuniďż˝cie wzglďż˝dem poczďż˝tku scenerii glMultMatrixd(mMatrix.getArray()); if (fShade > 0.0) { // Ra: zmiana oswietlenia w tunelu, wykopie GLfloat ambientLight[4] = {0.5f, 0.5f, 0.5f, 1.0f}; GLfloat diffuseLight[4] = {0.5f, 0.5f, 0.5f, 1.0f}; GLfloat specularLight[4] = {0.5f, 0.5f, 0.5f, 1.0f}; - // trochę problem z ambientem w wykopie... + // trochďż˝ problem z ambientem w wykopie... for (int li = 0; li < 3; li++) { ambientLight[li] = Global::ambientDayLight[li] * fShade; @@ -4141,7 +4141,7 @@ void TDynamicObject::RenderAlpha() mdModel->RaRenderAlpha(ObjSqrDist, ReplacableSkinID, iAlpha); if (mdLoad) mdLoad->RaRenderAlpha(ObjSqrDist, ReplacableSkinID, iAlpha); - // if (mdPrzedsionek) //Ra: przedsionków tu wcześniej nie było - włączyć? + // if (mdPrzedsionek) //Ra: przedsionkďż˝w tu wczeďż˝niej nie byďż˝o - w��czyďż˝? // mdPrzedsionek->RaRenderAlpha(ObjSqrDist,ReplacableSkinID,iAlpha); } else @@ -4152,10 +4152,10 @@ void TDynamicObject::RenderAlpha() mdModel->RenderAlpha(ObjSqrDist, ReplacableSkinID, iAlpha); if (mdLoad) mdLoad->RenderAlpha(ObjSqrDist, ReplacableSkinID, iAlpha); - // if (mdPrzedsionek) //Ra: przedsionków tu wcześniej nie było - włączyć? + // if (mdPrzedsionek) //Ra: przedsionkďż˝w tu wczeďż˝niej nie byďż˝o - w��czyďż˝? // mdPrzedsionek->RenderAlpha(ObjSqrDist,ReplacableSkinID,iAlpha); } - /* skoro false to można wyciąc + /* skoro false to moďż˝na wyciďż˝c //ABu: Tylko w trybie freefly if (false)//((mdKabina!=mdModel) && bDisplayCab && FreeFlyModeFlag) { @@ -4206,15 +4206,15 @@ void TDynamicObject::RenderAlpha() glLightfv(GL_LIGHT0,GL_SPECULAR,Global::specularDayLight); } */ - if (fShade != 0.0) // tylko jeśli było zmieniane - { // przywrócenie standardowego oświetlenia + if (fShade != 0.0) // tylko jeďż˝li byďż˝o zmieniane + { // przywrďż˝cenie standardowego oďż˝wietlenia glLightfv(GL_LIGHT0, GL_AMBIENT, Global::ambientDayLight); glLightfv(GL_LIGHT0, GL_DIFFUSE, Global::diffuseDayLight); glLightfv(GL_LIGHT0, GL_SPECULAR, Global::specularDayLight); } glPopMatrix(); if (btnOn) - TurnOff(); // przywrócenie domyślnych pozycji submodeli + TurnOff(); // przywrďż˝cenie domyďż˝lnych pozycji submodeli } return; } // koniec renderalpha @@ -4232,7 +4232,7 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, std::string asAnimName; bool Stop_InternalData = false; - pants = NULL; // wskaźnik pierwszego obiektu animującego dla pantografów + pants = NULL; // wskaďż˝nik pierwszego obiektu animujďż˝cego dla pantografďż˝w cParser parser( TypeName + ".mmd", cParser::buffer_FILE, BaseDir ); std::string token; int i; @@ -4245,14 +4245,14 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, iMultiTex = 0; // czy jest wiele tekstur wymiennych? parser.getTokens(); parser >> asModel; - if (asModel.find('#') == asModel.length()) // Ra 2015-01: nie podoba mi się to + if (asModel.find('#') == asModel.length()) // Ra 2015-01: nie podoba mi siďż˝ to { // model wymaga wielu tekstur wymiennych iMultiTex = 1; asModel = asModel.substr(0, asModel.length() - 1); } if ((i = asModel.find(',')) != std::string::npos) - { // Ra 2015-01: może szukać przecinka w - // nazwie modelu, a po przecinku była by + { // Ra 2015-01: moďż˝e szukaďż˝ przecinka w + // nazwie modelu, a po przecinku byďż˝a by // liczba // tekstur? if (i < asModel.length()) @@ -4280,52 +4280,52 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, ReplacableSkinID[-iMultiTex] = TTexturesManager::GetTextureID( NULL, NULL, ReplacableSkin.SubString(1, i - 1).c_str(), Global::iDynamicFiltering); - ReplacableSkin.Delete(1, i); // usunięcie razem z pionową kreską + ReplacableSkin.Delete(1, i); // usuniďż˝cie razem z pionowďż˝ kreskďż˝ ReplacableSkin = Global::asCurrentTexturePath + - ReplacableSkin; // odtworzenie początku ścieżki - // sprawdzić, ile jest i ustawić iMultiTex na liczbę podanych tekstur + ReplacableSkin; // odtworzenie poczďż˝tku ďż˝cieďż˝ki + // sprawdziďż˝, ile jest i ustawiďż˝ iMultiTex na liczbďż˝ podanych tekstur if (!ReplacableSkin.IsEmpty()) - { // próba wycięcia drugiej nazwy - iMultiTex = -2; // skoro zostało coś po kresce, to są co najmniej dwie - if ((i = ReplacableSkin.Pos("|")) == 0) // gdy nie ma już kreski + { // prďż˝ba wyciďż˝cia drugiej nazwy + iMultiTex = -2; // skoro zostaďż˝o coďż˝ po kresce, to sďż˝ co najmniej dwie + if ((i = ReplacableSkin.Pos("|")) == 0) // gdy nie ma juďż˝ kreski ReplacableSkinID[-iMultiTex] = TTexturesManager::GetTextureID( NULL, NULL, ReplacableSkin.SubString(1, i - 1).c_str(), Global::iDynamicFiltering); else - { // jak jest kreska, to wczytać drugą i próbować trzecią + { // jak jest kreska, to wczytaďż˝ drugďż˝ i prďż˝bowaďż˝ trzeciďż˝ ReplacableSkinID[-iMultiTex] = TTexturesManager::GetTextureID( NULL, NULL, ReplacableSkin.SubString(1, i - 1).c_str(), Global::iDynamicFiltering); - ReplacableSkin.Delete(1, i); // usunięcie razem z pionową kreską + ReplacableSkin.Delete(1, i); // usuniďż˝cie razem z pionowďż˝ kreskďż˝ ReplacableSkin = Global::asCurrentTexturePath + - ReplacableSkin; // odtworzenie początku ścieżki + ReplacableSkin; // odtworzenie poczďż˝tku ďż˝cieďż˝ki if (!ReplacableSkin.IsEmpty()) - { // próba wycięcia trzeciej nazwy + { // prďż˝ba wyciďż˝cia trzeciej nazwy iMultiTex = - -3; // skoro zostało coś po kresce, to są co najmniej trzy - if ((i = ReplacableSkin.Pos("|")) == 0) // gdy nie ma już kreski + -3; // skoro zostaďż˝o coďż˝ po kresce, to sďż˝ co najmniej trzy + if ((i = ReplacableSkin.Pos("|")) == 0) // gdy nie ma juďż˝ kreski ReplacableSkinID[-iMultiTex] = TTexturesManager::GetTextureID( NULL, NULL, ReplacableSkin.SubString(1, i - 1).c_str(), Global::iDynamicFiltering); else - { // jak jest kreska, to wczytać trzecią i próbować czwartą + { // jak jest kreska, to wczytaďż˝ trzeciďż˝ i prďż˝bowaďż˝ czwartďż˝ ReplacableSkinID[-iMultiTex] = TTexturesManager::GetTextureID( NULL, NULL, ReplacableSkin.SubString(1, i - 1).c_str(), Global::iDynamicFiltering); - ReplacableSkin.Delete(1, i); // usunięcie razem z pionową kreską + ReplacableSkin.Delete(1, i); // usuniďż˝cie razem z pionowďż˝ kreskďż˝ ReplacableSkin = Global::asCurrentTexturePath + - ReplacableSkin; // odtworzenie początku ścieżki + ReplacableSkin; // odtworzenie poczďż˝tku ďż˝cieďż˝ki if (!ReplacableSkin.IsEmpty()) - { // próba wycięcia trzeciej nazwy - iMultiTex = -4; // skoro zostało coś po kresce, to są co + { // prďż˝ba wyciďż˝cia trzeciej nazwy + iMultiTex = -4; // skoro zostaďż˝o coďż˝ po kresce, to sďż˝ co // najmniej cztery ReplacableSkinID[-iMultiTex] = TTexturesManager::GetTextureID( NULL, NULL, ReplacableSkin.SubString(1, i - 1).c_str(), Global::iDynamicFiltering); - // więcej na razie nie zadziała, a u tak trzeba to do modeli - // przenieść + // wiďż˝cej na razie nie zadziaďż˝a, a u tak trzeba to do modeli + // przenie�� } } } @@ -4334,7 +4334,7 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, } */ if (iMultiTex > 0) - { // jeśli model ma 4 tekstury + { // jeďż˝li model ma 4 tekstury ReplacableSkinID[1] = TTexturesManager::GetTextureID( NULL, NULL, ReplacableSkin + ",1", Global::iDynamicFiltering); if (ReplacableSkinID[1]) @@ -4343,7 +4343,7 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, NULL, NULL, ReplacableSkin + ",2", Global::iDynamicFiltering); if (ReplacableSkinID[2]) { - iMultiTex = 2; // już są dwie + iMultiTex = 2; // juďż˝ sďż˝ dwie ReplacableSkinID[3] = TTexturesManager::GetTextureID( NULL, NULL, ReplacableSkin + ",3", Global::iDynamicFiltering); @@ -4354,13 +4354,13 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, NULL, NULL, ReplacableSkin + ",4", Global::iDynamicFiltering); if (ReplacableSkinID[4]) - iMultiTex = 4; // jak są cztery, to blokujemy podmianę tekstury - // rozkładem + iMultiTex = 4; // jak sďż˝ cztery, to blokujemy podmianďż˝ tekstury + // rozkďż˝adem } } } else - { // zestaw nie zadziałał, próbujemy normanie + { // zestaw nie zadziaďż˝aďż˝, prďż˝bujemy normanie iMultiTex = 0; ReplacableSkinID[1] = TTexturesManager::GetTextureID( NULL, NULL, ReplacableSkin, Global::iDynamicFiltering); @@ -4371,25 +4371,25 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, ReplacableSkinID[1] = TTexturesManager::GetTextureID( NULL, NULL, ReplacableSkin, Global::iDynamicFiltering); if (TTexturesManager::GetAlpha(ReplacableSkinID[1])) - iAlpha = 0x31310031; // tekstura -1 z kanałem alfa - nie renderować w cyklu + iAlpha = 0x31310031; // tekstura -1 z kanaďż˝em alfa - nie renderowaďż˝ w cyklu // nieprzezroczystych else iAlpha = 0x30300030; // wszystkie tekstury nieprzezroczyste - nie - // renderować w + // renderowaďż˝ w // cyklu przezroczystych if (ReplacableSkinID[2]) if (TTexturesManager::GetAlpha(ReplacableSkinID[2])) - iAlpha |= 0x02020002; // tekstura -2 z kanałem alfa - nie renderować + iAlpha |= 0x02020002; // tekstura -2 z kanaďż˝em alfa - nie renderowaďż˝ // w cyklu // nieprzezroczystych if (ReplacableSkinID[3]) if (TTexturesManager::GetAlpha(ReplacableSkinID[3])) - iAlpha |= 0x04040004; // tekstura -3 z kanałem alfa - nie renderować + iAlpha |= 0x04040004; // tekstura -3 z kanaďż˝em alfa - nie renderowaďż˝ // w cyklu // nieprzezroczystych if (ReplacableSkinID[4]) if (TTexturesManager::GetAlpha(ReplacableSkinID[4])) - iAlpha |= 0x08080008; // tekstura -4 z kanałem alfa - nie renderować + iAlpha |= 0x08080008; // tekstura -4 z kanaďż˝em alfa - nie renderowaďż˝ // w cyklu // nieprzezroczystych } @@ -4404,8 +4404,8 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, // if (MoverParameters->LoadAccepted!=AnsiString("")); // && // MoverParameters->LoadType!=AnsiString("passengers")) if (MoverParameters->EnginePowerSource.SourceType == CurrentCollector) - { // wartość niby "pantstate" - nazwa dla - // formalności, ważna jest ilość + { // warto�� niby "pantstate" - nazwa dla + // formalnoďż˝ci, waďż˝na jest ilo�� if (MoverParameters->Load == 1) MoverParameters->PantFront(true); else if (MoverParameters->Load == 2) @@ -4434,7 +4434,7 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, MoverParameters->PantRear(true); } } - else // Ra: tu wczytywanie modelu ładunku jest w porządku + else // Ra: tu wczytywanie modelu ďż˝adunku jest w porzďż˝dku mdLoad = TModelsManager::GetModel(asLoadName, true); // ladunek Global::asCurrentTexturePath = szTexturePath; // z powrotem defaultowa sciezka do tekstur do { @@ -4442,34 +4442,34 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, parser.getTokens(); parser >> token; if( token == "animations:" ) { - // Ra: ustawienie ilości poszczególnych animacji - - // musi być jako pierwsze, inaczej ilości będą domyślne + // Ra: ustawienie iloďż˝ci poszczegďż˝lnych animacji - + // musi byďż˝ jako pierwsze, inaczej iloďż˝ci bďż˝dďż˝ domyďż˝lne if( nullptr == pAnimations ) - { // jeśli nie ma jeszcze tabeli animacji, można - // odczytać nowe ilości + { // jeďż˝li nie ma jeszcze tabeli animacji, moďż˝na + // odczytaďż˝ nowe iloďż˝ci int co = 0, ile = -1; iAnimations = 0; do - { // kolejne liczby to ilość animacj, -1 to znacznik końca + { // kolejne liczby to ilo�� animacj, -1 to znacznik koďż˝ca parser.getTokens( 1, false ); parser >> ile; // animacji // if (co==ANIM_PANTS) // if (!Global::bLoadTraction) - // if (!DebugModeFlag) //w debugmode pantografy mają "niby - // działać" - // ile=0; //wyłączenie animacji pantografów + // if (!DebugModeFlag) //w debugmode pantografy majďż˝ "niby + // dziaďż˝aďż˝" + // ile=0; //wy��czenie animacji pantografďż˝w if (co < ANIM_TYPES) if (ile >= 0) { - iAnimType[co] = ile; // zapamiętanie - iAnimations += ile; // ogólna ilość animacji + iAnimType[co] = ile; // zapamiďż˝tanie + iAnimations += ile; // ogďż˝lna ilo�� animacji } ++co; - } while (ile >= 0); //-1 to znacznik końca + } while (ile >= 0); //-1 to znacznik koďż˝ca while( co < ANIM_TYPES ) { - iAnimType[ co++ ] = 0; // zerowanie pozostałych + iAnimType[ co++ ] = 0; // zerowanie pozostaďż˝ych } parser.getTokens(); parser >> token; // NOTE: should this be here? seems at best superfluous @@ -4477,14 +4477,14 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, // WriteLog("Total animations: "+AnsiString(iAnimations)); } if( nullptr == pAnimations ) - { // Ra: tworzenie tabeli animacji, jeśli jeszcze nie - // było - if (!iAnimations) // jeśli nie podano jawnie, ile ma być animacji - iAnimations = 28; // tyle było kiedyś w każdym pojeździe (2 wiązary wypadły) - /* //pojazd może mieć pantograf do innych celów niż napęd + { // Ra: tworzenie tabeli animacji, jeďż˝li jeszcze nie + // byďż˝o + if (!iAnimations) // jeďż˝li nie podano jawnie, ile ma byďż˝ animacji + iAnimations = 28; // tyle byďż˝o kiedyďż˝ w kaďż˝dym pojeďż˝dzie (2 wiďż˝zary wypadďż˝y) + /* //pojazd moďż˝e mieďż˝ pantograf do innych celďż˝w niďż˝ napďż˝d if (MoverParameters->EnginePowerSource.SourceType!=CurrentCollector) - {//nie będzie pantografów, to się trochę uprości - iAnimations-=iAnimType[ANIM_PANTS]; //domyślnie były 2 pantografy + {//nie bďż˝dzie pantografďż˝w, to siďż˝ trochďż˝ uproďż˝ci + iAnimations-=iAnimType[ANIM_PANTS]; //domyďż˝lnie byďż˝y 2 pantografy iAnimType[ANIM_PANTS]=0; } */ @@ -4495,22 +4495,22 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, { if (j == ANIM_PANTS) // zliczamy poprzednie animacje if (!pants) - if (iAnimType[ANIM_PANTS]) // o ile jakieś pantografy są (a - // domyślnie są) + if (iAnimType[ANIM_PANTS]) // o ile jakieďż˝ pantografy sďż˝ (a + // domyďż˝lnie sďż˝) pants = pAnimations + - k; // zapamiętanie na potrzeby wyszukania submodeli - pAnimations[k].iShift = sm; // przesunięcie do przydzielenia wskaźnika + k; // zapamiďż˝tanie na potrzeby wyszukania submodeli + pAnimations[k].iShift = sm; // przesuniďż˝cie do przydzielenia wskaďż˝nika sm += pAnimations[k++].TypeSet(j); // ustawienie typu animacji i // zliczanie tablicowanych // submodeli } - if (sm) // o ile są bardziej złożone animacje + if (sm) // o ile sďż˝ bardziej zďż˝oďż˝one animacje { pAnimated = new TSubModel *[sm]; // tabela na animowane submodele for (k = 0; k < iAnimations; ++k) pAnimations[k].smElement = pAnimated + - pAnimations[k].iShift; // przydzielenie wskaźnika do tabelki + pAnimations[k].iShift; // przydzielenie wskaďż˝nika do tabelki } } @@ -4521,29 +4521,29 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, asModel = BaseDir + asModel; // McZapkie-200702 - dynamics maja swoje modele w dynamic/basedir Global::asCurrentTexturePath = BaseDir; // biezaca sciezka do tekstur to dynamic/... mdLowPolyInt = TModelsManager::GetModel(asModel, true); - // Global::asCurrentTexturePath=AnsiString(szTexturePath); //kiedyś + // Global::asCurrentTexturePath=AnsiString(szTexturePath); //kiedyďż˝ // uproszczone - // wnętrze mieszało tekstury nieba + // wnďż˝trze mieszaďż˝o tekstury nieba } if( token == "brakemode:" ) { - // Ra 15-01: gałka nastawy hamulca + // Ra 15-01: gaďż˝ka nastawy hamulca parser.getTokens(); parser >> asAnimName; smBrakeMode = mdModel->GetFromName(asAnimName.c_str()); - // jeszcze wczytać kąty obrotu dla poszczególnych ustawień + // jeszcze wczytaďż˝ kďż˝ty obrotu dla poszczegďż˝lnych ustawieďż˝ } if( token == "loadmode:" ) { - // Ra 15-01: gałka nastawy hamulca + // Ra 15-01: gaďż˝ka nastawy hamulca parser.getTokens(); parser >> asAnimName; smLoadMode = mdModel->GetFromName(asAnimName.c_str()); - // jeszcze wczytać kąty obrotu dla poszczególnych ustawień + // jeszcze wczytaďż˝ kďż˝ty obrotu dla poszczegďż˝lnych ustawieďż˝ } else if (token == "animwheelprefix:") { - // prefiks kręcących się kół + // prefiks krďż˝cďż˝cych siďż˝ k�� int i, j, k, m; parser.getTokens( 1, false ); parser >> token; for (i = 0; i < iAnimType[ANIM_WHEELS]; ++i) // liczba osi @@ -4553,53 +4553,53 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, mdModel->GetFromName(asAnimName.c_str()); // ustalenie submodelu if (pAnimations[i].smAnimated) { //++iAnimatedAxles; - pAnimations[i].smAnimated->WillBeAnimated(); // wyłączenie optymalizacji + pAnimations[i].smAnimated->WillBeAnimated(); // wy��czenie optymalizacji // transformu /* pAnimations[i].yUpdate = UpdateAxle; // animacja osi */ pAnimations[ i ].yUpdate = std::bind( &TDynamicObject::UpdateAxle, this, std::placeholders::_1 ); pAnimations[i].fMaxDist = 50 * - MoverParameters->WheelDiameter; // nie kręcić w większej odległości + MoverParameters->WheelDiameter; // nie krďż˝ciďż˝ w wiďż˝kszej odlegďż˝oďż˝ci pAnimations[i].fMaxDist *= pAnimations[i].fMaxDist * - MoverParameters->WheelDiameter; // 50m do kwadratu, a średnica + MoverParameters->WheelDiameter; // 50m do kwadratu, a ďż˝rednica // do trzeciej - pAnimations[i].fMaxDist *= Global::fDistanceFactor; // współczynnik + pAnimations[i].fMaxDist *= Global::fDistanceFactor; // wsp��czynnik // przeliczeniowy - // jakości ekranu + // jakoďż˝ci ekranu } } - // Ra: ustawianie indeksów osi + // Ra: ustawianie indeksďż˝w osi for (i = 0; i < iAnimType[ANIM_WHEELS]; - ++i) // ilość osi (zabezpieczenie przed błędami w CHK) + ++i) // ilo�� osi (zabezpieczenie przed b��dami w CHK) pAnimations[i].dWheelAngle = - dWheelAngle + 1; // domyślnie wskaźnik na napędzające + dWheelAngle + 1; // domyďż˝lnie wskaďż˝nik na napďż˝dzajďż˝ce i = 0; j = 1; k = 0; - m = 0; // numer osi; kolejny znak; ile osi danego typu; która średnica + m = 0; // numer osi; kolejny znak; ile osi danego typu; ktďż˝ra ďż˝rednica if ((MoverParameters->WheelDiameterL != MoverParameters->WheelDiameter) || (MoverParameters->WheelDiameterT != MoverParameters->WheelDiameter)) - { // obsługa różnych średnic, o - // ile występują + { // obsďż˝uga r��nych ďż˝rednic, o + // ile wystďż˝pujďż˝ while ((i < iAnimType[ANIM_WHEELS]) && (j <= MoverParameters->AxleArangement.length())) - { // wersja ze wskaźnikami jest + { // wersja ze wskaďż˝nikami jest // bardziej elastyczna na nietypowe - // układy + // ukďż˝ady if ((k >= 'A') && (k <= 'J')) // 10 chyba maksimum? { pAnimations[i++].dWheelAngle = - dWheelAngle + 1; // obrót osi napędzających - --k; // następna będzie albo taka sama, albo bierzemy kolejny + dWheelAngle + 1; // obrďż˝t osi napďż˝dzajďż˝cych + --k; // nastďż˝pna bďż˝dzie albo taka sama, albo bierzemy kolejny // znak - m = 2; // następujące toczne będą miały inną średnicę + m = 2; // nastďż˝pujďż˝ce toczne bďż˝dďż˝ miaďż˝y innďż˝ ďż˝rednicďż˝ } else if ((k >= '1') && (k <= '9')) { - pAnimations[i++].dWheelAngle = dWheelAngle + m; // obrót osi + pAnimations[i++].dWheelAngle = dWheelAngle + m; // obrďż˝t osi // tocznych - --k; // następna będzie albo taka sama, albo bierzemy kolejny + --k; // nastďż˝pna bďż˝dzie albo taka sama, albo bierzemy kolejny // znak } else @@ -4621,7 +4621,7 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, else if( token == "animpantprefix:" ) { // Ra: pantografy po - // nowemu mają literki + // nowemu majďż˝ literki // i numerki } // Pantografy - Winger 160204 @@ -4636,71 +4636,71 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, // str* asAnimName = token + std::to_string(i + 1); sm = mdModel->GetFromName(asAnimName.c_str()); - pants[i].smElement[0] = sm; // jak NULL, to nie będzie animowany + pants[i].smElement[0] = sm; // jak NULL, to nie bďż˝dzie animowany if (sm) - { // w EP09 wywalało się tu z powodu NULL + { // w EP09 wywalaďż˝o siďż˝ tu z powodu NULL sm->WillBeAnimated(); sm->ParentMatrix(&m); // pobranie macierzy transformacji - // m(3)[1]=m[3][1]+0.054; //w górę o wysokość ślizgu (na razie + // m(3)[1]=m[3][1]+0.054; //w gďż˝rďż˝ o wysoko�� ďż˝lizgu (na razie // tak) - if ((mdModel->Flags() & 0x8000) == 0) // jeśli wczytano z T3D - m.InitialRotate(); // może być potrzebny dodatkowy obrót, - // jeśli + if ((mdModel->Flags() & 0x8000) == 0) // jeďż˝li wczytano z T3D + m.InitialRotate(); // moďż˝e byďż˝ potrzebny dodatkowy obrďż˝t, + // jeďż˝li // wczytano z T3D, tzn. przed wykonaniem // Init() pants[i].fParamPants->vPos.z = - m[3][0]; // przesunięcie w bok (asymetria) + m[3][0]; // przesuniďż˝cie w bok (asymetria) pants[i].fParamPants->vPos.y = - m[3][1]; // przesunięcie w górę odczytane z modelu + m[3][1]; // przesuniďż˝cie w gďż˝rďż˝ odczytane z modelu if ((sm = pants[i].smElement[0]->ChildGet()) != NULL) - { // jeśli ma potomny, można policzyć długość - // (odległość potomnego + { // jeďż˝li ma potomny, moďż˝na policzyďż˝ dďż˝ugo�� + // (odlegďż˝o�� potomnego // od osi obrotu) - m = float4x4(*sm->GetMatrix()); // wystarczyłby wskaźnik, nie - // trzeba kopiować - // może trzeba: pobrać macierz dolnego ramienia, wyzerować - // przesunięcie, przemnożyć przez macierz górnego + m = float4x4(*sm->GetMatrix()); // wystarczyďż˝by wskaďż˝nik, nie + // trzeba kopiowaďż˝ + // moďż˝e trzeba: pobraďż˝ macierz dolnego ramienia, wyzerowaďż˝ + // przesuniďż˝cie, przemnoďż˝yďż˝ przez macierz gďż˝rnego pants[i].fParamPants->fHoriz = -fabs(m[3][1]); pants[i].fParamPants->fLenL1 = hypot(m[3][1], m[3][2]); // po osi OX nie potrzeba pants[i].fParamPants->fAngleL0 = atan2(fabs(m[3][2]), fabs(m[3][1])); // if (pants[i].fParamPants->fAngleL0fAngleL0+=M_PI; //gdyby w odwrotną - // stronę wyszło + // pants[i].fParamPants->fAngleL0+=M_PI; //gdyby w odwrotnďż˝ + // stronďż˝ wyszďż˝o // if // ((pants[i].fParamPants->fAngleL0<0.03)||(pants[i].fParamPants->fAngleL0>0.09)) // //normalnie ok. 0.05 // pants[i].fParamPants->fAngleL0=pants[i].fParamPants->fAngleL; pants[i].fParamPants->fAngleL = - pants[i].fParamPants->fAngleL0; // początkowy kąt dolnego + pants[i].fParamPants->fAngleL0; // poczďż˝tkowy kďż˝t dolnego // ramienia if ((sm = sm->ChildGet()) != NULL) - { // jeśli dalej jest - // ślizg, można policzyć - // długość górnego + { // jeďż˝li dalej jest + // ďż˝lizg, moďż˝na policzyďż˝ + // dďż˝ugo�� gďż˝rnego // ramienia - m = float4x4(*sm->GetMatrix()); // wystarczyłby wskaźnik, - // nie trzeba kopiować - // trzeba by uwzględnić macierz dolnego ramienia, żeby - // uzyskać kąt do poziomu... + m = float4x4(*sm->GetMatrix()); // wystarczyďż˝by wskaďż˝nik, + // nie trzeba kopiowaďż˝ + // trzeba by uwzglďż˝dniďż˝ macierz dolnego ramienia, ďż˝eby + // uzyskaďż˝ kďż˝t do poziomu... pants[i].fParamPants->fHoriz += - fabs(m(3)[1]); // różnica długości rzutów ramion na - // płaszczyznę podstawy (jedna dodatnia, + fabs(m(3)[1]); // r��nica dďż˝ugoďż˝ci rzutďż˝w ramion na + // pďż˝aszczyznďż˝ podstawy (jedna dodatnia, // druga ujemna) pants[i].fParamPants->fLenU1 = hypot(m[3][1], m[3][2]); // po osi OX nie potrzeba // pants[i].fParamPants->pantu=acos((1.22*cos(pants[i].fParamPants->fAngleL)+0.535)/1.755); - // //górne ramię + // //gďż˝rne ramiďż˝ // pants[i].fParamPants->fAngleU0=acos((1.176289*cos(pants[i].fParamPants->fAngleL)+0.54555075)/1.724482197); - // //górne ramię + // //gďż˝rne ramiďż˝ pants[i].fParamPants->fAngleU0 = atan2(fabs(m[3][2]), - fabs(m[3][1])); // początkowy kąt górnego + fabs(m[3][1])); // poczďż˝tkowy kďż˝t gďż˝rnego // ramienia, odczytany z modelu // if (pants[i].fParamPants->fAngleU0fAngleU0+=M_PI; //gdyby w odwrotną - // stronę wyszło + // pants[i].fParamPants->fAngleU0+=M_PI; //gdyby w odwrotnďż˝ + // stronďż˝ wyszďż˝o // if (pants[i].fParamPants->fAngleU0<0) // pants[i].fParamPants->fAngleU0=-pants[i].fParamPants->fAngleU0; // if @@ -4708,38 +4708,38 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, // //normalnie ok. 0.07 // pants[i].fParamPants->fAngleU0=acos((pants[i].fParamPants->fLenL1*cos(pants[i].fParamPants->fAngleL)+pants[i].fParamPants->fHoriz)/pants[i].fParamPants->fLenU1); pants[i].fParamPants->fAngleU = - pants[i].fParamPants->fAngleU0; // początkowy kąt - // Ra: ze względu na to, że niektóre modele pantografów są - // zrąbane, ich mierzenie ma obecnie ograniczony sens + pants[i].fParamPants->fAngleU0; // poczďż˝tkowy kďż˝t + // Ra: ze wzglďż˝du na to, ďż˝e niektďż˝re modele pantografďż˝w sďż˝ + // zrďż˝bane, ich mierzenie ma obecnie ograniczony sens sm->ParentMatrix(&m); // pobranie macierzy transformacji - // pivota ślizgu względem wstawienia + // pivota ďż˝lizgu wzglďż˝dem wstawienia // pojazdu - if ((mdModel->Flags() & 0x8000) == 0) // jeśli wczytano z + if ((mdModel->Flags() & 0x8000) == 0) // jeďż˝li wczytano z // T3D - m.InitialRotate(); // może być potrzebny dodatkowy - // obrót, jeśli wczytano z T3D, tzn. + m.InitialRotate(); // moďż˝e byďż˝ potrzebny dodatkowy + // obrďż˝t, jeďż˝li wczytano z T3D, tzn. // przed wykonaniem Init() float det = Det(m); - if (std::fabs(det - 1.0) < 0.001) // dopuszczamy 1 promil błędu - // na skalowaniu ślizgu - { // skalowanie jest w normie, można pobrać wymiary z modelu + if (std::fabs(det - 1.0) < 0.001) // dopuszczamy 1 promil b��du + // na skalowaniu ďż˝lizgu + { // skalowanie jest w normie, moďż˝na pobraďż˝ wymiary z modelu pants[i].fParamPants->fHeight = - sm->MaxY(m); // przeliczenie maksimum wysokości - // wierzchołków względem macierzy + sm->MaxY(m); // przeliczenie maksimum wysokoďż˝ci + // wierzchoďż˝kďż˝w wzglďż˝dem macierzy pants[i].fParamPants->fHeight -= - m[3][1]; // odjęcie wysokości pivota ślizgu + m[3][1]; // odjďż˝cie wysokoďż˝ci pivota ďż˝lizgu pants[i].fParamPants->vPos.x = - m[3][2]; // przy okazji odczytać z modelu pozycję w - // długości + m[3][2]; // przy okazji odczytaďż˝ z modelu pozycjďż˝ w + // dďż˝ugoďż˝ci // ErrorLog("Model OK: "+asModel+", // height="+pants[i].fParamPants->fHeight); // ErrorLog("Model OK: "+asModel+", // pos.x="+pants[i].fParamPants->vPos.x); } else - { // gdy ktoś przesadził ze skalowaniem + { // gdy ktoďż˝ przesadziďż˝ ze skalowaniem pants[i].fParamPants->fHeight = - 0.0; // niech będzie odczyt z pantfactors: + 0.0; // niech bďż˝dzie odczyt z pantfactors: ErrorLog("Bad model: " + asModel + ", scale of " + (sm->pName) + " is " + std::to_string(100.0 * det) + "%"); @@ -4763,26 +4763,26 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, // str* asAnimName = token + std::to_string( i + 1 ); sm = mdModel->GetFromName( asAnimName.c_str() ); - pants[ i ].smElement[ 1 ] = sm; // jak NULL, to nie będzie animowany - if( sm ) { // w EP09 wywalało się tu z powodu NULL + pants[ i ].smElement[ 1 ] = sm; // jak NULL, to nie bďż˝dzie animowany + if( sm ) { // w EP09 wywalaďż˝o siďż˝ tu z powodu NULL sm->WillBeAnimated(); - if( pants[ i ].fParamPants->vPos.y == 0.0 ) { // jeśli pierwsze ramię nie ustawiło tej wartości, - // próbować drugim - //!!!! docelowo zrobić niezależną animację ramion z każdej + if( pants[ i ].fParamPants->vPos.y == 0.0 ) { // jeďż˝li pierwsze ramiďż˝ nie ustawiďż˝o tej wartoďż˝ci, + // prďż˝bowaďż˝ drugim + //!!!! docelowo zrobiďż˝ niezaleďż˝nďż˝ animacjďż˝ ramion z kaďż˝dej // strony m = float4x4( - *sm->GetMatrix() ); // skopiowanie, bo będziemy mnożyć + *sm->GetMatrix() ); // skopiowanie, bo bďż˝dziemy mnoďż˝yďż˝ m( 3 )[ 1 ] = - m[ 3 ][ 1 ] + 0.054; // w górę o wysokość ślizgu (na razie tak) + m[ 3 ][ 1 ] + 0.054; // w gďż˝rďż˝ o wysoko�� ďż˝lizgu (na razie tak) while( sm->Parent ) { if( sm->Parent->GetMatrix() ) m = *sm->Parent->GetMatrix() * m; sm = sm->Parent; } pants[ i ].fParamPants->vPos.z = - m[ 3 ][ 0 ]; // przesunięcie w bok (asymetria) + m[ 3 ][ 0 ]; // przesuniďż˝cie w bok (asymetria) pants[ i ].fParamPants->vPos.y = - m[ 3 ][ 1 ]; // przesunięcie w górę odczytane z modelu + m[ 3 ][ 1 ]; // przesuniďż˝cie w gďż˝rďż˝ odczytane z modelu } } else @@ -4793,7 +4793,7 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, } else if( token == "animpantrg1prefix:" ) { - // prefiks ramion górnych 1 + // prefiks ramion gďż˝rnych 1 parser.getTokens(); parser >> token; if( pants ) { for( int i = 0; i < iAnimType[ ANIM_PANTS ]; i++ ) { // Winger 160204: wyszukiwanie max 2 patykow o nazwie @@ -4806,7 +4806,7 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, } else if( token == "animpantrg2prefix:" ) { - // prefiks ramion górnych 2 + // prefiks ramion gďż˝rnych 2 parser.getTokens(); parser >> token; if( pants ) { for( int i = 0; i < iAnimType[ ANIM_PANTS ]; i++ ) { // Winger 160204: wyszukiwanie max 2 patykow o nazwie @@ -4819,7 +4819,7 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, } else if( token == "animpantslprefix:" ) { - // prefiks ślizgaczy + // prefiks ďż˝lizgaczy parser.getTokens(); parser >> token; if( pants ) { for( int i = 0; i < iAnimType[ ANIM_PANTS ]; i++ ) { // Winger 160204: wyszukiwanie max 2 patykow o nazwie @@ -4829,7 +4829,7 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, pants[ i ].smElement[ 4 ]->WillBeAnimated(); /* pants[ i ].yUpdate = UpdatePant; */ pants[ i ].yUpdate = std::bind( &TDynamicObject::UpdatePant, this, std::placeholders::_1 ); - pants[ i ].fMaxDist = 300 * 300; // nie podnosić w większej odległości + pants[ i ].fMaxDist = 300 * 300; // nie podnosiďż˝ w wiďż˝kszej odlegďż˝oďż˝ci pants[ i ].iNumber = i; } } @@ -4842,58 +4842,58 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, parser >> pant1x >> pant2x - >> pant1h // wysokość pierwszego ślizgu - >> pant2h;// wysokość drugiego ślizgu + >> pant1h // wysoko�� pierwszego ďż˝lizgu + >> pant2h;// wysoko�� drugiego ďż˝lizgu if( pant1h > 0.5 ) { - pant1h = pant2h; // tu może być zbyt duża wartość + pant1h = pant2h; // tu moďż˝e byďż˝ zbyt duďż˝a warto�� } if ((pant1x < 0) && - (pant2x > 0)) // pierwsza powinna być dodatnia, a druga ujemna + (pant2x > 0)) // pierwsza powinna byďż˝ dodatnia, a druga ujemna { pant1x = -pant1x; pant2x = -pant2x; } if( pants ) { - for( int i = 0; i < iAnimType[ ANIM_PANTS ]; ++i ) { // przepisanie współczynników do pantografów (na razie - // nie będzie lepiej) + for( int i = 0; i < iAnimType[ ANIM_PANTS ]; ++i ) { // przepisanie wsp��czynnikďż˝w do pantografďż˝w (na razie + // nie bďż˝dzie lepiej) pants[ i ].fParamPants->fAngleL = - pants[ i ].fParamPants->fAngleL0; // początkowy kąt dolnego ramienia + pants[ i ].fParamPants->fAngleL0; // poczďż˝tkowy kďż˝t dolnego ramienia pants[ i ].fParamPants->fAngleU = - pants[ i ].fParamPants->fAngleU0; // początkowy kąt + pants[ i ].fParamPants->fAngleU0; // poczďż˝tkowy kďż˝t // pants[i].fParamPants->PantWys=1.22*sin(pants[i].fParamPants->fAngleL)+1.755*sin(pants[i].fParamPants->fAngleU); - // //wysokość początkowa + // //wysoko�� poczďż˝tkowa // pants[i].fParamPants->PantWys=1.176289*sin(pants[i].fParamPants->fAngleL)+1.724482197*sin(pants[i].fParamPants->fAngleU); - // //wysokość początkowa + // //wysoko�� poczďż˝tkowa if( pants[ i ].fParamPants->fHeight == 0.0 ) // gdy jest // nieprawdopodobna - // wartość (np. nie - // znaleziony ślizg) - { // gdy pomiary modelu nie udały się, odczyt podanych parametrów + // warto�� (np. nie + // znaleziony ďż˝lizg) + { // gdy pomiary modelu nie udaďż˝y siďż˝, odczyt podanych parametrďż˝w // z MMD pants[ i ].fParamPants->vPos.x = ( i & 1 ) ? pant2x : pant1x; pants[ i ].fParamPants->fHeight = ( i & 1 ) ? pant2h : - pant1h; // wysokość ślizgu jest zapisana w MMD + pant1h; // wysoko�� ďż˝lizgu jest zapisana w MMD } pants[ i ].fParamPants->PantWys = pants[ i ].fParamPants->fLenL1 * sin( pants[ i ].fParamPants->fAngleL ) + pants[ i ].fParamPants->fLenU1 * sin( pants[ i ].fParamPants->fAngleU ) + - pants[ i ].fParamPants->fHeight; // wysokość początkowa + pants[ i ].fParamPants->fHeight; // wysoko�� poczďż˝tkowa // pants[i].fParamPants->vPos.y=panty-panth-pants[i].fParamPants->PantWys; // //np. 4.429-0.097=4.332=~4.335 - // pants[i].fParamPants->vPos.z=0; //niezerowe dla pantografów + // pants[i].fParamPants->vPos.z=0; //niezerowe dla pantografďż˝w // asymetrycznych pants[ i ].fParamPants->PantTraction = pants[ i ].fParamPants->PantWys; pants[ i ].fParamPants->fWidth = 0.5 * MoverParameters->EnginePowerSource.CollectorParameters - .CSW; // połowa szerokości ślizgu; jest w "Power: CSW=" + .CSW; // poďż˝owa szerokoďż˝ci ďż˝lizgu; jest w "Power: CSW=" } } } else if (token == "animpistonprefix:") { - // prefiks tłoczysk - na razie używamy modeli pantografów + // prefiks tďż˝oczysk - na razie uďż˝ywamy modeli pantografďż˝w parser.getTokens(1, false); parser >> token; for( int i = 1; i <= 2; ++i ) { @@ -4904,7 +4904,7 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, } else if( token == "animconrodprefix:" ) { - // prefiks korbowodów - na razie używamy modeli pantografów + // prefiks korbowodďż˝w - na razie uďż˝ywamy modeli pantografďż˝w parser.getTokens(); parser >> token; for( int i = 1; i <= 2; i++ ) { @@ -4917,25 +4917,25 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, else if( token == "pistonfactors:" ) { // Ra: parametry // silnika parowego - // (tłoka) - /* //Ra: tymczasowo wyłączone ze względu na porządkowanie animacji - pantografów - pant1x=Parser->GetNextSymbol().ToDouble(); //kąt przesunięcia + // (tďż˝oka) + /* //Ra: tymczasowo wy��czone ze wzglďż˝du na porzďż˝dkowanie animacji + pantografďż˝w + pant1x=Parser->GetNextSymbol().ToDouble(); //kďż˝t przesuniďż˝cia dla - pierwszego tłoka - pant2x=Parser->GetNextSymbol().ToDouble(); //kąt przesunięcia + pierwszego tďż˝oka + pant2x=Parser->GetNextSymbol().ToDouble(); //kďż˝t przesuniďż˝cia dla - drugiego tłoka - panty=Parser->GetNextSymbol().ToDouble(); //długość korby (r) - panth=Parser->GetNextSymbol().ToDouble(); //długoś korbowodu + drugiego tďż˝oka + panty=Parser->GetNextSymbol().ToDouble(); //dďż˝ugo�� korby (r) + panth=Parser->GetNextSymbol().ToDouble(); //dďż˝ugoďż˝ korbowodu (k) */ MoverParameters->EnginePowerSource.PowerType = - SteamPower; // Ra: po chamsku, ale z CHK nie działa + SteamPower; // Ra: po chamsku, ale z CHK nie dziaďż˝a } else if( token == "animreturnprefix:" ) { - // prefiks drążka mimośrodowego - na razie używamy modeli pantografów + // prefiks dr��ka mimoďż˝rodowego - na razie uďż˝ywamy modeli pantografďż˝w parser.getTokens(1, false); parser >> token; for( int i = 1; i <= 2; i++ ) { @@ -4946,7 +4946,7 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, } else if (token == "animexplinkprefix:"){ // animreturnprefix: - // prefiks jarzma - na razie używamy modeli pantografów + // prefiks jarzma - na razie uďż˝ywamy modeli pantografďż˝w parser.getTokens(1, false); parser >> token; for( int i = 1; i <= 2; i++ ) { @@ -4979,15 +4979,15 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, str = Parser->GetNextSymbol(); smMechanik0 = mdModel->GetFromName(str.c_str()); if (!smMechanik0) - { // jak nie ma bez numerka, to może jest z + { // jak nie ma bez numerka, to moďż˝e jest z // numerkiem? smMechanik0 = mdModel->GetFromName(AnsiString(str + "1").c_str()); smMechanik1 = mdModel->GetFromName(AnsiString(str + "2").c_str()); } - // aby dało się go obracać, musi mieć włączoną animację w T3D! - // if (!smMechanik1) //jeśli drugiego nie ma + // aby daďż˝o siďż˝ go obracaďż˝, musi mieďż˝ w��czonďż˝ animacjďż˝ w T3D! + // if (!smMechanik1) //jeďż˝li drugiego nie ma // if (smMechanik0) //a jest pierwszy - // smMechanik0->WillBeAnimated(); //to będziemy go obracać + // smMechanik0->WillBeAnimated(); //to bďż˝dziemy go obracaďż˝ } */ @@ -4996,7 +4996,7 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, int i, j, k, m; parser.getTokens(1, false); parser >> token; for (i = 0, j = 0; i < ANIM_DOORS; ++i) - j += iAnimType[i]; // zliczanie wcześniejszych animacji + j += iAnimType[i]; // zliczanie wczeďż˝niejszych animacji for (i = 0; i < iAnimType[ANIM_DOORS]; ++i) // liczba drzwi { // NBMX wrzesien 2003: wyszukiwanie drzwi o nazwie str* asAnimName = token + std::to_string(i + 1); @@ -5004,7 +5004,7 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, mdModel->GetFromName(asAnimName.c_str()); // ustalenie submodelu if (pAnimations[i + j].smAnimated) { //++iAnimatedDoors; - pAnimations[i + j].smAnimated->WillBeAnimated(); // wyłączenie + pAnimations[i + j].smAnimated->WillBeAnimated(); // wy��czenie // optymalizacji // transformu switch (MoverParameters->DoorOpenMethod) @@ -5022,7 +5022,7 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, case 3: /* pAnimations[i + j].yUpdate = UpdateDoorFold; */ pAnimations[ i + j ].yUpdate = std::bind( &TDynamicObject::UpdateDoorFold, this, std::placeholders::_1 ); - break; // obrót 3 kolejnych submodeli + break; // obrďż˝t 3 kolejnych submodeli case 4: /* pAnimations[i + j].yUpdate = UpdateDoorPlug; */ pAnimations[ i + j ].yUpdate = std::bind( &TDynamicObject::UpdateDoorPlug, this, std::placeholders::_1 ); @@ -5030,12 +5030,12 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, default: break; } - pAnimations[i + j].iNumber = i; // parzyste działają inaczej niż nieparzyste - pAnimations[i + j].fMaxDist = 300 * 300; // drzwi to z daleka widać + pAnimations[i + j].iNumber = i; // parzyste dziaďż˝ajďż˝ inaczej niďż˝ nieparzyste + pAnimations[i + j].fMaxDist = 300 * 300; // drzwi to z daleka widaďż˝ pAnimations[i + j].fSpeed = Random(150); // oryginalny koncept z DoorSpeedFactor pAnimations[i + j].fSpeed = (pAnimations[i + j].fSpeed + 100) / 100; - // Ra: te współczynniki są bez sensu, bo modyfikują wektor - // przesunięcia + // Ra: te wsp��czynniki sďż˝ bez sensu, bo modyfikujďż˝ wektor + // przesuniďż˝cia } } } @@ -5254,7 +5254,7 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, // pliki z trabieniem wysokoton. sHorn2.Load( parser, GetPosition() ); if( iHornWarning ) { - iHornWarning = 2; // numer syreny do użycia po otrzymaniu sygnału do jazdy + iHornWarning = 2; // numer syreny do uďż˝ycia po otrzymaniu sygnaďż˝u do jazdy } } @@ -5296,7 +5296,7 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, else if( token == "converter:" ) { // pliki z przetwornica - // if (MoverParameters->EngineType==DieselElectric) //będzie modulowany? + // if (MoverParameters->EngineType==DieselElectric) //bďż˝dzie modulowany? sConverter.Load( parser, GetPosition() ); } @@ -5382,7 +5382,7 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, && ( false == Stop_InternalData ) ); if (mdModel) - mdModel->Init(); // obrócenie modelu oraz optymalizacja, również zapisanie + mdModel->Init(); // obrďż˝cenie modelu oraz optymalizacja, rďż˝wnieďż˝ zapisanie // binarnego if (mdLoad) mdLoad->Init(); @@ -5390,23 +5390,23 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName, mdPrzedsionek->Init(); if (mdLowPolyInt) mdLowPolyInt->Init(); - // sHorn2.CopyIfEmpty(sHorn1); //żeby jednak trąbił też drugim - Global::asCurrentTexturePath = szTexturePath; // kiedyś uproszczone wnętrze mieszało tekstury nieba + // sHorn2.CopyIfEmpty(sHorn1); //ďż˝eby jednak trďż˝biďż˝ teďż˝ drugim + Global::asCurrentTexturePath = szTexturePath; // kiedyďż˝ uproszczone wnďż˝trze mieszaďż˝o tekstury nieba } //--------------------------------------------------------------------------- void TDynamicObject::RadioStop() { // zatrzymanie pojazdu - if (Mechanik) // o ile ktoś go prowadzi + if (Mechanik) // o ile ktoďż˝ go prowadzi if (MoverParameters->SecuritySystem.RadioStop && - MoverParameters->Radio) // jeśli pojazd ma RadioStop i jest on aktywny + MoverParameters->Radio) // jeďż˝li pojazd ma RadioStop i jest on aktywny Mechanik->PutCommand("Emergency_brake", 1.0, 1.0, &vPosition, stopRadio); }; //--------------------------------------------------------------------------- void TDynamicObject::Damage(char flag) { - if (flag & 1) //różnicówka nie robi nic + if (flag & 1) //r��nicďż˝wka nie robi nic { MoverParameters->MainSwitch(false); MoverParameters->FuseOff(); @@ -5450,7 +5450,7 @@ void TDynamicObject::Damage(char flag) MoverParameters->MaxCompressor += 100000001; } - if (flag & 16) //blokada wału + if (flag & 16) //blokada waďż˝u { if (MoverParameters->CtrlDelay<100000000) MoverParameters->CtrlDelay += 100000001; @@ -5465,7 +5465,7 @@ void TDynamicObject::Damage(char flag) MoverParameters->CtrlDownDelay -= 100000001; } - if (flag & 32) //hamowanie nagŁe + if (flag & 32) //hamowanie nagďż˝e { } else @@ -5476,39 +5476,39 @@ void TDynamicObject::Damage(char flag) }; void TDynamicObject::RaLightsSet(int head, int rear) -{ // zapalenie świateł z przodu i z - // tyłu, zależne od kierunku +{ // zapalenie ďż˝wiateďż˝ z przodu i z + // tyďż˝u, zaleďż˝ne od kierunku // pojazdu if (!MoverParameters) - return; // może tego nie być na początku + return; // moďż˝e tego nie byďż˝ na poczďż˝tku if (rear == 2 + 32 + 64) - { // jeśli koniec pociągu, to trzeba ustalić, czy + { // jeďż˝li koniec pociďż˝gu, to trzeba ustaliďż˝, czy // jest tam czynna lokomotywa - // EN57 może nie mieć końcówek od środka członu - if (MoverParameters->Power > 1.0) // jeśli ma moc napędową - if (!MoverParameters->ActiveDir) // jeśli nie ma ustawionego kierunku - { // jeśli ma zarówno światła jak i końcówki, ustalić, czy jest w stanie + // EN57 moďż˝e nie mieďż˝ koďż˝cďż˝wek od ďż˝rodka czďż˝onu + if (MoverParameters->Power > 1.0) // jeďż˝li ma moc napďż˝dowďż˝ + if (!MoverParameters->ActiveDir) // jeďż˝li nie ma ustawionego kierunku + { // jeďż˝li ma zarďż˝wno ďż˝wiatďż˝a jak i koďż˝cďż˝wki, ustaliďż˝, czy jest w stanie // aktywnym - // np. lokomotywa na zimno będzie mieć końcówki a nie światła + // np. lokomotywa na zimno bďż˝dzie mieďż˝ koďż˝cďż˝wki a nie ďż˝wiatďż˝a rear = 64; // tablice blaszane - // trzeba to uzależnić od "załączenia baterii" w pojeździe + // trzeba to uzaleďż˝niďż˝ od "za��czenia baterii" w pojeďż˝dzie } - if (rear == 2 + 32 + 64) // jeśli nadal obydwie możliwości + if (rear == 2 + 32 + 64) // jeďż˝li nadal obydwie moďż˝liwoďż˝ci if (iInventory & - (iDirection ? 0x2A : 0x15)) // czy ma jakieś światła czerowone od danej strony - rear = 2 + 32; // dwa światła czerwone + (iDirection ? 0x2A : 0x15)) // czy ma jakieďż˝ ďż˝wiatďż˝a czerowone od danej strony + rear = 2 + 32; // dwa ďż˝wiatďż˝a czerwone else rear = 64; // tablice blaszane } - if (iDirection) // w zależności od kierunku pojazdu w składzie - { // jesli pojazd stoi sprzęgiem 0 w stronę czoła + if (iDirection) // w zaleďż˝noďż˝ci od kierunku pojazdu w skďż˝adzie + { // jesli pojazd stoi sprzďż˝giem 0 w stronďż˝ czoďż˝a if (head >= 0) iLights[0] = head; if (rear >= 0) iLights[1] = rear; } else - { // jak jest odwrócony w składzie (-1), to zapalamy odwrotnie + { // jak jest odwrďż˝cony w skďż˝adzie (-1), to zapalamy odwrotnie if (head >= 0) iLights[1] = head; if (rear >= 0) @@ -5517,29 +5517,29 @@ void TDynamicObject::RaLightsSet(int head, int rear) }; int TDynamicObject::DirectionSet(int d) -{ // ustawienie kierunku w składzie (wykonuje AI) +{ // ustawienie kierunku w skďż˝adzie (wykonuje AI) iDirection = d > 0 ? 1 : 0; // d:1=zgodny,-1=przeciwny; iDirection:1=zgodny,0=przeciwny; - CouplCounter = 20; //żeby normalnie skanować kolizje, to musi ruszyć z miejsca + CouplCounter = 20; //ďż˝eby normalnie skanowaďż˝ kolizje, to musi ruszyďż˝ z miejsca if (MyTrack) - { // podczas wczytywania wstawiane jest AI, ale może jeszcze nie - // być toru + { // podczas wczytywania wstawiane jest AI, ale moďż˝e jeszcze nie + // byďż˝ toru // AI ustawi kierunek ponownie po uruchomieniu silnika - if (iDirection) // jeśli w kierunku Coupler 0 + if (iDirection) // jeďż˝li w kierunku Coupler 0 { if (MoverParameters->Couplers[0].CouplingFlag == - ctrain_virtual) // brak pojazdu podpiętego? - ABuScanObjects(1, 300); // szukanie czegoś do podłączenia + ctrain_virtual) // brak pojazdu podpiďż˝tego? + ABuScanObjects(1, 300); // szukanie czegoďż˝ do pod��czenia } else if (MoverParameters->Couplers[1].CouplingFlag == - ctrain_virtual) // brak pojazdu podpiętego? + ctrain_virtual) // brak pojazdu podpiďż˝tego? ABuScanObjects(-1, 300); } - return 1 - (iDirection ? NextConnectedNo : PrevConnectedNo); // informacja o położeniu - // następnego + return 1 - (iDirection ? NextConnectedNo : PrevConnectedNo); // informacja o poďż˝oďż˝eniu + // nastďż˝pnego }; TDynamicObject * TDynamicObject::PrevAny() -{ // wskaźnik na poprzedni, +{ // wskaďż˝nik na poprzedni, // nawet wirtualny return iDirection ? PrevConnected : NextConnected; }; @@ -5547,32 +5547,32 @@ TDynamicObject * TDynamicObject::Prev() { if (MoverParameters->Couplers[iDirection ^ 1].CouplingFlag) return iDirection ? PrevConnected : NextConnected; - return NULL; // gdy sprzęg wirtualny, to jakby nic nie było + return NULL; // gdy sprzďż˝g wirtualny, to jakby nic nie byďż˝o }; TDynamicObject * TDynamicObject::Next() { if (MoverParameters->Couplers[iDirection].CouplingFlag) return iDirection ? NextConnected : PrevConnected; - return NULL; // gdy sprzęg wirtualny, to jakby nic nie było + return NULL; // gdy sprzďż˝g wirtualny, to jakby nic nie byďż˝o }; TDynamicObject * TDynamicObject::PrevC(int C) { if (MoverParameters->Couplers[iDirection ^ 1].CouplingFlag & C) return iDirection ? PrevConnected : NextConnected; - return NULL; // gdy sprzęg wirtualny, to jakby nic nie było + return NULL; // gdy sprzďż˝g wirtualny, to jakby nic nie byďż˝o }; TDynamicObject * TDynamicObject::NextC(int C) { if (MoverParameters->Couplers[iDirection].CouplingFlag & C) return iDirection ? NextConnected : PrevConnected; - return NULL; // gdy sprzęg inny, to jakby nic nie było + return NULL; // gdy sprzďż˝g inny, to jakby nic nie byďż˝o }; double TDynamicObject::NextDistance(double d) -{ // ustalenie odległości do - // następnego pojazdu, potrzebne +{ // ustalenie odlegďż˝oďż˝ci do + // nastďż˝pnego pojazdu, potrzebne // do wstecznego skanowania if (!MoverParameters->Couplers[iDirection].Connected) - return d; // jeśli nic nie ma, zwrócenie domyślnej wartości + return d; // jeďż˝li nic nie ma, zwrďż˝cenie domyďż˝lnej wartoďż˝ci if ((d <= 0.0) || (MoverParameters->Couplers[iDirection].CoupleDist < d)) return MoverParameters->Couplers[iDirection].Dist; else @@ -5580,45 +5580,45 @@ double TDynamicObject::NextDistance(double d) }; TDynamicObject * TDynamicObject::Neightbour(int &dir) -{ // ustalenie następnego (1) albo poprzedniego (0) w składzie bez - // względu na prawidłowość +{ // ustalenie nastďż˝pnego (1) albo poprzedniego (0) w skďż˝adzie bez + // wzglďż˝du na prawidďż˝owo�� // iDirection - int d = dir; // zapamiętanie kierunku - dir = 1 - (dir ? NextConnectedNo : PrevConnectedNo); // nowa wartość + int d = dir; // zapamiďż˝tanie kierunku + dir = 1 - (dir ? NextConnectedNo : PrevConnectedNo); // nowa warto�� return (d ? (MoverParameters->Couplers[1].CouplingFlag ? NextConnected : NULL) : (MoverParameters->Couplers[0].CouplingFlag ? PrevConnected : NULL)); }; void TDynamicObject::CoupleDist() -{ // obliczenie odległości sprzęgów +{ // obliczenie odlegďż˝oďż˝ci sprzďż˝gďż˝w if (MyTrack ? (MyTrack->iCategoryFlag & 1) : - true) // jeśli nie ma przypisanego toru, to liczyć jak dla kolei - { // jeśli jedzie po szynach (również unimog), liczenie kul wystarczy + true) // jeďż˝li nie ma przypisanego toru, to liczyďż˝ jak dla kolei + { // jeďż˝li jedzie po szynach (rďż˝wnieďż˝ unimog), liczenie kul wystarczy MoverParameters->SetCoupleDist(); } else - { // na drodze trzeba uwzględnić wektory ruchu + { // na drodze trzeba uwzglďż˝dniďż˝ wektory ruchu double d0 = MoverParameters->Couplers[0].CoupleDist; - // double d1=MoverParameters->Couplers[1].CoupleDist; //sprzęg z tyłu - // samochodu można olać, - // dopóki nie jeździ na wstecznym + // double d1=MoverParameters->Couplers[1].CoupleDist; //sprzďż˝g z tyďż˝u + // samochodu moďż˝na olaďż˝, + // dopďż˝ki nie jeďż˝dzi na wstecznym vector3 p1, p2; double d, w; // dopuszczalny dystans w poprzek MoverParameters->SetCoupleDist(); // liczenie standardowe - if (MoverParameters->Couplers[0].Connected) // jeśli cokolwiek podłączone - if (MoverParameters->Couplers[0].CouplingFlag == 0) // jeśli wirtualny - if (MoverParameters->Couplers[0].CoupleDist < 300.0) // i mniej niż 300m - { // przez MoverParameters->Couplers[0].Connected nie da się dostać do - // DynObj, stąd + if (MoverParameters->Couplers[0].Connected) // jeďż˝li cokolwiek pod��czone + if (MoverParameters->Couplers[0].CouplingFlag == 0) // jeďż˝li wirtualny + if (MoverParameters->Couplers[0].CoupleDist < 300.0) // i mniej niďż˝ 300m + { // przez MoverParameters->Couplers[0].Connected nie da siďż˝ dostaďż˝ do + // DynObj, stďż˝d // prowizorka // WriteLog("Collision of // "+AnsiString(MoverParameters->Couplers[0].CoupleDist)+"m detected // by // "+asName+":0."); w = 0.5 * (MoverParameters->Couplers[0].Connected->Dim.W + - MoverParameters->Dim.W); // minimalna odległość minięcia - d = -DotProduct(vLeft, vCoulpler[0]); // odległość prostej ruchu od początku - // układu współrzędnych + MoverParameters->Dim.W); // minimalna odlegďż˝o�� miniďż˝cia + d = -DotProduct(vLeft, vCoulpler[0]); // odlegďż˝o�� prostej ruchu od poczďż˝tku + // ukďż˝adu wsp��rzďż˝dnych d = fabs( DotProduct(vLeft, ((TMoverParameters *)(MoverParameters->Couplers[0].Connected)) @@ -5627,20 +5627,20 @@ void TDynamicObject::CoupleDist() // WriteLog("Distance "+AnsiString(d)+"m from "+asName+":0."); if (d > w) MoverParameters->Couplers[0].CoupleDist = - (d0 < 10 ? 50 : d0); // przywrócenie poprzedniej + (d0 < 10 ? 50 : d0); // przywrďż˝cenie poprzedniej } - if (MoverParameters->Couplers[1].Connected) // jeśli cokolwiek podłączone - if (MoverParameters->Couplers[1].CouplingFlag == 0) // jeśli wirtualny - if (MoverParameters->Couplers[1].CoupleDist < 300.0) // i mniej niż 300m + if (MoverParameters->Couplers[1].Connected) // jeďż˝li cokolwiek pod��czone + if (MoverParameters->Couplers[1].CouplingFlag == 0) // jeďż˝li wirtualny + if (MoverParameters->Couplers[1].CoupleDist < 300.0) // i mniej niďż˝ 300m { // WriteLog("Collision of // "+AnsiString(MoverParameters->Couplers[1].CoupleDist)+"m detected // by // "+asName+":1."); w = 0.5 * (MoverParameters->Couplers[1].Connected->Dim.W + - MoverParameters->Dim.W); // minimalna odległość minięcia - d = -DotProduct(vLeft, vCoulpler[1]); // odległość prostej ruchu od początku - // układu współrzędnych + MoverParameters->Dim.W); // minimalna odlegďż˝o�� miniďż˝cia + d = -DotProduct(vLeft, vCoulpler[1]); // odlegďż˝o�� prostej ruchu od poczďż˝tku + // ukďż˝adu wsp��rzďż˝dnych d = fabs( DotProduct(vLeft, ((TMoverParameters *)(MoverParameters->Couplers[1].Connected)) @@ -5649,50 +5649,50 @@ void TDynamicObject::CoupleDist() // WriteLog("Distance "+AnsiString(d)+"m from "+asName+":1."); if (d > w) MoverParameters->Couplers[0].CoupleDist = - (d0 < 10 ? 50 : d0); // przywrócenie poprzedniej + (d0 < 10 ? 50 : d0); // przywrďż˝cenie poprzedniej } } }; TDynamicObject * TDynamicObject::ControlledFind() { // taka proteza: - // chcę podłączyć - // kabinę EN57 - // bezpośrednio z + // chcďż˝ pod��czyďż˝ + // kabinďż˝ EN57 + // bezpoďż˝rednio z // silnikowym, aby - // nie robić tego + // nie robiďż˝ tego // przez // ukrotnienie - // drugi silnikowy i tak musi być ukrotniony, podobnie jak kolejna jednostka - // lepiej by było przesyłać komendy sterowania, co jednak wymaga przebudowy + // drugi silnikowy i tak musi byďż˝ ukrotniony, podobnie jak kolejna jednostka + // lepiej by byďż˝o przesyďż˝aďż˝ komendy sterowania, co jednak wymaga przebudowy // transmisji komend // (LD) - // problem się robi ze światłami, które będą zapalane w silnikowym, ale muszą - // świecić się w - // rozrządczych - // dla EZT światłą 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... + // problem siďż˝ robi ze ďż˝wiatďż˝ami, ktďż˝re bďż˝dďż˝ zapalane w silnikowym, ale muszďż˝ + // ďż˝wieciďż˝ siďż˝ w + // rozrzďż˝dczych + // dla EZT ďż˝wiat�� 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... TDynamicObject *d = this; // zaczynamy od aktualnego if (d->MoverParameters->TrainType & dt_EZT) // na razie dotyczy to EZT if (d->NextConnected ? d->MoverParameters->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 ((d->MoverParameters->Power < 1.0) && (d->NextConnected->MoverParameters->Power > 1.0)) // my nie mamy mocy, ale ten drugi ma - d = d->NextConnected; // będziemy sterować tym z mocą + d = d->NextConnected; // bďż˝dziemy sterowaďż˝ tym z mocďż˝ } else if (d->PrevConnected ? d->MoverParameters->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 ((d->MoverParameters->Power < 1.0) && (d->PrevConnected->MoverParameters->Power > 1.0)) // my nie mamy mocy, ale ten drugi ma - d = d->PrevConnected; // będziemy sterować tym z mocą + d = d->PrevConnected; // bďż˝dziemy sterowaďż˝ tym z mocďż˝ } return d; }; @@ -5702,37 +5702,37 @@ void TDynamicObject::ParamSet(int what, int into) { // ustawienie lokalnego parametru (what) na stan (into) switch (what & 0xFF00) { - case 0x0100: // to np. są drzwi, bity 0..7 określają numer 1..254 albo maskę - // dla 8 różnych - if (what & 1) // na razie mamy lewe oraz prawe, czyli używamy maskę 1=lewe, + case 0x0100: // to np. sďż˝ drzwi, bity 0..7 okreďż˝lajďż˝ numer 1..254 albo maskďż˝ + // dla 8 r��nych + if (what & 1) // na razie mamy lewe oraz prawe, czyli uďż˝ywamy maskďż˝ 1=lewe, // 2=prawe, 3=wszystkie if (MoverParameters->DoorLeftOpened) - { // są otwarte - if (!into) // jeśli zamykanie + { // sďż˝ otwarte + if (!into) // jeďż˝li zamykanie { - // dźwięk zamykania + // dďż˝wiďż˝k zamykania } } else - { // są zamknięte - if (into) // jeśli otwieranie + { // sďż˝ zamkniďż˝te + if (into) // jeďż˝li otwieranie { - // dźwięk otwierania + // dďż˝wiďż˝k otwierania } } - if (what & 2) // prawe działają niezależnie od lewych + if (what & 2) // prawe dziaďż˝ajďż˝ niezaleďż˝nie od lewych if (MoverParameters->DoorRightOpened) - { // są otwarte - if (!into) // jeśli zamykanie + { // sďż˝ otwarte + if (!into) // jeďż˝li zamykanie { - // dźwięk zamykania + // dďż˝wiďż˝k zamykania } } else - { // są zamknięte - if (into) // jeśli otwieranie + { // sďż˝ zamkniďż˝te + if (into) // jeďż˝li otwieranie { - // dźwięk otwierania + // dďż˝wiďż˝k otwierania } } break; @@ -5740,20 +5740,20 @@ void TDynamicObject::ParamSet(int what, int into) }; int TDynamicObject::RouteWish(TTrack *tr) -{ // zapytanie do AI, po którym - // segmencie (-6..6) jechać na - // skrzyżowaniu (tr) +{ // zapytanie do AI, po ktďż˝rym + // segmencie (-6..6) jechaďż˝ na + // skrzyďż˝owaniu (tr) return Mechanik ? Mechanik->CrossRoute(tr) : 0; // wg AI albo prosto }; std::string TDynamicObject::TextureTest(std::string const &name) -{ // Ra 2015-01: sprawdzenie dostępności tekstury o podanej nazwie +{ // Ra 2015-01: sprawdzenie dostďż˝pnoďż˝ci tekstury o podanej nazwie std::string x = name + ".dds"; // na razie prymitywnie if (FileExists(x.c_str())) return x; else { - x = name + ".tga"; // w zasadzie to należałoby uwzględnić deklarowaną kolejność + x = name + ".tga"; // w zasadzie to naleďż˝aďż˝oby uwzglďż˝dniďż˝ deklarowanďż˝ kolejno�� if (FileExists(x.c_str())) return x; else @@ -5769,72 +5769,72 @@ std::string TDynamicObject::TextureTest(std::string const &name) void TDynamicObject::DestinationSet(std::string to, std::string numer) { // ustawienie stacji // docelowej oraz wymiennej - // tekstury 4, jeśli + // tekstury 4, jeďż˝li // istnieje plik - // w zasadzie, to każdy wagon mógłby mieć inną stację docelową - // zwłaszcza w towarowych, pod kątem zautomatyzowania maewrów albo pracy górki - // ale to jeszcze potrwa, zanim będzie możliwe, na razie można wpisać stację z - // rozkładu + // w zasadzie, to kaďż˝dy wagon mďż˝gďż˝by mieďż˝ innďż˝ stacjďż˝ docelowďż˝ + // zwďż˝aszcza w towarowych, pod kďż˝tem zautomatyzowania maewrďż˝w albo pracy gďż˝rki + // ale to jeszcze potrwa, zanim bďż˝dzie moďż˝liwe, na razie moďż˝na wpisaďż˝ stacjďż˝ z + // rozkďż˝adu if (abs(iMultiTex) >= 4) - return; // jak są 4 tekstury wymienne, to nie zmieniać rozkładem + return; // jak sďż˝ 4 tekstury wymienne, to nie zmieniaďż˝ rozkďż˝adem numer = Global::Bezogonkow(numer); asDestination = to; to = Global::Bezogonkow(to); // do szukania pliku obcinamy ogonki std::string x = TextureTest(asBaseDir + numer + "@" + MoverParameters->TypeName); if (!x.empty()) { - ReplacableSkinID[4] = TTexturesManager::GetTextureID( NULL, NULL, x, 9); // rozmywania 0,1,4,5 nie nadają się + ReplacableSkinID[4] = TTexturesManager::GetTextureID( NULL, NULL, x, 9); // rozmywania 0,1,4,5 nie nadajďż˝ siďż˝ return; } x = TextureTest(asBaseDir + numer ); if (!x.empty()) { - ReplacableSkinID[4] = TTexturesManager::GetTextureID( NULL, NULL, x, 9); // rozmywania 0,1,4,5 nie nadają się + ReplacableSkinID[4] = TTexturesManager::GetTextureID( NULL, NULL, x, 9); // rozmywania 0,1,4,5 nie nadajďż˝ siďż˝ return; } if (to.empty()) to = "nowhere"; - x = TextureTest(asBaseDir + to + "@" + MoverParameters->TypeName); // w pierwszej kolejności z nazwą FIZ/MMD + x = TextureTest(asBaseDir + to + "@" + MoverParameters->TypeName); // w pierwszej kolejnoďż˝ci z nazwďż˝ FIZ/MMD if (!x.empty()) { - ReplacableSkinID[4] = TTexturesManager::GetTextureID( NULL, NULL, x, 9); // rozmywania 0,1,4,5 nie nadają się + ReplacableSkinID[4] = TTexturesManager::GetTextureID( NULL, NULL, x, 9); // rozmywania 0,1,4,5 nie nadajďż˝ siďż˝ return; } x = TextureTest(asBaseDir + to); // na razie prymitywnie if (!x.empty()) - ReplacableSkinID[4] = TTexturesManager::GetTextureID( NULL, NULL, x, 9); // rozmywania 0,1,4,5 nie nadają się + ReplacableSkinID[4] = TTexturesManager::GetTextureID( NULL, NULL, x, 9); // rozmywania 0,1,4,5 nie nadajďż˝ siďż˝ else { - x = TextureTest(asBaseDir + "nowhere"); // jak nie znalazł dedykowanej, to niech daje nowhere + x = TextureTest(asBaseDir + "nowhere"); // jak nie znalazďż˝ dedykowanej, to niech daje nowhere if (!x.empty()) ReplacableSkinID[4] = TTexturesManager::GetTextureID(NULL, NULL, x, 9); } - // Ra 2015-01: żeby zalogować błąd, trzeba by mieć pewność, że model używa + // Ra 2015-01: ďż˝eby zalogowaďż˝ b��d, trzeba by mieďż˝ pewno��, ďż˝e model uďż˝ywa // tekstury nr 4 }; void TDynamicObject::OverheadTrack(float o) { // ewentualne wymuszanie jazdy - // bezprądowej z powodu informacji + // bezprďż˝dowej z powodu informacji // w torze - if (ctOwner) // jeśli ma obiekt nadzorujący - { // trzeba zaktualizować mapę flag bitowych jazdy bezprądowej + if (ctOwner) // jeďż˝li ma obiekt nadzorujďż˝cy + { // trzeba zaktualizowaďż˝ mapďż˝ flag bitowych jazdy bezprďż˝dowej if (o < 0.0) { // normalna jazda po tym torze - ctOwner->iOverheadZero &= ~iOverheadMask; // zerowanie bitu - może pobierać prąd - ctOwner->iOverheadDown &= ~iOverheadMask; // zerowanie bitu - może podnieść pantograf + ctOwner->iOverheadZero &= ~iOverheadMask; // zerowanie bitu - moďż˝e pobieraďż˝ prďż˝d + ctOwner->iOverheadDown &= ~iOverheadMask; // zerowanie bitu - moďż˝e podnie�� pantograf } else if (o > 0.0) - { // opuszczenie pantografów + { // opuszczenie pantografďż˝w ctOwner->iOverheadZero |= - iOverheadMask; // ustawienie bitu - ma jechać bez pobierania prądu - ctOwner->iOverheadDown |= iOverheadMask; // ustawienie bitu - ma opuścić pantograf + iOverheadMask; // ustawienie bitu - ma jechaďż˝ bez pobierania prďż˝du + ctOwner->iOverheadDown |= iOverheadMask; // ustawienie bitu - ma opuďż˝ciďż˝ pantograf } else - { // jazda bezprądowa z podniesionym pantografem + { // jazda bezprďż˝dowa z podniesionym pantografem ctOwner->iOverheadZero |= - iOverheadMask; // ustawienie bitu - ma jechać bez pobierania prądu - ctOwner->iOverheadDown &= ~iOverheadMask; // zerowanie bitu - może podnieść pantograf + iOverheadMask; // ustawienie bitu - ma jechaďż˝ bez pobierania prďż˝du + ctOwner->iOverheadDown &= ~iOverheadMask; // zerowanie bitu - moďż˝e podnie�� pantograf } } }; diff --git a/EU07.cpp b/EU07.cpp index dd229f29..9625f89d 100644 --- a/EU07.cpp +++ b/EU07.cpp @@ -69,8 +69,8 @@ int InitGL(GLvoid) // All Setup For OpenGL Goes Here glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); - Global::pWorld = &World; // Ra: wskaźnik potrzebny do usuwania pojazdów - return World.Init(hWnd, hDC); // true jeśli wszystko pójdzie dobrze + Global::pWorld = &World; // Ra: wskaďż˝nik potrzebny do usuwania pojazdďż˝w + return World.Init(hWnd, hDC); // true jeďż˝li wszystko pďż˝jdzie dobrze } //--------------------------------------------------------------------------- @@ -403,22 +403,22 @@ LRESULT CALLBACK WndProc(HWND hWnd, // handle for this window RECT rect; switch (uMsg) // check for windows messages { - case WM_PASTE: //[Ctrl]+[V] potrzebujemy do innych celów + case WM_PASTE: //[Ctrl]+[V] potrzebujemy do innych celďż˝w return 0; - case WM_COPYDATA: // obsługa danych przesłanych przez program sterujący + case WM_COPYDATA: // obsďż˝uga danych przesďż˝anych przez program sterujďż˝cy pDane = (PCOPYDATASTRUCT)lParam; if (pDane->dwData == 'EU07') // sygnatura danych World.OnCommandGet((DaneRozkaz *)(pDane->lpData)); break; case WM_ACTIVATE: // watch for window activate message // case WM_ACTIVATEAPP: - { // Ra: uzależnienie aktywności od bycia na wierzchu + { // Ra: uzaleďż˝nienie aktywnoďż˝ci od bycia na wierzchu Global::bActive = (LOWORD(wParam) != WA_INACTIVE); - if (Global::bInactivePause) // jeśli ma być pauzowanie okna w tle + if (Global::bInactivePause) // jeďż˝li ma byďż˝ pauzowanie okna w tle if (Global::bActive) Global::iPause &= ~4; // odpauzowanie, gdy jest na pierwszym planie else - Global::iPause |= 4; // włączenie pauzy, gdy nieaktywy + Global::iPause |= 4; // w��czenie pauzy, gdy nieaktywy if (Global::bActive) SetCursorPos(mx, my); ShowCursor(!Global::bActive); @@ -472,8 +472,8 @@ LRESULT CALLBACK WndProc(HWND hWnd, // handle for this window case WM_KEYDOWN: if (Global::bActive) { - if (wParam != 17) // bo naciśnięcia [Ctrl] nie ma po co przekazywać - if (wParam != 145) //[Scroll Lock] też nie + if (wParam != 17) // bo naciďż˝niďż˝cia [Ctrl] nie ma po co przekazywaďż˝ + if (wParam != 145) //[Scroll Lock] teďż˝ nie World.OnKeyDown(wParam); switch (wParam) { @@ -481,27 +481,27 @@ LRESULT CALLBACK WndProc(HWND hWnd, // handle for this window if (DebugModeFlag) break; case 19: //[Pause] - if (Global::iPause & 1) // jeśli pauza startowa - Global::iPause &= ~1; // odpauzowanie, gdy po wczytaniu miało nie startować + if (Global::iPause & 1) // jeďż˝li pauza startowa + Global::iPause &= ~1; // odpauzowanie, gdy po wczytaniu miaďż˝o nie startowaďż˝ else if (!(Global::iMultiplayer & 2)) // w multiplayerze pauza nie ma sensu if (!Console::Pressed(VK_CONTROL)) // z [Ctrl] to radiostop jest - // Ra: poniższe nie ma sensu, bo brak komunikacji natychmiast zapauzuje + // Ra: poniďż˝sze nie ma sensu, bo brak komunikacji natychmiast zapauzuje // ponownie - // if (Global::iPause&8) //jeśli pauza związana z brakiem komunikacji z + // if (Global::iPause&8) //jeďż˝li pauza zwiďż˝zana z brakiem komunikacji z // PoKeys // Global::iPause&=~10; //odpauzowanie pauzy PoKeys (chyba nic nie da) i - // ewentualnie klawiszowej również + // ewentualnie klawiszowej rďż˝wnieďż˝ // else Global::iPause ^= 2; // zmiana stanu zapauzowania if (Global::iPause) // jak pauza - Global::iTextMode = VK_F1; // to wyświetlić zegar i informację + Global::iTextMode = VK_F1; // to wyďż˝wietliďż˝ zegar i informacjďż˝ break; case VK_F7: if (DebugModeFlag) - { // siatki wyświetlane tyko w trybie testowym + { // siatki wyďż˝wietlane tyko w trybie testowym Global::bWireFrame = !Global::bWireFrame; - ++Global::iReCompile; // odświeżyć siatki - // Ra: jeszcze usunąć siatki ze skompilowanych obiektów! + ++Global::iReCompile; // odďż˝wieďż˝yďż˝ siatki + // Ra: jeszcze usun�� siatki ze skompilowanych obiektďż˝w! } break; } @@ -578,9 +578,9 @@ int WINAPI WinMain(HINSTANCE hInstance, // instance MSG msg; // windows message structure BOOL done = FALSE; // bool variable to exit loop fullscreen = true; - DeleteFile("errors.txt"); // usunięcie starego - Global::LoadIniFile("eu07.ini"); // teraz dopiero można przejrzeć plik z ustawieniami - Global::InitKeys("keys.ini"); // wczytanie mapowania klawiszy - jest na stałe + DeleteFile("errors.txt"); // usuniďż˝cie starego + Global::LoadIniFile("eu07.ini"); // teraz dopiero moďż˝na przejrzeďż˝ plik z ustawieniami + Global::InitKeys("keys.ini"); // wczytanie mapowania klawiszy - jest na staďż˝e // hunter-271211: ukrywanie konsoli if (Global::iWriteLogEnabled & 2) @@ -590,7 +590,7 @@ int WINAPI WinMain(HINSTANCE hInstance, // instance } std::string commandline( lpCmdLine ); // parametry uruchomienia if( false == commandline.empty() ) - { // analizowanie parametrów + { // analizowanie parametrďż˝w cParser parser( commandline ); std::string token; do { @@ -609,15 +609,15 @@ int WINAPI WinMain(HINSTANCE hInstance, // instance parser >> Global::asHumanCtrlVehicle; } else if( token == "-modifytga" ) - { // wykonanie modyfikacji wszystkich plików TGA + { // wykonanie modyfikacji wszystkich plikďż˝w TGA Global::iModifyTGA = -1; // specjalny tryb wykonania totalnej modyfikacji } else if( token == "-e3d" ) - { // wygenerowanie wszystkich plików E3D + { // wygenerowanie wszystkich plikďż˝w E3D if (Global::iConvertModels > 0) Global::iConvertModels = -Global::iConvertModels; // specjalny tryb else - Global::iConvertModels = -7; // z optymalizacją, bananami i prawidłowym Opacity + Global::iConvertModels = -7; // z optymalizacjďż˝, bananami i prawidďż˝owym Opacity } else Error( @@ -644,9 +644,9 @@ int WINAPI WinMain(HINSTANCE hInstance, // instance return 0; // quit if window was not created SetForegroundWindow(hWnd); // McZapkie: proba przeplukania klawiatury - Console *pConsole = new Console(); // Ra: nie wiem, czy ma to sens, ale jakoś zainicjowac trzeba + Console *pConsole = new Console(); // Ra: nie wiem, czy ma to sens, ale jakoďż˝ zainicjowac trzeba while (Console::Pressed(VK_F10)) - Error("Keyboard buffer problem - press F10"); // na Windows 98 lubi się to pojawiać + Error("Keyboard buffer problem - press F10"); // na Windows 98 lubi siďż˝ to pojawiaďż˝ int iOldSpeed, iOldDelay; SystemParametersInfo(SPI_GETKEYBOARDSPEED, 0, &iOldSpeed, 0); SystemParametersInfo(SPI_GETKEYBOARDDELAY, 0, &iOldDelay, 0); @@ -656,20 +656,20 @@ int WINAPI WinMain(HINSTANCE hInstance, // instance WriteLog("No joystick"); if (Global::iModifyTGA < 0) { // tylko modyfikacja TGA, bez uruchamiania symulacji - Global::iMaxTextureSize = 64; //żeby nie zamulać pamięci - World.ModifyTGA(); // rekurencyjne przeglądanie katalogów + Global::iMaxTextureSize = 64; //ďż˝eby nie zamulaďż˝ pamiďż˝ci + World.ModifyTGA(); // rekurencyjne przeglďż˝danie katalogďż˝w } else { if (Global::iConvertModels < 0) { Global::iConvertModels = -Global::iConvertModels; - World.CreateE3D("models\\"); // rekurencyjne przeglądanie katalogów + World.CreateE3D("models\\"); // rekurencyjne przeglďż˝danie katalogďż˝w World.CreateE3D("dynamic\\", true); - } // po zrobieniu E3D odpalamy normalnie scenerię, by ją zobaczyć + } // po zrobieniu E3D odpalamy normalnie sceneriďż˝, by jďż˝ zobaczyďż˝ // else - //{//główna pętla programu - Console::On(); // włączenie konsoli + //{//g��wna pďż˝tla programu + Console::On(); // w��czenie konsoli while (!done) // loop that runs while done=FALSE { if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) // is there a message waiting? @@ -689,14 +689,14 @@ int WINAPI WinMain(HINSTANCE hInstance, // instance // draw the scene, watch for quit messages // DrawGLScene() // if (!pause) - // if (Global::bInactivePause?Global::bActive:true) //tak nie, bo spada z góry + // if (Global::bInactivePause?Global::bActive:true) //tak nie, bo spada z gďż˝ry if (World.Update()) // Was There A Quit Received? SwapBuffers(hDC); // Swap Buffers (Double Buffering) else done = true; //[F10] or DrawGLScene signalled a quit } } - Console::Off(); // wyłączenie konsoli (komunikacji zwrotnej) + Console::Off(); // wy��czenie konsoli (komunikacji zwrotnej) } SystemParametersInfo(SPI_SETKEYBOARDSPEED, iOldSpeed, NULL, 0); SystemParametersInfo(SPI_SETKEYBOARDDELAY, iOldDelay, NULL, 0); diff --git a/Globals.cpp b/Globals.cpp index 94b5c29b..e88a5101 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::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-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 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,52 +114,52 @@ 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 +// 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}, @@ -176,14 +176,25 @@ double Global::fCalibrateOut[7][6] = {{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 +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; +unsigned long int Global::iMWDBaudrate = 500000; +AnsiString 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}; +double Global::fMWDvolt[2] = {4000, 1023}; +double Global::fMWDamp[2] = {800, 1023}; //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- @@ -205,8 +216,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 ); @@ -308,7 +319,7 @@ void Global::ConfigParse(cParser &Parser) { >> Global::fMouseYScale; } 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" ); } @@ -317,14 +328,14 @@ void Global::ConfigParse(cParser &Parser) { Parser.getTokens(); Parser >> token; Global::bLoadTraction = ( token == "yes" ); } - else if( token == "friction" ) { // mnożnik tarcia - KURS90 + else if( token == "friction" ) { // mnoďż˝nik tarcia - KURS90 Parser.getTokens( 1, false ); Parser >> Global::fFriction; } 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" ); } @@ -347,7 +358,7 @@ void Global::ConfigParse(cParser &Parser) { // ShaXbee - domyslne rozszerzenie tekstur Parser.getTokens(); Parser >> token; if( token == "tga" ) { - // domyślnie od TGA + // domyďż˝lnie od TGA Global::szDefaultExt = Global::szTexturesTGA; } } @@ -411,7 +422,7 @@ void Global::ConfigParse(cParser &Parser) { else { Global::iMaxTextureSize = 16384; } } else if( token == "doubleambient" ) { - // podwójna jasność ambient + // podwďż˝jna jasno�� ambient Parser.getTokens(); Parser >> token; Global::bDoubleAmbient = ( token == "yes" ); } @@ -422,14 +433,14 @@ void Global::ConfigParse(cParser &Parser) { if( Global::fMoveLight == 0.f ) { // 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( Global::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 + Global::fMoveLight = 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 ) - @@ -437,12 +448,12 @@ 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; } @@ -457,12 +468,12 @@ void Global::ConfigParse(cParser &Parser) { Global::bGlutFont = ( token == "yes" ); } 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; } @@ -472,12 +483,12 @@ void Global::ConfigParse(cParser &Parser) { Global::bInactivePause = ( token == "yes" ); } 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; } @@ -492,12 +503,12 @@ void Global::ConfigParse(cParser &Parser) { Global::bOldSmudge = ( token == "yes" ); } 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 wartosďż˝ FPS Parser.getTokens( 1, false ); Parser >> Global::fFpsAverage; } @@ -507,76 +518,76 @@ void Global::ConfigParse(cParser &Parser) { Parser >> Global::fFpsDeviation; } 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 ] @@ -588,12 +599,12 @@ void Global::ConfigParse(cParser &Parser) { >> Global::fCalibrateOutMax[ 6 ]; } 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 @@ -607,27 +618,27 @@ void Global::ConfigParse(cParser &Parser) { Parser >> Global::fBrakeStep; } 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; } @@ -644,50 +655,99 @@ void Global::ConfigParse(cParser &Parser) { >> Global::Background[ 1 ] // g >> Global::Background[ 2 ];// b } + // maciek001: ustawienia MWD + else if (str == AnsiString("mwddebug")){ // czy w��czyďż˝ obsďż˝ugďż˝ hamulcďż˝w + bMWDdebugEnable = (GetNextSymbol().LowerCase() == AnsiString("yes")); + }else if (str == AnsiString("comportname")) + { + sMWDPortId = GetNextSymbol().LowerCase(); + if (bMWDdebugEnable) WriteLog("PortName " + AnsiString(sMWDPortId)); + }else if (str == AnsiString("mwdbaudrate")){ // pobierz prďż˝dko�� transmisji danych + iMWDBaudrate = GetNextSymbol().ToInt(); + if (bMWDdebugEnable) WriteLog("PortName " + AnsiString(iMWDBaudrate)); + }else if (str == AnsiString("mwdbreakenable")){ // czy w��czyďż˝ obsďż˝ugďż˝ hamulcďż˝w + bMWDBreakEnable = (GetNextSymbol().LowerCase() == AnsiString("yes")); + }else if (str == AnsiString("mwdinputenable")){ + bMWDInputDataEnable = (GetNextSymbol().LowerCase() == AnsiString("yes")); + }else if(str == AnsiString("mwdbreak")) // warto�� max dla potencjometru hamulca zasadniczego + { + i = GetNextSymbol().ToIntDef(-1); // numer wejďż˝cia + if ((i >= 0) || (i <= 1)){ + fMWDAnalogCalib[i][0] = GetNextSymbol().ToDouble(); // max -> 2^16 -1 + fMWDAnalogCalib[i][1] = GetNextSymbol().ToDouble(); // min -> 0 + fMWDAnalogCalib[i][2] = GetNextSymbol().ToDouble(); // rozdzielczo�� -> 255 maksymalna moďż˝liwa warto�� z ADC + if (bMWDdebugEnable) WriteLog("Break settings " + AnsiString(i) + AnsiString(": ") + AnsiString(fMWDAnalogCalib[i][0]) + AnsiString(" ") + AnsiString(fMWDAnalogCalib[i][1]) + AnsiString(" ") + AnsiString(fMWDAnalogCalib[i][2])); + } + } + else if(str == AnsiString("mwdzbiornikglowny")){ + fMWDzg[0] = GetNextSymbol().ToDouble(); + fMWDzg[1] = GetNextSymbol().ToDouble(); + if (bMWDdebugEnable) WriteLog("AirTank settings: " + AnsiString(fMWDzg[0]) + AnsiString(" ") + AnsiString(fMWDzg[1])); + } + else if(str == AnsiString("mwdprzewodglowny")){ + fMWDpg[0] = GetNextSymbol().ToDouble(); + fMWDpg[1] = GetNextSymbol().ToDouble(); + if (bMWDdebugEnable) WriteLog("MainAirPipe settings: " + AnsiString(fMWDpg[0]) + AnsiString(" ") + AnsiString(fMWDpg[1])); + } + else if(str == AnsiString("mwdcylinderhamulcowy")){ + fMWDph[0] = GetNextSymbol().ToDouble(); + fMWDph[1] = GetNextSymbol().ToDouble(); + if (bMWDdebugEnable) WriteLog("AirPipe settings: " + AnsiString(fMWDph[0]) + AnsiString(" ") + AnsiString(fMWDph[1])); + } + else if(str == AnsiString("mwdwoltomierzwn")){ + fMWDvolt[0] = GetNextSymbol().ToDouble(); + fMWDvolt[1] = GetNextSymbol().ToDouble(); + if (bMWDdebugEnable) WriteLog("Volt settings: " + AnsiString(fMWDvolt[0]) + AnsiString(" ") + AnsiString(fMWDvolt[1])); + } + else if(str == AnsiString("mwdamperomierzwn")){ + fMWDamp[0] = GetNextSymbol().ToDouble(); + fMWDamp[1] = GetNextSymbol().ToDouble(); + if (bMWDdebugEnable) WriteLog("Amp settings: " + AnsiString(fMWDamp[0]) + AnsiString(" ") + AnsiString(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 } } */ @@ -697,7 +757,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); @@ -830,7 +890,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; @@ -840,7 +900,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; @@ -848,18 +908,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); }; @@ -870,7 +930,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)) { @@ -885,146 +945,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ć +{ // 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(); } if( vel2 == -1.0 ) { vel2 = std::numeric_limits::max(); } return Min0R(vel1, vel2); diff --git a/Globals.h b/Globals.h index c181c1de..6eed4f9f 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,20 +143,20 @@ 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 ]; @@ -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); @@ -314,5 +314,18 @@ class Global static std::string Bezogonkow(std::string str, bool _ = false); static double Min0RSpeed(double vel1, double vel2); static double CutValueToRange(double min, double value, double max); + + // maciek001: zmienne dla MWD + static bool bMWDdebugEnable; + static unsigned long int iMWDBaudrate; + static AnsiString sMWDPortId; + static bool bMWDBreakEnable; + static bool bMWDInputDataEnable; + static double fMWDAnalogCalib[4][3]; + static double fMWDzg[2]; + static double fMWDpg[2]; + static double fMWDph[2]; + static double fMWDvolt[2]; + static double fMWDamp[2]; }; //--------------------------------------------------------------------------- diff --git a/McZapkie/_mover.pas b/McZapkie/_mover.pas index 8dfb7dea..20c8d1c6 100644 --- a/McZapkie/_mover.pas +++ b/McZapkie/_mover.pas @@ -4085,7 +4085,7 @@ begin if (EngineType=ElectricSeriesMotor) then begin case RVentType of {wentylatory rozruchowe} - 1: if ActiveDir<>0 then + 1: if (ActiveDir<>0) and (RList[MainCtrlActualPos].R>RVentCutOff) then RventRot:=RventRot+(RVentnmax-RventRot)*RVentSpeed*dt else RventRot:=RventRot*(1-RVentSpeed*dt); diff --git a/Train.cpp b/Train.cpp index b93d1a38..0e746e07 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; } @@ -122,16 +122,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 } }; @@ -183,7 +183,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() @@ -191,12 +191,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) @@ -225,7 +225,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")) @@ -251,9 +251,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(); } @@ -354,12 +354,21 @@ PyObject *TTrain::GetTrainState() PyDict_SetItemString(dict, "manual_brake", PyGetBool(mvOccupied->ManualBrakePos > 0)); PyDict_SetItemString(dict, "pantpress", PyGetFloat(mvControlled->PantPress)); PyDict_SetItemString(dict, "trainnumber", PyGetString(DynamicObject->Mechanik->TrainName().c_str())); + PyDict_SetItemString(dict, "velnext", PyGetFloat(DynamicObject->Mechanik->VelNext)); + PyDict_SetItemString(dict, "actualproximitydist", PyGetFloat(DynamicObject->Mechanik->ActualProximityDist)); + PyDict_SetItemString(dict, "velsignallast", PyGetFloat(DynamicObject->Mechanik->VelSignalLast)); + PyDict_SetItemString(dict, "vellimitlast", PyGetFloat(DynamicObject->Mechanik->VelLimitLast)); + PyDict_SetItemString(dict, "velroad", PyGetFloat(DynamicObject->Mechanik->VelRoad)); + PyDict_SetItemString(dict, "velsignalnext", PyGetFloat(DynamicObject->Mechanik->VelSignalNext)); + PyDict_SetItemString(dict, "battery", PyGetBool(mvControlled->Battery)); + PyDict_SetItemString(dict, "tractionforce", PyGetFloat(DynamicObject->MoverParameters->Ft)); + return dict; } 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) && @@ -368,7 +377,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 @@ -459,17 +468,21 @@ 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) + { + ggBatteryButton.PutValue(1); + } if (mvOccupied->LightsPosNo > 0) { 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); @@ -625,30 +638,30 @@ void TTrain::OnKeyDown(int cKey) } 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); @@ -668,7 +681,7 @@ void TTrain::OnKeyDown(int cKey) 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)) { @@ -749,7 +762,7 @@ void TTrain::OnKeyDown(int cKey) } /* 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 } */ @@ -776,7 +789,7 @@ void TTrain::OnKeyDown(int cKey) // 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)) @@ -802,10 +815,10 @@ void TTrain::OnKeyDown(int cKey) 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)) @@ -829,13 +842,13 @@ void TTrain::OnKeyDown(int cKey) } } 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); @@ -844,7 +857,7 @@ void TTrain::OnKeyDown(int cKey) } 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) && @@ -858,7 +871,7 @@ void TTrain::OnKeyDown(int cKey) } } } - 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) @@ -966,10 +979,10 @@ void TTrain::OnKeyDown(int cKey) } //----------- } } - 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)) { @@ -1214,7 +1227,7 @@ void TTrain::OnKeyDown(int cKey) 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) { @@ -1241,8 +1254,8 @@ void TTrain::OnKeyDown(int cKey) 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); } @@ -1250,12 +1263,12 @@ void TTrain::OnKeyDown(int cKey) 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); } @@ -1264,13 +1277,13 @@ void TTrain::OnKeyDown(int cKey) ; 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); } @@ -1280,7 +1293,7 @@ void TTrain::OnKeyDown(int cKey) 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)) { @@ -1301,7 +1314,7 @@ void TTrain::OnKeyDown(int cKey) { // 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]) @@ -1333,7 +1346,7 @@ void TTrain::OnKeyDown(int cKey) 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]) @@ -1380,7 +1393,7 @@ void TTrain::OnKeyDown(int cKey) 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) @@ -1444,16 +1457,16 @@ void TTrain::OnKeyDown(int cKey) 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); @@ -1478,10 +1491,10 @@ void TTrain::OnKeyDown(int cKey) 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]) @@ -1502,9 +1515,13 @@ void TTrain::OnKeyDown(int cKey) // (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); + } dsbSwitch->Play(0, 0, 0); // mvOccupied->SecuritySystem.Status=0; mvControlled->PantFront(false); @@ -1619,20 +1636,20 @@ void TTrain::OnKeyDown(int cKey) } 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 @@ -1712,7 +1729,7 @@ void TTrain::OnKeyDown(int cKey) 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]) { @@ -1726,7 +1743,7 @@ void TTrain::OnKeyDown(int cKey) } 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 @@ -1766,7 +1783,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); @@ -1789,10 +1806,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); } @@ -1815,7 +1832,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); } } @@ -1837,7 +1854,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); } } @@ -1890,13 +1907,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); } } @@ -1912,10 +1929,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); } @@ -1923,7 +1940,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 @@ -1976,7 +1993,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 } */ } @@ -2002,9 +2019,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); @@ -2051,7 +2068,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) @@ -2169,10 +2186,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)) { @@ -2348,7 +2365,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) @@ -2384,33 +2401,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 @@ -2421,20 +2438,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(']')) @@ -2442,25 +2459,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 } } } @@ -2468,12 +2485,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); @@ -2482,20 +2499,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 @@ -2504,8 +2521,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)) { @@ -2538,8 +2555,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; @@ -2547,9 +2564,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)) @@ -2561,7 +2578,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) @@ -2589,7 +2606,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(); }; @@ -2599,7 +2616,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 @@ -2627,7 +2644,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)) @@ -2641,7 +2658,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); @@ -2650,7 +2667,7 @@ 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? @@ -2659,7 +2676,7 @@ bool TTrain::Update() 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; @@ -2669,7 +2686,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 @@ -2793,32 +2810,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 + 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(3, fHVoltage); // woltomierz wysokiego napiďż˝cia Console::ValueSet(4, fHCurrent[2]); // Ra: sterowanie miernikiem: drugi amperomierz 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 @@ -2834,7 +2851,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; @@ -3110,7 +3127,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()); @@ -3166,7 +3183,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(); @@ -3237,8 +3254,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 @@ -3253,7 +3270,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(); } @@ -3280,7 +3297,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()); @@ -3389,10 +3406,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) @@ -3443,8 +3460,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)) && @@ -3460,7 +3477,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 - @@ -3489,9 +3506,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)) @@ -3502,7 +3519,7 @@ bool TTrain::Update() btLampkaBocznik4.Turn(mvControlled->ScndCtrlPos > 3); } else - { // wyłączone wszystkie cztery + { // wy��czone wszystkie cztery btLampkaBocznik1.TurnOff(); btLampkaBocznik2.TurnOff(); btLampkaBocznik3.TurnOff(); @@ -3557,8 +3574,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)) @@ -3645,13 +3662,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: @@ -3663,16 +3680,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(); @@ -3683,6 +3701,7 @@ bool TTrain::Update() btLampkaNapNastHam.TurnOff(); btLampkaForward.TurnOff(); btLampkaBackward.TurnOff(); + btLampkaED.TurnOff(); } // McZapkie-080602: obroty (albo translacje) regulatorow if (ggMainCtrl.SubModel) @@ -3726,21 +3745,21 @@ bool TTrain::Update() (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(); @@ -3750,20 +3769,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(); } @@ -3887,7 +3906,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) { @@ -3946,7 +3965,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); @@ -3959,7 +3978,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) { @@ -4058,7 +4077,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(); //} @@ -4250,7 +4269,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) @@ -4460,10 +4479,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) @@ -4536,8 +4555,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; @@ -4549,7 +4568,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 @@ -4568,8 +4587,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: @@ -4661,7 +4680,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]))) @@ -4760,8 +4779,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; } @@ -4795,7 +4814,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); @@ -4806,7 +4825,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))) @@ -4955,6 +4974,7 @@ bool TTrain::Update() // hunter-091012 ggCabLightButton.Update(); ggCabLightDimButton.Update(); + ggBatteryButton.Update(); //------ if (ActiveUniversal4) ggUniversal4Button.PermIncValue(dt); @@ -4972,24 +4992,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, @@ -4997,13 +5017,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 } @@ -5014,7 +5034,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); @@ -5279,7 +5299,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: @@ -5306,7 +5326,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 ); @@ -5317,7 +5337,7 @@ bool TTrain::InitializeCab(int NewCabNo, std::string const &asFileName) && ( token != cabstr ) ); } 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(); *parser >> token; @@ -5356,26 +5376,26 @@ 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 parser->getTokens(); *parser >> token; if( token != "none" ) { - Global::asCurrentTexturePath = DynamicObject->asBaseDir; // bieżąca sciezka do tekstur to dynamic/... - TModel3d *kabina = TModelsManager::GetModel( DynamicObject->asBaseDir + token, true ); // szukaj kabinę jako oddzielny model + Global::asCurrentTexturePath = DynamicObject->asBaseDir; // bie��ca sciezka do tekstur to dynamic/... + TModel3d *kabina = TModelsManager::GetModel( DynamicObject->asBaseDir + token, true ); // szukaj kabinďż˝ jako oddzielny model Global::asCurrentTexturePath = szTexturePath; // z powrotem defaultowa sciezka do tekstur // if (DynamicObject->mdKabina!=k) if( kabina != nullptr ) { 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 ) { // model tylko, gdy nie ma kabiny 1 @@ -5408,8 +5428,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" ); @@ -5421,11 +5441,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) @@ -5437,24 +5457,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) @@ -5462,47 +5482,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) @@ -5547,11 +5567,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) @@ -5647,20 +5667,20 @@ 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 ); @@ -5720,8 +5740,8 @@ 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 otherwise @@ -5730,7 +5750,7 @@ 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 wsaďż˝nik na obiekt animujďż˝cy lampkďż˝ // SEKCJA LAMPEK if( Label == "i-maxft:" ) { @@ -5909,7 +5929,7 @@ TTrain::initialize_button( cParser &Parser, std::string const &Label, int const 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 wsaďż˝nik na obiekt animujďż˝cy gaďż˝kďż˝ /* sanity check if( !DynamicObject->mdKabina ) { @@ -6113,7 +6133,7 @@ TTrain::initialize_gauge( cParser &Parser, std::string const &Label, int const C ggDoorSignallingButton.Load( Parser, DynamicObject->mdKabina ); } 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:" ) { @@ -6140,48 +6160,48 @@ TTrain::initialize_gauge( cParser &Parser, std::string const &Label, int const C // SEKCJA WSKAZNIKOW else if( ( Label == "tachometer:" ) || ( Label == "tachometerb:" ) ) { - // predkosciomierz wskazówkowy z szarpaniem - gg = Cabine[ Cabindex ].Gauge( -1 ); // pierwsza wolna gałka + // predkosciomierz wskazďż˝wkowy 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 wskazďż˝wkowy 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ďż˝ka 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 ); } @@ -6192,7 +6212,7 @@ TTrain::initialize_gauge( cParser &Parser, std::string const &Label, int const C 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 ] ); } @@ -6203,7 +6223,7 @@ TTrain::initialize_gauge( cParser &Parser, std::string const &Label, int const C 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 ] ); } @@ -6211,14 +6231,14 @@ TTrain::initialize_gauge( cParser &Parser, std::string const &Label, int const C || ( Label == "brakepressb:" ) ) { // 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 ); } @@ -6227,15 +6247,15 @@ TTrain::initialize_gauge( cParser &Parser, std::string const &Label, int const C ggZbS.Load( Parser, DynamicObject->mdKabina, NULL, 0.1 ); } 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 ); } @@ -6272,7 +6292,7 @@ TTrain::initialize_gauge( cParser &Parser, std::string const &Label, int const C } 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 ); } @@ -6282,37 +6302,37 @@ TTrain::initialize_gauge( cParser &Parser, std::string const &Label, int const C } 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:" ) { ggIgnitionKey.Load( Parser, DynamicObject->mdKabina ); } 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 8a482618..e9337d90 100644 --- a/Train.h +++ b/Train.h @@ -201,6 +201,7 @@ private: TGauge ggCabLightButton; // hunter-091012: przelacznik oswietlania kabiny TGauge ggCabLightDimButton; // hunter-091012: przelacznik przyciemnienia + TGauge ggBatteryButton; // Stele 161228 hebelek baterii // oswietlenia kabiny // NBMX wrzesien 2003 - obsluga drzwi @@ -267,6 +268,7 @@ private: TButton btLampkaBocznik4; TButton btLampkaRadiotelefon; TButton btLampkaHamienie; + TButton btLampkaED; //Stele 161228 hamowanie elektrodynamiczne TButton btLampkaJazda; // Ra: nie używane // KURS90 TButton btLampkaBoczniki;