show recipes visually instead of describing them in text
This commit is contained in:
@@ -6,12 +6,35 @@
|
||||
#include <QVBoxLayout>
|
||||
|
||||
#include "DisplayName.h"
|
||||
#include "RecipeTooltip.h"
|
||||
#include "RecipeLineRow.h"
|
||||
#include "RecipesConfig.h"
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
std::vector<RecipeLineRow::Amount> toAmounts(
|
||||
const std::vector<RecipeIngredient>& ingredients)
|
||||
{
|
||||
std::vector<RecipeLineRow::Amount> amounts;
|
||||
amounts.reserve(ingredients.size());
|
||||
for (const RecipeIngredient& ingredient : ingredients)
|
||||
{
|
||||
amounts.push_back(RecipeLineRow::Amount{ ingredient.item, ingredient.amount });
|
||||
}
|
||||
return amounts;
|
||||
}
|
||||
|
||||
std::vector<RecipeLineRow::Amount> toAmounts(const std::vector<RecipeOutput>& outputs)
|
||||
{
|
||||
std::vector<RecipeLineRow::Amount> amounts;
|
||||
amounts.reserve(outputs.size());
|
||||
for (const RecipeOutput& output : outputs)
|
||||
{
|
||||
amounts.push_back(RecipeLineRow::Amount{ output.item, output.amount });
|
||||
}
|
||||
return amounts;
|
||||
}
|
||||
|
||||
QString grantKindLabel(SchematicType type)
|
||||
{
|
||||
switch (type)
|
||||
@@ -28,7 +51,8 @@ QString grantKindLabel(SchematicType type)
|
||||
|
||||
SchematicChoiceDialog::SchematicChoiceDialog(
|
||||
const std::vector<SchematicChoiceOption>& options,
|
||||
const RecipesConfig& recipes,
|
||||
const RecipesConfig& recipes, ItemIconCache* itemIcons,
|
||||
BuildingIconCache* buildingIcons,
|
||||
QWidget* parent)
|
||||
: QDialog(parent)
|
||||
, m_chosenIndex(0)
|
||||
@@ -108,14 +132,23 @@ SchematicChoiceDialog::SchematicChoiceDialog(
|
||||
{
|
||||
for (const std::string& recipeId : option.newlyUnlockedRecipeIds)
|
||||
{
|
||||
QLabel* recipeLabel = new QLabel(
|
||||
QString::fromStdString(toDisplayName(recipeId)), card);
|
||||
recipeLabel->setAlignment(Qt::AlignCenter);
|
||||
if (const RecipeDef* def = recipes.findRecipeDef(recipeId))
|
||||
{
|
||||
recipeLabel->setToolTip(buildRecipeTooltip(*def));
|
||||
}
|
||||
cardLayout->addWidget(recipeLabel);
|
||||
const RecipeDef* def = recipes.findRecipeDef(recipeId);
|
||||
if (def == nullptr) { continue; }
|
||||
|
||||
// The recipe drawn as it is everywhere else, led by the building
|
||||
// that runs it and its name, so the line says everything there is
|
||||
// to say about it and carries no tooltip (REQ-DEF-SCHEMATIC-DROP).
|
||||
RecipeLineRow::Spec spec;
|
||||
spec.building = def->building;
|
||||
spec.name = QString::fromStdString(toDisplayName(def->id));
|
||||
spec.inputs = toAmounts(def->inputs);
|
||||
spec.outputs = toAmounts(def->outputs);
|
||||
spec.durationSeconds = def->durationSeconds;
|
||||
|
||||
RecipeLineRow* line =
|
||||
new RecipeLineRow(itemIcons, buildingIcons, card);
|
||||
cardLayout->addWidget(line);
|
||||
line->setLine(spec);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user