change input/output buffer item count display

This commit is contained in:
2026-04-20 22:19:43 +02:00
parent 35dd81748e
commit c9c5c30b0d
3 changed files with 69 additions and 9 deletions

View File

@@ -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; }