scopedvr-map-editor/docs/bauen.md
slyphax 961e8c6ff6 Bauen: begehbare Vorlagen (Kaserne, Wachhaus, Lagerraum) per Klick, ein Undo-Schritt
Pack-Kaserne/-Checkpoint/-Container sind innen geschlossen; die Vorlagen sind
begehbare Gebäude aus bau_*-Teilen. Test beweist per Strahl durch die echte Kollision.

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

4.6 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 (klein 2 m) Giebelwand, Satteldach, Pyramidendach
Dach & Giebel (mittel 4 m) Giebelwand 4 m, Satteldach 4×4, Pyramidendach 4×4 (Spitze 2 m)
Dach & Giebel (groß 6 m) Giebelwand 6 m, Satteldach 6×6, Pyramidendach 6×6 (Spitze 3 m)
Treppe Treppe 4 × 2 m, 3 m hoch (15 Stufen)

Begehbare Vorlagen

Die Pack-Gebäude Kaserne, Checkpoint und Container sind innen geschlossen (einseitige Wände, Türen nur aufgemalt) — Spieler laufen dagegen, nicht hinein. Statt die Pack-Modelle zu verbiegen, setzt der Bauen-Tab unter „Begehbare Vorlagen“ per Klick ein fertiges Gebäude aus Bauteilen in die Bildmitte (src/editor/bau_vorlagen.gd, ein Undo-Schritt, danach als Gruppe markiert):

Vorlage Größe Ausstattung
Wachhaus (Checkpoint) 4 × 4 m Tür vorn, Fenster seitlich, Flachdach
Kaserne 6 × 12 m Tür vorn + hinten, Fenster an den Längsseiten, Flachdach
Lagerraum (Container-Größe) 4 × 6 m Tür vorn, Schießscharten seitlich

Alles sind normale bau_*-Objekte (Trimesh, Türen/Fenster echte Löcher), Quest-tauglich: kein Innenausbau, ein Draw-Call je Teil. tests/test_bau_vorlagen.gd beweist per Strahl durch die echte Kollision: Tür frei (0,5–2,1 m), Wand massiv, Boden und Dach da, ≥ 2,4 m Stehhöhe, ein Undo nimmt das Gebäude zurück.

Fertige Pack-Objekte (Container, Hangar-Tore, Betonsperren) stehen NICHT im Bauen-Tab, sondern wie alle Objekte in der Objekt-Bibliothek unten.

Snap (src/editor/build_snap.gd)

  • XZ: Wände auf die nächste Zellkante — und zwar GANZ in die Zelle, in der die Maus ist (Außenseite bündig mit der Kante, kein Überhang, Ecken schließen ohne Lücke). Klick auf eine vorhandene Wand (Seite oder Oberkante) übernimmt deren Lage exakt (ersetzen bzw. stapeln). Böden/Dächer/Fundamente in die Zellmitte, große Dächer (4 m / 6 m) je nach Zellzahl auf Zellecke bzw. Zellmitte, Pfeiler auf die Zellecke, Treppen auf eine 4 × 2-m-Fläche. R dreht die Wand um. 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. Wände und Pfeiler zählen von der Unterkante einer Decke/eines Fundaments, die Decke selbst liegt auf der Wandoberkante: jedes Geschoss liegt auf Vielfachen von 3 m, mit oder ohne Decke darunter stehen die oberen Wände gleich hoch.
  • 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.