bool TEventLauncher::Load(cParser *parser) { // wczytanie wyzwalacza zdarzeñ AnsiString str; std::string token; parser->getTokens(); *parser >> dRadius; // promieñ dzia³ania if (dRadius > 0.0) dRadius *= dRadius; // do kwadratu, pod warunkiem, ¿e nie jest ujemne parser->getTokens(); // klawisz steruj¹cy *parser >> token; str = AnsiString(token.c_str()); if (str != "none") { if (str.Length() == 1) iKey = VkKeyScan(str[1]); // jeden znak jest konwertowany na kod klawisza else iKey = str.ToIntDef(0); // a jak wiêcej, to jakby numer klawisza jest } parser->getTokens(); *parser >> DeltaTime; if (DeltaTime < 0) DeltaTime = -DeltaTime; // dla ujemnego zmieniamy na dodatni else if (DeltaTime > 0) { // wartoœæ dodatnia oznacza wyzwalanie o okreœlonej godzinie iMinute = int(DeltaTime) % 100; // minuty s¹ najm³odszymi cyframi dziesietnymi iHour = int(DeltaTime - iMinute) / 100; // godzina to setki DeltaTime = 0; // bez powtórzeñ WriteLog("EventLauncher at " + IntToStr(iHour) + ":" + IntToStr(iMinute)); // wyœwietlenie czasu } parser->getTokens(); *parser >> token; asEvent1Name = AnsiString(token.c_str()); // pierwszy event parser->getTokens(); *parser >> token; asEvent2Name = AnsiString(token.c_str()); // drugi event if ((asEvent2Name == "end") || (asEvent2Name == "condition")) { // drugiego eventu mo¿e nie byæ, bo s¹ z tym problemy, ale ciii... str = asEvent2Name; // rozpoznane s³owo idzie do dalszego przetwarzania asEvent2Name = "none"; // a drugiego eventu nie ma } else { // gdy s¹ dwa eventy parser->getTokens(); *parser >> token; str = AnsiString(token.c_str()); } if (str == AnsiString("condition")) { // obs³uga wyzwalania warunkowego parser->getTokens(); *parser >> token; asMemCellName = AnsiString(token.c_str()); parser->getTokens(); *parser >> token; SafeDeleteArray(szText); szText = new char[256]; strcpy(szText, token.c_str()); if (token.compare("*") != 0) //*=nie braæ command pod uwagê iCheckMask |= conditional_memstring; parser->getTokens(); *parser >> token; if (token.compare("*") != 0) //*=nie braæ wartoœci 1. pod uwagê { iCheckMask |= conditional_memval1; str = AnsiString(token.c_str()); fVal1 = str.ToDouble(); } else fVal1 = 0; parser->getTokens(); *parser >> token; if (token.compare("*") != 0) //*=nie braæ wartoœci 2. pod uwagê { iCheckMask |= conditional_memval2; str = AnsiString(token.c_str()); fVal2 = str.ToDouble(); } else fVal2 = 0; parser->getTokens(); // s³owo zamykaj¹ce *parser >> token; }
void Global::ConfigParse(TQueryParserComp *qp, cParser *cp) { // Ra: trzeba by przerobiæ na cParser, ¿eby to dzia³a³o w scenerii pParser = cp; qParser = qp; AnsiString str; int i; do { str = GetNextSymbol().LowerCase(); if (str == AnsiString("sceneryfile")) { str = GetNextSymbol().LowerCase(); strcpy(szSceneryFile, str.c_str()); } else if (str == AnsiString("humanctrlvehicle")) { str = GetNextSymbol().LowerCase(); asHumanCtrlVehicle = str; } else if (str == AnsiString("width")) iWindowWidth = GetNextSymbol().ToInt(); else if (str == AnsiString("height")) iWindowHeight = GetNextSymbol().ToInt(); else if (str == AnsiString("heightbase")) fDistanceFactor = GetNextSymbol().ToInt(); else if (str == AnsiString("bpp")) iBpp = ((GetNextSymbol().LowerCase() == AnsiString("32")) ? 32 : 16); else if (str == AnsiString("fullscreen")) bFullScreen = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("freefly")) // Mczapkie-130302 { bFreeFly = (GetNextSymbol().LowerCase() == AnsiString("yes")); pFreeCameraInit[0].x = GetNextSymbol().ToDouble(); pFreeCameraInit[0].y = GetNextSymbol().ToDouble(); pFreeCameraInit[0].z = GetNextSymbol().ToDouble(); } else if (str == AnsiString("wireframe")) bWireFrame = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("debugmode")) // McZapkie! - DebugModeFlag uzywana w mover.pas, // warto tez blokowac cheaty gdy false DebugModeFlag = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("soundenabled")) // McZapkie-040302 - blokada dzwieku - przyda // sie do debugowania oraz na komp. bez karty // dzw. bSoundEnabled = (GetNextSymbol().LowerCase() == AnsiString("yes")); // else if (str==AnsiString("renderalpha")) //McZapkie-1312302 - dwuprzebiegowe renderowanie // bRenderAlpha=(GetNextSymbol().LowerCase()==AnsiString("yes")); else if (str == AnsiString("physicslog")) // McZapkie-030402 - logowanie parametrow // fizycznych dla kazdego pojazdu z maszynista WriteLogFlag = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("physicsdeactivation")) // McZapkie-291103 - usypianie fizyki PhysicActivationFlag = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("debuglog")) { // McZapkie-300402 - wylaczanie log.txt str = GetNextSymbol().LowerCase(); if (str == "yes") iWriteLogEnabled = 3; else if (str == "no") iWriteLogEnabled = 0; else iWriteLogEnabled = str.ToIntDef(3); } else if (str == AnsiString("adjustscreenfreq")) { // McZapkie-240403 - czestotliwosc odswiezania ekranu str = GetNextSymbol(); bAdjustScreenFreq = (str.LowerCase() == AnsiString("yes")); } else if (str == AnsiString("mousescale")) { // McZapkie-060503 - czulosc ruchu myszy (krecenia glowa) str = GetNextSymbol(); fMouseXScale = str.ToDouble(); str = GetNextSymbol(); fMouseYScale = str.ToDouble(); } else if (str == AnsiString("enabletraction")) { // Winger 040204 - 'zywe' patyki dostosowujace sie do trakcji; Ra 2014-03: teraz ³amanie bEnableTraction = (GetNextSymbol().LowerCase() == AnsiString("yes")); } else if (str == AnsiString("loadtraction")) { // Winger 140404 - ladowanie sie trakcji bLoadTraction = (GetNextSymbol().LowerCase() == AnsiString("yes")); } else if (str == AnsiString("friction")) // mno¿nik tarcia - KURS90 fFriction = GetNextSymbol().ToDouble(); else if (str == AnsiString("livetraction")) { // Winger 160404 - zaleznosc napiecia loka od trakcji; Ra 2014-03: teraz pr¹d przy braku // sieci bLiveTraction = (GetNextSymbol().LowerCase() == AnsiString("yes")); } else if (str == AnsiString("skyenabled")) { // youBy - niebo if (GetNextSymbol().LowerCase() == AnsiString("yes")) asSky = "1"; else asSky = "0"; } else if (str == AnsiString("managenodes")) { bManageNodes = (GetNextSymbol().LowerCase() == AnsiString("yes")); } else if (str == AnsiString("decompressdds")) { bDecompressDDS = (GetNextSymbol().LowerCase() == AnsiString("yes")); } // ShaXbee - domyslne rozszerzenie tekstur else if (str == AnsiString("defaultext")) { str = GetNextSymbol().LowerCase(); // rozszerzenie if (str == "tga") szDefaultExt = szTexturesTGA; // domyœlnie od TGA // szDefaultExt=std::string(Parser->GetNextSymbol().LowerCase().c_str()); } else if (str == AnsiString("newaircouplers")) bnewAirCouplers = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("defaultfiltering")) iDefaultFiltering = GetNextSymbol().ToIntDef(-1); else if (str == AnsiString("ballastfiltering")) iBallastFiltering = GetNextSymbol().ToIntDef(-1); else if (str == AnsiString("railprofiltering")) iRailProFiltering = GetNextSymbol().ToIntDef(-1); else if (str == AnsiString("dynamicfiltering")) iDynamicFiltering = GetNextSymbol().ToIntDef(-1); else if (str == AnsiString("usevbo")) bUseVBO = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("feedbackmode")) iFeedbackMode = GetNextSymbol().ToIntDef(1); // domyœlnie 1 else if (str == AnsiString("feedbackport")) iFeedbackPort = GetNextSymbol().ToIntDef(0); // domyœlnie 0 else if (str == AnsiString("multiplayer")) iMultiplayer = GetNextSymbol().ToIntDef(0); // domyœlnie 0 else if (str == AnsiString("maxtexturesize")) { // wymuszenie przeskalowania tekstur i = GetNextSymbol().ToIntDef(16384); // domyœlnie du¿e if (i <= 64) iMaxTextureSize = 64; else if (i <= 128) iMaxTextureSize = 128; else if (i <= 256) iMaxTextureSize = 256; else if (i <= 512) iMaxTextureSize = 512; else if (i <= 1024) iMaxTextureSize = 1024; else if (i <= 2048) iMaxTextureSize = 2048; else if (i <= 4096) iMaxTextureSize = 4096; else if (i <= 8192) iMaxTextureSize = 8192; else iMaxTextureSize = 16384; } else if (str == AnsiString("doubleambient")) // podwójna jasnoœæ ambient bDoubleAmbient = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("movelight")) // numer dnia w roku albo -1 { fMoveLight = GetNextSymbol().ToIntDef(-1); // numer dnia 1..365 if (fMoveLight == 0.0) { // pobranie daty z systemu unsigned short y, m, d; TDate date = Now(); date.DecodeDate(&y, &m, &d); fMoveLight = (double)date - (double)TDate(y, 1, 1) + 1; // numer bie¿¹cego dnia w roku } if (fMoveLight > 0.0) // 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) fMoveLight = M_PI / 182.5 * (Global::fMoveLight - 1.0); // numer dnia w postaci k¹ta fSunDeclination = 0.006918 - 0.3999120 * cos(fMoveLight) + 0.0702570 * sin(fMoveLight) - 0.0067580 * cos(2 * fMoveLight) + 0.0009070 * sin(2 * fMoveLight) - 0.0026970 * cos(3 * fMoveLight) + 0.0014800 * sin(3 * fMoveLight); } } else if (str == AnsiString("smoothtraction")) // podwójna jasnoœæ ambient bSmoothTraction = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("timespeed")) // przyspieszenie czasu, zmienna do testów fTimeSpeed = GetNextSymbol().ToIntDef(1); else if (str == AnsiString("multisampling")) // tryb antyaliasingu: 0=brak,1=2px,2=4px iMultisampling = GetNextSymbol().ToIntDef(2); // domyœlnie 2 else if (str == AnsiString("glutfont")) // tekst generowany przez GLUT bGlutFont = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("latitude")) // szerokoœæ geograficzna fLatitudeDeg = GetNextSymbol().ToDouble(); else if (str == AnsiString("convertmodels")) // tworzenie plików binarnych iConvertModels = GetNextSymbol().ToIntDef(7); // domyœlnie 7 else if (str == AnsiString("inactivepause")) // automatyczna pauza, gdy okno nieaktywne bInactivePause = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("slowmotion")) // tworzenie plików binarnych iSlowMotionMask = GetNextSymbol().ToIntDef(-1); // domyœlnie -1 else if (str == AnsiString("modifytga")) // czy korygowaæ pliki TGA dla szybszego // wczytywania iModifyTGA = GetNextSymbol().ToIntDef(0); // domyœlnie 0 else if (str == AnsiString("hideconsole")) // hunter-271211: ukrywanie konsoli bHideConsole = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString( "rollfix")) // Ra: poprawianie przechy³ki, aby wewnêtrzna szyna by³a "pozioma" bRollFix = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("fpsaverage")) // oczekiwana wartosæ FPS fFpsAverage = GetNextSymbol().ToDouble(); else if (str == AnsiString("fpsdeviation")) // odchylenie standardowe FPS fFpsDeviation = GetNextSymbol().ToDouble(); else if (str == AnsiString("fpsradiusmax")) // maksymalny promieñ renderowania fFpsRadiusMax = GetNextSymbol().ToDouble(); else if (str == AnsiString("calibratein")) // parametry kalibracji wejœæ { // i = GetNextSymbol().ToIntDef(-1); // numer wejœcia if ((i < 0) || (i > 5)) i = 5; // na ostatni, bo i tak trzeba pomin¹æ wartoœci fCalibrateIn[i][0] = GetNextSymbol().ToDouble(); // wyraz wolny fCalibrateIn[i][1] = GetNextSymbol().ToDouble(); // mno¿nik fCalibrateIn[i][2] = GetNextSymbol().ToDouble(); // mno¿nik dla kwadratu fCalibrateIn[i][3] = GetNextSymbol().ToDouble(); // mno¿nik dla szeœcianu } else if (str == AnsiString("calibrateout")) // parametry kalibracji wyjœæ { // i = GetNextSymbol().ToIntDef(-1); // numer wejœcia if ((i < 0) || (i > 6)) i = 6; // na ostatni, bo i tak trzeba pomin¹æ wartoœci fCalibrateOut[i][0] = GetNextSymbol().ToDouble(); // wyraz wolny fCalibrateOut[i][1] = GetNextSymbol().ToDouble(); // mno¿nik liniowy fCalibrateOut[i][2] = GetNextSymbol().ToDouble(); // mno¿nik dla kwadratu fCalibrateOut[i][3] = GetNextSymbol().ToDouble(); // mno¿nik dla szeœcianu } else if (str == AnsiString("brakestep")) // krok zmiany hamulca dla klawiszy [Num3] i [Num9] fBrakeStep = GetNextSymbol().ToDouble(); else if (str == AnsiString("joinduplicatedevents")) // czy grupowaæ eventy o tych samych nazwach bJoinEvents = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("hiddenevents")) // czy ³¹czyæ eventy z torami poprzez nazwê toru iHiddenEvents = GetNextSymbol().ToIntDef(0); else if (str == AnsiString("pause")) // czy po wczytaniu ma byæ pauza? iPause |= (GetNextSymbol().LowerCase() == AnsiString("yes")) ? 1 : 0; else if (str == AnsiString("lang")) asLang = GetNextSymbol(); // domyœlny jêzyk - http://tools.ietf.org/html/bcp47 else if (str == AnsiString("opengl")) // deklarowana wersja OpenGL, ¿eby powstrzymaæ b³êdy fOpenGL = GetNextSymbol().ToDouble(); // wymuszenie wersji OpenGL } while (str != "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 } // 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 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æ // (tryb instruktora) } fFpsMin = fFpsAverage - 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 if (iPause) iTextMode = VK_F1; // jak pauza, to pokazaæ zegar if (qp) { // 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 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 *= (iMultisampling + 1.0) * fDistanceFactor; // do kwadratu, bo wiêkszoœæ odleg³oœci to ich kwadraty } } }