Terrafier/PLAN.md
loki5512344 18613260a8 WASM plugins, scripting, i18n, GUI pan/zoom, cargo-dist CI/CD
- WASM plugin host (wasmtime 46, 17 host fns) + example noisemap plugin
- Rhai scripting engine (12 API fns, `terrafier run` cmd)
- i18n: en/ru translations, auto-detect, t! macro
- GUI: pan (click-drag) + zoom (scroll wheel) with viewport transform
- cargo-dist 0.31: MSI/pkg/shell installers, both binaries
- CI: .github/workflows/ci.yml + release.yml
- Security: wasmtime 30→46, bincode 1.3→2.0, quick-xml CVE docs
- Code review: SAFETY comments, unwrap→match cleanup
- Fixes: clippy approx_constant, needless_borrows, rustfmt
2026-07-04 11:14:47 +02:00

127 lines
5.8 KiB
Markdown
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Terrafier
> Rust-native Minecraft world painter — быстрее, легче, современнее.
Нативная замена [WorldPainter](https://www.worldpainter.net) на Rust.
Рендеринг карт через GPU, параллельный экспорт, CLI-first архитектура.
## Архитектура
```
┌────────────────────────────────────────────────────┐
│ terrafier-cli terrafier-gui Библиотека │
│ (clap + json) (egui + eframe) (crates.io) │
├───────────────────┬────────────────────────────────┤
│ terrafier-core │ модель мира, I/O, операции │
│ ┌──────┬──────┬──┴─────┬────────┐ │
│ │World │Tile │Export │Import │ │
│ │Model │Ops │Pipeline│Anvil │ │
│ └──────┴──────┴────────┴────────┘ │
├──────────────────────┬─────────────────────────────┤
│ wasm-host / rhai │ Плагины и скриптинг │
├──────────────────────┴─────────────────────────────┤
│ Foundation crates │
│ nbt │ fastanvil │ noise │ palette-compress │
│ biome-db │
└────────────────────────────────────────────────────┘
```
## Текущий статус (v0.1.0)
### Реализовано
- **Модель мира**: World, Dimension, Tile (128×128), Terrain (7 типов), Layer trait, Platform
- **Система координат**: явные конвертации BlockCoords → ChunkCoords → RegionCoords → TileCoords
- **NBT**: full read/write, все типы тегов, gzip support
- **Anvil**: чтение/запись .mca регионов, разбор чанков, секций, палитры
- **Экспорт**: Terrafier → Java Edition 1.18+ save (секции, block_states, биомы)
- **Импорт**: Java Edition save → Terrafier world (level.dat, регионы, surface)
- **CLI**: new, import, export, info, render (с прогресс-барами, dry-run)
- **GUI**: редактор на egui (viewport, инструменты, undo/redo)
- **Операции**: Raise, Lower, Smooth, Flatten, Paint — с MultiTile поддержкой
- **Heightmap**: noise-based генерация (OpenSimplex), flat, combined
### В работе / не реализовано
- **WASM плагины** — wasmtime-хост, ABI, загрузка .wasm файлов
- **Скриптинг** — Rhai-движок для world-генераторов
- **i18n** — локализация CLI/GUI
- **GUI polish** — pan/zoom GPU viewport, brush overlay, layer panel
## Стек
| Компонент | Технология |
|-----------|-----------|
| Язык | Rust (edition 2024) |
| GUI | egui + eframe |
| GPU | (план) wgpu |
| NBT | Самописный `nbt` crate |
| Anvil | Самописный `fastanvil` crate |
| Шум | `noise-rs` |
| Параллелизм | rayon |
| CLI | clap + indicatif |
| Изображения | `image` crate |
| Сериализация | serde + bincode |
### Почему egui, а не Tauri
egui выбран за:
- Immediate mode — нет оверхэда как у React, подходит для тулов
- Нативная интеграция с Rust (без bridge)
- wgpu-рендеринг напрямую (когда будет реализован)
- Бинарник 2–3 MB vs Tauri 5–10 MB + WebView
## Roadmap
### Phase 0 (done) — Foundation
NBT парсер, Anvil reader, workspace setup
### Phase 1 (done) — Core Model
Tile, Dimension, World, Terrain, Brush, Operation
### Phase 2 (done) — Minecraft I/O + CLI
Импорт/экспорт Java Edition, CLI команды, импорт .world
### Phase 3 (done) — Operations & Layers
Инструменты (raise, erode, smooth, flatten, fill, paint)
Слои (caves, river, frost, trees, biome, resources)
Экспортёры слоёв, фильтры, MultiTile
### Phase 4 (done) — GUI (MVP)
GPU-рендеринг через wgpu (базовый), панель инструментов
Диалоги (New World, Export), undo/redo
### Phase 5 — WASM Plugins + Scripting
WASM-хост на wasmtime, ABI для плагинов
Rhai-скриптинг для world-генераторов
Загрузка плагинов из .wasm файлов, registry
### Phase 6 — i18n + Инфраструктура
Локализация CLI/GUI (rust-i18n / Fluent)
CI/CD, cargo-dist, AppImage/msi/app
Бенчмарки, оптимизация, polish
### Будущее
Bedrock Edition, GUI pan/zoom/brush-overlay, GUI layer panel
## Модель данных
```rust
struct Tile { // 128×128 блоков
heightmap: [i16; 16384], // карта высот
terrain: [u8; 16384], // тип террейна
water_level: [u8; 16384], // уровень воды
layer_data: HashMap<u32, LayerBuffer>,
}
struct Dimension {
tiles: HashMap<(i32, i32), Tile>,
min_height, max_height: i16,
seed: u64,
}
struct World {
name: String,
dimensions: Vec<Dimension>,
platform: Platform,
seed: u64,
}
```