Źródła symulatora: Różnice pomiędzy wersjami
(→Pliki *.cpp, *.h) |
(→Pliki *.cpp, *.h) |
||
(Nie pokazano 9 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
Linia 5: | Linia 5: | ||
== Repozytorium == | == Repozytorium == | ||
− | Najbardziej aktualna wersja kodu MaSzyny znajduje się na serwisie GitHub i jest dostępna [https://github.com/ | + | Najbardziej aktualna wersja kodu MaSzyny znajduje się na serwisie GitHub i jest dostępna [https://github.com/eu07/maszyna '''tutaj''']. |
− | + | EXE do wydań MaSzyny począwszy od '''24.06''' jest kompilowane z głównej gałęzi na głównym repozytorium MaSzyny ('''eu07/maszyna''' - branch '''master'''). | |
− | W celu wprowadzenia własnych zmian należy zrobić pull request do | + | W celu wprowadzenia własnych zmian należy zrobić pull request do głównego repozytorium. |
+ | |||
+ | == Przydatne funkcje == | ||
+ | |||
+ | Poniżej znajduje się lista kilku najbardziej przydatnych funkcji do stosowania przy testowaniu symulatora. | ||
+ | |||
+ | {| class="wikitable" | ||
+ | ! Funkcja | ||
+ | ! Opis | ||
+ | |- | ||
+ | | '''WriteLog'''(const char* str / const std::string& str) | ||
+ | | Wypisuje tekst do logu. | ||
+ | |- | ||
+ | | '''ErrorLog'''(const char* str / const std::string& str) | ||
+ | | Wypisuje tekst do errors.txt oraz do logu. Bug: jeżeli zostanie podany ''const char* str'', linijka zostanie tylko zapisana w errors.txt, a nie zostanie wyświetlona w logu ani nie zostanie zapisana do log.txt! | ||
+ | |- | ||
+ | | '''STR_C'''(const char* msg) | ||
+ | | Tłumaczy klucz tłumaczenia w zależności od obecnie ustawionego języka w symulatorze i zwraca wynik w postaci ''const char*''. Pliki z tłumaczeniami znajdują się w katalogu ''lang/''. | ||
+ | |- | ||
+ | | '''STR_S'''(const std::string& msg) | ||
+ | | Jak wyżej, ale wynik jest zwracany w postaci ''const std::string&''. | ||
+ | |} | ||
== Struktura plików == | == Struktura plików == | ||
Linia 20: | Linia 41: | ||
=== Pliki *.cpp, *.h === | === Pliki *.cpp, *.h === | ||
− | ''Na liście brakuje plików z podfolderów: '''Console''', '''McZapkie''', '''gl | + | ''Na liście brakuje plików z podfolderów: '''Console''', '''McZapkie''', '''gl''', '''network''', '''openvrconfig''', '''vr''', '''widgets'''.'' |
{| class="wikitable" | {| class="wikitable" | ||
Linia 56: | Linia 77: | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | Główny kod do sterowania pulpitami za pomocą PoKeys/Arduino. | + | | Główny kod do sterowania pulpitami za pomocą PoKeys/Arduino. Szczegóły [[PoKeys|tutaj]]. |
|- | |- | ||
| '''Curve''' | | '''Curve''' | ||
Linia 216: | Linia 237: | ||
| style="background-color:#f88"|nie | | style="background-color:#f88"|nie | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Zawiera funkcje do konwersji kolorów z RGB do HSV i odwrotnie oraz definicje kolorów w interfejsie. |
|- | |- | ||
| '''command''' | | '''command''' | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Obsługuje kolejkę komend oraz przesyłanie ich między pojazdami. |
|- | |- | ||
| '''comparison''' | | '''comparison''' | ||
| style="background-color:#f88"|nie | | style="background-color:#f88"|nie | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | '' | + | | Zawiera funkcje do porównań oraz konwertujące między postacią tekstową a wartościami w kodzie. Używane w eventach. |
+ | |- | ||
+ | | '''crashreporter''' | ||
+ | | style="background-color:#8f8"|tak | ||
+ | | style="background-color:#8f8"|tak | ||
+ | | Obsługuje generowanie i zgłaszanie raportów błędów. | ||
+ | |- | ||
+ | | '''dictionary''' | ||
+ | | style="background-color:#8f8"|tak | ||
+ | | style="background-color:#8f8"|tak | ||
+ | | Rozbija ciągi znaków używane jako parametry do skryptów w Pythonie, np. ''param1=a¶m2=b¶m3=c''. | ||
|- | |- | ||
| '''driverhints''' | | '''driverhints''' | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Zawiera procedury wykonywane przez AI w celu obsługi podpowiedzi. |
|- | |- | ||
| '''driverhints_def''' | | '''driverhints_def''' | ||
| style="background-color:#f88"|nie | | style="background-color:#f88"|nie | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Definicje treści podpowiedzi w pomocniku. |
|- | |- | ||
| '''driverkeyboardinput''' | | '''driverkeyboardinput''' | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Zawiera domyślną konfigurację klawiszy w symulatorze. |
|- | |- | ||
| '''drivermode''' | | '''drivermode''' | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | '' | + | | style="background-color:#ccf"|''Rozszerza '''applicationmode'''''. Główny tryb symulatora, w którym możemy prowadzić pociąg oraz rozglądać się po scenerii. Tylko w tym trybie działa fizyka pojazdów, a czas w symulacji posuwa się do przodu. |
|- | |- | ||
| '''drivermouseinput''' | | '''drivermouseinput''' | ||
Linia 276: | Linia 307: | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | '' | + | | style="background-color:#ccf"|''Rozszerza '''applicationmode'''''. Tryb symulatora, w którym kamera przestaje się obracać ruchem myszki oraz aktywne są jedynie skróty klawiszowe związane z edytorem. |
|- | |- | ||
| '''editormouseinput''' | | '''editormouseinput''' | ||
Linia 296: | Linia 327: | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#f88"|nie | | style="background-color:#f88"|nie | ||
− | | '' | + | | Bardzo prosta implementacja trybu eksportu E3D. Włącza ją '''EU07.cpp''' po uruchomieniu pliku wykonywalnego z parametrem '''-e3d'''. |
|- | |- | ||
| '''frustum''' | | '''frustum''' | ||
Linia 316: | Linia 347: | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Obsługuje żyroskop w headsecie VR i przenosi jego ruchy na pozycję kamery. |
|- | |- | ||
| '''keyboardinput''' | | '''keyboardinput''' | ||
Linia 331: | Linia 362: | ||
| style="background-color:#f88"|nie | | style="background-color:#f88"|nie | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Zawiera prostą definicję pojedynczego źródła światła, świecącego w jednym kierunku lub w każdą stronę. |
|- | |- | ||
| '''lightarray''' | | '''lightarray''' | ||
Linia 341: | Linia 372: | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Implementuje [[Luascenery|obsługę Lua w symulatorze]]. |
|- | |- | ||
| '''lua_ffi''' | | '''lua_ffi''' | ||
| style="background-color:#f88"|nie | | style="background-color:#f88"|nie | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | '' | + | | Zapewnia interfejs między runtime LuaJIT a funkcjami zdefiniowanymi w ''lua.cpp''. |
|- | |- | ||
| '''material''' | | '''material''' | ||
Linia 356: | Linia 387: | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Implementacja multiplayer za pomocą protokołu WM_COPYDATA. |
|- | |- | ||
| '''moon''' | | '''moon''' | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Reprezentuje Księżyc na niebie. Podobnie jak Słońce, kalkulacja intensywności oraz położenia na niebie, a także fazy księżyca. Znajduje się tutaj pewien easter-egg :D |
|- | |- | ||
| '''motiontelemetry''' | | '''motiontelemetry''' | ||
Linia 371: | Linia 402: | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Odpowiada za rozkład jazdy. Sprawdza opóźnienie, czas do odjazdu, zaliczanie postojów, itp. Zawiera parser plików rozkładu jazdy. |
|- | |- | ||
| '''nullrenderer''' | | '''nullrenderer''' | ||
Linia 466: | Linia 497: | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Przelicza "przekrzywianie się" opadów przy poruszaniu się kamerą. |
|- | |- | ||
| '''pythonscreenviewer''' | | '''pythonscreenviewer''' | ||
Linia 476: | Linia 507: | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | style="background-color:#88f"|Zawiera interfejs rozszerzany przez klasy będące rendererami, a także pełni rolę "fabryki", z której tworzony jest żądany renderer. |
|- | |- | ||
| '''resource''' | | '''resource''' | ||
Linia 486: | Linia 517: | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | '' | + | | style="background-color:#ccf"|''Rozszerza '''applicationmode'''''. Jak sama nazwa wskazuje, ten tryb jest aktywny podczas ładowania scenerii. |
|- | |- | ||
| '''scenarioloaderuilayer''' | | '''scenarioloaderuilayer''' | ||
| style="background-color:#f88"|nie | | style="background-color:#f88"|nie | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Zawiera interfejs trybu ładowania scenerii, czyli w tym przypadku jedynie losowe tło. |
|- | |- | ||
| '''scene''' | | '''scene''' | ||
Linia 501: | Linia 532: | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Zbiór prostych funkcji do manipulowania obiektami na scenerii. |
|- | |- | ||
| '''scenenode''' | | '''scenenode''' | ||
Linia 516: | Linia 547: | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Zawiera funkcję zapisującą zrzuty ekranu na dysk. |
|- | |- | ||
| '''simulation''' | | '''simulation''' | ||
Linia 526: | Linia 557: | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Odpowiada za środowisko symulacji, podmianę materiałów w zależności od pory roku/pory dnia/warunków atmosferycznych. Kalkulacja wiatru, obsługa dźwięku deszczu. |
|- | |- | ||
| '''simulationsounds''' | | '''simulationsounds''' | ||
Linia 536: | Linia 567: | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Odpowiada za wczytywanie plików scenerii oraz zawiera funkcje parsujące umieszczone tam [[Plik_scenerii#Dyrektywy_scenariusza|dyrektywy scenariusza]]. |
|- | |- | ||
| '''simulationtime''' | | '''simulationtime''' | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Przechowuje obecny czas w grze oraz zawiera funkcje do konwersji tygodni na dni, wyliczania dni tygodnia, miesiąca z dnia w roku itp. |
|- | |- | ||
| '''sky''' | | '''sky''' | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Pozwala zaimplementować własny model nieba. |
|- | |- | ||
| '''skydome''' | | '''skydome''' | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Zawiera geometrię nieba oraz odpowiada za kolorowanie nieba podczas dnia, nocy jak i wschodu i zachodu słońca. |
|- | |- | ||
| '''sn_utils''' | | '''sn_utils''' | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Zestaw funkcji do zapisywania liczb i wektorów jako ciąg bajtów (w celu zapisania do pliku). |
|- | |- | ||
| '''sound''' | | '''sound''' | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Reprezentuje pojedyncze źródło dźwięku. Czyta konfigurację i kalkuluje parametry dźwięku na podstawie takich parametrów jak crossfade czy soundproofing. |
|- | |- | ||
| '''stars''' | | '''stars''' | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | '' | + | | Czyta model gwiazd, na stałe ustawiony jako '''models/skydome_stars.t3d'''. |
|- | |- | ||
| '''station''' | | '''station''' | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Reprezentuje pojedynczy postój na stacji w rozkładzie jazdy. Zawiera kalkulację, ile pasażerów wejdzie/wyjdzie na danej stacji. |
|- | |- | ||
| '''stdafx''' | | '''stdafx''' | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Zbiór często używanych includów zebranych w jedno miejsce. |
|- | |- | ||
| '''sun''' | | '''sun''' | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Reprezentuje Słońce na niebie. Kalkuluje jego pozycję na niebie i określa jego intensywność. |
|- | |- | ||
| '''targetver''' | | '''targetver''' | ||
Linia 591: | Linia 622: | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | '' | + | | Wczytuje i zarządza plikami ''lang/*.po''. |
|- | |- | ||
| '''uart''' | | '''uart''' | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Odpowiada za komunikację z prawdziwym pulpitem za pomocą interfejsu UART. |
|- | |- | ||
| '''uilayer''' | | '''uilayer''' | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | '' | + | | Zawiera kod losowania obrazka wyświetlanego podczas ładowania scenerii, styl okienek wyświetlanych w symulatorze (np. kolor tła i tekstu), a także renderuje niektóre elementy interfejsu np. pasek ładowania scenerii oraz menu pauzy. Znajduje się tu także kod wywołujący się gdy użytkownik naciśnie klawisz '''F9''', '''F10''' lub '''PrintScreen'''. |
|- | |- | ||
| '''uitranscripts''' | | '''uitranscripts''' | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Część kodu obsługującego transkrypcje rozmów na radiu. Przechowuje wszystkie linijki oraz usuwa linijki, które już nie powinny być wyświetlane. Pozostała część znajduje się w ? |
|- | |- | ||
| '''utilities''' | | '''utilities''' | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Zawiera przydatne funkcje, takie jak generowanie liczb losowych, ucinanie polskich liter bądź konwersja godziny do postaci tekstowej. |
|- | |- | ||
| '''vertex''' | | '''vertex''' | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
− | | | + | | Reprezentuje pojedynczy wierzchołek modelu: pozycję w trzech osiach, wektor normalny oraz pozycję UV z tekstury. |
|- | |- | ||
| '''windows''' | | '''windows''' | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| style="background-color:#f88"|nie | | style="background-color:#f88"|nie | ||
− | | '' | + | | Dodatek do protokołu WM_COPYDATA: ''messaging.cpp''. |
|- | |- | ||
| '''winheaders''' | | '''winheaders''' | ||
Linia 632: | Linia 663: | ||
| style="background-color:#8f8"|tak | | style="background-color:#8f8"|tak | ||
| ''TBD'' | | ''TBD'' | ||
+ | |- | ||
+ | | launcher/'''deferred_image''' | ||
+ | | style="background-color:#f88"|nie | ||
+ | | style="background-color:#8f8"|tak | ||
+ | | Reprezentuje obrazek (w tym przypadku mini), który zostanie wczytany z dysku dopiero kiedy będzie potrzebny (widoczny) w interfejsie. | ||
+ | |- | ||
+ | | launcher/'''keymapper''' | ||
+ | | style="background-color:#8f8"|tak | ||
+ | | style="background-color:#8f8"|tak | ||
+ | | style="background-color:#8f8"|''Rozszerza '''ui_panel'''''. Reprezentuje okienko z listą dostępnych skrótów klawiszowych w symulatorze wraz z opisami oraz oferuje ich zmianę. | ||
+ | |- | ||
+ | | launcher/'''launchermode''' | ||
+ | | style="background-color:#8f8"|tak | ||
+ | | style="background-color:#8f8"|tak | ||
+ | | style="background-color:#ccf"|''Rozszerza '''applicationmode'''''. Tryb startera. W tym trybie wyświetlane są okienka umożliwiające wybór składu do prowadzenia, zmianę klawiszologii, a w przyszłości - zmianę wszystkich ustawień oraz edycję składu pociągu. | ||
+ | |- | ||
+ | | launcher/'''launcheruilayer''' | ||
+ | | style="background-color:#8f8"|tak | ||
+ | | style="background-color:#8f8"|tak | ||
+ | | style="background-color:#8ff"|''Rozszerza '''ui_layer'''''. Reprezentuje główne okienko z listą dostępnych opcji w starterze oraz zarządza wszystkimi oknami podrzędnymi w starterze. | ||
+ | |- | ||
+ | | launcher/'''scenery_list''' | ||
+ | | style="background-color:#8f8"|tak | ||
+ | | style="background-color:#8f8"|tak | ||
+ | | style="background-color:#8f8"|''Rozszerza '''ui_panel'''''. Reprezentuje okienko z listą dostępnych scenerii oraz wyświetla składy dostępne do prowadzenia. | ||
+ | |- | ||
+ | | launcher/'''scenery_scanner''' | ||
+ | | style="background-color:#8f8"|tak | ||
+ | | style="background-color:#8f8"|tak | ||
+ | | Przeszukuje katalog '''scenery''' w poszukiwaniu plików scenerii oraz zbiera informacje na ich temat poprzez analizę komentarzy zaczynających się od '''//$'''. | ||
+ | |- | ||
+ | | launcher/'''textures_scanner''' | ||
+ | | style="background-color:#8f8"|tak | ||
+ | | style="background-color:#8f8"|tak | ||
+ | | Przeszukuje katalog '''dynamic''' w poszukiwaniu plików '''textures.txt''' oraz zbiera informacje na temat dostępnych pojazdów poprzez analizę wpisów zamieszczonych w tych plikach. | ||
+ | |- | ||
+ | | launcher/'''vehicle_picker''' | ||
+ | | style="background-color:#8f8"|tak | ||
+ | | style="background-color:#8f8"|tak | ||
+ | | style="background-color:#8f8"|''Rozszerza '''ui_panel'''''. Reprezentuje okienko z listą dostępnych pojazdów. | ||
|} | |} |
Aktualna wersja na dzień 01:44, 11 sie 2024
Kod źródłowy Symulatora MaSzyna udostępniony jest na licencji Mozilla Public License 2.0.
Sam symulator jest napisany w języku C++.
Repozytorium
Najbardziej aktualna wersja kodu MaSzyny znajduje się na serwisie GitHub i jest dostępna tutaj.
EXE do wydań MaSzyny począwszy od 24.06 jest kompilowane z głównej gałęzi na głównym repozytorium MaSzyny (eu07/maszyna - branch master).
W celu wprowadzenia własnych zmian należy zrobić pull request do głównego repozytorium.
Przydatne funkcje
Poniżej znajduje się lista kilku najbardziej przydatnych funkcji do stosowania przy testowaniu symulatora.
Funkcja | Opis |
---|---|
WriteLog(const char* str / const std::string& str) | Wypisuje tekst do logu. |
ErrorLog(const char* str / const std::string& str) | Wypisuje tekst do errors.txt oraz do logu. Bug: jeżeli zostanie podany const char* str, linijka zostanie tylko zapisana w errors.txt, a nie zostanie wyświetlona w logu ani nie zostanie zapisana do log.txt! |
STR_C(const char* msg) | Tłumaczy klucz tłumaczenia w zależności od obecnie ustawionego języka w symulatorze i zwraca wynik w postaci const char*. Pliki z tłumaczeniami znajdują się w katalogu lang/. |
STR_S(const std::string& msg) | Jak wyżej, ale wynik jest zwracany w postaci const std::string&. |
Struktura plików
Ta sekcja jest w fazie tworzenia.
Kod MaSzyny jest rozwijany od ponad 20 lat i nie był nigdy porządkowany. Z tego powodu rozkład plików źródłowych może nie być intuicyjny. Pełna lista plików źródłowych wraz z zastosowaniem została podana poniżej.
Pliki *.cpp, *.h
Na liście brakuje plików z podfolderów: Console, McZapkie, gl, network, openvrconfig, vr, widgets.
Nazwa pliku | .cpp | .h | Funkcja |
---|---|---|---|
AirCoupler | tak | tak | Steruje widocznością submodeli takich jak haki czy węże pneumatyczne, których nazwy kończą się na _off, _on lub _xon. |
AnimModel | tak | tak | Zarządza animacją modeli wstawionych na scenerie i wywoływanych eventami, takich jak obrotnice czy latarnie zwrotnic. |
Button | tak | tak | Guzik dwupozycyjny. Obsługuje dźwięki włączania i wyłączania oraz opcjonalne submodele kończące się na _off i _on. |
Camera | tak | tak | Steruje pracą kamery w kabinie jak i poza nią. |
Classes | nie | tak | TBD |
Console | tak | tak | Główny kod do sterowania pulpitami za pomocą PoKeys/Arduino. Szczegóły tutaj. |
Curve | nie | tak | Nagłówek klasy znajdującej się w pliku ? |
Driver | tak | tak | Zarządza komendami dla pojazdów oraz sterowaniem przez AI. |
DynObj | tak | tak | Reprezentuje pojedynczy pojazd. |
EU07 | tak | nie | Punkt wejścia aplikacji. Wykrywa tryb eksportu E3D i zawiera handler błędów alokacji pamięci. |
EvLaunch | tak | tak | Odpowiada za sprawdzanie warunków do wywołania event launchera (wciśnięcie klawisza, określona godzina w symulacji lub wywołanie sygnałem ZEW1/ZEW3). |
Event | tak | tak | Zawiera logikę wszystkich dostępnych typów eventów w symulatorze. |
Float3d | tak | tak | Zawiera definicje klas wektorów 3D, kwaternionów i macierzy transformacji. |
Gauge | tak | tak | Kod obsługi gałek, np. wskazówek zegarów, nastawników, kranów hamulca czy innych przełączników wielopozycyjnych. |
Globals | tak | tak | Odpowiada za wczytywanie i zapisywanie pliku eu07.ini, przechowuje ustawienia tam zawarte oraz takie informacje jak: czy jest włączony debugmode, czy jest wciśnięty któryś z klawiszów: Alt, Ctrl albo Shift czy też seed symulacji. |
Logs | tak | tak | Umożliwia wpisywanie treści do plików log.txt i errors.txt. |
MdlMngr | tak | tak | Menedżer modeli. Przechowuje wszystkie załadowane modele (.e3d, .t3d) i zarządza ich wczytywaniem. |
MemCell | tak | tak | Obsługuje komórki pamięci (memcelle). |
Model3d | tak | tak | Reprezentuje pojedynczą instancję modelu. Czyta pliki .t3d i .e3d. |
Names | nie | tak | Kod do tworzenia tablic asocjacyjnych, kluczowanych po nazwach. |
PyInt | tak | tak | Zarządza komunikacją z wątkiem służącym do generowania tekstur za pomocą skryptów napisanych w Pythonie. |
PyIntStub | tak | nie | Klasa używana zamiast klasy z pliku PyInt.cpp, jeżeli skrypty Pythona zostały wyłączone. |
ResourceManager | tak | tak | TBD |
Segment | tak | tak | Implementuje pojedynczy kawałek toru. |
Spring | tak | tak | Symuluje sprężynę. Używane do bujania kabiny. |
Texture | tak | tak | Zarządza wczytywaniem, dekompresją i przechowywaniem plików tekstur. |
Timer | tak | tak | Liczy czas między klatkami w symulacji. |
Track | tak | tak | Implementuje pojedynczy kawałek toru. Generuje geometrię szyn. |
Traction | tak | tak | Implementuje pojedynczy kawałek sieci trakcyjnej. Generuje linie sieci trakcyjnej renderowane jako node::lines. |
TractionPower | tak | tak | Zawiera kod podstacji sieci trakcyjnej. |
Train | tak | tak | Reprezentuje pociąg. Odbiera komendy wysyłane z poszczególnych pojazdów trakcyjnych. |
TrkFoll | tak | tak | Definiuje pojedynczą oś w pojeździe. |
application | tak | tak | Przetwarza sygnały wejściowe z klawiatury, myszy i gamepada, zawiera główną pętle programu oraz przetwarza argumenty linii poleceń inne niż -e3d. |
applicationmode | nie | tak | Nadklasa (interfejs), który jest rozszerzany przez klasy będące trybami pracy symulatora. |
audio | tak | tak | TBD |
audiorenderer | tak | tak | TBD |
audiorenderer_extra | nie | tak | TBD |
color | nie | tak | Zawiera funkcje do konwersji kolorów z RGB do HSV i odwrotnie oraz definicje kolorów w interfejsie. |
command | tak | tak | Obsługuje kolejkę komend oraz przesyłanie ich między pojazdami. |
comparison | nie | tak | Zawiera funkcje do porównań oraz konwertujące między postacią tekstową a wartościami w kodzie. Używane w eventach. |
crashreporter | tak | tak | Obsługuje generowanie i zgłaszanie raportów błędów. |
dictionary | tak | tak | Rozbija ciągi znaków używane jako parametry do skryptów w Pythonie, np. param1=a¶m2=b¶m3=c. |
driverhints | tak | tak | Zawiera procedury wykonywane przez AI w celu obsługi podpowiedzi. |
driverhints_def | nie | tak | Definicje treści podpowiedzi w pomocniku. |
driverkeyboardinput | tak | tak | Zawiera domyślną konfigurację klawiszy w symulatorze. |
drivermode | tak | tak | Rozszerza applicationmode. Główny tryb symulatora, w którym możemy prowadzić pociąg oraz rozglądać się po scenerii. Tylko w tym trybie działa fizyka pojazdów, a czas w symulacji posuwa się do przodu. |
drivermouseinput | tak | tak | TBD |
driveruilayer | tak | tak | TBD |
driveruipanels | tak | tak | TBD |
dumb3d | tak | tak | TBD |
editorkeyboardinput | tak | tak | TBD |
editormode | tak | tak | Rozszerza applicationmode. Tryb symulatora, w którym kamera przestaje się obracać ruchem myszki oraz aktywne są jedynie skróty klawiszowe związane z edytorem. |
editormouseinput | tak | tak | TBD |
editoruilayer | tak | tak | TBD |
editoruipanels | tak | tak | TBD |
export_e3d_standalone | tak | nie | Bardzo prosta implementacja trybu eksportu E3D. Włącza ją EU07.cpp po uruchomieniu pliku wykonywalnego z parametrem -e3d. |
frustum | tak | tak | TBD |
gamepadinput | tak | tak | TBD |
geometrybank | tak | tak | TBD |
headtrack | tak | tak | Obsługuje żyroskop w headsecie VR i przenosi jego ruchy na pozycję kamery. |
keyboardinput | tak | tak | TBD |
ladderlogic | tak | tak | TBD |
light | nie | tak | Zawiera prostą definicję pojedynczego źródła światła, świecącego w jednym kierunku lub w każdą stronę. |
lightarray | tak | tak | TBD |
lua | tak | tak | Implementuje obsługę Lua w symulatorze. |
lua_ffi | nie | tak | Zapewnia interfejs między runtime LuaJIT a funkcjami zdefiniowanymi w lua.cpp. |
material | tak | tak | TBD |
messaging | tak | tak | Implementacja multiplayer za pomocą protokołu WM_COPYDATA. |
moon | tak | tak | Reprezentuje Księżyc na niebie. Podobnie jak Słońce, kalkulacja intensywności oraz położenia na niebie, a także fazy księżyca. Znajduje się tutaj pewien easter-egg :D |
motiontelemetry | tak | tak | TBD |
mtable | tak | tak | Odpowiada za rozkład jazdy. Sprawdza opóźnienie, czas do odjazdu, zaliczanie postojów, itp. Zawiera parser plików rozkładu jazdy. |
nullrenderer | tak | tak | TBD |
opengl33geometrybank | tak | tak | TBD |
opengl33light | tak | tak | TBD |
opengl33particles | tak | tak | TBD |
opengl33precipitation | tak | tak | TBD |
opengl33renderer | tak | tak | TBD |
opengl33skydome | tak | tak | TBD |
openglcamera | tak | tak | TBD |
openglcolor | tak | tak | TBD |
openglgeometrybank | tak | tak | TBD |
opengllight | tak | tak | TBD |
openglmatrixstack | tak | tak | TBD |
openglparticles | tak | tak | TBD |
openglprecipitation | tak | tak | TBD |
openglrenderer | tak | tak | TBD |
openglskydome | tak | tak | TBD |
parser | tak | tak | Główny kod parsera. Dzieli treści plików na kawałki, pomija komentarze, wczytuje pliki z dyrektyw include oraz podmienia parametry. Więcej informacji: Plik tekstowy. |
particles | tak | tak | TBD |
precipitation | tak | tak | Przelicza "przekrzywianie się" opadów przy poruszaniu się kamerą. |
pythonscreenviewer | tak | tak | TBD |
renderer | tak | tak | Zawiera interfejs rozszerzany przez klasy będące rendererami, a także pełni rolę "fabryki", z której tworzony jest żądany renderer. |
resource | nie | tak | TBD |
scenarioloadermode | tak | tak | Rozszerza applicationmode. Jak sama nazwa wskazuje, ten tryb jest aktywny podczas ładowania scenerii. |
scenarioloaderuilayer | nie | tak | Zawiera interfejs trybu ładowania scenerii, czyli w tym przypadku jedynie losowe tło. |
scene | tak | tak | TBD |
sceneeditor | tak | tak | Zbiór prostych funkcji do manipulowania obiektami na scenerii. |
scenenode | tak | tak | TBD |
scenenodegroup | tak | tak | TBD |
screenshot | tak | tak | Zawiera funkcję zapisującą zrzuty ekranu na dysk. |
simulation | tak | tak | TBD |
simulationenvironment | tak | tak | Odpowiada za środowisko symulacji, podmianę materiałów w zależności od pory roku/pory dnia/warunków atmosferycznych. Kalkulacja wiatru, obsługa dźwięku deszczu. |
simulationsounds | tak | tak | TBD |
simulationstateserializer | tak | tak | Odpowiada za wczytywanie plików scenerii oraz zawiera funkcje parsujące umieszczone tam dyrektywy scenariusza. |
simulationtime | tak | tak | Przechowuje obecny czas w grze oraz zawiera funkcje do konwersji tygodni na dni, wyliczania dni tygodnia, miesiąca z dnia w roku itp. |
sky | tak | tak | Pozwala zaimplementować własny model nieba. |
skydome | tak | tak | Zawiera geometrię nieba oraz odpowiada za kolorowanie nieba podczas dnia, nocy jak i wschodu i zachodu słońca. |
sn_utils | tak | tak | Zestaw funkcji do zapisywania liczb i wektorów jako ciąg bajtów (w celu zapisania do pliku). |
sound | tak | tak | Reprezentuje pojedyncze źródło dźwięku. Czyta konfigurację i kalkuluje parametry dźwięku na podstawie takich parametrów jak crossfade czy soundproofing. |
stars | tak | tak | Czyta model gwiazd, na stałe ustawiony jako models/skydome_stars.t3d. |
station | tak | tak | Reprezentuje pojedynczy postój na stacji w rozkładzie jazdy. Zawiera kalkulację, ile pasażerów wejdzie/wyjdzie na danej stacji. |
stdafx | tak | tak | Zbiór często używanych includów zebranych w jedno miejsce. |
sun | tak | tak | Reprezentuje Słońce na niebie. Kalkuluje jego pozycję na niebie i określa jego intensywność. |
targetver | nie | tak | TBD |
translation | tak | tak | Wczytuje i zarządza plikami lang/*.po. |
uart | tak | tak | Odpowiada za komunikację z prawdziwym pulpitem za pomocą interfejsu UART. |
uilayer | tak | tak | Zawiera kod losowania obrazka wyświetlanego podczas ładowania scenerii, styl okienek wyświetlanych w symulatorze (np. kolor tła i tekstu), a także renderuje niektóre elementy interfejsu np. pasek ładowania scenerii oraz menu pauzy. Znajduje się tu także kod wywołujący się gdy użytkownik naciśnie klawisz F9, F10 lub PrintScreen. |
uitranscripts | tak | tak | Część kodu obsługującego transkrypcje rozmów na radiu. Przechowuje wszystkie linijki oraz usuwa linijki, które już nie powinny być wyświetlane. Pozostała część znajduje się w ? |
utilities | tak | tak | Zawiera przydatne funkcje, takie jak generowanie liczb losowych, ucinanie polskich liter bądź konwersja godziny do postaci tekstowej. |
vertex | tak | tak | Reprezentuje pojedynczy wierzchołek modelu: pozycję w trzech osiach, wektor normalny oraz pozycję UV z tekstury. |
windows | tak | nie | Dodatek do protokołu WM_COPYDATA: messaging.cpp. |
winheaders | nie | tak | TBD |
zmq_input | tak | tak | TBD |
launcher/deferred_image | nie | tak | Reprezentuje obrazek (w tym przypadku mini), który zostanie wczytany z dysku dopiero kiedy będzie potrzebny (widoczny) w interfejsie. |
launcher/keymapper | tak | tak | Rozszerza ui_panel. Reprezentuje okienko z listą dostępnych skrótów klawiszowych w symulatorze wraz z opisami oraz oferuje ich zmianę. |
launcher/launchermode | tak | tak | Rozszerza applicationmode. Tryb startera. W tym trybie wyświetlane są okienka umożliwiające wybór składu do prowadzenia, zmianę klawiszologii, a w przyszłości - zmianę wszystkich ustawień oraz edycję składu pociągu. |
launcher/launcheruilayer | tak | tak | Rozszerza ui_layer. Reprezentuje główne okienko z listą dostępnych opcji w starterze oraz zarządza wszystkimi oknami podrzędnymi w starterze. |
launcher/scenery_list | tak | tak | Rozszerza ui_panel. Reprezentuje okienko z listą dostępnych scenerii oraz wyświetla składy dostępne do prowadzenia. |
launcher/scenery_scanner | tak | tak | Przeszukuje katalog scenery w poszukiwaniu plików scenerii oraz zbiera informacje na ich temat poprzez analizę komentarzy zaczynających się od //$. |
launcher/textures_scanner | tak | tak | Przeszukuje katalog dynamic w poszukiwaniu plików textures.txt oraz zbiera informacje na temat dostępnych pojazdów poprzez analizę wpisów zamieszczonych w tych plikach. |
launcher/vehicle_picker | tak | tak | Rozszerza ui_panel. Reprezentuje okienko z listą dostępnych pojazdów. |