make BlueprintPanel read the block stock from the simulation instead of event
This commit is contained in:
@@ -27,7 +27,6 @@ BlueprintPanel::BlueprintPanel(Simulation* sim, const GameConfig* config, QWidge
|
|||||||
: QWidget(parent)
|
: QWidget(parent)
|
||||||
, m_sim(sim)
|
, m_sim(sim)
|
||||||
, m_config(config)
|
, m_config(config)
|
||||||
, m_currentBlocks(0)
|
|
||||||
{
|
{
|
||||||
QVBoxLayout* layout = new QVBoxLayout(this);
|
QVBoxLayout* layout = new QVBoxLayout(this);
|
||||||
layout->setContentsMargins(4, 4, 4, 4);
|
layout->setContentsMargins(4, 4, 4, 4);
|
||||||
@@ -71,9 +70,8 @@ void BlueprintPanel::onSelectionChanged(const std::vector<BuildingId>& ids)
|
|||||||
refreshButtonStates();
|
refreshButtonStates();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlueprintPanel::handleEvent(std::shared_ptr<const BuildingBlocksChangedEvent> event)
|
void BlueprintPanel::handleEvent(std::shared_ptr<const BuildingBlocksChangedEvent> /*event*/)
|
||||||
{
|
{
|
||||||
m_currentBlocks = event->blocks;
|
|
||||||
refreshButtonStates();
|
refreshButtonStates();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,10 +245,12 @@ void BlueprintPanel::refreshButtonStates()
|
|||||||
// A construction site counts the same as an operational building (REQ-UI-BLUEPRINT-CREATE).
|
// A construction site counts the same as an operational building (REQ-UI-BLUEPRINT-CREATE).
|
||||||
m_createBtn->setEnabled(selectionHasPlaceableBuilding(*m_sim, m_selectedBuildingIds));
|
m_createBtn->setEnabled(selectionHasPlaceableBuilding(*m_sim, m_selectedBuildingIds));
|
||||||
|
|
||||||
|
const int blocks = m_sim->getBuildingBlocksStock();
|
||||||
|
|
||||||
for (int i = 0; i < static_cast<int>(m_blueprintButtons.size()); ++i)
|
for (int i = 0; i < static_cast<int>(m_blueprintButtons.size()); ++i)
|
||||||
{
|
{
|
||||||
const int cost = computeBlueprintCost(m_blueprints[static_cast<std::size_t>(i)]);
|
const int cost = computeBlueprintCost(m_blueprints[static_cast<std::size_t>(i)]);
|
||||||
const bool canAfford = m_currentBlocks >= cost;
|
const bool canAfford = blocks >= cost;
|
||||||
m_blueprintButtons[static_cast<std::size_t>(i)]->setEnabled(
|
m_blueprintButtons[static_cast<std::size_t>(i)]->setEnabled(
|
||||||
canAfford || m_activeIndex == i);
|
canAfford || m_activeIndex == i);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,10 +53,11 @@ private:
|
|||||||
void loadFromDisk();
|
void loadFromDisk();
|
||||||
void saveToDisk() const;
|
void saveToDisk() const;
|
||||||
|
|
||||||
|
// The simulation is the single source of truth for the block stock; the
|
||||||
|
// change event is only a refresh signal.
|
||||||
Simulation* m_sim;
|
Simulation* m_sim;
|
||||||
const GameConfig* m_config;
|
const GameConfig* m_config;
|
||||||
std::vector<BuildingId> m_selectedBuildingIds;
|
std::vector<BuildingId> m_selectedBuildingIds;
|
||||||
int m_currentBlocks;
|
|
||||||
std::optional<int> m_activeIndex; // nullopt = no blueprint selected
|
std::optional<int> m_activeIndex; // nullopt = no blueprint selected
|
||||||
std::vector<Blueprint> m_blueprints;
|
std::vector<Blueprint> m_blueprints;
|
||||||
std::vector<QPushButton*> m_blueprintButtons;
|
std::vector<QPushButton*> m_blueprintButtons;
|
||||||
|
|||||||
Reference in New Issue
Block a user