# RainGlass 0.2 — wersja eksperymentalna dla FS25

**Wykonawca: RadeON24**

## Zmiany w 0.2

- Krople mają różne rozmiary i kształty. Większe spływają w dół, zostawiając cienkie ślady wody.
- Materiał wykorzystuje załamanie obrazu i delikatne odbicia zamiast ciemnych, nieruchomych punktów.
- Dodano zmierzone z geometrii profile 281 piór dla 129 fabrycznych definicji pojazdów.
- W Fiacie/Fiatagri serii 90 poprawnie śledzone jest pióro wiperFrontPart02 o długości około 54 cm. Poprzednio skrypt wybierał mały element przy osi.
- Szyba i pióra korzystają ze wspólnego układu współrzędnych także przy siatkach łączonych/skórowanych.

Test geometrii Fiata potwierdza przetarcie przedniej szyby bez przecierania innych okien. Kompilacja HLSL poza silnikiem i testy Lua przechodzą. Nowe wydanie wymaga jeszcze sprawdzenia renderowania w uruchomionym FS25.

Mod dodaje proceduralne krople do dodatkowej warstwy na wykrytych szybach pojazdów. Śledzi ruch kości i elementów oryginalnych wycieraczek, oblicza przetarty obszar i przywraca krople podczas deszczu. Efekt jest związany z modelem szyby i działa także przy rozglądaniu się oraz w kamerze zewnętrznej.

## Instalacja

1. Zamknij FS25. Jeśli masz stary rozpakowany folder FS25_RainGlass, przenieś go poza folder mods, żeby nie wczytywać dwóch kopii. Podmień stary ZIP na nowy **FS25_RainGlass.zip**, bez rozpakowywania, w folderze Dokumenty → My Games → FarmingSimulator2025 → mods.
2. Uruchom FS25 i zaznacz **RainGlass - deszcz na szybach** przy wczytywaniu zapisu.
3. Wejdź do pojazdu z kabiną. Podczas deszczu zaczekaj kilka sekund na zebranie się wody. Oryginalne wycieraczki gry uruchamiają się według jej standardowych zasad.

Skrypt działa na PC/Mac. Konsole nie obsługują takich modów Lua. Nie trzeba edytować ani podmieniać pojazdów lub plików instalacji gry. Usunięcie ZIP-a wyłącza efekt; mod nie zapisuje danych w pojeździe ani savegame.

## Zakres i stan prac

To **prototyp do testu w grze**, nie potwierdzone wydanie produkcyjne. Automatyczne wykrywanie obejmuje pojazdy z kabiną i materiałami szyb; pojazdy bez szyb nie otrzymują efektu, a bez animowanych wycieraczek nie mogą przecierać wody. Statyczny raport zgodności z lokalnymi plikami gry znajduje się w validation/coverage.csv. Raport sprawdza wykrywanie, a nie wynik renderowania.

Dla fabrycznych definicji dołączono zmierzone końce piór, odczytane z geometrii modeli. Dla innych pojazdów pozostaje wykrywanie z hierarchii i szacowanie rozmiaru. Nietypowe układy, panoramiczne szyby i pojazdy z modów mogą wymagać poprawek dopasowania. Sam pomiar nie potwierdza idealnego pokrycia wszystkich modeli w grze. Efekt wykorzystuje przezroczystość, normalne, odbicia i mapę załamania obrazu silnika. Nie jest pełną symulacją cieczy.

Warstwa deszczu jest widoczna podczas opadu. Po jego zakończeniu lub pod dachem znika; prototyp nie symuluje pozostającej na szybie wody po ustaniu deszczu.

Shader jest własnym kodem dla GIANTS Engine 10. Należy potwierdzić jego kompilację i wygląd w uruchomionym FS25. Testy poza grą nie zastępują tej próby. Multiplayer jest zadeklarowany jako obsługiwany: grafika liczona jest lokalnie, a ruch wycieraczek pochodzi z gry. Multiplayer nie został sprawdzony w prawdziwej sesji.

Dla ograniczenia kosztu grafiki efekt jest aktywny na maksymalnie 8 najbliższych pojazdach w promieniu 70 m. Każdy inny wykrywalny model otrzymuje go po zbliżeniu. Deszcz pod wiatą jest odcinany maską budynków gry; drobne daszki mogą nie występować w tej masce.

## Sprawdzenie efektu

Najpierw użyj kopii swojego zapisu. Zalecane pierwsze modele: Fendt 700 Vario, Zetor Crystal i Volvo FH16 — różne układy wycieraczek. Sprawdź deszcz, zatrzymaną i pracującą wycieraczkę, przerwę między ruchami, przednią/boczną/tylną szybę, zmianę pojazdu i kamerę zewnętrzną. Sprawdź też sprzedaż/reset pojazdu i wyjście do menu.

Jeśli masz włączoną konsolę deweloperską FS25:

- rgStatus — liczba wykrytych szyb i szacowanych piór, deszcz i wilgotność.
- rgRain 1 — lokalny test mokrych szyb bez zmiany pogody zapisu.
- gsWiperStateSet 2 — fabryczna komenda gry wymuszająca ruch wycieraczek do testu. Przy jednym stanie gra ograniczy wartość.
- gsWiperStateSet 0 — zatrzymanie wycieraczek.
- rgRain -1 i gsWiperStateSet -1 — powrót do rzeczywistej pogody i standardowych wycieraczek.
- rgEnable false / rgEnable true — wyłączenie/włączenie efektu.

Jeżeli efekt nie zadziała, sprawdź plik log.txt w folderze Dokumenty → My Games → FarmingSimulator2025. Szukaj RainGlass, rainGlass.xml, Error i Shader. Log jest potrzebny do poprawy błędów specyficznych dla wersji silnika.

## Źródła i przebudowa

Folder FS25_RainGlass zawiera źródła moda. tools/build_mod.py generuje własny shader, bibliotekę materiałów i ZIP z modDesc.xml w katalogu głównym archiwum. Wymaga Pythona i Pillow. tools/validate.py sprawdza skrypty w interpreterze Lua oraz lokalne XML/I3D gry. Interpreter lupa służy tylko do testów i nie jest częścią moda.

tools/generate_profiles.py mierzy pióra z lokalnie zainstalowanych modeli. Używa NumPy i czytnika blender-i3d-importer (GPL-3.0) z tools/vendor, dostępnego pod adresem https://github.com/nadine-brinkmann/blender-i3d-importer. Czytnik i pliki modeli gry nie wchodzą do ZIP-a; do moda trafiają wyłącznie ścieżki węzłów i pomiary końców piór. tools/verify_fiat.py wykonuje test kontaktu pióra z trójkątami szyb Fiata. Podgląd water_flow_preview.gif w validation pokazuje pole kropli poza grą; nie jest nagraniem z FS25.

Wykorzystane API: [GIANTS Wipers FS25](https://gdn.giants-software.com/documentation_scripting_fs25.php?category=78&class=829&version=script), [AnimatedVehicle FS25](https://gdn.giants-software.com/documentation_scripting_fs25.php?category=78&class=626&version=script) oraz sdk/debugger/scriptBinding.xml i schemat I3D z lokalnej instalacji gry. Pliki i modele gry nie są dystrybuowane w paczce.
