How-to: Raumtemplate registrieren
Katalog und Ladeweg
Der aktive manuelle Katalog ist src/HolodeckArena.Game3D/Features/Dungeons/Rooms/Metadata/RoomTemplateCatalogV3.tres. Seine Resource-Klasse RoomTemplateCatalog.cs exportiert Array<PackedScene> Templates. DungeonRun3DScene.tscn weist diesen Katalog an DungeonRun3DController.TemplateCatalog zu. Es gibt kein automatisches Directory-Scanning.
Schritte
- Scene als
RoomTemplate3D-Root speichern und mit Raum erstellen validieren. - Im Godot Inspector den Katalog öffnen und PackedScene an
Templatesanhängen. Bei Textbearbeitung müsstenext_resource,load_stepsund Array gemeinsam geändert werden; Editor ist sicherer. TemplateIdeindeutig, stabil und snake_case halten. Catalog vergleicht ordinal/case-sensitive.- Category/Size/GameplayRole/LogicalWidth/LogicalHeight müssen exakt eine aktive V3-Anforderung erfüllen.
SelectionWeight > 0; höhere Werte erhöhen deterministisch die Auswahlchance. Null/negativ ist ungültig.- MinDepth/MaxDepth einschließend setzen. Tags sind gespeichert, aber derzeit kein Filter. AllowedThemes wird derzeit nicht in Candidate übertragen.
- Alle möglichen Door-Richtungen als Sockets anbieten. Selector akzeptiert Kandidaten, wenn nach einer 90°-Rotation jede erforderliche Weltrichtung unterstützt wird.
- Boss/Start/Exit werden über Category/Role gekennzeichnet, nicht mit separaten Bool-Flags. Pflichtmarker entsprechend setzen.
- Preview-F6 und Integration-F6 ausführen.
ValidateCatalog()prüft Duplicate IDs, Scene-Root, Templatevalidator und V3-Coverage.
Auswahlverhalten
Kandidaten werden nach TemplateId sortiert, jede kompatible Rotation ist ein gewichteter Kandidat. Der Seed kommt aus RunSeed/RoomId/Index/Purpose. Ein einziges Template pro Typ ist erlaubt und wird mehrfach instanziiert. Entfernen des letzten Templates einer Matrixposition macht den gesamten Katalog ungültig. Es gibt keinen Category-/Size-Fallback.
Typische Catalog-Fehler
- Empty PackedScene oder Root nicht
RoomTemplate3D. - Duplicate TemplateId trotz anderer Scene-Datei.
- Role-Schreibweise stimmt nicht exakt (
SmallRoom, nichtsmall_room). - Logical Maße entsprechen sichtbarer Geometrie, aber nicht der kanonischen Matrix.
- Template besitzt nur aktuelle benötigte Doors und ist für andere Graphorientierungen ungeeignet.
- Weight 0, Depth schließt jeden Request aus oder Pflichtmarker fehlt.
Tests
RoomTemplateSelectorTests.cs: Filter/Rotation/Seed/Weight. RoomDoorSocketTests.cs: Socketzustände. Katalog-Resource selbst benötigt aktuell manuelle Godot-Validierung; ein automatisierter Resource-Load-Test wäre sinnvoll.
Verwandt: Raumtemplates, Troubleshooting.