diff --git a/AGRARIAN_DEVELOPMENT_ROADMAP.md b/AGRARIAN_DEVELOPMENT_ROADMAP.md index 71f444b..8bd70d7 100644 --- a/AGRARIAN_DEVELOPMENT_ROADMAP.md +++ b/AGRARIAN_DEVELOPMENT_ROADMAP.md @@ -615,7 +615,10 @@ Target deliverable: A small group can join a server, spawn into one biome, gathe footprint at the snapped placement location for MVP development builds. - [x] Add placement validation. - [x] Add basic shelter piece. -- [ ] Add wall piece if needed. +- [x] Add wall piece if needed. For the kit-based MVP style, the wall piece is + 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. - [ ] Add door/opening if needed. - [x] Add resource cost validation. diff --git a/Docs/TechnicalDesignDocument.md b/Docs/TechnicalDesignDocument.md index c2e4800..b59467e 100644 --- a/Docs/TechnicalDesignDocument.md +++ b/Docs/TechnicalDesignDocument.md @@ -86,6 +86,9 @@ Early runtime systems should remain small and explicit: as inventory parts and then combined into a single placeable primitive shelter actor. Fully modular wall-by-wall construction is deferred to permanent structures so the first survival loop remains reliable. +- 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. - `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_wall_piece.py b/Scripts/verify_shelter_wall_piece.py new file mode 100644 index 0000000..0ffc6c3 --- /dev/null +++ b/Scripts/verify_shelter_wall_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 wall piece if needed.") + require(ROADMAP, "primitive_wall_panel") + require(TECHNICAL_DESIGN, "The MVP wall piece is `primitive_wall_panel`") + require(ITEMS, '"item_id": "primitive_wall_panel"') + require(RECIPES, '"recipe_id": "primitive_wall_panel"') + require(RECIPES, '("primitive_wall_panel", 4)') + require(RECIPE_VERIFY, '"recipe_id": "primitive_wall_panel"') + print("PASS: MVP shelter wall piece is defined as a craftable construction part.") + + +if __name__ == "__main__": + main()