17
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-11-09 09:07:52 +01:00
Files
maszyna/pr-reviews/PR-234.md

2.2 KiB
Raw Blame History

Review PR #234 — Train: Handle 3-way light switches in headlighttoggle actions

Autor: @dos1 · base: master · 1 plik (vehicle/Train.cpp), +60/−16 https://github.com/MaSzyna-EU07/maszyna/pull/234

Werdykt: Approve z uwagami (głównie refaktor i opis zmiany zachowania)

Podsumowanie

headlighttoggleleft/right dla przełączników 3-pozycyjnych (brak ggLeftEndLightButton, jest ggLeftLightButton) cyklicznie przełącza: wył. → reflektor → czerwone → wył. Dzięki temu przełącznik da się obsłużyć myszą/VR. Poprzednia uwaga @jakubg1 (pojazdy bez przełączników) jest zaadresowana warunkiem || ggLeftLightButton.SubModel == nullptr.

Uwagi

  1. Zmiana zachowania klawiatury. headlighttoggle* to ta sama komenda, którą wywołuje klawisz. Na ~110 pojazdach z listy (303E, 4E, EN57, ET22, TEM2…) drugie wciśnięcie klawisza zapali teraz czerwone zamiast zgasić reflektor, a dopiero trzecie zgasi. To może zaskoczyć graczy (i scenariusze szkoleniowe). Proszę opisać to wprost w PR, albo rozważyć rozróżnienie źródła (mysz/VR vs klawiatura) — np. przez osobną komendę „cycle” dla kliknięcia na przełącznik.
  2. Duplikacja. Blok lewy i prawy są identyczne poza maskami i przyciskami — razem ~60 linii kopii. Warto wyciągnąć helper w anonimowym namespace, np.
    void toggle_headlight_3way(TTrain *Train, command_data const &Command, side Side);
    
    albo przynajmniej bool has_3way_switch(TGauge const &End, TGauge const &Main). Ta sama heurystyka („brak dedykowanego przełącznika = 3-way”) jest już w OnCommand_redmarkerenableleft — dobrze mieć ją w jednym miejscu.
  3. Złożoność. Dodatkowe zagnieżdżenie if w if (GLFW_PRESS) może podbić S134/S3776 w Sonarze (QG przeszedł, ale warto zerknąć na szczegóły). Wczesny return dla Command.action != GLFW_PRESS uprości kod.
  4. Stan niespójny. Jeśli oba bity (headlight_left i redmarker_left) są ustawione (np. przez inną komendę/skrypt), gałąź else if przejdzie na czerwone — OK, ale warto to świadomie skomentować.
  5. Formatowanie: } else { w jednej linii odbiega od stylu reszty pliku (klamra w nowej linii).