# Review PR #261 — feat(cab): 401Da oil pump lamp and slotted speedometer lever Autor: @jerrrrycho · base: `master` · 7 plików, +218/−1 · Closes eu07/maszyna#546 https://github.com/MaSzyna-EU07/maszyna/pull/261 **Werdykt: Request changes — wydzielić poprawkę AVX2, reszta OK** ## Podsumowanie - Nowa lampka `i-oilpump:` (pompa smarowania wstępnego; gaśnie po uruchomieniu silnika). - Nowy klucz `.mmd` `animslottedlever:` — dźwignia z jarzmem napędzana czopem wiązara (napęd prędkościomierza). - Dodatkowe testy opóźnienia startu sprężarki (`CompressorStartDelay`, już na master z #217). - **Poprawka builda:** `GLM_FORCE_AVX2` tylko gdy kompilator faktycznie celuje w AVX2. ## Uwagi 1. **Poprawka AVX2 powinna być osobnym PR-em.** To ważna poprawka (crash na CPU bez AVX2 przy `ENABLE_AVX2=OFF`), niezwiązana z 401Da. Osobny PR szybciej przejdzie review, łatwiej ją zcherry-pickować na gałąź wydania 26.11 i na `feat/gl46-migration`, i będzie widoczna w changelogu. Sama zmiana (`#elif defined(__AVX2__)`) jest poprawna dla MSVC (`/arch:AVX2`) i GCC (`-mavx2`). 2. **`animslottedlever:` — kompatybilność OK** (nowy opcjonalny klucz; bez niego nic się nie zmienia). Proszę o: - wpis do dokumentacji formatu `.mmd` (wiki), skoro żaden pojazd jeszcze go nie używa, - informację, czy brak submodelu ma logować błąd `Bad model` — dla nowej funkcji to OK (prawdziwy błąd danych). 3. **Matematyka bez testu.** `slottedlever_angle()` to czysta funkcja geometrii, a nie jest testowana tylko dlatego, że siedzi w `TDynamicObject`. Proponuję przenieść ją do małego nagłówka (np. `utilities/` albo wolna funkcja w anonimowym namespace + deklaracja w nagłówku testowalnym) i dopisać testy: oś wewnątrz okręgu → pełny obrót, okrąg przez oś → wahanie ±90°. 4. **`float3`** w `SetRotate(float3(1,0,0), angle)` — #224 właśnie migruje `float3d` na `glm`. Nowy kod lepiej od razu na `glm::vec3`, żeby nie powiększać konfliktu. 5. **`update_slottedlevers()`** jest wołane w `ABuLittleUpdate()` poza sprawdzeniem odległości (`ObjSqrDist < 50*50`) — dla pustego wektora to nic nie kosztuje, ale dla pojazdów z dźwigniami liczy się zawsze. Rozważyć wołanie razem z animacjami kół (te same warunki LOD). 6. **Indeks `wheelid`**: warunek `lever.axle < iAnimType[ANIM_WHEELS] && lever.axle < pAnimations.size()` zakłada, że animacje kół są na początku `pAnimations` — proszę o komentarz albo assert. 7. **Lampka `i-oilpump:`** pokazuje `OilPump.is_active`. Dla pojazdów, gdzie pompa oleju pracuje cały czas (nie tylko smarowanie wstępne), lampka będzie świecić stale — to raczej poprawne, ale warto opisać semantykę w dokumentacji `.mmd`. 8. Opis: „SM42 stood in for the diesel” — test z prawdziwym modelem 401Da jest w „Known issues”; OK, ale niech ktoś od modelu 401Da potwierdzi przed wydaniem.