From 4e5bbd7bb1d9e1570f47f0f8ad68f6c1d54e6d37 Mon Sep 17 00:00:00 2001 From: Brevven Date: Sat, 24 Jul 2021 23:26:54 -0700 Subject: [PATCH] refactor --- changelog.txt | 5 + data-util.lua | 149 +++++++++++++++++++++------- info.json | 2 +- me.lua | 23 +++++ tech-updates.lua | 2 +- zirconium-recipe-final-stacking.lua | 4 +- zirconium-recipe-updates.lua | 8 +- zirconium-recipe.lua | 2 +- 8 files changed, 149 insertions(+), 46 deletions(-) create mode 100644 me.lua diff --git a/changelog.txt b/changelog.txt index 2556e99..67c63f6 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,9 @@ --------------------------------------------------------------------------------------------------- +Version: 0.1.1 +Date: 2021-07-26 + Changes: + - Minor refactor +--------------------------------------------------------------------------------------------------- Version: 0.1.0 Date: 2021-07-21 Features: diff --git a/data-util.lua b/data-util.lua index 27002ec..ebd8c84 100644 --- a/data-util.lua +++ b/data-util.lua @@ -1,6 +1,8 @@ +local me = require("me") local util = {} -util.name = "bzzirconium" +util.me = me +util.get_setting = util.me.get_setting function util.fe_plus(sub) if mods["FactorioExtended-Plus-"..sub] then @@ -8,24 +10,6 @@ function util.fe_plus(sub) end end -function util.use_cermet() - return util.get_setting("bzzirconium-enable-intermediates") == "yes" -end - -function util.get_setting(name) - if settings.startup[name] == nil then - return nil - end - return settings.startup[name].value -end - -local bypass = {} -if util.get_setting(util.name.."-recipe-bypass") then - for recipe in string.gmatch(util.get_setting(util.name.."-recipe-bypass"), '[^",%s]+') do - bypass[recipe] = true - end -end - function util.get_stack_size(default) if mods["Krastorio2"] then size = tonumber(krastorio.general.getSafeSettingValue("kr-stack-size")) @@ -91,8 +75,8 @@ end -- Add a given quantity of ingredient to a given recipe function util.add_ingredient(recipe_name, ingredient, quantity) - if bypass[recipe_name] then return end - if data.raw.recipe[recipe_name] then + if me.bypass[recipe_name] then return end + if data.raw.recipe[recipe_name] and data.raw.item[ingredient] then add_ingredient(data.raw.recipe[recipe_name], ingredient, quantity) add_ingredient(data.raw.recipe[recipe_name].normal, ingredient, quantity) add_ingredient(data.raw.recipe[recipe_name].expensive, ingredient, quantity) @@ -114,7 +98,7 @@ end -- Add a given quantity of product to a given recipe. -- Only works for recipes with multiple products function util.add_product(recipe_name, product) - if data.raw.recipe[recipe_name] then + if data.raw.recipe[recipe_name] and data.raw.item[product] then add_product(data.raw.recipe[recipe_name], product) add_product(data.raw.recipe[recipe_name].normal, product) add_product(data.raw.recipe[recipe_name].expensive, product) @@ -129,8 +113,8 @@ end -- Replace one ingredient with another in a recipe function util.replace_ingredient(recipe_name, old, new) - if bypass[recipe_name] then return end - if data.raw.recipe[recipe_name] then + if me.bypass[recipe_name] then return end + if data.raw.recipe[recipe_name] and data.raw.item[new] then replace_ingredient(data.raw.recipe[recipe_name], old, new) replace_ingredient(data.raw.recipe[recipe_name].normal, old, new) replace_ingredient(data.raw.recipe[recipe_name].expensive, old, new) @@ -154,7 +138,7 @@ end -- Remove an ingredient from a recipe function util.remove_ingredient(recipe_name, old) - if bypass[recipe_name] then return end + if me.bypass[recipe_name] then return end if data.raw.recipe[recipe_name] then remove_ingredient(data.raw.recipe[recipe_name], old) remove_ingredient(data.raw.recipe[recipe_name].normal, old) @@ -177,11 +161,10 @@ function remove_ingredient(recipe, old) end end - -- Replace an amount of an ingredient in a recipe. Keep at least 1 of old. function util.replace_some_ingredient(recipe_name, old, old_amount, new, new_amount) - if bypass[recipe_name] then return end - if data.raw.recipe[recipe_name] then + if me.bypass[recipe_name] then return end + if data.raw.recipe[recipe_name] and data.raw.item[new] then replace_some_ingredient(data.raw.recipe[recipe_name], old, old_amount, new, new_amount) replace_some_ingredient(data.raw.recipe[recipe_name].normal, old, old_amount, new, new_amount) replace_some_ingredient(data.raw.recipe[recipe_name].expensive, old, old_amount, new, new_amount) @@ -197,11 +180,9 @@ function replace_some_ingredient(recipe, old, old_amount, new, new_amount) end end for i, ingredient in pairs(recipe.ingredients) do - -- For final fixes if ingredient.name == old then ingredient.amount = math.max(1, ingredient.amount - old_amount) end - -- For updates if ingredient[1] == old then ingredient[2] = math.max(1, ingredient[2] - old_amount) end @@ -212,7 +193,7 @@ end -- multiply the cost, energy, and results of a recipe by a multiple function util.multiply_recipe(recipe_name, multiple) - if bypass[recipe_name] then return end + if me.bypass[recipe_name] then return end if data.raw.recipe[recipe_name] then multiply_recipe(data.raw.recipe[recipe_name], multiple) multiply_recipe(data.raw.recipe[recipe_name].normal, multiple) @@ -264,14 +245,108 @@ function multiply_recipe(recipe, multiple) end end --- Remove an element of type t and name from data.raw -function util.remove_raw(t, name) - for i, elem in pairs(data.raw[t]) do - if elem.name == name then - data.raw[t][i] = nil - break +-- Returns true if a recipe has an ingredient +function util.has_ingredient(recipe_name, ingredient) + return data.raw.recipe[recipe_name] and ( + has_ingredient(data.raw.recipe[recipe_name], ingredient) or + has_ingredient(data.raw.recipe[recipe_name].normal, ingredient)) +end + +function has_ingredient(recipe, ingredient) + if recipe ~= nil and recipe.ingredients ~= nil then + for i, existing in pairs(recipe.ingredients) do + if existing[1] == ingredient or existing.name == ingredient then + return true + end + end + end + return false +end + +-- Replace one product with another in a recipe +function util.replace_product(recipe_name, old, new) + if data.raw.recipe[recipe_name] then + replace_product(data.raw.recipe[recipe_name], old, new) + replace_product(data.raw.recipe[recipe_name].normal, old, new) + replace_product(data.raw.recipe[recipe_name].expensive, old, new) + end +end + +function replace_product(recipe, old, new) + if recipe ~= nil and recipe.results ~= nil then + if recipe.result == old then + recipe.results = new + return + end + for i, result in pairs(recipe.results) do + if result.name == old then result.name = new end + if result[1] == old then result[1] = new end end end end +-- Remove an element of type t and name from data.raw +function util.remove_raw(t, name) + if data.raw[t][name] then + for i, elem in pairs(data.raw[t]) do + if elem.name == name then + data.raw[t][i] = nil + break + end + end + end +end + +-- Multiply energy required +function util.multiply_time(recipe, factor) + if me.bypass[recipe_name] then return end + if data.raw.recipe[recipe_name] then + multiply_time(data.raw.recipe[recipe_name], factor) + multiply_time(data.raw.recipe[recipe_name].normal, factor) + multiply_time(data.raw.recipe[recipe_name].expensive, factor) + end +end + +function multiply_time(recipe, factor) + if recipe then + if recipe.energy_required then + recipe.energy_required = recipe.energy_required * factor + end + end +end + +-- Set recipe category +function util.set_category(recipe, category) + if me.bypass[recipe_name] then return end + if data.raw.recipe[recipe] then + data.raw.recipe[recipe].category = category + end +end + +-- Set recipe subgroup +function util.set_subgroup(recipe, subgroup) + if me.bypass[recipe_name] then return end + if data.raw.recipe[recipe] then + data.raw.recipe[recipe].subgroup = subgroup + end +end + +function util.set_to_founding(recipe) + util.set_category(recipe, "founding") + util.set_subgroup(recipe, "foundry-intermediate") +end + +-- Add crafting category to an entity +function util.add_crafting_category(entity_type, entity, category) + if data.raw[entity_type][entity] then + for i, existing in pairs(data.raw[entity_type][entity].crafting_categories) do + if existing == category then + log(entity.." not adding "..new.." -- duplicate") + return + end + end + table.insert(data.raw[entity_type][entity].crafting_categories, category) + end +end + return util diff --git a/info.json b/info.json index df03921..ecdf90b 100644 --- a/info.json +++ b/info.json @@ -1,6 +1,6 @@ { "name": "bzzirconium", - "version": "0.1.0", + "version": "0.1.1", "factorio_version": "1.1", "title": "Zirconium", "author": "Brevven", diff --git a/me.lua b/me.lua new file mode 100644 index 0000000..8af8256 --- /dev/null +++ b/me.lua @@ -0,0 +1,23 @@ +local me = {} + +me.name = "bzzirconium" + +function me.use_cermet() + return me.get_setting("bzzirconium-enable-intermediates") == "yes" +end + +function me.get_setting(name) + if settings.startup[name] == nil then + return nil + end + return settings.startup[name].value +end + +me.bypass = {} +if me.get_setting(me.name.."-recipe-bypass") then + for recipe in string.gmatch(me.get_setting(me.name.."-recipe-bypass"), '[^",%s]+') do + me.bypass[recipe] = true + end +end + +return me diff --git a/tech-updates.lua b/tech-updates.lua index 9e607bc..689285e 100644 --- a/tech-updates.lua +++ b/tech-updates.lua @@ -6,7 +6,7 @@ util.add_prerequisite("nuclear-power", "zirconia-processing") util.add_prerequisite("explosives", "zirconia-processing") util.add_prerequisite("chemical-science-pack", "zirconia-processing") -if util.use_cermet() then +if util.me.use_cermet() then -- production science techs behind cermet util.add_prerequisite("effect-transmission", "cermet") if not util.fe_plus("Machines") then diff --git a/zirconium-recipe-final-stacking.lua b/zirconium-recipe-final-stacking.lua index 9e310b9..473057d 100644 --- a/zirconium-recipe-final-stacking.lua +++ b/zirconium-recipe-final-stacking.lua @@ -6,7 +6,7 @@ if deadlock then deadlock.add_stack("zircon", "__bzzirconium__/graphics/icons/stacked/zircon-stacked.png", "deadlock-stacking-2", 64) deadlock.add_stack("zirconia", "__bzzirconium__/graphics/icons/stacked/zirconia-stacked.png", "deadlock-stacking-2", 128) deadlock.add_stack("zirconium-plate", "__bzzirconium__/graphics/icons/stacked/zirconium-plate-stacked.png" , "deadlock-stacking-2", 128) - if util.use_cermet() then + if util.me.use_cermet() then deadlock.add_stack("cermet", "__bzzirconium__/graphics/icons/stacked/cermet-stacked.png", "deadlock-stacking-2", 128) end if mods["Krastorio2"] then @@ -22,7 +22,7 @@ if deadlock_crating then deadlock_crating.add_crate("zircon", "deadlock-crating-2") deadlock_crating.add_crate("zirconia", "deadlock-crating-2") deadlock_crating.add_crate("zirconium-plate", "deadlock-crating-2") - if util.use_cermet() then + if util.me.use_cermet() then deadlock_crating.add_crate("cermet", "deadlock-crating-2") end if mods["Krastorio2"] then diff --git a/zirconium-recipe-updates.lua b/zirconium-recipe-updates.lua index 415e2eb..dd1904a 100644 --- a/zirconium-recipe-updates.lua +++ b/zirconium-recipe-updates.lua @@ -26,7 +26,7 @@ if not mods.bztungsten then end -if util.use_cermet() then +if util.me.use_cermet() then util.add_ingredient("rocket-control-unit", "cermet", 1) util.add_ingredient("speed-module-3", "cermet", 1) util.add_ingredient("productivity-module-3", "cermet", 1) @@ -57,7 +57,7 @@ if mods["Krastorio2"] then util.replace_some_ingredient("matter-stabilizer", "imersium-plate", 1, "zirconium-plate", 5) util.add_ingredient("kr-advanced-furnace", "zirconia", 60) - if util.use_cermet() then + if util.me.use_cermet() then util.add_ingredient("ai-core", "cermet", 2) util.add_ingredient("kr-matter-assembler", "cermet", 4) end @@ -79,7 +79,7 @@ if mods["space-exploration"] then util.replace_ingredient("se-heat-shielding-iridium", "stone-tablet", "zirconia") util.add_ingredient("se-thruster-suit", "zirconium-plate", 10) util.add_ingredient("se-space-thermodynamics-laboratory", "zirconium-plate", 20) - if util.use_cermet() then + if util.me.use_cermet() then util.add_ingredient("se-quantum-processor", "cermet", 1) util.add_ingredient("se-space-mechanical-laboratory", "cermet", 40) end @@ -146,7 +146,7 @@ util.replace_some_ingredient("rfp-matter-antimatter-fuel-cell-empty", "steel-pla -- Cermet in other mods -if util.use_cermet() then +if util.me.use_cermet() then util.add_ingredient("advanced-assembler-rampant-industry", "cermet", 30) util.add_ingredient("advanced-electric-furnace-rampant-industry", "cermet", 30) util.add_ingredient("advanced-oil-refinery-rampant-industry", "cermet", 30) diff --git a/zirconium-recipe.lua b/zirconium-recipe.lua index 9c77759..668ebb8 100644 --- a/zirconium-recipe.lua +++ b/zirconium-recipe.lua @@ -145,7 +145,7 @@ data:extend({ }) -- cermet only if setting enabled -if util.use_cermet() then +if util.me.use_cermet() then local cermet_i = {{"zirconia", 1}, {"copper-plate", 1}} if mods.bztitanium then local tutil = require("__bztitanium__.data-util");