feat(simulation): quarter footprint subdivision + block-tag assembly (#957)
Build the per-quarter building geometry + tags (absorbs #976's footprint subdivision into #957 — one coherent walkable-quarter deliverable): - subdivide_block_footprints: deterministic BSP of each 128x128-tile block into variable axis-aligned building plots (D-229 fast-path). Lot size + setback scale with D-220 density (Frontier -> few big lots/wide gaps; Compressed -> many small lots/shared walls); the D-233 BulkClass roofed-coverage fraction decides building-vs-interstitial. morphology is wired in for the D-234 waterfront/street layer (needs Layer-1 terrain water-adjacency threaded up). - assign_all_block_tags: subdivides + tags every non-reserved block's footprints via the #957 derivation helpers, populating QuarterWorldState.block_tags in the GenerateSkeleton plan-phase (D-230). Reserved blocks get no standard fill. - Remove the write-only BlockSkeleton.era String stub - construction era now lives per-footprint on BuildingPropertyTag.era (typed ConstructionEra). All integer-deterministic (D-010). 5 new tests. Doors stay Vec::new() (#979). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1052,7 +1052,8 @@ pub struct BlockSkeleton {
|
||||
pub reservation: Option<ReservationId>,
|
||||
pub chunk_layout: ChunkLayout,
|
||||
pub hosted_sites: Vec<SocialSiteId>,
|
||||
pub era: Era,
|
||||
// Per-block `era: Era` (String stub) removed in #957 — construction era now
|
||||
// lives per-footprint on `BuildingPropertyTag.era` (typed `ConstructionEra`).
|
||||
pub era_modifications: Vec<EraModification>,
|
||||
pub era_cause: Option<EraCause>,
|
||||
/// Build density percentage (0 = open/empty, 100 = fully built-up).
|
||||
|
||||
Reference in New Issue
Block a user