Commit Graph

192 Commits

Author SHA1 Message Date
b498d0fd5b Zweihänder: Griffspanne virtuell 22cm, Griff-raten 20cm mit 5cm Pommel-Offset
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-13 21:37:22 +02:00
911b512208 Zweihänder: Midpoint-Anker mit Handballen-Korrektur (State C); Hover-Logs auf DEBUG
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-13 18:55:45 +02:00
21c8af0105 Kampfsystem, hier: Positionierung des Schwertes, weitere Features für die Griffe ergänzt 2026-10-12 21:07:46 +02:00
9ff911eaa6 Kampfsystem für Zweihänder erweitert 2026-10-06 21:48:44 +02:00
62931e3273 Einige Bug fixes 2026-10-06 14:20:49 +02:00
f2cb866cd5 Fluss-Editor: Tastenkürzel fehlten (Enter, Esc, Delete, Backspace)
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>
2026-10-06 13:38:12 +02:00
02196aa438 Ordner-ComboBox im Objekt-Editor zeigte immer leer
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>
2026-10-06 13:34:07 +02:00
e794c1f97a Fehler beim backen von Voxel behoben 2026-10-06 13:27:25 +02:00
867a895c6e Fehler beim Platzieren von Objekten behoben 2026-10-06 08:54:09 +02:00
c3e028b9f8 Stein Tool ein wenig überarbeitet 2026-10-05 22:14:54 +02:00
7069c5f632 Voxel Umstellung vollendet 2026-10-05 08:58:59 +02:00
4ed61998dd voxel umgestellt 2026-10-04 17:05:18 +02:00
f88a710b4d Mehrere Probleme beim Thema Kämpfen, Schleichen und Looten behoben 2026-10-04 13:16:21 +02:00
3f5f2b9253 Einige Fixes bezüglich der Anzeige von Gegnern und deren Namen 2026-10-04 11:13:30 +02:00
17efa86f34 Schwert und Schild kampfsystem weiter ausgebaut 2026-10-04 10:59:27 +02:00
b7def4f2e7 Kampfsystem, hier: weitere Sounds, Interaktion mit NPCs weiter ausgebaut 2026-09-28 21:56:56 +02:00
555e2293dc Pick up Animation verbessert 2026-09-27 21:55:55 +02:00
0a7c7bc6d1 Kampfsystem: NPC verhalten weiter angepasst, einige Bugs gefixed 2026-09-27 20:57:04 +02:00
da8e5e99f1 Begonnen: Verhalten von Gegnern bei annäherung, Verfolgung etc 2026-09-27 00:12:26 +02:00
94e0cac10d Schleichen hinzugefügt, Bugs bei den Sounds behoben 2026-09-24 16:37:55 +02:00
f457b897bd Laufen und Rollen verbessert 2026-09-24 16:01:47 +02:00
470c743848 Weiter am Kampfsystem gearbeitet - hier Kampfpuppen und ausweichrolle 2026-09-24 12:05:37 +02:00
0a1c7cd835 Ausdauer System implementiert 2026-09-23 20:58:33 +02:00
ed0d622bfd Sounds für das Kampfsystem hinzugefügt 2026-09-23 19:47:05 +02:00
a28197d9d0 Impact System ausgearbeitet 2026-09-22 21:31:30 +02:00
3cef09bb29 Animation bezüglich schwert und schild im kampfsystem abgeschlossen 2026-09-22 20:44:22 +02:00
ef061b2726 Weiter am Kampfsystem gearbeitet - hier: Schwert und Schild 2026-09-20 22:17:29 +02:00
836b5d3d99 Weiter am Kampfsystem gearbeitet, hier Schwertkampf und die animationen 2026-09-20 17:16:43 +02:00
bdaeed056c Beginn des Kampf Systems 2026-09-15 17:19:21 +02:00
1d6f43f9ce LOD für Palmen und Trauerweiden angepasst 2026-09-14 21:57:41 +02:00
45f7ee1045 Objekte können jetzt Sounds haben (z.B. Lagerfeuer). Sound System optimiert 2026-09-14 16:09:21 +02:00
08c76a798d Malen und Editieren von Zonen erweitert 2026-09-13 21:33:30 +02:00
6cf7234ab1 Wege System erweitert 2026-09-13 20:39:07 +02:00
320b0834b9 Shortcuts für Brush Tools ergänzt 2026-09-13 14:48:37 +02:00
6e2c3a2785 Abschluss des großen Editor Refactorings 2026-09-13 12:20:53 +02:00
feef7cab62 Bugfixes: ObjectController-Toolbar, Emitter ingame, Esc-Shortcut
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>
2026-09-12 21:47:32 +02:00
8f0cf7bc42 Phase 5: Atmosphere, Water, Voxel, Grass aus EditorApp extrahiert (-1.170 Z.)
- AtmosphereController: Licht- + Emitter-Panel, updateLight/Emitter, onFrame()
- WaterController: Wasser- + Wasserfall-Panel, updateWater/Waterfall, onFrame()
- VoxelController: VoxelMerged- + Klippen-Panel; sculptPanelSupplier-Injection
  für showToolParameters-Delegation; onCliffGenerateKeyPressed() für Keyboard
- GrassController: Gras-Panel + GrassTextureUI; viewport/showToolParams/
  normalMapLoader injiziert; buildGrassTextureUI() auch von showToolParameters
  in EditorApp aufgerufen
- EditorApp: controller.onFrame()-Aufrufe im AnimationTimer; Toolbar-Buttons
  delegieren an controller.buildPanel(); Timer-Blöcke für Selection-Changes
  aus EditorApp entfernt (→ onFrame); Felder lightDynamic, waterDynamic,
  voxelCliff*, grassSub*, lightBtn/emitterBtn/waterBtn/riverBtn/voxelBtn entfernt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-11 11:01:14 +02:00
bf1bb4fd16 Phase 4 Bugfixes: viewportSupplier, registry-State, currentTool-Checks
- ToolContext: viewportSupplier liefert worldViewport statt centerStack
  (setCenterView(centerStack) wäre self-parent JavaFX-Exception)
- switchToWorldEditor: registry.deactivateAll() + currentTool-Checks
  durch registry.activeToolId() ersetzt (currentTool wurde nie auf
  "objecteditor"/"modeleditor" gesetzt)
- ToolRegistry: deactivateAll() hinzugefügt
- ModelEditorController.openModelEditor: Idempotenz-Fix wie activatePlaceMode
  (bei bereits aktivem Controller activate() direkt aufrufen)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-11 10:45:57 +02:00
f1b321731b Phase 4: ObjectController + ModelEditorController aus EditorApp extrahiert
EditorApp: 11.519 → 9.293 Zeilen (-2.226)
- de.blight.editor.toolset.object.ObjectController (Objekt-Platzieren/Bearbeiten)
- de.blight.editor.toolset.model.ModelEditorController (Modell-Editor + Modell-Import)
- Timer-Blöcke für Objekt/Modell aus EditorApp entfernt; registry.onFrame() delegiert
- Alle Aufruf-Sites auf die neuen Controller umgestellt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-11 10:03:46 +02:00
f0a0c216f6 Refactoring Phase 3: AnimPreview + AnimSet aus EditorApp extrahiert
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>
2026-09-10 22:28:09 +02:00
e4b0ee0dc3 Refactoring Phase 2: Vegetation & EzTree aus EditorApp extrahiert
- Neue Infrastruktur: ToolController, ToolRegistry, ToolContext (record)
- VegetationController: alle ~1000 Z. Vegetation-State + Panels ausgelagert
  (Baum, Farn, Palme, Fruchtbusch, Weinpflanze, Trauerweide)
- EzTreeController: EzTree-State, Toolbar, Panel + buildLevelSection()
- UiHelper: shared static UI-Helpers (bold, sectionTitle, ezFloat, …)
- EditorApp: 14 222 → 13 187 Zeilen (-1035); switchToVegetationGenerator()
  und switchToEzTree() delegieren an registry.activate()
- F5/F6: hybrides Routing – migrierte Tools über ToolController.onPreview()
  / onRandomSeed(), nicht-migrierte über bestehende Runnable-Felder
- AnimationTimer: treePreviewResized + treeGenStatusMsg → registry.onFrame()

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-10 21:23:46 +02:00
1b509c3a52 Performance Tweaks 2026-09-10 20:54:36 +02:00
52801b5ddf Ingame Karte weitergebaut 2026-09-07 22:22:27 +02:00
9fa1643264 Karte: Pfad-Erkennung durch Sculpted-Mesh-Tunnel repariert
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>
2026-09-07 13:37:23 +02:00
7f5be2b65d Karte: 3 Korrekturen nach User-Feedback
- 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>
2026-09-07 12:06:52 +02:00
f29580cb3b Karte: Tunnel-Rendering verbessert, Pfad-Erkennung robuster
- 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>
2026-09-07 10:22:48 +02:00
dc7c326441 Karte: Zoom-Fix, Layout-Sync, Sandwich-basierter Pfad-Split
- 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>
2026-09-07 07:26:01 +02:00
8430eb41d6 Karte: Y-basierter Pfad-Split, Label/Export in Höhlenkarte, Sync-Fix
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>
2026-09-06 22:32:28 +02:00
174579cd0b Karte: Pfade/Gebäude/Areas nach Oberfläche vs. Untergrund trennen
Pfad-Ketten werden exakt an Tunnel-Grenzen per Bisektion aufgesplittet
(12 Iterationen ≈ 0.05m Genauigkeit). Gebäude und Areas werden anhand
des Footprint-/Schwerpunkt-Punkts der Cave-Maske zugeordnet.

- WorldMapView: zeigt nur Oberflächen-Segmente (splitChains[0])
- CaveMapView:  zeigt nur Tunnel-Segmente (splitChains[1])
- Cave-Maske: buildCaveTunnelMask bei 1024px, einmal pro Lade-Zyklus

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-06 22:19:20 +02:00
6e7e94371e Höhlenkarte: Overlay-Darstellung identisch zur Weltkarte
- Gebäude: Farbe korrigiert (rot wie Weltkarte), Rotation-Vorzeichen fix (-fp[4]),
  zoom-abhängige Linienstärke, Skip bei zu kleinen Footprints
- Wege: zoom-abhängige Linienstärke (roadLineWidth) statt fester Werte
- overlayLineWidth() und roadLineWidth() analog WorldMapView ergänzt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-06 22:03:28 +02:00