scopedvr-map-editor/docs/bauen.md
slyphax a76c3ecae7 Bauen-Modus neu: Bauteile als normale Objekte (bau_*), Snap an Kante/Zelle/Ebene, Gebäude = Gruppe
- BauKatalog: 12 Teile (Fundament, Boden, Wände mit Tür/Fenster/Scharte, Brüstung, Pfeiler, Giebel, Dächer, Treppe) auf Basis der CC0-Geometrie des Modular Builder 0.2.0, Wandhöhe 3 m
- BuildSnap: Wände auf Zellkanten, Böden in Zellmitte, Höhe aus Ebenen statt Klickhöhe, Ersetzen (Tür in Wand)
- Gebäude kopieren/auswählen/löschen im Bauen-Tab, Kopien bekommen eigene Gruppe
- Kollision serverkonsistent über Trimesh-Dateien (Türen/Fenster echte Löcher), tools/gen_bauteile.gd erzeugt GLB, Kollision, Registry-Fragment
- Alte gebaeude-Sektion wird beim Laden migriert, altes Bauen-Werkzeug entfernt, Resize behält Gruppennamen
- Tests: test_bauen (258 Checks), Playtest läuft Treppe/Tür

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 16:30:15 +01:00

2.9 KiB
Raw Blame History

Bauen — eigene Häuser aus Modulteilen

Stand 25.10.2026 (Umbau). Vorlage: Modular Builder 0.2.0 von Michel Savadim, Godot-Erweiterung, Lizenz CC0 1.0 (Code, Icons, Doku — siehe addons/modular_builder/LICENSE). Die Demo-Szene/Demo-Texturen der Vorlage sind nicht CC0 und liegen bewusst nicht im Repo (ADDON_LIZENZ.txt).

Prinzip

Ein Bauteil ist ein ganz normales Bibliotheks-Objekt (bau_*, Kategorie „bauteile“). Gesetzte Teile stehen in objects, ein Gebäude ist eine Gruppe (group + group_names). Dadurch gelten ohne Sonderfälle:

  • Undo/Redo, Auswahl, Verschieben, Drehen, Duplizieren, Löschen, Symmetrie
  • Speichern in der .svmap (kein eigener Block mehr, Server-Validierung V1–V17)
  • Kollision serverkonsistent: jedes Teil hat eine Trimesh-Datei (library/kollisions/bau_*.json) — Türen, Fenster, Schießscharten sind echte Löcher, die Treppe ist eine Stufenfläche (Stufen 20 cm). Editor-Playtest, Client und Server lesen dieselbe Datei.
  • Poly-Budget zählt wie bei jedem Objekt (poly = Dreiecke des Teils).

Teile (Katalog: src/editor/bau_katalog.gd)

Gruppe Teile
Fundament & Boden Fundament, Boden/Decke (2 × 2 m, 20 cm)
Wände (2 m breit, 3 m hoch) Wand, Wand mit Tür (1,2 × 2,2 m), Wand mit Fenster, Wand mit Schießscharte, Brüstung (1,1 m), Eckpfeiler
Dach & Giebel Giebelwand, Satteldach, Pyramidendach
Treppe Treppe 4 × 2 m, 3 m hoch (15 Stufen)

Dazu im Tab „Pack-Module“: Container, Hangar-Tore, Betonsperren aus dem Military-Desert-Pack (normale Objekte).

Snap (src/editor/build_snap.gd)

  • XZ: Wände auf die nächste Zellkante (Drehung ergibt sich aus der Kante, R dreht die Wand um), Böden/Dächer/Fundamente in die Zellmitte, Pfeiler auf die Zellecke, Treppen auf eine 4 × 2-m-Fläche. Zellen sind 2 × 2 m, global ab (0, 0).
  • Y: nie die Klickhöhe, sondern eine Ebene — Gelände (höchster Punkt unter der Grundfläche) oder Oberkante eines tragenden Teils darunter. Klick auf die Wandoberkante stapelt das nächste Geschoss.
  • Ersetzen: gleiche Art auf demselben Platz wird ersetzt (Tür in vorhandene Wand). Dasselbe Teil nochmal wird mit Erklärung abgelehnt.

Dateien erzeugen

Meshes, GLBs, Kollision und Registry-Fragment kommen aus dem Katalog:

godot --headless --path . --script res://tools/gen_bauteile.gd -- \
    --client ../scopedvr-client --server ../scopedvr-match-server
(cd ../scopedvr-match-server && python3 tools/merge_object_library.py)

Danach library/objects.json in Client und Editor angleichen (tools/sync_objects.sh). tests/test_bauen.gd prüft, dass die Registry zum Katalog passt.

Alte Maps

Die frühere Sektion gebaeude (Bauen-Modus vom 20.10.) wird beim Öffnen in bau_*-Objekte einer Gruppe übernommen (BauOps.migriere_gebaeude). Wandhöhe ist jetzt 3 m statt 2 m — alte Häuser bitte kurz prüfen und neu speichern.