- 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>
2.9 KiB
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,
Rdreht 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.