add findShipDef/findModuleDef/findRecipeDef to config structs and re-use them in the rest of the code base
This commit is contained in:
@@ -12,15 +12,6 @@
|
||||
namespace
|
||||
{
|
||||
|
||||
const RecipeDef* findRecipe(const RecipesConfig& recipes, const std::string& id)
|
||||
{
|
||||
for (const RecipeDef& recipe : recipes.recipes)
|
||||
{
|
||||
if (recipe.id == id) { return &recipe; }
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
QString grantKindLabel(SchematicType type)
|
||||
{
|
||||
switch (type)
|
||||
@@ -120,7 +111,7 @@ SchematicChoiceDialog::SchematicChoiceDialog(
|
||||
QLabel* recipeLabel = new QLabel(
|
||||
QString::fromStdString(toDisplayName(recipeId)), card);
|
||||
recipeLabel->setAlignment(Qt::AlignCenter);
|
||||
if (const RecipeDef* def = findRecipe(recipes, recipeId))
|
||||
if (const RecipeDef* def = recipes.findRecipeDef(recipeId))
|
||||
{
|
||||
recipeLabel->setToolTip(buildRecipeTooltip(*def));
|
||||
}
|
||||
|
||||
@@ -430,14 +430,7 @@ void SelectedBuildingPanel::refreshBuffers(const Building* b)
|
||||
// the cycle time and progress can be shown (REQ-UI-PRODUCTION-PROGRESS).
|
||||
if (!recipe && isAutoRecipeBuilding(b->type) && b->production.has_value())
|
||||
{
|
||||
for (const RecipeDef& r : m_config->recipes.recipes)
|
||||
{
|
||||
if (r.id == b->production->recipeId && r.building == b->type)
|
||||
{
|
||||
recipe = &r;
|
||||
break;
|
||||
}
|
||||
}
|
||||
recipe = m_config->recipes.findRecipeDef(b->production->recipeId, b->type);
|
||||
}
|
||||
|
||||
QString bufText;
|
||||
@@ -465,18 +458,14 @@ void SelectedBuildingPanel::refreshBuffers(const Building* b)
|
||||
{
|
||||
for (const PlacedModule& pm : b->shipLayout->placedModules)
|
||||
{
|
||||
for (const ModuleDef& modDef : m_config->modules.modules)
|
||||
const ModuleDef* modDef =
|
||||
m_config->modules.findModuleDef(pm.moduleId);
|
||||
if (!modDef) { continue; }
|
||||
for (const RecipeIngredient& ing : modDef->materials)
|
||||
{
|
||||
if (modDef.id == pm.moduleId)
|
||||
if (ing.item == entry.first.id)
|
||||
{
|
||||
for (const RecipeIngredient& ing : modDef.materials)
|
||||
{
|
||||
if (ing.item == entry.first.id)
|
||||
{
|
||||
perCycle += ing.amount;
|
||||
}
|
||||
}
|
||||
break;
|
||||
perCycle += ing.amount;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -545,13 +534,11 @@ void SelectedBuildingPanel::refreshBuffers(const Building* b)
|
||||
{
|
||||
for (const PlacedModule& pm : b->shipLayout->placedModules)
|
||||
{
|
||||
for (const ModuleDef& modDef : m_config->modules.modules)
|
||||
const ModuleDef* modDef =
|
||||
m_config->modules.findModuleDef(pm.moduleId);
|
||||
if (modDef)
|
||||
{
|
||||
if (modDef.id == pm.moduleId)
|
||||
{
|
||||
durationSeconds += modDef.productionTimeSeconds;
|
||||
break;
|
||||
}
|
||||
durationSeconds += modDef->productionTimeSeconds;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -633,21 +620,13 @@ void SelectedBuildingPanel::updateShipyardLayoutWidgets(
|
||||
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;
|
||||
return m_config->recipes.findRecipeDef(b->recipeId, b->type);
|
||||
}
|
||||
|
||||
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;
|
||||
return m_config->ships.findShipDef(id);
|
||||
}
|
||||
|
||||
void SelectedBuildingPanel::handleEvent(std::shared_ptr<const TickAdvancedEvent> /*event*/)
|
||||
@@ -1088,15 +1067,14 @@ void SelectedBuildingPanel::buildEntityShip(entt::entity entity)
|
||||
admin.get<SelectedBehaviorComponent>(entity).winner);
|
||||
m_entityStatsPanel->setDebugDrawEnabled(m_debugDraw);
|
||||
|
||||
for (const ShipDef& def : m_config->ships.ships)
|
||||
const ShipDef* schematicDef =
|
||||
m_config->ships.findShipDef(identity.schematicId);
|
||||
if (schematicDef)
|
||||
{
|
||||
if (def.id == identity.schematicId)
|
||||
{
|
||||
double threat = calculateShipThreatCost(
|
||||
m_config->threatCosts, *m_config, def.id, def.defaultModules);
|
||||
m_entityStatsPanel->setThreatCost(threat);
|
||||
break;
|
||||
}
|
||||
const double threat = calculateShipThreatCost(
|
||||
m_config->threatCosts, *m_config, schematicDef->id,
|
||||
schematicDef->defaultModules);
|
||||
m_entityStatsPanel->setThreatCost(threat);
|
||||
}
|
||||
|
||||
m_entityStatsPanel->show();
|
||||
|
||||
@@ -243,14 +243,7 @@ private:
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
for (const ModuleDef& def : m_config->modules.modules)
|
||||
{
|
||||
if (def.id == id)
|
||||
{
|
||||
return &def;
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
return m_config->modules.findModuleDef(id);
|
||||
}
|
||||
|
||||
std::vector<std::string> rotateMask(const std::vector<std::string>& mask,
|
||||
@@ -426,13 +419,10 @@ ShipLayoutDialog::ShipLayoutDialog(const GameConfig* config,
|
||||
setModal(true);
|
||||
|
||||
// Find the ship's layout grid.
|
||||
for (const ShipDef& def : config->ships.ships)
|
||||
const ShipDef* shipDef = config->ships.findShipDef(shipId);
|
||||
if (shipDef)
|
||||
{
|
||||
if (def.id == shipId)
|
||||
{
|
||||
m_shipLayout = def.layout;
|
||||
break;
|
||||
}
|
||||
m_shipLayout = shipDef->layout;
|
||||
}
|
||||
|
||||
m_rows = static_cast<int>(m_shipLayout.size());
|
||||
@@ -706,11 +696,7 @@ void ShipLayoutDialog::rebuildOccupancy()
|
||||
for (int i = 0; i < static_cast<int>(m_placedModules.size()); ++i)
|
||||
{
|
||||
const PlacedModule& pm = m_placedModules[i];
|
||||
const ModuleDef* def = nullptr;
|
||||
for (const ModuleDef& d : m_config->modules.modules)
|
||||
{
|
||||
if (d.id == pm.moduleId) { def = &d; break; }
|
||||
}
|
||||
const ModuleDef* def = m_config->modules.findModuleDef(pm.moduleId);
|
||||
if (!def)
|
||||
{
|
||||
continue;
|
||||
@@ -807,11 +793,7 @@ void ShipLayoutDialog::loadLayoutBlueprint(const std::vector<PlacedModule>& modu
|
||||
for (const PlacedModule& pm : modules)
|
||||
{
|
||||
// Validate module type exists and is unlocked.
|
||||
const ModuleDef* def = nullptr;
|
||||
for (const ModuleDef& d : m_config->modules.modules)
|
||||
{
|
||||
if (d.id == pm.moduleId) { def = &d; break; }
|
||||
}
|
||||
const ModuleDef* def = m_config->modules.findModuleDef(pm.moduleId);
|
||||
if (!def || m_unlockedModuleIds.count(def->id) == 0) { continue; }
|
||||
|
||||
const std::vector<std::string> mask = rotatedMask(*def, pm.rotation);
|
||||
|
||||
Reference in New Issue
Block a user