From 94cc8a80694fa717f97683d02f29c5d8388cfb82 Mon Sep 17 00:00:00 2001 From: Brevven Date: Sun, 25 Jul 2021 00:08:42 -0700 Subject: [PATCH] refactor --- changelog.txt | 3 +- data-final-fixes.lua | 2 +- deadlock-stacking.lua | 4 +- me.lua | 28 +++++++ modules.lua | 2 +- prototypes/silica-recipe.lua | 2 +- prototypes/silicon-recipe.lua | 4 +- recipe-updates.lua | 18 ++-- util.lua | 154 +++++++++++++++++++++++++--------- 9 files changed, 161 insertions(+), 56 deletions(-) create mode 100644 me.lua diff --git a/changelog.txt b/changelog.txt index 1b1d097..95085ca 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,8 +1,9 @@ --------------------------------------------------------------------------------------------------- Version: 0.7.4 -Date: 2021-07-01 +Date: 2021-07-26 Changes: - Very minor K2 tech tree tweak + - Minor Refactor --------------------------------------------------------------------------------------------------- Version: 0.7.3 Date: 2021-07-01 diff --git a/data-final-fixes.lua b/data-final-fixes.lua index 51ccef4..eb36c71 100644 --- a/data-final-fixes.lua +++ b/data-final-fixes.lua @@ -5,7 +5,7 @@ local util = require("__bzsilicon__.util"); -- Mod Mash Splinter Electronics if mods.modmashsplinterelectronics then - if util.more_intermediates() then + if util.me.more_intermediates() then util.multiply_recipe("advanced-circuit", 3) util.add_ingredient("advanced-circuit", "silicon-wafer", 1) end diff --git a/deadlock-stacking.lua b/deadlock-stacking.lua index 8a46c46..edeb7bf 100644 --- a/deadlock-stacking.lua +++ b/deadlock-stacking.lua @@ -7,7 +7,7 @@ if deadlock then if not mods["Krastorio2"] then deadlock.add_stack("silicon", "__bzsilicon__/graphics/icons/stacked/silicon-stacked.png" , "deadlock-stacking-2", 64) end - if util.more_intermediates() then + if util.me.more_intermediates() then deadlock.add_stack("silicon-wafer", "__bzsilicon__/graphics/icons/stacked/silicon-wafer-stacked.png" , "deadlock-stacking-2", 64) deadlock.add_stack("solar-cell", "__bzsilicon__/graphics/icons/stacked/solar-cell-stacked.png" , "deadlock-stacking-2", 64) end @@ -20,7 +20,7 @@ if deadlock_crating then if not mods["Krastorio2"] then deadlock_crating.add_crate("silicon", "deadlock-crating-2") end - if util.more_intermediates() then + if util.me.more_intermediates() then deadlock_crating.add_crate("silicon-wafer", "deadlock-crating-2", 64) deadlock_crating.add_crate("solar-cell", "deadlock-crating-2", 64) end diff --git a/me.lua b/me.lua new file mode 100644 index 0000000..8911bdc --- /dev/null +++ b/me.lua @@ -0,0 +1,28 @@ +local me = {} + +me.name = "bzsilicon" +me.silicon_processing = mods["Krastorio2"] and "kr-silicon-processing" or "silicon-processing" + +function me.more_intermediates() + return mods["Bio_Industries"] or me.get_setting("bzsilicon-more-intermediates") == "yes" +end + +function me.use_bio_crushed_stone() + return mods["Bio_Industries"] and me.get_setting("bzsilicon-bio-crushed-stone") == true +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/modules.lua b/modules.lua index a5b342e..9355189 100644 --- a/modules.lua +++ b/modules.lua @@ -1,7 +1,7 @@ local util = require("__bzsilicon__.util"); recipes = {"silica", "silicon"} -if util.more_intermediates() then +if util.me.more_intermediates() then table.insert(recipes, "silicon-wafer") table.insert(recipes, "solar-cell") end diff --git a/prototypes/silica-recipe.lua b/prototypes/silica-recipe.lua index a4ba5e4..cdfa47c 100644 --- a/prototypes/silica-recipe.lua +++ b/prototypes/silica-recipe.lua @@ -11,7 +11,7 @@ data:extend( ingredients = {{"quartz", 10}}, result = "silica", result_count = 30 - } or util.use_bio_crushed_stone() and { + } or util.me.use_bio_crushed_stone() and { type = "recipe", name = "silica", category = "smelting", diff --git a/prototypes/silicon-recipe.lua b/prototypes/silicon-recipe.lua index eebe5cd..52215db 100644 --- a/prototypes/silicon-recipe.lua +++ b/prototypes/silicon-recipe.lua @@ -62,7 +62,7 @@ data:extend( type = "unlock-recipe", recipe = "silicon", }, - util.more_intermediates() and + util.me.more_intermediates() and { type = "unlock-recipe", recipe = "silicon-wafer", @@ -83,7 +83,7 @@ data:extend( } or nil, } ) -if util.more_intermediates() then +if util.me.more_intermediates() then data:extend({ { type = "item", diff --git a/recipe-updates.lua b/recipe-updates.lua index 2af1cd0..dc52413 100644 --- a/recipe-updates.lua +++ b/recipe-updates.lua @@ -11,7 +11,7 @@ if not mods["Krastorio2"] then end util.add_prerequisite("concrete", "silica-processing") - if util.more_intermediates() then + if util.me.more_intermediates() then util.replace_some_ingredient("processing-unit", "electronic-circuit", 10, "silicon-wafer", 3) util.multiply_recipe("effectivity-module", 2) @@ -35,7 +35,7 @@ if not mods["Krastorio2"] then util.multiply_recipe("advanced-circuit", 3) util.replace_some_ingredient("advanced-circuit", "electronic-circuit", 3, "silicon-wafer", 1) end - util.add_prerequisite("advanced-electronics", util.silicon_processing) + util.add_prerequisite("advanced-electronics", util.me.silicon_processing) else util.replace_some_ingredient("solar-panel", "electronic-circuit", 10, "silicon", 10) @@ -49,11 +49,11 @@ if not mods["Krastorio2"] then util.remove_ingredient("speed-module", "electronic-circuit") util.add_ingredient("speed-module", "silicon", 3) - util.add_prerequisite("advanced-electronics-2", util.silicon_processing) + util.add_prerequisite("advanced-electronics-2", util.me.silicon_processing) end util.add_prerequisite("solar-energy", "silicon-processing") - util.add_prerequisite("modules", util.silicon_processing) + util.add_prerequisite("modules", util.me.silicon_processing) else util.add_ingredient("concrete", "silica", 15); if not mods["aai-industry"] then @@ -127,16 +127,16 @@ util.replace_some_ingredient("transport-depot-writer", "electronic-circuit", 5, util.add_prerequisite("circuit-network", "fiber-optics") -util.add_prerequisite("circuit-network", util.silicon_processing) +util.add_prerequisite("circuit-network", util.me.silicon_processing) if mods["Krastorio2"] then util.add_ingredient("biusart-lab", "optical-fiber", 10) util.add_ingredient("ai-core", "optical-fiber", 2) - util.add_prerequisite(util.silicon_processing, "silica-processing") + util.add_prerequisite(util.me.silicon_processing, "silica-processing") - if util.more_intermediates() then - util.add_effect(util.silicon_processing, {type = "unlock-recipe", recipe="silicon-wafer"}) + if util.me.more_intermediates() then + util.add_effect(util.me.silicon_processing, {type = "unlock-recipe", recipe="silicon-wafer"}) util.remove_ingredient("electronic-components", "silicon") util.add_ingredient("electronic-components", "silicon-wafer", 1) @@ -170,7 +170,7 @@ if mods["space-exploration"] then end if mods["zombiesextended-core"] then - if util.more_intermediates() then + if util.me.more_intermediates() then util.add_ingredient("complex-processing-unit", "silicon-wafer", 1) else util.add_ingredient("complex-processing-unit", "silicon", 2) diff --git a/util.lua b/util.lua index f38d60d..ebd8c84 100644 --- a/util.lua +++ b/util.lua @@ -1,27 +1,12 @@ +local me = require("me") local util = {} -util.name = "bzsilicon" -util.silicon_processing = mods["Krastorio2"] and "kr-silicon-processing" or "silicon-processing" +util.me = me +util.get_setting = util.me.get_setting -function util.more_intermediates() - return mods["Bio_Industries"] or util.get_setting("bzsilicon-more-intermediates") == "yes" -end - -function util.use_bio_crushed_stone() - return mods["Bio_Industries"] and util.get_setting("bzsilicon-bio-crushed-stone") == true -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 +function util.fe_plus(sub) + if mods["FactorioExtended-Plus-"..sub] then + return true end end @@ -90,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) @@ -113,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) @@ -128,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) @@ -153,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) @@ -176,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) @@ -196,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 @@ -211,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) @@ -263,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