16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-20 10:19:19 +02:00

Dodanie kontrolek w Python i MWD z mastera

This commit is contained in:
firleju
2017-01-17 06:13:42 +01:00
13 changed files with 2821 additions and 1805 deletions

View File

@@ -25,55 +25,55 @@ http://mozilla.org/MPL/2.0/.
// namespace Global {
// parametry do u¿ytku wewnêtrznego
// parametry do u<EFBFBD>ytku wewn<EFBFBD>trznego
// double Global::tSinceStart=0;
TGround *Global::pGround = NULL;
// char Global::CreatorName1[30]="2001-2004 Maciej Czapkiewicz <McZapkie>";
// char Global::CreatorName2[30]="2001-2003 Marcin WoŸniak <Marcin_EU>";
// char Global::CreatorName2[30]="2001-2003 Marcin Wo<EFBFBD>niak <Marcin_EU>";
// char Global::CreatorName3[20]="2004-2005 Adam Bugiel <ABu>";
// char Global::CreatorName4[30]="2004 Arkadiusz Œlusarczyk <Winger>";
// char Global::CreatorName5[30]="2003-2009 £ukasz Kirchner <Nbmx>";
// char Global::CreatorName4[30]="2004 Arkadiusz <EFBFBD>lusarczyk <Winger>";
// char Global::CreatorName5[30]="2003-2009 <EFBFBD>ukasz Kirchner <Nbmx>";
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<EFBFBD><EFBFBD>czy<EFBFBD> multisampling, 3-promie<EFBFBD> 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<EFBFBD>ci rozszerze<EFBFBD>
bool Global::bOpenGL_1_5 = false; // czy s<EFBFBD> dost<EFBFBD>pne funkcje OpenGL 1.5
double Global::fLuminance = 1.0; // jasno<EFBFBD><EFBFBD> <20>wiat<EFBFBD>a do automatycznego zapalania
int Global::iReCompile = 0; // zwi<EFBFBD>kszany, gdy trzeba od<EFBFBD>wie<EFBFBD>y<EFBFBD> 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<EFBFBD>any
int Global::iViewMode = 0; // co aktualnie wida<EFBFBD>: 0-kabina, 1-latanie, 2-sprz<EFBFBD>gi, 3-dokumenty
int Global::iTextMode = 0; // tryb pracy wy<EFBFBD>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<EFBFBD>wietlacza tekstowego
double Global::fSunDeclination = 0.0; // deklinacja S<EFBFBD>o<EFBFBD>ca
double Global::fTimeAngleDeg = 0.0; // godzina w postaci k<EFBFBD>ta
float Global::fClockAngleDeg[6]; // k<EFBFBD>ty obrotu cylindr<EFBFBD>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<EFBFBD>ni<EFBFBD>ty klawisz w celu logowania
GLuint Global::iTextureId = 0; // ostatnio u<EFBFBD>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<EFBFBD> do <EFBFBD>ledzenia b<EFBFBD><EFBFBD>d<EFBFBD>w OpenGL
int Global::iTextures = 0; // licznik u<EFBFBD>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<EFBFBD><EFBFBD> segment<EFBFBD>w do regulacji wydajno<EFBFBD>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<EFBFBD>ytkownika, renderowany bez trz<EFBFBD>sienia
bool Global::bSmudge = false; // czy wy<EFBFBD>wietla<EFBFBD> smug<EFBFBD>, a pojazd u<EFBFBD>ytkownika na ko<EFBFBD>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<EFBFBD>uguj<EFBFBD>cy stenogramy d<EFBFBD>wi<EFBFBD>k<EFBFBD>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<EFBFBD>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}; //<EFBFBD>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<EFBFBD> przeliczanie przechy<EFBFBD>ki
bool Global::bJoinEvents = false; // czy grupowa<EFBFBD> eventy o tych samych nazwach
int Global::iHiddenEvents = 1; // czy <EFBFBD><EFBFBD>czy<EFBFBD> eventy z torami poprzez nazw<EFBFBD> toru
// parametry u¿ytkowe (jak komu pasuje)
// parametry u<EFBFBD>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<EFBFBD>o<EFBFBD>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<EFBFBD>ania niekt<EFBFBD>rych funkcji na rzecz komunikacji
double Global::fMoveLight = -1; // ruchome <EFBFBD>wiat<EFBFBD>o
double Global::fLatitudeDeg = 52.0; // szeroko<EFBFBD><EFBFBD> geograficzna
float Global::fFriction = 1.0; // mno<EFBFBD>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<EFBFBD>lny j<EFBFBD>zyk - http://tools.ietf.org/html/bcp47
// parametry wydajnoœciowe (np. regulacja FPS, szybkoœæ wczytywania)
// parametry wydajno<EFBFBD>ciowe (np. regulacja FPS, szybko<EFBFBD><EFBFBD> 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<EFBFBD>lne rozmywanie tekstur TGA bez alfa
int Global::iBallastFiltering = 9; // domy<EFBFBD>lne rozmywanie tekstur podsypki
int Global::iRailProFiltering = 5; // domy<EFBFBD>lne rozmywanie tekstur szyn
int Global::iDynamicFiltering = 5; // domy<EFBFBD>lne rozmywanie tekstur pojazd<EFBFBD>w
bool Global::bUseVBO = false; // czy jest VBO w karcie graficznej (czy u<EFBFBD>y<EFBFBD>)
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<EFBFBD>adzanie drut<EFBFBD>w starym sposobem
char **Global::szDefaultExt = Global::szTexturesDDS; // domy<EFBFBD>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<EFBFBD>w binarnych, +2-optymalizacja transform<EFBFBD>w
int Global::iSlowMotionMask = -1; // maska wy<EFBFBD><EFBFBD>czanych w<EFBFBD>a<EFBFBD>ciwo<EFBFBD>ci dla zwi<EFBFBD>kszenia FPS
int Global::iModifyTGA = 7; // czy korygowa<EFBFBD> pliki TGA dla szybszego wczytywania
// bool Global::bTerrainCompact=true; //czy zapisa<EFBFBD> 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<EFBFBD> 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<EFBFBD>rej promie<EFBFBD> scenerii b<EFBFBD>dzie zmniejszany
double Global::fFpsMax = 0.0; // g<EFBFBD>rna granica FPS, przy kt<EFBFBD>rej promie<EFBFBD> scenerii b<EFBFBD>dzie zwi<EFBFBD>kszany
double Global::fFpsRadiusMax = 3000.0; // maksymalny promie<EFBFBD> renderowania
int Global::iFpsRadiusMax = 225; // maksymalny promie<EFBFBD> renderowania
double Global::fRadiusFactor = 1.1; // wsp<EFBFBD><EFBFBD>czynnik jednorazowej zmiany promienia scenerii
bool Global::bOldSmudge = false; // U<EFBFBD>ywanie starej smugi
// parametry testowe (do testowania scenerii i obiektów)
// parametry testowe (do testowania scenerii i obiekt<EFBFBD>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<EFBFBD>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<EFBFBD><EFBFBD>czynniki dla pot<EFBFBD>g 0, 1, 2, 3 warto<EFBFBD>ci odczytanej z urz<EFBFBD>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<EFBFBD>ciowe (do usuni<EFBFBD>cia)
// bool Global::bTimeChange=false; //Ra: ZiomalCl wy<EFBFBD><EFBFBD>czy<EFBFBD> star<EFBFBD> wersj<EFBFBD> nocy
// bool Global::bRenderAlpha=true; //Ra: wywali<EFBFBD>am t<EFBFBD> flag<EFBFBD>
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<EFBFBD>jna jasno<EFBFBD><EFBFBD> ambient
double Global::fTimeSpeed = 1.0; // przyspieszenie czasu, zmienna do test<EFBFBD>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<EFBFBD> nie u<EFBFBD>ywa si<EFBFBD> kart, na kt<EFBFBD>rych 16bpp co<EFBFBD> poprawi
// maciek001: konfiguracja wst<73>pna portu COM
bool Global::bMWDdebugEnable = false;
unsigned long int Global::iMWDBaudrate = 500000;
AnsiString Global::sMWDPortId = "COM1"; // nazwa portu z kt<6B>rego korzystamy - na razie nie dzia<69>a
bool Global::bMWDBreakEnable = false; // zmieni<6E> na FALSE!!! jak ju<6A> b<>dzie dzia<69>a<EFBFBD> wczytywanie z *.ini
double Global::fMWDAnalogCalib[4][3] = {{1023, 0, 1023},{1023, 0, 1023},{1023, 0, 1023},{1023, 0, 1023}}; // warto<74><6F> max potencjometru, warto<74><6F> min potencjometru, rozdzielczo<7A><6F> (max. warto<74><6F> jaka mo<6D>e by<62> -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<EFBFBD><EFBFBD>rz<EFBFBD>dne w scenerii
pFreeCameraInitAngle[i] = vector3(0, 0, 0); // k<EFBFBD>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 <EFBFBD>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<EFBFBD>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<EFBFBD>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<EFBFBD>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<EFBFBD>jna jasno<EFBFBD><EFBFBD> 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<EFBFBD><EFBFBD>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<EFBFBD>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<EFBFBD>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<EFBFBD>jna jasno<EFBFBD><EFBFBD> ambient
Parser.getTokens(); Parser >> token;
Global::bSmoothTraction = ( token == "yes" );
}
else if( token == "timespeed" ) {
// przyspieszenie czasu, zmienna do testów
// przyspieszenie czasu, zmienna do test<EFBFBD>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<EFBFBD><EFBFBD> geograficzna
Parser.getTokens( 1, false );
Parser >> Global::fLatitudeDeg;
}
else if( token == "convertmodels" ) {
// tworzenie plików binarnych
// tworzenie plik<EFBFBD>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<EFBFBD>w binarnych
Parser.getTokens( 1, false );
Parser >> Global::iSlowMotionMask;
}
else if( token == "modifytga" ) {
// czy korygowaæ pliki TGA dla szybszego wczytywania
// czy korygowa<EFBFBD> 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<EFBFBD>ki, aby wewn<EFBFBD>trzna szyna by<EFBFBD>a "pozioma"
Parser.getTokens(); Parser >> token;
Global::bRollFix = ( token == "yes" );
}
else if( token == "fpsaverage" ) {
// oczekiwana wartosæ FPS
// oczekiwana wartos<EFBFBD> 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<EFBFBD> renderowania
Parser.getTokens( 1, false );
Parser >> Global::fFpsRadiusMax;
}
else if(token == "calibratein"){
// parametry kalibracji wejϾ
// parametry kalibracji wej<EFBFBD><EFBFBD>
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<EFBFBD><EFBFBD> warto<EFBFBD>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<EFBFBD>nik
>> Global::fCalibrateIn[ in ][ 2 ] // mno<EFBFBD>nik dla kwadratu
>> Global::fCalibrateIn[ in ][ 3 ]; // mno<EFBFBD>nik dla sze<EFBFBD>cianu
Global::fCalibrateIn[ in ][ 4 ] = 0.0; // mno<EFBFBD>nik 4 pot<EFBFBD>gi
Global::fCalibrateIn[ in ][ 5 ] = 0.0; // mno<EFBFBD>nik 5 pot<EFBFBD>gi
}
else if(token == "calibrate5din"){
// parametry kalibracji wejϾ
// parametry kalibracji wej<EFBFBD><EFBFBD>
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<EFBFBD><EFBFBD> warto<EFBFBD>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<EFBFBD>nik
>> Global::fCalibrateIn[ in ][ 2 ] // mno<EFBFBD>nik dla kwadratu
>> Global::fCalibrateIn[ in ][ 3 ] // mno<EFBFBD>nik dla sze<EFBFBD>cianu
>> Global::fCalibrateIn[ in ][ 4 ] // mno<EFBFBD>nik 4 pot<EFBFBD>gi
>> Global::fCalibrateIn[ in ][ 5 ]; // mno<EFBFBD>nik 5 pot<EFBFBD>gi
}
else if(token == "calibrateout"){
// parametry kalibracji wyjϾ
// parametry kalibracji wyj<EFBFBD><EFBFBD>
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<EFBFBD><EFBFBD> warto<EFBFBD>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<EFBFBD>nik liniowy
>> Global::fCalibrateOut[ out ][ 2 ] // mno<EFBFBD>nik dla kwadratu
>> Global::fCalibrateOut[ out ][ 3 ]; // mno<EFBFBD>nik dla sze<EFBFBD>cianu
Global::fCalibrateOut[ out ][ 4 ] = 0.0; // mno<EFBFBD>nik dla 4 pot<EFBFBD>gi
Global::fCalibrateOut[ out ][ 5 ] = 0.0; // mno<EFBFBD>nik dla 5 pot<EFBFBD>gi
}
else if(token == "calibrate5dout"){
// parametry kalibracji wyjϾ
// parametry kalibracji wyj<EFBFBD><EFBFBD>
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<EFBFBD><EFBFBD> warto<EFBFBD>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<EFBFBD>nik liniowy
>> Global::fCalibrateOut[ out ][ 2 ] // mno<EFBFBD>nik dla kwadratu
>> Global::fCalibrateOut[ out ][ 3 ] // mno<EFBFBD>nik dla sze<EFBFBD>cianu
>> Global::fCalibrateOut[ out ][ 4 ] // mno<EFBFBD>nik dla 4 pot<EFBFBD>gi
>> Global::fCalibrateOut[ out ][ 5 ]; // mno<EFBFBD>nik dla 5 pot<EFBFBD>gi
}
else if(token == "calibrateoutmaxvalues"){
// maksymalne wartoœci jakie mo¿na wyœwietliæ na mierniku
// maksymalne warto<EFBFBD>ci jakie mo<EFBFBD>na wy<EFBFBD>wietli<EFBFBD> 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<EFBFBD>cie z info o przebiegu kalibracji
Parser.getTokens( 1, false );
Parser >> Global::iCalibrateOutDebugInfo;
}
else if( token == "pwm" ) {
// zmiana numerów wyjœæ PWM
// zmiana numer<EFBFBD>w wyj<EFBFBD><EFBFBD> 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<EFBFBD> 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 <EFBFBD><EFBFBD>czy<EFBFBD> eventy z torami poprzez nazw<EFBFBD> toru
Parser.getTokens( 1, false );
Parser >> Global::iHiddenEvents;
}
else if( token == "pause" ) {
// czy po wczytaniu ma byæ pauza?
// czy po wczytaniu ma by<EFBFBD> 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<EFBFBD>lny j<EFBFBD>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, <EFBFBD>eby powstrzyma<EFBFBD> b<EFBFBD><EFBFBD>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<><77>czy<7A> obs<62>ug<75> hamulc<6C>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<70>dko<6B><6F> transmisji danych
iMWDBaudrate = GetNextSymbol().ToInt();
if (bMWDdebugEnable) WriteLog("PortName " + AnsiString(iMWDBaudrate));
}else if (str == AnsiString("mwdbreakenable")){ // czy w<><77>czy<7A> obs<62>ug<75> hamulc<6C>w
bMWDBreakEnable = (GetNextSymbol().LowerCase() == AnsiString("yes"));
}else if (str == AnsiString("mwdinputenable")){
bMWDInputDataEnable = (GetNextSymbol().LowerCase() == AnsiString("yes"));
}else if(str == AnsiString("mwdbreak")) // warto<74><6F> max dla potencjometru hamulca zasadniczego
{
i = GetNextSymbol().ToIntDef(-1); // numer wej<65>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<7A><6F> -> 255 maksymalna mo<6D>liwa warto<74><6F> 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<EFBFBD> zale<EFBFBD>no<EFBFBD>ci
if (!bLoadTraction) // wczytywanie drut<EFBFBD>w i s<EFBFBD>up<EFBFBD>w
{ // tutaj wy<EFBFBD><EFBFBD>czenie, bo mog<EFBFBD> nie by<EFBFBD> zdefiniowane w INI
bEnableTraction = false; // false = pantograf si<EFBFBD> nie po<EFBFBD>amie
bLiveTraction = false; // false = pantografy zawsze zbieraj<EFBFBD> 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 <EFBFBD>wiat<EFBFBD>o ruchome
// if (fOpenGL<1.3) iMultisampling=0; //mo<EFBFBD>na by z g<EFBFBD>ry wy<EFBFBD><EFBFBD>czy<EFBFBD>, ale nie mamy jeszcze fOpenGL
if (iMultisampling)
{ // antyaliasing ca³oekranowy wy³¹cza rozmywanie drutów
{ // antyaliasing ca<EFBFBD>oekranowy wy<EFBFBD><EFBFBD>cza rozmywanie drut<EFBFBD>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<EFBFBD>e pauzowa<EFBFBD>, je<EFBFBD>li w<EFBFBD><EFBFBD>czona komunikacja
// pauzowanie jest zablokowane dla (iMultiplayer&2)>0, wi<EFBFBD>c iMultiplayer=1 da si<EFBFBD> zapauzowa<EFBFBD>
// (tryb instruktora)
}
fFpsMin = fFpsAverage -
fFpsDeviation; // dolna granica FPS, przy której promieñ scenerii bêdzie zmniejszany
fFpsDeviation; // dolna granica FPS, przy kt<EFBFBD>rej promie<EFBFBD> scenerii b<EFBFBD>dzie zmniejszany
fFpsMax = fFpsAverage +
fFpsDeviation; // górna granica FPS, przy której promieñ scenerii bêdzie zwiêkszany
fFpsDeviation; // g<EFBFBD>rna granica FPS, przy kt<EFBFBD>rej promie<EFBFBD> scenerii b<EFBFBD>dzie zwi<EFBFBD>kszany
if (iPause)
iTextMode = VK_F1; // jak pauza, to pokazaæ zegar
iTextMode = VK_F1; // jak pauza, to pokaza<EFBFBD> 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<EFBFBD>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<EFBFBD> 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<EFBFBD>ci wi<EFBFBD>kszych ni<EFBFBD> bazowa
fDistanceFactor *=
(iMultisampling + 1.0) *
fDistanceFactor; // do kwadratu, bo wiêkszoœæ odleg³oœci to ich kwadraty
fDistanceFactor; // do kwadratu, bo wi<EFBFBD>kszo<EFBFBD><EFBFBD> odleg<EFBFBD>o<EFBFBD>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<EFBFBD>ugiwany. <EFBFBD>aduj<EFBFBD> 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<EFBFBD>dnego kierunku kamery z korekcj<EFBFBD> do przedzia<EFBFBD>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<EFBFBD> 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<EFBFBD>cie pojazdu prowadzonego przez u<EFBFBD>ytkownika
if (pWorld)
pWorld->TrainDelete(d);
};
TDynamicObject * Global::DynamicNearest()
{ // ustalenie pojazdu najbli¿szego kamerze
{ // ustalenie pojazdu najbli<EFBFBD>szego kamerze
return pGround->DynamicNearest(pCamera->Pos);
};
TDynamicObject * Global::CouplerNearest()
{ // ustalenie pojazdu najbli¿szego kamerze
{ // ustalenie pojazdu najbli<EFBFBD>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<EFBFBD>ywa<EFBFBD> czasem, <EFBFBD>eby nie robi<EFBFBD> wra<EFBFBD>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<EFBFBD>wietlenia
iStart = 0; // wype<EFBFBD>nia<EFBFBD> od linijki 0
for (int i = 0; i < MAX_TRANSCRIPTS; ++i)
{ // to do konstruktora mo¿na by daæ
{ // to do konstruktora mo<EFBFBD>na by da<EFBFBD>
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<EFBFBD>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<EFBFBD>li doba to 360, to 1s b<EFBFBD>dzie r<EFBFBD>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<EFBFBD> trzeba zacz<EFBFBD><EFBFBD>
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<EFBFBD>ki nie koniec i wcze<EFBFBD>niej puszczane
i = aLines[i].iNext; // przej<EFBFBD>cie do kolejnej linijki
//(i) wskazuje na lini<EFBFBD>, po kt<EFBFBD>rej nale<EFBFBD>y wstawi<EFBFBD> dany tekst, chyba <EFBFBD>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<EFBFBD>pny b<EFBFBD>dzie za nowym
if (aLines[iStart].fHide < 0.0) // je<EFBFBD>li tablica jest pusta
iStart = j; // fHide trzeba sprawdzi<EFBFBD> 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<EFBFBD>dzie za tamtym wcze<EFBFBD>niejszym
aLines[j].fShow = show; // wy<EFBFBD>wietla<EFBFBD> od
aLines[j].fHide = hide; // wy<EFBFBD>wietla<EFBFBD> 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<EFBFBD>by wska<EFBFBD>nik
if ((k = aLines[j].asText.find("|")) != std::string::npos)
{ // jak jest podzia³ linijki na wiersze
{ // jak jest podzia<EFBFBD> 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<EFBFBD>dzie na koniec w<EFBFBD>a<EFBFBD>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<EFBFBD>li od<EFBFBD>wie<EFBFBD>acz ustawiony jest na p<EFBFBD><EFBFBD>niej
fRefreshTime = show; // to od<EFBFBD>wie<EFBFBD>y<EFBFBD> wcze<EFBFBD>niej
break; // wi<EFBFBD>cej ju<EFBFBD> nic
}
};
void TTranscripts::Add(char const *txt, float len, bool backgorund)
{ // dodanie tekstów, d³ugoœæ dŸwiêku, czy istotne
{ // dodanie tekst<EFBFBD>w, d<EFBFBD>ugo<EFBFBD><EFBFBD> d<EFBFBD>wi<EFBFBD>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<EFBFBD> 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<EFBFBD> do ]
if (*txt ? *++txt == '[' : false)
{
j = 0; // drugi nawias okreœla czas zakoñczenia wyœwietlania
j = 0; // drugi nawias okre<EFBFBD>la czas zako<EFBFBD>czenia wy<EFBFBD>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<EFBFBD> do ]
if (*txt)
++txt; // pominiêcie drugiego ]
++txt; // pomini<EFBFBD>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<EFBFBD><EFBFBD>ciej ni<EFBFBD> 10 razy na sekund<EFBFBD>)
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<EFBFBD>wie<EFBFBD>enia mo<EFBFBD>na ustali<EFBFBD> wg tabelki, kiedy co<EFBFBD> si<EFBFBD> w niej zmienia
fRefreshTime = Global::fTimeAngleDeg + 360.0; // warto<EFBFBD><EFBFBD> zaporowa
int i = iStart, j = -1; // od czego<EFBFBD> trzeba zacz<EFBFBD><EFBFBD>
bool change = false; // czy zmienia<EFBFBD> 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<EFBFBD>wietlania up<EFBFBD>yn<EFBFBD><EFBFBD>
aLines[i].fHide = -1.0; // teraz b<EFBFBD>dzie woln<EFBFBD> pozycj<EFBFBD>
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<EFBFBD>cie ze <EFBFBD>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<EFBFBD> pokazane
if (aLines[i].fShow > Global::fTimeAngleDeg) // b<EFBFBD>dzie pokazane w przysz<EFBFBD>o<EFBFBD>ci
if (fRefreshTime > aLines[i].fShow) // a nie ma nic wcze<EFBFBD>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<EFBFBD>na by jeszcze wykrywa<EFBFBD>, kt<EFBFBD>re nowe maj<EFBFBD> by<EFBFBD> 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<EFBFBD>ki po tablicy
change = true; // bo na razie nie ma warunku, <EFBFBD>e co<EFBFBD> si<EFBFBD> doda<EFBFBD>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<EFBFBD>li nie ukryte
if (aLines[i].fShow < Global::fTimeAngleDeg) // to dodanie linijki do wy<EFBFBD>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<EFBFBD>ki po tablicy
for (++j; j < 5; ++j)
Global::asTranscript[j] = ""; // i czyszczenie nieu¿ywanych linijek
Global::asTranscript[j] = ""; // i czyszczenie nieu<EFBFBD>ywanych linijek
}
};
// Ra: tymczasowe rozwi¹zanie kwestii zagranicznych (czeskich) napisów
// Ra: tymczasowe rozwi<EFBFBD>zanie kwestii zagranicznych (czeskich) napis<EFBFBD>w
char bezogonkowo[] = "E?,?\"_++?%S<STZZ?`'\"\".--??s>stzz"
" ^^L$A|S^CS<--RZo±,l'uP.,as>L\"lz"
"<EFBFBD>^^L$A|S^CS<--RZo<EFBFBD>,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<EFBFBD>cie liter z ogonkami, bo OpenGL nie umie wy<EFBFBD>wietli<EFBFBD>
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<EFBFBD>ce nie s<EFBFBD> obs<EFBFBD>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<EFBFBD> zawiera<EFBFBD> spacji
str[i] = ' '; // wi<EFBFBD>c trzeba wy<EFBFBD>wietla<EFBFBD> inaczej
return str;
};
double Global::Min0RSpeed(double vel1, double vel2)
{ // rozszerzenie funkcji Min0R o wartoœci -1.0
{ // rozszerzenie funkcji Min0R o warto<EFBFBD>ci -1.0
if( vel1 == -1.0 ) { vel1 = std::numeric_limits<double>::max(); }
if( vel2 == -1.0 ) { vel2 = std::numeric_limits<double>::max(); }
return Min0R(vel1, vel2);