+
+
+-- function for calculating tech effort
+function calcEffort(tech, config)
+ local ingredientCount = function(ingredients)
+ local tech_ingredients = 0
+ for _, ingredient in pairs(tech.research_unit_ingredients) do
+ tech_ingredients = tech_ingredients + ingredient.amount
+ end
+ return tech_ingredients
+ end
+ local effort = 0
+ if config.research_strategy == "fast" then
+ effort = math.max(tech.research_unit_energy, 1) * math.max(tech.research_unit_count, 1)
+ elseif config.research_strategy == "slow" then
+ effort = math.max(tech.research_unit_energy, 1) * math.max(tech.research_unit_count, 1) * -1
+ elseif config.research_strategy == "cheap" then
+ effort = math.max(ingredientCount(tech.research_unit_ingredients), 1) * math.max(tech.research_unit_count, 1)
+ elseif config.research_strategy == "expensive" then
+ effort = math.max(ingredientCount(tech.research_unit_ingredients), 1) * math.max(tech.research_unit_count, 1) * -1
+ elseif config.research_strategy == "balanced" then
+ effort = math.max(tech.research_unit_count, 1) * math.max(tech.research_unit_energy, 1) * math.max(ingredientCount(tech.research_unit_ingredients), 1)
+ else
+ effort = math.random(1, 999)
+ end
+ if (config.deprioritize_infinite_tech and config.infinite_research[tech.name]) then
+ return effort * (effort > 0 and 1000 or -1000)
+ else
+ return effort
+ end
+end
+
+function sortTechsByEffort(techs, config)
+ local compare = function(a, b)
+ return calcEffort(a[2], config) < calcEffort(b[2], config)
+ end
+ if config.research_strategy ~= "random" then
+ table.sort(techs, compare)
+ end
+end
+