Show total building block cost in multi-selection panel (relevant for temporary blueprint)
This commit is contained in:
@@ -157,14 +157,8 @@ Blueprint BlueprintPanel::createBlueprintFromSelection() const
|
||||
{
|
||||
const Building* b = m_sim->buildings().findBuilding(id);
|
||||
if (!b) { continue; }
|
||||
const bool placeable = [&]() {
|
||||
for (const BuildingDef& def : m_config->buildings.buildings)
|
||||
{
|
||||
if (def.type == b->type) { return def.playerPlaceable; }
|
||||
}
|
||||
return false;
|
||||
}();
|
||||
if (placeable) { entries.push_back({ b }); }
|
||||
const BuildingDef* def = m_config->buildings.findBuildingDef(b->type);
|
||||
if (def && def->playerPlaceable) { entries.push_back({ b }); }
|
||||
}
|
||||
|
||||
if (entries.empty()) { return Blueprint{}; }
|
||||
@@ -213,14 +207,8 @@ int BlueprintPanel::computeBlueprintCost(const Blueprint& bp) const
|
||||
int total = 0;
|
||||
for (const BlueprintBuilding& bb : bp.buildings)
|
||||
{
|
||||
for (const BuildingDef& def : m_config->buildings.buildings)
|
||||
{
|
||||
if (def.type == bb.type)
|
||||
{
|
||||
total += def.cost;
|
||||
break;
|
||||
}
|
||||
}
|
||||
const BuildingDef* def = m_config->buildings.findBuildingDef(bb.type);
|
||||
if (def) { total += def->cost; }
|
||||
}
|
||||
return total;
|
||||
}
|
||||
|
||||
@@ -694,6 +694,7 @@ void SelectedBuildingPanel::buildMulti(const std::vector<BuildingId>& ids)
|
||||
}
|
||||
|
||||
bool hasBelt = false;
|
||||
int totalCost = 0;
|
||||
QString text;
|
||||
for (const std::pair<const BuildingType, int>& entry : counts)
|
||||
{
|
||||
@@ -703,7 +704,15 @@ void SelectedBuildingPanel::buildMulti(const std::vector<BuildingId>& ids)
|
||||
{
|
||||
hasBelt = true;
|
||||
}
|
||||
// Total placement cost counts only player-placeable buildings; the HQ
|
||||
// and defence stations are excluded (REQ-UI-MULTI-SELECTION).
|
||||
const BuildingDef* def = m_config->buildings.findBuildingDef(entry.first);
|
||||
if (def && def->playerPlaceable)
|
||||
{
|
||||
totalCost += def->cost * entry.second;
|
||||
}
|
||||
}
|
||||
text += tr("Total: %1 Building Blocks").arg(totalCost);
|
||||
m_titleLabel->setText(text.trimmed());
|
||||
m_titleLabel->show();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user