- buildForestOutlinePaths: Density-Map hat Z invertiert (Nord=mz=0) gegenüber
Marching-Squares-Koordinaten (Süd=mz=0) → gespiegelte Konturen landeten
off-screen, kein sichtbarer Wald-Rand. Fix: dz = fdSize-1-mz beim Samplen.
- Render-Reihenfolge korrigiert: Klippen → Wald → Wasser → Areas
(Wald war über Wasser, sollte darunter liegen)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- fixWindingForClip(): äußere Pfade CCW, innere Pfade (Löcher/Berg-Inneres) CW
→ gc.clip() füllt mit Non-Zero-Rule nur das echte Kliff-Band, nicht den
gesamten eingeschlossenen Bereich inkl. Berggipfel
- Schraffierungs-Liniendicke = overlayLineWidth() (identisch zu Konturlinie)
- Schraffierungs-Abstand = 4× Liniendicke → konstante ~25% Flächendeckung
über alle Zoom-Stufen
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Kliff-Bereiche: diagonale Schraffierung (45°, ~5.5px Abstand) im gleichen
Grauton via gc.clip() auf die Marching-Squares-Pfade
- Klippen- und Wald-Konturlinien: 1.2px bei Zoom 0-2, 2.5px bei Zoom 3,
3.5px bei Zoom 4 (deutlich dicker zum Reinzoomen)
- Wald-Umrandung: selber Stil und Dicke wie Klippen, aber dunkelgrün (28/78/12)
- Render-Reihenfolge bleibt: Klippen → Wasser → Wald
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Cliff- und Wald-Randlinien via Marching Squares + Chaikin als Canvas-Vektoren
statt Pixel-Kanten im Raster → immer scharf wie Küstenlinie und Areas
- COARSE von 512px (4m/px) auf 256px (8m/px) erhöht + Bilinear-Interpolation
der Flachfarben → dünne Texturen (<8m) verschwinden, keine Block-Artefakte
bei Hires-Zoom
- Render-Reihenfolge: Klippen → Wasser → Wald (laut User-Anforderung)
- buildCliffOverlay: nur noch weiche Grau-Füllung, keine pixel-basierten Kanten
- computeForestPixels: nur noch Füllung, Randlinie kommt als Vektor-Overlay
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Terrain-Textur-Overlay (Splatmap-Blend, Klippen, Wald) als Dirty-Flag-Cache
- Wald wird nach Wasser gerendert, 50% Deckkraft, Schwelle 3+ Bäume
- Speichern vor Weltkarten-Refresh (save-then-load via pendingAfterSave)
- ModelCategory-System: Baum/Palme/Busch/Gebäude; Ordner-Kategorie im UI versteckt
- Selektion nur mit Auswahl-Werkzeug (kein versehentliches Selektieren im Platzier-Modus)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- WorldMapRenderModel: neues Record als Zwischenschicht zwischen I/O und Rendering
- WorldMapRenderer: render() akzeptiert Modell direkt; rückwärtskompatible Wrapper-Signatur für MinimapState
- WorldMapView: Layer-Auswahl als MenuButton mit Checkboxen; Vollbild-Modus (centerStack-Swap); Kamera-Indikator mit FOV-Kegel (120ms-Timer, unabhängig vom Karten-Rendering); Linksklick teleportiert JME3-Kamera unter Beibehaltung der Terrain-Höhendifferenz
- EditorApp: CameraInfoSupplier, TeleportCallback und FullscreenCallbacks verdrahtet
- MinimapState, Logback: Debug-Logging für Modell-Build und Render-Zyklen
- Map-Daten: Zwischenstand Weltdaten
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Tunnel-Spalten werden im Gradientenschreiben jetzt vollständig geschützt:
Pre-Scan erkennt echte Tunnel (void ≥ Terrain-Höhe mit festem Voxel darüber)
und überspringt dann sämtliche negativen Zellen in dieser Spalte – auch
unter-terrain-liegende. Damit erzeugt MC keinen Plateau-Boden mehr am
Tunnel-Eingang.
Terrain-Übergang-Extrapolation bekommt zusätzlich einen hasVoidBelow-Check:
existieren leere Zellen unterhalb von yBot im geblurrten Chunk, wird die
Extrapolation übersprungen, statt den Hohlraum zuzuschütten.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>