示例#1
0
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;
    }
示例#2
0
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
        }
    }
}