17
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-11-08 14:59:43 +01:00
Files
maszyna/pr-reviews/PR-241.md

3.4 KiB
Raw Blame History

Review PR #241 — feat(editor): area fill: Enter finishes an area, Esc drops the outline, a list of filled areas to change later

Autor: @miloszunio · base: feat/gl46-migration · 7 plików, +751/−97 https://github.com/MaSzyna-EU07/maszyna/pull/241

Werdykt: Request changes — test w edytorze, undo przez regenerację, opis formatu

Podsumowanie

Narzędzie wypełniania obszaru dostaje cykl życia: Enter kończy obszar, Esc porzuca kontur, lista wypełnionych obszarów (Zmień / Pokaż / Usuń), undo dla dodania/zmiany/usunięcia, ziarno std::mt19937 przechowywane z obszarem. Trwałość w nowym editor/editorFillStore.{hpp,cpp} jako linie-komentarze w plikach warstw, modele nazwane <id>_<n>.

Co jest dobrze

  • Realny problem UX (nie dało się zakończyć konturu) rozwiązany kompletnie, z listą i edycją.
  • Format w liniach-komentarzach — symulator je pomija, więc sceneria z tą funkcją dalej czyta się w obecnym wydaniu (zgodnie z CLAUDE.md).
  • fill_store wzorowany na istniejącym switch_store — spójna architektura.

Uwagi blokujące

  1. Nie uruchomione w edytorze („Built with -fsyntax-only… Not run in the editor yet”). Przy tej skali zmian (zapis do pliku, usuwanie modeli po nazwie) proszę o przejście scenariusza z opisu, najlepiej skryptem EU07_EDITOR_SELFTEST na kopii scenerii: kontur → Enter → Zmień → przesuń punkt → Enter → Usuń → Undo → zapis → wczytanie → Zmień.
  2. Opis i kod mówią o różnych znacznikach. Opis PR: //$f; kod (kMark, editormarks, komentarz w .hpp): //$w. Proszę ujednolicić opis i upewnić się, że //$w nie koliduje z niczym w Rainsted/StarterNG ani w innych narzędziach piszących do scenerii.
  3. Undo zmiany/usunięcia odtwarza modele z ziarna. std::uniform_real_distribution jest zależne od implementacji biblioteki standardowej (MSVC ≠ libstdc++), a lista szablonów z banku węzłów może się zmienić między sesjami. W tej samej sesji i tym samym buildzie to zadziała, ale nie jest to „te same obiekty” w ogólności (CLAUDE.md: nie polegać na zachowaniu nieprzenośnym). Bezpieczniej: przed usunięciem zrobić snapshot usuwanych węzłów (export_as_text) i przy undo wstawić dokładnie je. Jeśli zostaje regeneracja — opisać ograniczenie w komentarzu.
  4. Identyfikacja modeli po nazwie fillN_k. owns() uzna każdy węzeł o nazwie fill1_7 za część obszaru fill1 — także ręcznie nazwany przez autora scenerii. „Zmień”/„Usuń” go skasuje. next_id() sprawdza tylko fillN_0. Rozważyć mniej kolizyjny prefiks (np. $fill1_7) albo zapis listy nazw modeli w //$w.

Uwagi (Sonar / styl)

  1. std::string seed, density, spacing, … w jednej deklaracji — S1659.
  2. erase(std::remove_if(...)) → std::erase_if (S6165); std::find_if(begin, end, …) → std::ranges::find_if (S6197).
  3. g_areas, g_loaded — niestałe zmienne globalne (S5421). Jeśli switch_store robi tak samo, to OK dla spójności, ale lepiej trzymać stan w obiekcie należącym do editor_mode.
  4. Magiczne 100000 (limit punktów konturu) → nazwana stała.

Pytanie o gałąź

  1. Funkcja edytora trafia do feat/gl46-migration (#216, draft, merge po 26.11). Czy to celowe (narzędzie istnieje tylko na tej gałęzi)? Jeśli kod narzędzia jest też na master, CLAUDE.md każe robić funkcje na własnej gałęzi od master.