mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-11-11 22:29:03 +01:00
30 lines
3.4 KiB
Markdown
30 lines
3.4 KiB
Markdown
# 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)
|
||
5. `std::string seed, density, spacing, …` w jednej deklaracji — S1659.
|
||
6. `erase(std::remove_if(...))` → `std::erase_if` (S6165); `std::find_if(begin, end, …)` → `std::ranges::find_if` (S6197).
|
||
7. `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`.
|
||
8. Magiczne `100000` (limit punktów konturu) → nazwana stała.
|
||
|
||
## Pytanie o gałąź
|
||
9. 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`.
|