mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-11-08 14:59:43 +01:00
3.5 KiB
3.5 KiB
Review PR #159 — Trainset spawning, various Lua scripting changes
Autor: @jakubg1 · base: master · 10 plików, +65/−38 · ostatnia aktualizacja 21.10
https://github.com/MaSzyna-EU07/maszyna/pull/159
Werdykt: Request changes — otwarte uwagi z rundy 21.10 nadal aktualne
Podsumowanie
api.spawn_trainset(trainset)w Lua — cały wpistrainset … endtrainsetjak ze Startera.state_serializer::insert_trainset_full().- Rejestracja źródeł dymu i świateł pojazdu przeniesiona z
deserialize_node()doTDynamicObject::Init()(init_smoke_sources()), więc działa też dla pojazdów wstawianych w trakcie symulacji. insert_trainset()dostaje parametrVelocity.
Co sprawdziłem
- Warunek świateł w
Init()ma już poprawne nawiasy (CategoryFlag == 1 && (front || rear)) — uwaga @jerrrrycho z 04.09 zaadresowana. ✔ Init()zwraca0.0(porażka, pojazd jest potem kasowany) tylko przedTurnOff(), czyli przed nową rejestracją dymu/świateł — więc brak wiszących wskaźników wParticles/Lights. ✔ Wyjątek: pojazd zDim.L == 0w.fizprzejdzie rejestrację, a potem zostanie usunięty jako „błąd”. Rzadkie, ale warto zabezpieczyć (rejestrować po sprawdzeniu długości albo wyrejestrować przydelete).
Uwagi blokujące (z poprzedniej rundy, wciąż w kodzie)
- Pętla w
insert_trainset_full()nie zatrzymuje się naendtrainset. Przykład @jerrrrycho: dwa składy w jednym stringu → oba wylądują na torze pierwszego. Do tego brakendtrainsetnie daje błędu, a skład zostaje „w połowie”. Proponuję: czytaćnodeaż doendtrainset; jeśli go nie ma —ErrorLogi usunąć już utworzone pojazdy (albo jasno udokumentować, że zostają). lua_tostring()może zwrócićNULL(argument nie jest stringiem/liczbą) →std::stringznullptr= UB/crash. Zapowiedziany osobny PR dla wszystkich funkcji API jest OK, ale dla nowej funkcji to jedna linia:luaL_checkstring(L, 1).- Unikalne nazwy pojazdów. Ponowne wywołanie z tym samym wpisem tworzy duplikaty nazw (
Vehicles.insertzwrócifalse, log „duplicate vehicle name”), a pojazd i tak zostaje w świecie. Dla API skryptowego, które z założenia będzie wołane wielokrotnie, warto automatyczny sufiks albo jawny błąd i odrzucenie.
Pozostałe uwagi
- Parametr
Velocitywinsert_trainset()— oba wywołania podają0, ainsert_trainset_full()go nie używa. Jeśli to przygotowanie pod przyszłość — lepiej dodać go w PR, który go użyje (YAGNI). init_smoke_sources() const— metodaconst, która rejestrujethisw globalnym menedżerze cząsteczek. Kompiluje się (jest przeciążenieinsert(…, TDynamicObject const*, …)), ale semantycznie to efekt uboczny; bezconstbędzie czytelniej.- Synchroniczne ładowanie (zamrożenie przy spawnie) — zaakceptowane w dyskusji; warto dopisać to w dokumentacji funkcji Lua.
- Test dymu i świateł — @jakubg1 sam prosił o sprawdzenie, że dym i światła pojawiają się poprawnie. Proszę o potwierdzenie (np. zrzut parowozu z dymem i składu z oświetleniem czoła) zarówno dla scenerii wczytanej, jak i składu ze
spawn_trainset. - Tytuł/opis: „various Lua scripting changes”, a dochodzi jedna funkcja — opis do zaktualizowania. Historia commitów jest pomieszana (autor sam to pisze), więc squash przy merge.
- Formatowanie: mieszane tabulatory/spacje w
DynObj.hisimulationstateserializer.cpp(if (!vehicle)+ tab).