#pragma once #include #include #include #include "BuildingId.h" #include "BuildingType.h" #include "ItemType.h" #include "ShipLayout.h" class Simulation; // The user-configurable settings of a single building or construction site: the // selected recipe / ship schematic, the shipyard module layout, and (for // splitters) the two output filters. Shared by the copy-settings gesture // (REQ-BLD-COPY-CONFIG) and blueprint capture (REQ-UI-BLUEPRINT-STORAGE). struct BuildingConfig { BuildingType type = BuildingType::Miner; // Selected recipe (Miner / Assembler) or ship schematic id (Shipyard); unset // when nothing is selected. std::optional recipeId; // Shipyard module layout (REQ-MOD-LAYOUT). std::optional shipLayout; // Splitter output filters (empty = accept all). isSplitter distinguishes an // empty-filter splitter (a valid accept-all configuration) from a building // type that has no splitter filters at all. bool isSplitter = false; std::vector splitterFilterA; std::vector splitterFilterB; }; // Reads the current configuration of the building or construction site identified // by id, handling operational buildings and sites alike. Returns std::nullopt if // no such building or site exists. std::optional readBuildingConfig(const Simulation& sim, BuildingId id);