Źródła symulatora

Z MaSzyna
Skocz do: nawigacja, szukaj

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.
Mover tak tak TBD
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&param2=b&param3=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.