4.2 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: core/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) |
| Dach aus Einzelteilen (45°) | Dachschräge 2×2 m (2 m hoch), Dachecke außen (Grat), Dachecke innen (Kehle), Dachplateau, Dachstirn — massiv, rundum geschlossen; tiefe Kante/Ecke zeigt Richtung Vorschau, R dreht |
| Treppe | Treppe 4 × 2 m, 3 m hoch (15 Stufen) |
Fertige Pack-Objekte (Container, Hangar-Tore, Betonsperren) stehen NICHT im Bauen-Tab, sondern wie alle Objekte in der Objekt-Bibliothek unten.
Snap (core/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.
Rdreht 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.
- Geschoss fest: Bild↑/Bild↓ (oder Knöpfe im Tab) wählen ein festes Geschoss (Basis = tiefstes Teil in der Nähe, je 3 m). Der Mausstrahl trifft dann die Geschoss-Ebene statt Wand/Boden darunter — Decken und Böden lassen sich mitten im großen Raum setzen. Ganz unten = Automatik.
- Kein Z-Fighting: Wand-Außenseite steht 1 cm vor der Plattenkante.
- 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.