85 lines
3.0 KiB
Python
85 lines
3.0 KiB
Python
from pathlib import Path
|
|
import json
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
GAME_STATE_H = ROOT / "Source" / "AgrarianGame" / "AgrarianGameState.h"
|
|
GAME_STATE_CPP = ROOT / "Source" / "AgrarianGame" / "AgrarianGameState.cpp"
|
|
GENERATOR = ROOT / "Scripts" / "generate_tile_solar_metadata.py"
|
|
SOLAR_METADATA = ROOT / "Data" / "Tiles" / "tile_solar_metadata.json"
|
|
SCHEMA = ROOT / "Data" / "Tiles" / "tile_registry.schema.json"
|
|
SQL = ROOT / "Data" / "Tiles" / "tile_registry.sql"
|
|
ROADMAP = ROOT / "AGRARIAN_DEVELOPMENT_ROADMAP.md"
|
|
|
|
|
|
EXPECTED = {
|
|
GAME_STATE_H: [
|
|
"ActiveSolarTileId",
|
|
"ActiveTileLatitude",
|
|
"ActiveTileLongitude",
|
|
"ActiveTileTimeZoneId",
|
|
"ActiveTileUtcOffsetHours",
|
|
"ActiveDayOfYear",
|
|
"SunriseHourLocal",
|
|
"SunsetHourLocal",
|
|
"SolarNoonHourLocal",
|
|
"DayLengthHours",
|
|
"ConfigureActiveSolarTile",
|
|
],
|
|
GAME_STATE_CPP: [
|
|
"UpdateSolarTimes();",
|
|
"DOREPLIFETIME(AAgrarianGameState, SunriseHourLocal);",
|
|
"return WorldHours < SunriseHourLocal || WorldHours > SunsetHourLocal;",
|
|
"bool AAgrarianGameState::ConfigureActiveSolarTile",
|
|
"void AAgrarianGameState::UpdateSolarTimes()",
|
|
"NOAA",
|
|
"EquationOfTimeMinutes",
|
|
"SolarDeclinationRadians",
|
|
],
|
|
GENERATOR: [
|
|
"SOLAR_READY_STATUSES",
|
|
"TIMEZONE_OVERRIDES",
|
|
"Only tiles with real source status",
|
|
"gz_us_ca_pacifica_utm10n_e544_n4160",
|
|
],
|
|
SCHEMA: ["solar_metadata", "standard_utc_offset_hours", "daylight_utc_offset_hours"],
|
|
SQL: ["terrain_tile_solar_metadata", "time_zone_id", "solar_model"],
|
|
ROADMAP: ["Add real local time-zone and sunrise/sunset lookup for Ground Zero"],
|
|
}
|
|
|
|
|
|
def assert_contains():
|
|
missing = []
|
|
for path, snippets in EXPECTED.items():
|
|
text = path.read_text(encoding="utf-8")
|
|
for snippet in snippets:
|
|
if snippet not in text:
|
|
missing.append(f"{path.relative_to(ROOT)}: {snippet}")
|
|
if missing:
|
|
raise RuntimeError("Tile solar time verification failed: " + "; ".join(missing))
|
|
|
|
|
|
def assert_solar_metadata():
|
|
data = json.loads(SOLAR_METADATA.read_text(encoding="utf-8"))
|
|
tiles = data.get("tiles", [])
|
|
if len(tiles) != 1:
|
|
raise RuntimeError(f"Expected exactly one generated solar tile, got {len(tiles)}")
|
|
tile = tiles[0]
|
|
if tile.get("tile_id") != "gz_us_ca_pacifica_utm10n_e544_n4160":
|
|
raise RuntimeError(f"Unexpected solar tile id: {tile.get('tile_id')}")
|
|
if tile.get("time_zone_id") != "America/Los_Angeles":
|
|
raise RuntimeError("Ground Zero timezone metadata is missing or incorrect")
|
|
june = tile.get("sample_solar_hours", {}).get("june_solstice", {})
|
|
if not (5.0 <= june.get("sunrise_hour", -1) <= 6.5 and 20.0 <= june.get("sunset_hour", -1) <= 21.0):
|
|
raise RuntimeError(f"Ground Zero June solar sample is outside expected range: {june}")
|
|
|
|
|
|
def main():
|
|
assert_contains()
|
|
assert_solar_metadata()
|
|
print("Agrarian tile solar time verification complete.")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|