change input/output buffer item count display
This commit is contained in:
@@ -193,21 +193,44 @@ void SelectedBuildingPanel::buildSingle(EntityId id)
|
||||
|
||||
void SelectedBuildingPanel::refreshBuffers(const Building* b)
|
||||
{
|
||||
const RecipeDef* recipe = findRecipe(b);
|
||||
const ShipDef* shipDef = (b->type == BuildingType::Shipyard)
|
||||
? findShipDef(b->recipeId)
|
||||
: nullptr;
|
||||
|
||||
QString bufText;
|
||||
|
||||
if (!b->inputBuffer.counts.empty())
|
||||
{
|
||||
bufText += "Input: ";
|
||||
for (const std::pair<const ItemType, int>& entry : b->inputBuffer.counts)
|
||||
{
|
||||
const std::map<ItemType, int>::const_iterator cap =
|
||||
b->inputBuffer.caps.find(entry.first);
|
||||
const int capVal = (cap != b->inputBuffer.caps.end()) ? cap->second : 0;
|
||||
int perCycle = 0;
|
||||
if (recipe)
|
||||
{
|
||||
for (const RecipeIngredient& ing : recipe->inputs)
|
||||
{
|
||||
if (ing.item == entry.first.id) { perCycle = ing.amount; break; }
|
||||
}
|
||||
}
|
||||
else if (shipDef)
|
||||
{
|
||||
for (const RecipeIngredient& mat : shipDef->blueprint.materials)
|
||||
{
|
||||
if (mat.item == entry.first.id) { perCycle = mat.amount; break; }
|
||||
}
|
||||
}
|
||||
bufText += QString::fromStdString(entry.first.id)
|
||||
+ ": " + QString::number(entry.second)
|
||||
+ "/" + QString::number(capVal) + " ";
|
||||
+ ": " + QString::number(entry.second);
|
||||
if (perCycle > 0)
|
||||
{
|
||||
bufText += "/" + QString::number(perCycle);
|
||||
}
|
||||
bufText += " ";
|
||||
}
|
||||
bufText += "\n";
|
||||
}
|
||||
|
||||
if (!b->outputBuffer.items.empty())
|
||||
{
|
||||
std::map<std::string, int> outCounts;
|
||||
@@ -215,17 +238,50 @@ void SelectedBuildingPanel::refreshBuffers(const Building* b)
|
||||
{
|
||||
outCounts[item.type.id]++;
|
||||
}
|
||||
bufText += "Output(" + QString::number(static_cast<int>(b->outputBuffer.items.size()))
|
||||
+ "/" + QString::number(b->outputBuffer.capacity) + "): ";
|
||||
bufText += "Output: ";
|
||||
for (const std::pair<const std::string, int>& entry : outCounts)
|
||||
{
|
||||
int perCycle = 0;
|
||||
if (recipe)
|
||||
{
|
||||
for (const RecipeOutput& out : recipe->outputs)
|
||||
{
|
||||
if (out.item == entry.first) { perCycle = out.amount; break; }
|
||||
}
|
||||
}
|
||||
bufText += QString::fromStdString(entry.first)
|
||||
+ ":" + QString::number(entry.second) + " ";
|
||||
+ ": " + QString::number(entry.second);
|
||||
if (perCycle > 0)
|
||||
{
|
||||
bufText += "/" + QString::number(perCycle);
|
||||
}
|
||||
bufText += " ";
|
||||
}
|
||||
}
|
||||
|
||||
m_buffersLabel->setText(bufText);
|
||||
}
|
||||
|
||||
const RecipeDef* SelectedBuildingPanel::findRecipe(const Building* b) const
|
||||
{
|
||||
if (b->recipeId.empty()) { return nullptr; }
|
||||
for (const RecipeDef& r : m_config->recipes.recipes)
|
||||
{
|
||||
if (r.id == b->recipeId && r.building == b->type) { return &r; }
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const ShipDef* SelectedBuildingPanel::findShipDef(const std::string& id) const
|
||||
{
|
||||
if (id.empty()) { return nullptr; }
|
||||
for (const ShipDef& s : m_config->ships.ships)
|
||||
{
|
||||
if (s.id == id) { return &s; }
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void SelectedBuildingPanel::onStateUpdated(Tick /*tick*/, int /*blocks*/, double /*speed*/)
|
||||
{
|
||||
if (m_singleId == kInvalidEntityId) { return; }
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
#include "Building.h"
|
||||
#include "EntityId.h"
|
||||
#include "GameConfig.h"
|
||||
#include "RecipesConfig.h"
|
||||
#include "ShipsConfig.h"
|
||||
#include "Tick.h"
|
||||
|
||||
class Simulation;
|
||||
@@ -39,6 +41,8 @@ private:
|
||||
void buildSingle(EntityId id);
|
||||
void buildMulti(const std::vector<EntityId>& ids);
|
||||
void refreshBuffers(const Building* b);
|
||||
const RecipeDef* findRecipe(const Building* b) const;
|
||||
const ShipDef* findShipDef(const std::string& id) const;
|
||||
|
||||
Simulation* m_sim;
|
||||
const GameConfig* m_config;
|
||||
|
||||
Reference in New Issue
Block a user