engine/map.rs + render/brush.rs raus, Welt kommt komplett aus .glb.
Spawn via Empty mit role=spawn statt info_player_start; testscene.glb
(Boden, Wände, Spawn) ersetzt test.map.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
col_*-Namenspräfix raus: Rollen steuern nur noch Custom Properties
(collide=1 sichtbar+Collider, "proxy" unsichtbar, signal wie gehabt).
Collider sind die konvexe Hülle der Vertices — konkave Meshes erlaubt.
glb ist der einzige Modell-Pfad; suzanne.obj → suzanne.glb.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Blender wird das Haupt-3D-Tool: zwei Loader (engine/gltf.rs für .glb als
Hauptpfad, engine/obj.rs aus irl3d eingebettet) liefern ein neutrales
engine/model.rs::Model. Loader sind reine Dekoder; das Frontend zieht sie
und schiebt das Ergebnis per Session::load_props in den State, der
Renderer baut sein Mesh (render/props.rs, verschmolzen mit der
Brush-Welt über eine geteilte Texturliste).
glTF trägt Blender-Custom-Properties (node.extras → Object::props) und
Empties (Nodes ohne Mesh) als Entity-Kanal. Namenskonvention: `col_*` =
unsichtbarer Collision-Proxy, aus dem collision::add_model konvexe
Ebenen-Sets baut (konvex-only, daher kein Default-Collider auf
Sichtgeometrie).
Trigger (engine/trigger.rs) hängen an der Custom Property `signal`:
mit Collider = Point-and-Click-Ziel (Session::pick raycastet aus der
Bildmitte, Treffer läuft durch den `use <name>`-Trichter), ohne Collider
= unsichtbare Betretens-Zone, die einmal je Eintritt feuert. Gefeuert
wird nur über Session::exec — der Eingabe-Trichter bleibt der einzige
Weg in den State.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
sync_to_kv übernimmt jetzt alle im Skript deklarierten VARs in den
KV-Store (Auto-Import per Quelltext-Scan, da bladeink keine Enumeration
bietet); `_`-Prefix bleibt skript-lokal. So wandern Werte wie
snaks/favor_nails automatisch in per start_ink verkettete Folgeskripte.
cont()/choose() melden Ink-Runtime-Fehler nach stderr und beenden den
Dialog, statt zu panicken — ein auslaufender Skript-Pfad darf das
laufende Spiel nicht crashen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>