RiverEditorState nutzt dieselben SharedInput-Flags wie der Wasserfall-Editor
(finalizeWaterfallRequested, cancelZoneDrawing, deleteWaterfallRequested,
undoWaterfallPointRequested), aber LAYER_RIVER fehlte in allen vier
Key-Handler-Zweigen in EditorApp.handleKeyPress.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
populateTreeFolderCombo scannte resources/trees/ statt resources/Models/trees/
– das Verzeichnis existiert nicht, daher enthielt die ComboBox nur "(keiner)".
Pfad korrigiert; Items haben jetzt das Präfix "Models/trees/" passend zu
treeFolderPath-Werten aus AssetTreeController und SceneObjectState.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
ObjectController: Welt-Toolbar bleibt beim F7-Öffnen sichtbar (kein
eigener Toolbar mehr). Modus wechselt automatisch: Platzieren wenn
Modell/Ordner ausgewählt, sonst Bearbeiten. Neuer Button + Esc-Shortcut
zum Aufheben der Platzierungs-Auswahl.
WorldScene: EmitterSystem eingebunden — platzierte Emitter werden jetzt
auch im Spiel geladen und proximity-basiert aktiviert.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
AnimPreviewController und AnimSetController in de.blight.editor.toolset.anim/
extrahiert (~1500 Zeilen raus). EditorApp: 13.187 → 11.650 Zeilen.
ToolContext um registry-Parameter erweitert, damit AnimSetController sich
nach Picker-Dialog selbst aktivieren kann.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Die bisherige Y-Check-Methode versagte bei Tunneln aus Sculpted Mesh,
weil bakeVoxelSurface nur VoxelChunk-Daten liest und NaN liefert.
- loadCaveMask: buildCaveFootprintMask bei 2048px statt buildCaveTunnelMask
bei 1024px (kein MIN_FOOTPRINT-Filter der schmale Tunnel eliminiert)
- isCavePoint: erkennt Maskengröße automatisch (1024 oder 2048px)
- buildTunnelContourPaths: Größe dynamisch aus Maskenlänge
- isNodeUnderground: Cave-Maske als primäre Prüfung, Y-Check als Fallback
- Segment-Abtastung: 7 Punkte statt Mittelpunkt (erkennt Tunnel an jeder
Position im Segment, nicht nur bei 50%)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Weltkarte: Cave-Overlay (brown fill + Kontur) vollständig entfernt,
war nie gewünscht; drawTunnelOverlay tut nun nichts
- Pfad-Detection: Cave-Maske als Filter entfernt; Grund: MIN_FOOTPRINT_
Filter in buildCaveMasks (≥40 Pixel bei 1024px) schmeißt schmale
Tunnel raus und würde Tunnel-Segmente blocken. Stattdessen reiner
Y-Check: voxelSurface > pathY + 3m (Tunneldecke direkt über dem Weg)
- Höhlenkarte: Pixel-Bild ersetzt durch Vektor-Füllung (gc.fill auf
tunnelContourPaths) → bleibt bei jedem Zoom-Level scharf
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Pfad-Split: Sandwich-Maske (per-Spalte, fragil) ersetzt durch
Chunk-Level-Cave-Maske + Y-Prüfung; erkennt schmalere Tunnel
zuverlässig und vermeidet extra Disk-Scan
- Weltkarte: Tunneleingang-Halbkreise ersetzt durch gefüllte
Fläche (semi-transparent braun) + glatte Chaikin-Kontur
(ähnlich Wasser-Rendering)
- Höhlenkarte: smooth Kontur-Overlay (warmweiss) um die
Tunnelfläche ergänzt, zusätzlich zu den D-Eingängen
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Zoom-Bug behoben: CaveMapView auto-lud mit Canvas 0×0 (scale=1.0 ungültig)
→ Tab-Sync jetzt nur wenn isViewInitialized() (zoomLevels != null)
- Layout-Fix: CaveMapView-Statusleiste unter dem Canvas (wie WorldMapView),
nicht mehr darüber → Canvas-Höhe jetzt identisch → Position-Sync 1:1 korrekt
- Auto-Load aus CaveMapView.redraw() entfernt; deferred fitToView() stattdessen
- Pfad-Split: Sandwich-Maske (solid→void≥3→solid per Spalte) verhindert
False-Positives an Klippen-Füßen; Wege werden nur als unterirdisch erkannt
wenn in ihrer X,Z-Spalte ein echter Hohlraum (Tunnel) vorliegt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Pfad-Trennung (Oberfläche vs. Untergrund):
- loadPathChains() speichert jetzt Y-Koordinate an Index 2
- splitPathChains() prüft voxelSurface(x,z) > node_y + 3m statt
2D-Cave-Maske; erkennt damit alle Tunnel-Typen korrekt
- Bisektion interpoliert Y für präzisen Grenzpunkt
Höhlenkarte Features:
- Label-Toggle (Bearbeiten-Modus für Area-Labels) + Klick-Handler
- PNG-Export (⇩) rendert 4096×4096 via buildCaveMap()
- mapData wird gecacht für späteren Export ohne Reload
Zoom/Position-Sync:
- Tab-Listener liest Werte vor dem Wechsel, übergibt sie per
Platform.runLater() NACH JavaFX-Layout → kein Sprung mehr
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>