55 lines
2.3 KiB
C++
55 lines
2.3 KiB
C++
#pragma once
|
|
|
|
#include <optional>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#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<std::string> recipeId;
|
|
|
|
// Shipyard module layout (REQ-MOD-LAYOUT).
|
|
std::optional<ShipLayoutConfig> 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<ItemType> splitterFilterA;
|
|
std::vector<ItemType> 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<BuildingConfig> 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<BuildingId>& 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<BuildingId>& selectedIds);
|