#pragma once #include #include #include #include "BuildingType.h" // A single entry from buildings.toml [[building]]. struct BuildingDef { std::string id; // Raw id string from TOML, e.g. "miner". BuildingType type; // Parsed from id at load time. int cost; // REQ-BLD-COST bool playerPlaceable; // Shown in the build menu if true. double constructionTimeSeconds; // REQ-BLD-QUEUE // Rows of the surface_mask (REQ-BLD requirements, "Surface Mask Format"). // Stored as raw strings here; parsing into per-cell tiles + output ports // happens when buildings are placed, not at load time. std::vector surfaceMask; // Output-buffer holding size for buildings without a recipe-driven buffer. // Only the Salvage Bay sets this (REQ-BLD-SALVAGE-BAY). std::optional outputBufferCapacity; // Optional hover-tooltip text for the build button (REQ-UI-BUILD-TOOLTIP). std::optional tooltip; }; struct BuildingsConfig { std::vector buildings; // Returns the definition for the given building type, or nullptr if the // type has no entry in buildings.toml. const BuildingDef* findBuildingDef(BuildingType type) const { for (const BuildingDef& def : buildings) { if (def.type == type) { return &def; } } return nullptr; } };