49 lines
1.5 KiB
C++
49 lines
1.5 KiB
C++
#pragma once
|
|
|
|
#include <optional>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#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<std::string> surfaceMask;
|
|
|
|
// Output-buffer holding size for buildings without a recipe-driven buffer.
|
|
// Only the Salvage Bay sets this (REQ-BLD-SALVAGE-BAY).
|
|
std::optional<int> outputBufferCapacity;
|
|
|
|
// Optional hover-tooltip text for the build button (REQ-UI-BUILD-TOOLTIP).
|
|
std::optional<std::string> tooltip;
|
|
};
|
|
|
|
struct BuildingsConfig
|
|
{
|
|
std::vector<BuildingDef> 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;
|
|
}
|
|
};
|