121 lines
3.9 KiB
Python
121 lines
3.9 KiB
Python
#!/usr/bin/env python3
|
|
"""Verify 0.1.O readable survival-object proxy coverage."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
|
|
|
|
REQUIRED_SNIPPETS = {
|
|
"Source/AgrarianGame/AgrarianCampfire.h": [
|
|
"StoneRingProxy",
|
|
"LogProxyA",
|
|
"LogProxyB",
|
|
"LogProxyC",
|
|
"EmberProxy",
|
|
],
|
|
"Source/AgrarianGame/AgrarianCampfire.cpp": [
|
|
"SM_AGR_Placeholder_Cylinder",
|
|
"M_AGR_GZ_Wood_Resource",
|
|
"M_AGR_GZ_Stone_Sandstone",
|
|
"ConfigureCampfireProxyComponent",
|
|
"LogProxyA->SetRelativeRotation",
|
|
],
|
|
"Source/AgrarianGame/AgrarianShelterActor.h": [
|
|
"FloorProxy",
|
|
"BackWallProxy",
|
|
"LeftRoofProxy",
|
|
"RightRoofProxy",
|
|
"FrameProxyA",
|
|
"FrameProxyB",
|
|
],
|
|
"Source/AgrarianGame/AgrarianShelterActor.cpp": [
|
|
"SM_AGR_Placeholder_ChamferCube",
|
|
"M_AGR_GZ_Fiber_Resource",
|
|
"LeftRoofProxy->SetRelativeRotation",
|
|
"ConfigureShelterProxyComponent",
|
|
],
|
|
"Source/AgrarianGame/AgrarianWaterSource.h": [
|
|
"WaterSurfaceProxy",
|
|
"StoneBankProxy",
|
|
"CollectMarkerProxy",
|
|
],
|
|
"Source/AgrarianGame/AgrarianWaterSource.cpp": [
|
|
"SM_AGR_Placeholder_Plane",
|
|
"M_AGR_GZ_FreshWater",
|
|
"WaterSurfaceProxy->SetCollisionEnabled(ECollisionEnabled::NoCollision)",
|
|
"StoneBankProxy->SetCollisionEnabled(ECollisionEnabled::NoCollision)",
|
|
],
|
|
"Source/AgrarianGame/AgrarianItemPickup.h": [
|
|
"BundleProxy",
|
|
"StrapProxy",
|
|
"ItemMarkerProxy",
|
|
],
|
|
"Source/AgrarianGame/AgrarianItemPickup.cpp": [
|
|
"BundleProxy->SetRelativeRotation",
|
|
"StrapProxy->SetCollisionEnabled(ECollisionEnabled::NoCollision)",
|
|
"ItemMarkerProxy->SetCollisionEnabled(ECollisionEnabled::NoCollision)",
|
|
],
|
|
"Source/AgrarianGame/AgrarianResourceNode.h": [
|
|
"ResourceClusterProxy",
|
|
"HarvestableMarkerProxy",
|
|
],
|
|
"Source/AgrarianGame/AgrarianResourceNode.cpp": [
|
|
"ResourceClusterProxy->SetRelativeRotation",
|
|
"HarvestableMarkerProxy->SetCollisionEnabled(ECollisionEnabled::NoCollision)",
|
|
"Mesh->SetVisibility(RemainingHarvests > 0, true)",
|
|
],
|
|
"Source/AgrarianGame/AgrarianWildlifeBase.h": [
|
|
"WildlifeBodyProxy",
|
|
"WildlifeHeadProxy",
|
|
"WildlifeEarProxyA",
|
|
"WildlifeEarProxyB",
|
|
"WildlifeTailProxy",
|
|
],
|
|
"Source/AgrarianGame/AgrarianWildlifeBase.cpp": [
|
|
"WildlifeBodyProxy->SetupAttachment(RootComponent)",
|
|
"WildlifeHeadProxy->SetupAttachment(WildlifeBodyProxy)",
|
|
"WildlifeTailProxy->SetRelativeRotation",
|
|
"ConfigureWildlifeProxyComponent",
|
|
],
|
|
"Docs/CharactersAndObjects/MvpReadableSurvivalObjectProxies.md": [
|
|
"MVP Readable Survival Object Proxies",
|
|
"no collision",
|
|
"Final realistic art should replace these proxies",
|
|
],
|
|
"AGRARIAN_DEVELOPMENT_ROADMAP.md": [
|
|
"- [x] Replace box/sphere/cylinder survival objects with readable MVP meshes",
|
|
"Added composed native proxy visuals for campfires, primitive shelters, pickups, resource nodes, water sources, and wildlife",
|
|
],
|
|
}
|
|
|
|
|
|
def main() -> int:
|
|
missing: list[str] = []
|
|
for relative_path, snippets in REQUIRED_SNIPPETS.items():
|
|
path = ROOT / relative_path
|
|
if not path.exists():
|
|
missing.append(f"{relative_path}: file missing")
|
|
continue
|
|
|
|
text = path.read_text(encoding="utf-8")
|
|
for snippet in snippets:
|
|
if snippet not in text:
|
|
missing.append(f"{relative_path}: missing {snippet!r}")
|
|
|
|
if missing:
|
|
print("Readable survival-object proxy verification failed:")
|
|
for item in missing:
|
|
print(f"- {item}")
|
|
return 1
|
|
|
|
print("Readable survival-object proxy verification passed.")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|