#pragma once #include #include #include #include "Blueprint.h" #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); // Captures a blueprint from a selection of building / construction-site ids, keeping // only player-placeable buildings and recording each one's type, rotation, offset // from the selection's bounding-box center, and configuration. Operational buildings // and construction sites are treated identically (REQ-UI-BLUEPRINT-CREATE, // REQ-UI-BLUEPRINT-STORAGE). The returned blueprint is unnamed. Blueprint captureBlueprintFromSelection(const Simulation& sim, const std::vector& selectedIds); // True if any selected id refers to a player-placeable building or construction site // (the enable condition for the Create Blueprint button, REQ-UI-BLUEPRINT-CREATE). bool selectionHasPlaceableBuilding(const Simulation& sim, const std::vector& selectedIds);