Engine-agnostic .NET library for procedurally generating reproducible navigation environments — multi-room floor plans, mazes, and other behavioral-research apparatuses — with deterministic output suitable for replication across studies.
This is the core library. Other repos in the OpenApparatus org depend on it:
- OpenApparatus/studio — cross-platform desktop app (Avalonia) for authoring and previewing floor plans
- OpenApparatus/unity — Unity package that consumes this library to spawn environments in scenes
🚧 Pre-release — under active early development. Public API is unstable until v0.1.
| Milestone | Description | Status |
|---|---|---|
| A0 | Repo scaffold + sentinel test | ✅ |
| A1 | Topology data model + grid+domino generator + spanning-tree passage assigner | ⏳ |
| A2 | Engine-agnostic mesh builder for a single rectangular cell | ⏳ |
| A3 | Doorway tunnel geometry through shared walls | ⏳ |
| A4 | Full floor-plan mesh assembler | ⏳ |
Three layers, one-way dependencies:
- Topology (
src/OpenApparatus.Core/Topology/) — pure data:FloorPlan,Cell,Adjacency,Passage,IFloorPlanGenerator. Pure C#, no engine assumptions. - Geometry (
src/OpenApparatus.Core/Geometry/) — turns topology into engine-agnosticMeshDataPOCOs. Studio and Unity packages convert these to their respective renderable types. - Math / utilities —
SeededRandom, vector helpers, etc.
Requires .NET 8 SDK or newer.
git clone https://github.com/OpenApparatus/core.git
cd core
dotnet testThe library multi-targets net8.0 and netstandard2.1 — the latter for Unity 2021.2+ compatibility.
Every generator and assigner takes a SeededRandom instance. Same seed + same parameters always produce the same FloorPlan. This is the central reproducibility guarantee — methods sections only need to record the seed and parameter values for a result to be reconstructable.
MIT — see LICENSE.