RaidBuilder ist ein Editor für voxel‑basierte Dungeons. Er verbindet:
- VoxelEngine (Vulkan Renderer)
- SMLUI (ImGui‑Layout aus SML)
- SMLParser (SML‑Dateien für UI, Tiles und Blöcke)
Der Fokus liegt auf einem schnellen, direkten Workflow: UI ist deklarativ in SML beschrieben, der Viewport ist Vulkan‑basiert und reagiert direkt auf Input.
Voraussetzungen:
- Vulkan SDK
- GLFW3 (pkg-config)
glslc(Shader Compiler)
Makefile:
makeCMake (nur das Executable):
cmake -S . -B build
cmake --build build./RaidBuilderModi:
- Edit‑Mode: UI sichtbar, Blöcke setzen/auswählen/rotieren.
- Play‑Mode: UI ausgeblendet, Kamera‑Steuerung aktiv.
Kamera:
- W/A/S/D: Bewegen (vor/zurück/links/rechts)
- Maus: Blickrichtung (im Play‑Mode)
Blöcke platzieren (wie Malprogramm):
- Rechtsklick: Block platzieren (mit aktivem Tile)
- G: Ghost‑Preview ein/aus
Blöcke rotieren:
- Left/Right: Yaw um Welt‑Y (90°)
- Up/Down: Roll kamera‑relativ (Top kippt von dir weg/zu dir hin)
Hinweis: Symmetrische Tiles werden nicht rotiert.
Tiles definieren, wie Blöcke aussehen und gerendert werden.
Wichtige Dateien:
tiles/Core/tiles.sml– zentrale Tile‑Listedungeon.sml– Dungeon‑Layout + optional Tile‑Overrides
Ein Tile kann u. a. definieren:
key(ein Zeichen, z. B.S)nametexturemodel(GLB)material(z. B.textureodervertex)
Beispiel (aus tiles/Core/tiles.sml):
Tile {
key: "S"
name: "Stone"
texture: "res://assets/textures/raid_stone.png"
model: "../build/blocks_cache/block.glb"
material: texture
}Der Workflow ist aktuell „Tile definieren + Modell bereitstellen“. Das ist in diesem Vulkan‑Projekt teilweise vorhanden, aber der komplette End‑User‑Flow (wie im Godot‑Projekt) ist noch nicht vollständig implementiert.
Pragmatischer Weg aktuell:
- Block‑SML in
assets/blocks/anlegen (siehe „Block‑Baking“ unten) - Block backen →
build/blocks_cache/*.glb - Tile in
tiles/Core/tiles.smloderdungeon.smleintragen undmodelauf die GLB zeigen lassen
Blöcke werden aus SML zu GLB konvertiert.
Pfad:
- Input:
assets/blocks/*.sml - Output:
build/blocks_cache/*.glb
Der Baking‑Step läuft über das Tool BlockBake (C++), das beim Build angestoßen wird. CMake‑Target: BakeBlocks
Kurzfassung:
assets/blocks/block.sml→build/blocks_cache/block.glbassets/blocks/stairs.sml→build/blocks_cache/stairs.glbassets/blocks/vines.sml→build/blocks_cache/vines.glb
Wenn du neue Block‑SMLs anlegst:
- Datei in
assets/blocks/anlegen - Eintrag im Bake‑Step (CMake) ergänzen, falls nötig
- Tile mit
model: "../build/blocks_cache/<name>.glb"anlegen
Dungeons sind in dungeon.sml definiert.
Das Format beschreibt:
- Tiles (optional überschreiben)
- Layout / Grid
- Rotation/Placement (falls vorhanden)
Die UI wird in SML deklariert (UI.sml). Daraus generiert SMLUI ImGui‑Widgets.
Vorteile:
- UI‑Layout ist deklarativ und schnell änderbar
- Kein „ImGui‑Code‑Wald“ im C++
- Designer/Devs können UI unabhängig vom Rendercode anpassen
Kurz:
UI.smlbeschreibt Panels, Docking, Toolbar etc.SMLUIparst und rendert das Layout über ImGui
src/main.cpp– App‑Entry, Input, ImGui, Rendering, Editor‑LogicUI.sml– UI‑Layout in SMLshaders/– GLSL Shader (viaglslc→.spv)assets/blocks/– Block‑SMLs (werden gebacken)build/blocks_cache/– gebackene GLBstiles/Core/tiles.sml– Tile‑Definitionendungeon.sml– Test‑Dungeon
Aktive Vulkan‑Portierung. Rendering, UI und SML‑Parsing laufen stabil. Features und Tooling (z. B. kompletter User‑Tile‑Flow) sind im Ausbau.