Namespace GrindFest.Generation
Classes
- AnchorSlot
A fixed, designer-authored placement slot inside the settlement (throne tent, forge, central fire pit, shrine). Picks one prefab from its Pool at generation time and instantiates it at LocalXZ with RotationDeg.
- CityBlueprints
Registry of named medieval-city blueprints. The Ink prefab supplies a blueprint name + seed; MedievalCityGenerator resolves it here and runs the pipeline. Add new factories below as more city types are designed.
- MedievalCityGenerator
Procedural church assembly. Split into its own partial because the church is a one-off landmark with its own geometry rules (long-nave silhouette, centre-front bell tower with pointed steeple, embedded crypt dungeon entrance) that don't belong in the generic house/wall code in the main partial.
SILHOUETTE GOAL: small parish chapel with a clearly central main door, a tall front bell tower projecting up through the roof line, and a TRUE pointed conical steeple (from the Synty Castle round roof-cap kit, not a scaled tile cap) on top. Stained-glass strip alternating with plain wall on the side faces. The nave roof is flattened (Y-scaled) so the steeple — not the roof — dominates the silhouette.
MATERIALS: the upper storey uses SyntyPFK's HouseWall_05/06 (white plaster + timber) to stay consistent with the surrounding village, sitting on a STONE foundation course (HouseBaseWall_01 + corners). This matches Synty's own optimized church preset exactly: stone skirt + plaster/timber walls + bell tower.
DIMENSIONS: 5 m wide × 10 m deep nave (2 × 4 modules on the 2.5 m HouseWall grid) so the stock BuildHouseRoof works at NATIVE scale — every Synty roof piece sits exactly where its art was authored, no stretching or hidden gaps. The bell tower sits on the SW front corner (asymmetric, like Synty's preset).
- MedievalCitySpec
POCO spec for a rectangular walled medieval city. Consumed by MedievalCityGenerator; produced by CityBlueprints.
Layout: rectangular wall (width × depth), corner towers, evenly-spaced gates on the long edges. Interior is divided by a street network running gate-to-gate; remaining space is BSP-subdivided into plots and filled with modular houses, with reserved anchor slots for landmarks (market, fountain, statue, forge, etc).
- OrganicSettlementGenerator
Runtime generator for organic palisade-ringed settlements (goblin war camps, bandit hideouts, etc). Mirrors
DungeonGenerator's lifecycle: hero enters ProximityGenerationTrigger → Generate() runs once → fires OnGenerated.Spawns all prefabs as children of this GameObject, grouped under named sub-objects (Palisade / Anchors / Fillers / Decor / Lights). The actual spec is looked up from SettlementBlueprints by name — the Ink prefab just sets BlueprintName + Seed.
- OrganicSettlementSpec
POCO describing a single instance of a procedural settlement (camp/village). Built by SettlementBlueprints, consumed by OrganicSettlementGenerator at runtime.
All positions in this spec are LOCAL XZ relative to the generator GameObject — the world placement of the settlement is the generator's transform.position (set by InkWorldGenerator when it instantiates the area prefab).
- SettlementBlueprints
Static registry of settlement blueprints. Each blueprint is a method that takes a seed and returns a fully-configured OrganicSettlementSpec.
Code-as-config (consistent with
MapMagicGraphBuilder): blueprints are C# methods, not ScriptableObjects. Refactoring is an IDE rename; conditional config is a normalif; git diffs are real code diffs.
Enums
- MedievalCitySpec.SlotKind
Dispatch tag for MedievalCitySpec.AnchorSlot. Preset just instantiates
PrefabAddress; other kinds invoke procedural builders in MedievalCityGenerator.