Fix critical structural issues: undo/redo, surface import, brush strength, i18n macro, level.dat export, GPU fallback, Nether/End support, dead code removal, dim serde, CPU perf, wasm-host, GPU constants, clippy warnings
- Replace OnceLock with Mutex<Option> for snapshot system in all 9 operations (undo/redo now works after redo) - Fix import surface detection: scan actual packed block data for highest solid block instead of always using +15 - Apply brush strength threshold (< 0.3) in PaintOperation for natural edge falloff - Remove broken t!() macro variant with variable substitution - Complete level.dat with RandomSeed, GameType, Difficulty, Spawn, Time, DataPacks, etc. - GPU viewport falls back to CPU renderer for multi-tile worlds - Export supports Nether (DIM-1/region) and End (DIM1/region) dimension subdirectories - Remove dead FloodOperation (duplicate of PaintOperation) - Add log::warn for malformed dimension tile keys in serde - Reduce CPU viewport base_size from 64 to 32 (4x fewer pixels) - Simplify wasm-host host_get_seed to direct cast - Add named constants for GPU buffer sizes - Fix unused import warning in cli/main.rs - cargo fmt
This commit is contained in:
parent
18613260a8
commit
2419b603c1
24 changed files with 339 additions and 271 deletions
23
PLAN.md
23
PLAN.md
|
|
@ -125,3 +125,26 @@ struct World {
|
|||
seed: u64,
|
||||
}
|
||||
```
|
||||
|
||||
## Известные проблемы (требуют фикса)
|
||||
|
||||
### Критические
|
||||
1. **GPU рендерит только 1 тайл** — `GpuRenderer` 128×128, а вьюпорт показывает мульти-тайловый мир. `gpu.rs` рисует один тайл, остальные пустые.
|
||||
2. **Undo/redo сломан** — `OnceLock` в операциях не позволяет повторно захватить снепшот при redo. После undo→redo мир ломается.
|
||||
3. **Импорт высот неверный** — `reader.rs:122` всегда ставит surface_y = section_y * 16 + 15, игнорируя реальную высоту поверхности.
|
||||
4. **Brush strength не влияет на Paint** — `apply_brush_terrain()` игнорирует силу кисти, кроме проверки на 0.
|
||||
5. **Макрос `t!()` сломан** — `i18n/src/lib.rs:61`: невалидный каст, макрос с переменными не компилируется.
|
||||
|
||||
### Существенные
|
||||
6. **level.dat при экспорте неполный** — нет `GameRules`, `Difficulty`, `Spawn`, `Time`, `RandomSeed`.
|
||||
7. **Нет поддержки Nether/End** — экспорт всегда в `region/`, импорт создаёт только `"overworld"`.
|
||||
8. **`FloodOperation` — мёртвый код** — дубликат `PaintOperation`, нигде не используется.
|
||||
9. **`Dimension` сериализация хрупкая** — строковые ключи `"{tx},{tz}"`, битые ключи молча дропаются.
|
||||
10. **CPU-вьюпорт рендерит всё каждый кадр** — полный перерендер при каждом `update()`.
|
||||
11. **`wasm-host` `host_get_seed` бессмысленный** — разбивает u64 на lo/hi 32-bit и собирает обратно.
|
||||
|
||||
### Архитектурные
|
||||
12. **Только 1 тест на 93 .rs файла** — операции, импорт, экспорт, слои без покрытия.
|
||||
13. **Экспорт блоков примитивный** — 9 типов блоков, без свойств (snowy, waterlogged).
|
||||
14. **`data_version` хардкод** — всегда экспортит 3954, игнорируя версию исходного мира.
|
||||
15. **GPU buffer sizes хардкод** — `8192 * 4` и `4096 * 4` без Named constants.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue