Instrukcja oznajmia, że najnowsze wersje MaSzyny działają wyłącznie pod Windowsem. Jest to bzdura. Po wprowadzeniu drobnych poprawek udało mi się pomyślnie skompilować i uruchomić symulator w systemie GNU/Linux, konkretnie w Fedorze. Myślę, że pod MacOS-em też może się udać, lecz nie mam jak tego sprawdzić.
Poniżej przedstawiam kroki, które należało w tym celu wykonać. Zakładam, że chętni do skorzystania z tych porad mają jako takie obycie z Linuksem i instalowanie dodatkowych pakietów, wprowadzanie komend tekstowych oraz kompilowanie programów ze źródeł są im niestraszne. Bez tego założenia ten poradnik bardzo by się wydłużył.
Na wstępie też zaznaczam, że tak przygotowana MaSzyna
będzie bez programów Starter oraz Rainsted.
Kompilowanie symulatora1. Pozyskanie kodu źródłowegoTen należy pobrać z jednego z poniższych repozytoriów:
-
https://github.com/Xoov/maszyna-
https://github.com/eu07/maszyna (ciut starsza wersja)
-
https://github.com/Milek7/maszynaNa przykład w ten sposób:
git clone git@github.com:Xoov/maszyna.git
2. Zainstalowanie potrzebnych bibliotekNie podam pełnej listy choćby z tego powodu, że w różnych dystrybucjach Linuksa te pakiety będą trochę inaczej nazwane. CMake, który zostanie użyty w kolejnych krokach, będzie się sam dopominał o brakujące rzeczy. Wówczas trzeba będzie po prostu znaleźć stosowny pakiet w repozytoriach i go zainstalować. Należy pamiętać, że potrzebne będą też pliki nagłówkowe owych bibliotek. W wielu dystrybucjach pliki binarne i nagłówkowe są umieszczane w osobnych pakietach, ten drugi można rozpoznać po przyrostku „dev” lub „devel”.
Niektóre z bibliotek można też po prostu wyłączyć przekazując odpowiednie parametry do CMake'a.
3. Zainstalowanie CMake'aJest duża szansa, że nie trzeba nic instalować. Można to sprawdzić następującym poleceniem:
cmake --version
4. Zainstalowanie PythonaMaSzyna wymaga Pythona w wersji 2.7. Jest to wersja dość leciwa i w związku z tym może być trudno dostępna w niektórych dystrybucjach. W razie czego można uruchomić MaSzynę bez Pythona, ale nie wiem, jakie dokładnie będą tego konsekwencje.
5. Skonfigurowanie i zbudowanie MaSzynymkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
Parametr „-DCMAKE_BUILD_TYPE=Debug” podany do CMake'a jest opcjonalny, ale sprawi, że symulator wypisze trochę informacji, które być może pomogą rozwiązać ewentualne problemy. Z drugiej strony może on negatywnie wpływać na szybkość działania symulatora.
Parametrami przekazywanymi do CMake'a można też wyłączać niektóre funkcjonalności, na przykład „-DWITH_OPENVR=OFF” wyłączy całkiem OpenVR (tym samym nie trzeba będzie instalować tej biblioteki). Z kolei „-DWITH_PYTHON=OFF” wyłączy całkiem Pythona.
6. Przygotowanie środowiska PythonaMaSzyna spodziewa się izolowanego środowiska Pythona w katalogu, którego nazwa jest określona w pliku źródłowym „PyInt.cpp” i zależy od systemu operacyjnego. W przypadku 64-bitowego Linuksa jest to „linuxpython64”. W celu utworzenia tego środowiska, posługujemy się modułem virtualenv. Zakładając, że Python 2.7 jest dostępny pod nazwą python2, robimy to w katalogu „build” w ten sposób:
python2 -m virtualenv -p $(which python2) linuxpython64
Następnie aktywujemy stworzone przed chwilą środowisko i instalujemy bibliotkę Pillow w wersji 4.0.0. Są nowsze wersje, ale wersja dla Windows korzysta z tej właśnie. Skrypt „activate” jest napisany ściśle pod Basha i należy go uruchamiać wyłącznie w tej powłoce. Niemniej jest on potrzebny tylko do zainstalowania biblioteki, bo MaSzyna aktywuje środowisko Pythona po swojemu. Skrypt m.in. ustawia zmienną $PATH, tak że właściwy program pip jest dostępny pod tą właśnie nazwą, a nie np. pip2.
source linuxpython64/bin/activate
pip install pillow==4.0.0
7. Skopiowanie dodatkowych plikówJest od groma różnych potrzebnych plików, których nie znajdziecie w powyższych repozytoriach. Są to różne tekstury, modele pojazdów, dźwięki itd. Można je pobrać w formie paczek albo skopiować z zainstalowanej uprzednio wersji dla Windowsa.
Precyzując, chodzi o katalogi „data”, „dynamic”, „fonts”, „inne”, „lang”, „models”, „przepisy_kolejowe”, „python”, „scenery”, „screenshots”, „scripts”, „shaders”, „sounds”, „textures”, a także o pliki z rozszerzeniem „.ini”. Wszystkie należy umieścić w katalogu „build”. Wprawdzie niektóre z nich można by pominąć, ale akurat te, które zajmują niewiele miejsca na dysku, więc nie będę rozwijał tematu. Katalog „python” jest potrzebny, mimo że właśnie skonfigurowaliśmy środowisko. Jest w nim jeden skrypt, bez którego MaSzyna odmówi włączenia Pythona.
Paczki publikowane są w forumowym dziale „Publikacje” przy okazji kolejnych wydań MaSzyny. W przypadku wersji 23.04 paczki noszą nazwy „maszyna-r8639.zip” oraz „m2304_exefiles_common.zip”. Systemowy unzip nie poradzi sobie z wypakowaniem wszystkich plików, ale można skorzystać z 7-zipa:
7z x maszyna-r8639.zip
8. UstawieniaKrok ten można pominąć, ale jeśli MaSzyna będzie wyglądać szpetniej niż na Windowsie, to właśnie z tego powodu. Można to naprawić wpisując odpowiednie rzeczy do pliku eu07.ini, ale temat ten wykracza poza ramy niniejszego poradnika, jest za to szeroko opisany na MaSzynowym Wiki:
https://wiki.eu07.pl/index.php/Plik_konfiguracyjny_EU07.INIPrzede wszystkim warto rozważyć usunięcie ustawień „sceneryfile” oraz „humanctrlvehicle”, co spowoduje uruchomienie prostszego odpowiednika Startera.
UruchamianiePlik wykonywalny znajdziesz w podkatalogu „bin”.
Rozwiązywanie problemówJeśli zobaczysz:Bad init: failed to create glfw window
Znaczy to, że MaSzyna ma jakiś dziwny problem z ustaleniem rozmiaru okna początkowego. W pliku application.cpp znajdź wywołanie funkcji „window”, a następnie zastąp „Global.window_size.x” i „Global.window_size.y” jakimiś liczbami, np. 800 i 600. Wartości te definiują początkowy rozmiar okna programu, które można później zmaksymalizować.
W wersji, którą ja kompilowałem, wyglądało to tak:
@@ -869,7 +869,7 @@ eu07_application::init_glfw() {
}
auto *mainwindow = window(
- -1, true, Global.window_size.x, Global.window_size.y, ( Global.bFullScreen ? monitor : nullptr ), true, false );
+ -1, true, 800, 600, ( Global.bFullScreen ? monitor : nullptr ), true, false );
if( mainwindow == nullptr ) {
ErrorLog( "Bad init: failed to create glfw window" );
Po dokonaniu tych zmian zbuduj program jeszcze raz.
Jeśli zobaczysz:ImportError: No module named site
Znaczy to, że MaSzyna nie może znaleźć katalogu z izolowanym środowiskiem Pythona. W najgorszym razie możesz całkiem wyłączyć wsparcie dla Pythona.
Starter i RainstedStarter jest napisany w Delphi i zadziała tylko pod Windowsem. Być może udałoby się go skompilować Lazarusem, ale na pewno trzeba by podmienić biblioteki VCL na LCL. Do tematu Rainsteda w ogóle nie podchodziłem.
PowitanieNa zakończenie witam wszystkich serdecznie, bo to jest mój pierwszy wpis na tym forum.