v0.3: Large world 4096x3072 + momentum waves + zoom-scaled lighting
- World expanded to 4096x3072 (16x area, tiled 4x4 copies) - Active region margin increased to 200px - Liquid momentum system (FLAG_MOMENTUM) for wave sloshing - Zoom-at-cursor support (camera.zoomAt) - Smoother zoom steps (0.2 per scroll tick) - Light propagation scaled by zoom (passes & falloff) - AGENTS.md updated with all current features
This commit is contained in:
@@ -31,10 +31,10 @@ engine/ (Rust → WASM) web/ (TypeScript + Vite)
|
||||
|
||||
## Welt-Modell
|
||||
|
||||
- **Große Welt**: 1024×768 Pixel (4×3 Chunks à 256×256)
|
||||
- Nur Zellen im Sichtfeld + 80px Margin werden simuliert
|
||||
- **Große Welt**: 4096×3072 Pixel (16×12 Chunks à 256×256, tiled 4×4 Szenen)
|
||||
- Nur Zellen im Sichtfeld + 200px Margin werden simuliert
|
||||
- Rest eingefroren — keine CPU-Kosten für unsichtbare Bereiche
|
||||
- Grid wächst auf 1024×768 = 786K Zellen (~3 MB Speicher)
|
||||
- Grid wächst auf 4096×3072 = 12.5M Zellen (~48 MB Speicher)
|
||||
|
||||
### Datenstruktur Cell (pro Pixel)
|
||||
|
||||
@@ -93,6 +93,8 @@ Properties pro Material: `MaterialProps` in `engine/src/material.rs`:
|
||||
- Wasser/Eis in Nachbarschaft → Feuer erlischt sofort
|
||||
- Erzeugt Funken (14) und Rauch (15) beim Brennen
|
||||
- **Flammen-Züngeln**: 1/5 Chance pro Zelle, Funken-Partikel nach oben zu feuern (4–12 Frames Lebensdauer)
|
||||
- **Liquid-Momentum**: FLAG_MOMENTUM auf fallendem/sloshendem Wasser, waves klettern an Schalenwänden hoch
|
||||
- **Flammen-Züngeln**: 1/5 Chance pro Zelle, Funken-Partikel nach oben zu feuern (4–12 Frames Lebensdauer)
|
||||
|
||||
**Ephemere Partikel** (Funken + Rauch):
|
||||
- `update_ephemeral`: dekrementiert Health, bei 0 → Luft
|
||||
@@ -105,16 +107,16 @@ Properties pro Material: `MaterialProps` in `engine/src/material.rs`:
|
||||
|
||||
Reihenfolge in `physics::update(cam_x, cam_y, rw, rh, zoom)`:
|
||||
|
||||
Nur Zellen innerhalb **Kamera-Sichtfeld + 80px Margin** werden simuliert.
|
||||
Nur Zellen innerhalb **Kamera-Sichtfeld + 200px Margin** werden simuliert.
|
||||
Rest der Welt ist eingefroren (keine CPU-Kosten).
|
||||
|
||||
1. **update_fire** — Feuer-Update: Brennstoff-Verbrauch, Ausbreitung, Funken/Rauch-Emission
|
||||
1. **update_fire** — Feuer-Update: Brennstoff-Verbrauch, Ausbreitung, Funken/Rauch-Emission, Flammen-Züngeln
|
||||
2. **Haupt-Loop** (bottom→top, alternierende Spalten, nur aktive Region):
|
||||
- Heat-Transfer über Moore-Nachbarn
|
||||
- Material-Reaktionen (Water+Lava, Säure+Holz, ...)
|
||||
- Phasen-Transformation (Temp-basiert)
|
||||
- Bewegung: Powders ↓, Liquids ↓↔, Solids ↓ (kein Gas!)
|
||||
3. **update_gases** (top→bottom, nur jedes 2. Frame, nur aktive Region): Gas steigt 1px/Frame
|
||||
3. **update_gases** (top→bottom, nur jedes 2. Frame, nur aktive Region): Gas + Flammen-Funken steigen max 1px/Frame
|
||||
4. **update_ephemeral** (nur aktive Region): Spark/Smoke Health dekrementieren, bei 0 → Luft
|
||||
|
||||
## Level-Format
|
||||
@@ -149,10 +151,11 @@ Jedes Material bekommt deterministische Pixel-Variation basierend auf Grid-Koord
|
||||
|
||||
**Light-Propagation** in `render_buffer.rs`:
|
||||
1. Emissions-Pass: Jedes Pixel mit `light_emit > 0` strahlt Licht
|
||||
2. Flood-Fill (max 12 Passes, early-termination): 8-Richtungs-Propagation
|
||||
- Falloff: 2 (kardinal) / 3 (diagonal) + `light_block` (gecapped bei 200)
|
||||
2. Flood-Fill (max `16/zoom` Passes, early-termination): 8-Richtungs-Propagation
|
||||
- Falloff: `(2|3)/zoom` (kardinal/diagonal) + `light_block` (gecapped bei 200)
|
||||
- Opaque Pixel blocken Weitergabe, werden aber selbst beleuchtet
|
||||
3. Abwechselnde Scan-Richtung für gleichmäßige Verteilung
|
||||
4. Zoom-skaliert: Passes + Falloff passen sich an Kamera-Zoom an
|
||||
|
||||
**Lichtquellen**: Feuer (255), Lava (200), Funken (180)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user