From e57a77d086995801318f454abee3de367723147d Mon Sep 17 00:00:00 2001 From: nathan Date: Mon, 18 May 2026 11:09:23 -0700 Subject: [PATCH] Document MVP shelter roof piece --- AGRARIAN_DEVELOPMENT_ROADMAP.md | 5 +++- Docs/TechnicalDesignDocument.md | 3 +++ Scripts/verify_shelter_roof_piece.py | 34 ++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 Scripts/verify_shelter_roof_piece.py diff --git a/AGRARIAN_DEVELOPMENT_ROADMAP.md b/AGRARIAN_DEVELOPMENT_ROADMAP.md index 8bd70d7..5664a95 100644 --- a/AGRARIAN_DEVELOPMENT_ROADMAP.md +++ b/AGRARIAN_DEVELOPMENT_ROADMAP.md @@ -619,7 +619,10 @@ Target deliverable: A small group can join a server, spawn into one biome, gathe the craftable `primitive_wall_panel` inventory construction part consumed by the primitive shelter recipe; separately placeable modular walls remain deferred to `0.2.E Permanent Structures`. -- [ ] Add roof piece if needed. +- [x] Add roof piece if needed. For the kit-based MVP style, the roof piece is + the craftable `primitive_roof_panel` inventory construction part consumed by + the primitive shelter recipe; separately placeable modular roofs remain + deferred to `0.2.E Permanent Structures`. - [ ] Add door/opening if needed. - [x] Add resource cost validation. - [x] Add construction interaction. diff --git a/Docs/TechnicalDesignDocument.md b/Docs/TechnicalDesignDocument.md index b59467e..f666c96 100644 --- a/Docs/TechnicalDesignDocument.md +++ b/Docs/TechnicalDesignDocument.md @@ -89,6 +89,9 @@ Early runtime systems should remain small and explicit: - The MVP wall piece is `primitive_wall_panel`, a craftable inventory construction part consumed by the primitive shelter recipe rather than an independently placed wall actor. +- The MVP roof piece is `primitive_roof_panel`, a craftable inventory + construction part consumed by the primitive shelter recipe rather than an + independently placed roof actor. - `UAgrarianBuildingPlacementComponent` owns the MVP placement preview. It traces from the player view, snaps to the configured grid, validates distance and collision, broadcasts Blueprint-readable preview state, and draws a diff --git a/Scripts/verify_shelter_roof_piece.py b/Scripts/verify_shelter_roof_piece.py new file mode 100644 index 0000000..519dbbd --- /dev/null +++ b/Scripts/verify_shelter_roof_piece.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +ROADMAP = ROOT / "AGRARIAN_DEVELOPMENT_ROADMAP.md" +TECHNICAL_DESIGN = ROOT / "Docs" / "TechnicalDesignDocument.md" +ITEMS = ROOT / "Scripts" / "setup_item_definitions.py" +RECIPES = ROOT / "Scripts" / "setup_recipe_definitions.py" +RECIPE_VERIFY = ROOT / "Scripts" / "verify_recipe_definitions.py" + + +def compact(path: Path) -> str: + return " ".join(path.read_text(encoding="utf-8").split()) + + +def require(path: Path, text: str) -> None: + data = compact(path) + if text not in data: + raise SystemExit(f"FAIL: {path.relative_to(ROOT)} missing required text: {text}") + + +def main() -> None: + require(ROADMAP, "[x] Add roof piece if needed.") + require(ROADMAP, "primitive_roof_panel") + require(TECHNICAL_DESIGN, "The MVP roof piece is `primitive_roof_panel`") + require(ITEMS, '"item_id": "primitive_roof_panel"') + require(RECIPES, '"recipe_id": "primitive_roof_panel"') + require(RECIPES, '("primitive_roof_panel", 2)') + require(RECIPE_VERIFY, '"recipe_id": "primitive_roof_panel"') + print("PASS: MVP shelter roof piece is defined as a craftable construction part.") + + +if __name__ == "__main__": + main()