Updates from TheSAguy

This commit is contained in:
Simon Brodtmann 2025-09-10 22:30:50 +02:00
parent 01bf94d2f2
commit cd82d589da
6 changed files with 1706 additions and 1706 deletions

View file

@ -1,130 +1,130 @@
local BioInd = require('common')('Bio_Industries_2') local BioInd = require('common')('Bio_Industries_2')
if not thxbob.lib.machine then if not thxbob.lib.machine then
thxbob.lib.machine = {} thxbob.lib.machine = {}
end end
function thxbob.lib.machine.has_category(machine, category_in) function thxbob.lib.machine.has_category(machine, category_in)
local hasit = false local hasit = false
if machine and machine.crafting_categories then if machine and machine.crafting_categories then
for i, category in pairs(machine.crafting_categories) do for i, category in pairs(machine.crafting_categories) do
if category == category_in then if category == category_in then
hasit = true hasit = true
end end
end end
end end
return hasit return hasit
end end
function thxbob.lib.machine.add_category(machine, category) function thxbob.lib.machine.add_category(machine, category)
if machine and data.raw["recipe-category"][category] then if machine and data.raw["recipe-category"][category] then
if not machine.crafting_categories then if not machine.crafting_categories then
machine.crafting_categories = { category } machine.crafting_categories = { category }
elseif not thxbob.lib.machine.has_category(machine, category) then elseif not thxbob.lib.machine.has_category(machine, category) then
table.insert(machine.crafting_categories, category) table.insert(machine.crafting_categories, category)
end end
else else
if not data.raw["recipe-category"][category] then if not data.raw["recipe-category"][category] then
log("Crafting category " .. category .. " does not exist.") log("Crafting category " .. category .. " does not exist.")
end end
end end
end end
function thxbob.lib.machine.if_add_category(machine, category, category_to_add) function thxbob.lib.machine.if_add_category(machine, category, category_to_add)
if machine and data.raw["recipe-category"][category] and data.raw["recipe-category"][category_to_add] then if machine and data.raw["recipe-category"][category] and data.raw["recipe-category"][category_to_add] then
if thxbob.lib.machine.has_category(machine, category) then if thxbob.lib.machine.has_category(machine, category) then
thxbob.lib.machine.add_category(machine, category_to_add) thxbob.lib.machine.add_category(machine, category_to_add)
end end
else else
if not data.raw["recipe-category"][category] then if not data.raw["recipe-category"][category] then
log("Crafting category " .. category .. " does not exist.") log("Crafting category " .. category .. " does not exist.")
end end
if not data.raw["recipe-category"][category_to_add] then if not data.raw["recipe-category"][category_to_add] then
log("Crafting category " .. category_to_add .. " does not exist.") log("Crafting category " .. category_to_add .. " does not exist.")
end end
end end
end end
function thxbob.lib.machine.type_if_add_category(machine_type, category, category_to_add) function thxbob.lib.machine.type_if_add_category(machine_type, category, category_to_add)
if data.raw["recipe-category"][category] and data.raw["recipe-category"][category_to_add] then if data.raw["recipe-category"][category] and data.raw["recipe-category"][category_to_add] then
for i, machine in pairs(data.raw[machine_type]) do for i, machine in pairs(data.raw[machine_type]) do
thxbob.lib.machine.if_add_category(machine, category, category_to_add) thxbob.lib.machine.if_add_category(machine, category, category_to_add)
end end
else else
if not data.raw["recipe-category"][category] then if not data.raw["recipe-category"][category] then
log("Crafting category " .. category .. " does not exist.") log("Crafting category " .. category .. " does not exist.")
end end
if not data.raw["recipe-category"][category_to_add] then if not data.raw["recipe-category"][category_to_add] then
log("Crafting category " .. category_to_add .. " does not exist.") log("Crafting category " .. category_to_add .. " does not exist.")
end end
end end
end end
function thxbob.lib.machine.has_resource_category(machine, category_in) function thxbob.lib.machine.has_resource_category(machine, category_in)
local hasit = false local hasit = false
if machine and machine.resource_categories then if machine and machine.resource_categories then
for i, category in pairs(machine.resource_categories) do for i, category in pairs(machine.resource_categories) do
if category == category_in then if category == category_in then
hasit = true hasit = true
end end
end end
end end
return hasit return hasit
end end
function thxbob.lib.machine.add_resource_category(machine, category) function thxbob.lib.machine.add_resource_category(machine, category)
if machine and data.raw["resource-category"][category] then if machine and data.raw["resource-category"][category] then
if not machine.resource_categories then if not machine.resource_categories then
machine.resource_categories = { category } machine.resource_categories = { category }
elseif not thxbob.lib.machine.has_resource_category(machine, category) then elseif not thxbob.lib.machine.has_resource_category(machine, category) then
table.insert(machine.resource_categories, category) table.insert(machine.resource_categories, category)
end end
else else
if not data.raw["resource-category"][category] then if not data.raw["resource-category"][category] then
log("Resource category " .. category .. " does not exist.") log("Resource category " .. category .. " does not exist.")
end end
end end
end end
function thxbob.lib.machine.if_add_resource_category(machine, category, category_to_add) function thxbob.lib.machine.if_add_resource_category(machine, category, category_to_add)
if machine and data.raw["resource-category"][category] and data.raw["resource-category"][category_to_add] then if machine and data.raw["resource-category"][category] and data.raw["resource-category"][category_to_add] then
if thxbob.lib.machine.has_resource_category(machine, category) then if thxbob.lib.machine.has_resource_category(machine, category) then
thxbob.lib.machine.add_resource_category(machine, category_to_add) thxbob.lib.machine.add_resource_category(machine, category_to_add)
end end
else else
if not data.raw["resource-category"][category] then if not data.raw["resource-category"][category] then
log("Resource category " .. category .. " does not exist.") log("Resource category " .. category .. " does not exist.")
end end
if not data.raw["resource-category"][category_to_add] then if not data.raw["resource-category"][category_to_add] then
log("Resource category " .. category_to_add .. " does not exist.") log("Resource category " .. category_to_add .. " does not exist.")
end end
end end
end end
function thxbob.lib.machine.type_if_add_resource_category(machine_type, category, category_to_add) function thxbob.lib.machine.type_if_add_resource_category(machine_type, category, category_to_add)
if data.raw["resource-category"][category] and data.raw["resource-category"][category_to_add] then if data.raw["resource-category"][category] and data.raw["resource-category"][category_to_add] then
for i, machine in pairs(data.raw[machine_type]) do for i, machine in pairs(data.raw[machine_type]) do
thxbob.lib.machine.if_add_resource_category(machine, category, category_to_add) thxbob.lib.machine.if_add_resource_category(machine, category, category_to_add)
end end
else else
if not data.raw["resource-category"][category] then if not data.raw["resource-category"][category] then
log(debug.traceback()) log(debug.traceback())
log("Resource category " .. category .. " does not exist.") log("Resource category " .. category .. " does not exist.")
end end
if not data.raw["resource-category"][category_to_add] then if not data.raw["resource-category"][category_to_add] then
log(debug.traceback()) log(debug.traceback())
log("Resource category " .. category_to_add .. " does not exist.") log("Resource category " .. category_to_add .. " does not exist.")
end end
end end
end end
function thxbob.lib.machine.copy_categories_from(machine_type, from_name, to_name) function thxbob.lib.machine.copy_categories_from(machine_type, from_name, to_name)
local from_machine = data.raw[machine_type][from_name] local from_machine = data.raw[machine_type][from_name]
local to_machine = data.raw[machine_type][to_name] local to_machine = data.raw[machine_type][to_name]
if from_machine and to_machine then if from_machine and to_machine then
for _, category in pairs(from_machine.crafting_categories) do for _, category in pairs(from_machine.crafting_categories) do
thxbob.lib.machine.add_category(to_machine, category) thxbob.lib.machine.add_category(to_machine, category)
end end
end end
end end

View file

@ -1,154 +1,154 @@
local BioInd = require('common')('Bio_Industries_2') local BioInd = require('common')('Bio_Industries_2')
if not thxbob.lib.error then if not thxbob.lib.error then
thxbob.lib.error = {} thxbob.lib.error = {}
end end
function thxbob.lib.error.technology(technology, name, desc) function thxbob.lib.error.technology(technology, name, desc)
if name == nil then if name == nil then
name = "Technology" name = "Technology"
end end
if desc == nil then if desc == nil then
desc = name desc = name
end end
if technology == nil then if technology == nil then
log(name .. " variable not passed") log(name .. " variable not passed")
elseif type(technology) == "table" then elseif type(technology) == "table" then
log(name .. " variable is a table.") log(name .. " variable is a table.")
elseif not (type(technology) == "string") then elseif not (type(technology) == "string") then
log(name .. " variable not a string.") log(name .. " variable not a string.")
elseif not data.raw.technology[technology] then elseif not data.raw.technology[technology] then
log(desc .. " " .. technology .. " does not exist.") log(desc .. " " .. technology .. " does not exist.")
end end
end end
function thxbob.lib.error.recipe(recipe, name, desc) function thxbob.lib.error.recipe(recipe, name, desc)
if name == nil then if name == nil then
name = "Recipe" name = "Recipe"
end end
if desc == nil then if desc == nil then
desc = name desc = name
end end
if recipe == nil then if recipe == nil then
log(name .. " variable not passed") log(name .. " variable not passed")
elseif type(recipe) == "table" then elseif type(recipe) == "table" then
log(name .. " variable is a table.") log(name .. " variable is a table.")
elseif not (type(recipe) == "string") then elseif not (type(recipe) == "string") then
log(name .. " variable not a string.") log(name .. " variable not a string.")
elseif not data.raw.recipe[recipe] then elseif not data.raw.recipe[recipe] then
log(desc .. " " .. recipe .. " does not exist.") log(desc .. " " .. recipe .. " does not exist.")
end end
end end
function thxbob.lib.error.resource(resource, name, desc) function thxbob.lib.error.resource(resource, name, desc)
if name == nil then if name == nil then
name = "Resource" name = "Resource"
end end
if desc == nil then if desc == nil then
desc = name desc = name
end end
if resource == nil then if resource == nil then
log(name .. " variable not passed") log(name .. " variable not passed")
elseif type(resource) == "table" then elseif type(resource) == "table" then
log(name .. " variable is a table.") log(name .. " variable is a table.")
elseif not (type(resource) == "string") then elseif not (type(resource) == "string") then
log(name .. " variable not a string.") log(name .. " variable not a string.")
elseif not data.raw.resource[resource] then elseif not data.raw.resource[resource] then
log(desc .. " " .. resource .. " does not exist.") log(desc .. " " .. resource .. " does not exist.")
end end
end end
function thxbob.lib.error.item(item, name) function thxbob.lib.error.item(item, name)
if name == nil then if name == nil then
name = "Item" name = "Item"
end end
if item == nil then if item == nil then
log(name .. " variable not passed") log(name .. " variable not passed")
elseif type(item) == "table" then elseif type(item) == "table" then
log(name .. " variable is a table.") log(name .. " variable is a table.")
elseif not (type(item) == "string") then elseif not (type(item) == "string") then
log(name .. " variable not a string.") log(name .. " variable not a string.")
else else
local item_type = thxbob.lib.item.get_type(item) local item_type = thxbob.lib.item.get_type(item)
if not item_type then if not item_type then
log(name .. " " .. item .. " not a valid item of any type.") log(name .. " " .. item .. " not a valid item of any type.")
end end
end end
end end
function thxbob.lib.error.item_of_type(item, item_type_in, name) function thxbob.lib.error.item_of_type(item, item_type_in, name)
if name == nil then if name == nil then
name = "Item" name = "Item"
end end
if item == nil then if item == nil then
log(name .. " variable not passed") log(name .. " variable not passed")
elseif type(item) == "table" then elseif type(item) == "table" then
log(name .. " variable is a table.") log(name .. " variable is a table.")
elseif not (type(item) == "string") then elseif not (type(item) == "string") then
log(name .. " variable not a string.") log(name .. " variable not a string.")
else else
local item_type = thxbob.lib.item.get_type(item) local item_type = thxbob.lib.item.get_type(item)
if not item_type then if not item_type then
log(name .. " " .. item .. " does not exist.") log(name .. " " .. item .. " does not exist.")
elseif item_type ~= item_type_in then elseif item_type ~= item_type_in then
log(name .. " " .. item .. " is of type: " .. item_type .. ", expected: " .. item_type_in) log(name .. " " .. item .. " is of type: " .. item_type .. ", expected: " .. item_type_in)
end end
end end
end end
function thxbob.lib.error.ingredient(ingredient, name) function thxbob.lib.error.ingredient(ingredient, name)
if name == nil then if name == nil then
name = "Ingredient" name = "Ingredient"
end end
if ingredient == nil then if ingredient == nil then
log(name .. " variable not passed") log(name .. " variable not passed")
elseif not (type(ingredient == "table")) then elseif not (type(ingredient == "table")) then
log(name .. " variable not a table") log(name .. " variable not a table")
elseif not (type(ingredient.name) == "string") then elseif not (type(ingredient.name) == "string") then
log(name .. ".name variable not a string.") log(name .. ".name variable not a string.")
elseif thxbob.lib.item.get_type(ingredient.name) == nil then elseif thxbob.lib.item.get_type(ingredient.name) == nil then
log(name .. ".name not a valid item of any type.") log(name .. ".name not a valid item of any type.")
end end
if not (type(ingredient.amount) == "number") then if not (type(ingredient.amount) == "number") then
log(name .. ".amount variable not a number.") log(name .. ".amount variable not a number.")
end end
if not (ingredient.type == "item" or ingredient.type == "fluid") then if not (ingredient.type == "item" or ingredient.type == "fluid") then
log(name .. ".type not a valid ingredient item type") log(name .. ".type not a valid ingredient item type")
end end
end end
function thxbob.lib.error.result(result, name) function thxbob.lib.error.result(result, name)
if name == nil then if name == nil then
name = "Result" name = "Result"
end end
if result == nil then if result == nil then
log(name .. " variable not passed") log(name .. " variable not passed")
return return
elseif not (type(result == "table")) then elseif not (type(result == "table")) then
log(name .. " variable not a table") log(name .. " variable not a table")
elseif not (type(result.name) == "string") then elseif not (type(result.name) == "string") then
log(name .. ".name variable not a string.") log(name .. ".name variable not a string.")
elseif thxbob.lib.item.get_type(result.name) == nil then elseif thxbob.lib.item.get_type(result.name) == nil then
log(name .. ".name not a valid item of any type.") log(name .. ".name not a valid item of any type.")
end end
if result.amount then if result.amount then
if type(result.amount) == "number" then if type(result.amount) == "number" then
log(name .. ".amount variable not a number.") log(name .. ".amount variable not a number.")
end end
elseif result.amount_min and result.amount_max then elseif result.amount_min and result.amount_max then
if not (type(result.amount_min) == "number") then if not (type(result.amount_min) == "number") then
log(name .. ".amount_min variable not a number.") log(name .. ".amount_min variable not a number.")
end end
if not (type(result.amount_max) == "number") then if not (type(result.amount_max) == "number") then
log(name .. ".amount_max variable not a number.") log(name .. ".amount_max variable not a number.")
end end
end end
if result.probability then if result.probability then
if not (type(result.probability) == "number") then if not (type(result.probability) == "number") then
log(name .. ".probability not a number") log(name .. ".probability not a number")
end end
end end
if not (result.type == "item" or result.type == "fluid") then if not (result.type == "item" or result.type == "fluid") then
log(name .. ".type not a valid result item type") log(name .. ".type not a valid result item type")
end end
end end

View file

@ -1,80 +1,80 @@
local BioInd = require('common')('Bio_Industries_2') local BioInd = require('common')('Bio_Industries_2')
-- Merges table2's contents into table1. -- Merges table2's contents into table1.
function thxbob.lib.table_merge(table1, table2) function thxbob.lib.table_merge(table1, table2)
for index, value in pairs(table2) do for index, value in pairs(table2) do
if type(value) == "table" then if type(value) == "table" then
if type(table1[index]) == "table" then if type(table1[index]) == "table" then
thxbob.lib.table_merge(table1[index], table2[index]) thxbob.lib.table_merge(table1[index], table2[index])
else else
table1[index] = util.table.deepcopy(table2[index]) table1[index] = util.table.deepcopy(table2[index])
end end
else else
table1[index] = value table1[index] = value
end end
end end
end end
function thxbob.lib.minable_result_check(object) function thxbob.lib.minable_result_check(object)
if object then if object then
if object.results == nil then if object.results == nil then
object.results = {} object.results = {}
end end
if object.result then if object.result then
local item = thxbob.lib.item.ingredient({ type = "item", name = object.result, amount = 1 }) local item = thxbob.lib.item.ingredient({ type = "item", name = object.result, amount = 1 })
if object.count then if object.count then
item.amount = object.count item.amount = object.count
object.count = nil object.count = nil
end end
thxbob.lib.item.add_new(object.results, item) thxbob.lib.item.add_new(object.results, item)
object.result = nil object.result = nil
end end
else else
log(object .. " does not exist.") log(object .. " does not exist.")
end end
end end
function thxbob.lib.belt_speed_ips(ips) function thxbob.lib.belt_speed_ips(ips)
return ips * 1 / 480 return ips * 1 / 480
end end
--Inserts the new item into the table only if it doesn't already exist. (Index optional. Designed to insert strings only.) --Inserts the new item into the table only if it doesn't already exist. (Index optional. Designed to insert strings only.)
function thxbob.lib.safe_insert(array, new_item, index) function thxbob.lib.safe_insert(array, new_item, index)
local addit = true local addit = true
for i, item in pairs(array) do for i, item in pairs(array) do
if item == new_item then if item == new_item then
addit = false addit = false
end end
end end
if addit then if addit then
if index then if index then
table.insert(array, index, new_item) table.insert(array, index, new_item)
else else
table.insert(array, new_item) table.insert(array, new_item)
end end
end end
end end
--takes an item/fluid/entity(maybe even recipe) and returns a complete icons array. --takes an item/fluid/entity(maybe even recipe) and returns a complete icons array.
--if it has no icons= tag, it builds one from icon and icon_size. --if it has no icons= tag, it builds one from icon and icon_size.
--Example use thxbob.lib.icons_from_item(data.raw.item.wood) --Example use thxbob.lib.icons_from_item(data.raw.item.wood)
function thxbob.lib.icons_from_item(item) function thxbob.lib.icons_from_item(item)
if item and type(item) == "table" then if item and type(item) == "table" then
local icons = {} local icons = {}
if item.icons then if item.icons then
icons = item.icons icons = item.icons
elseif item.icon then elseif item.icon then
icons = { { icon = item.icon, icon_size = item.icon_size or 64 } } icons = { { icon = item.icon, icon_size = item.icon_size or 64 } }
else else
icons = nil icons = nil
log(debug.traceback()) log(debug.traceback())
log(item.name .. " has no valid icons.") log(item.name .. " has no valid icons.")
end end
return icons return icons
end end
log(debug.traceback()) log(debug.traceback())
log("object does not exist.") log("object does not exist.")
return nil return nil
end end

View file

@ -1,363 +1,363 @@
local BioInd = require('common')('Bio_Industries_2') local BioInd = require('common')('Bio_Industries_2')
if not thxbob.lib.item then if not thxbob.lib.item then
thxbob.lib.item = {} thxbob.lib.item = {}
end end
function thxbob.lib.item.get_type(name) --returns actual item type function thxbob.lib.item.get_type(name) --returns actual item type
local item_type = nil local item_type = nil
if type(name) == "string" then if type(name) == "string" then
for type_name, _ in pairs(defines.prototypes["item"]) do for type_name, _ in pairs(defines.prototypes["item"]) do
if data.raw[type_name] and data.raw[type_name][name] then if data.raw[type_name] and data.raw[type_name][name] then
item_type = type_name item_type = type_name
end end
end end
if data.raw.fluid and data.raw.fluid[name] then if data.raw.fluid and data.raw.fluid[name] then
item_type = "fluid" item_type = "fluid"
end end
else else
log("Item name is not a string") log("Item name is not a string")
end end
return item_type return item_type
end end
function thxbob.lib.item.get_basic_type(name) --returns fluid for fluid, item for all other types. function thxbob.lib.item.get_basic_type(name) --returns fluid for fluid, item for all other types.
local item_type = thxbob.lib.item.get_type(name) local item_type = thxbob.lib.item.get_type(name)
if not (item_type == "fluid" or item_type == nil) then if not (item_type == "fluid" or item_type == nil) then
item_type = "item" item_type = "item"
end end
return item_type return item_type
end end
function thxbob.lib.item.get_basic_type_simple(name) --assumes type is item, even if the item doesn't exist function thxbob.lib.item.get_basic_type_simple(name) --assumes type is item, even if the item doesn't exist
local item_type = "item" local item_type = "item"
if data.raw.fluid[name] then if data.raw.fluid[name] then
item_type = "fluid" item_type = "fluid"
end end
return item_type return item_type
end end
function thxbob.lib.item.ingredient_simple(inputs) --doesn't care if the item actually exists or not, returns if a valid ingredient structure can be determined. function thxbob.lib.item.ingredient_simple(inputs) --doesn't care if the item actually exists or not, returns if a valid ingredient structure can be determined.
local item = {} local item = {}
if type(inputs) == "table" then if type(inputs) == "table" then
if inputs.name and type(inputs.name) == "string" then if inputs.name and type(inputs.name) == "string" then
item.name = inputs.name item.name = inputs.name
else else
log(debug.traceback()) log(debug.traceback())
log("Unable to determine an ingredient name") log("Unable to determine an ingredient name")
return nil return nil
end end
if inputs.amount and type(inputs.amount) == "number" then if inputs.amount and type(inputs.amount) == "number" then
item.amount = inputs.amount item.amount = inputs.amount
else else
log(debug.traceback()) log(debug.traceback())
log("Unable to determine an ingredient amount") log("Unable to determine an ingredient amount")
return nil return nil
end end
if inputs.type then if inputs.type then
item.type = inputs.type item.type = inputs.type
else else
log(debug.traceback()) log(debug.traceback())
log("Unable to determine an ingredient type") log("Unable to determine an ingredient type")
return nil return nil
end end
if item.type == "item" then if item.type == "item" then
if type(item.amount) ~= "number" or item.amount < 1 then if type(item.amount) ~= "number" or item.amount < 1 then
item.amount = 1 item.amount = 1
else else
item.amount = math.floor(item.amount) item.amount = math.floor(item.amount)
end end
end end
if item.type == "fluid" then if item.type == "fluid" then
item.temperature = inputs.temperature item.temperature = inputs.temperature
item.minimum_temperature = inputs.minimum_temperature item.minimum_temperature = inputs.minimum_temperature
item.maximum_temperature = inputs.maximum_temperature item.maximum_temperature = inputs.maximum_temperature
item.fluidbox_index = inputs.fluidbox_index item.fluidbox_index = inputs.fluidbox_index
item.fluidbox_multiplier = inputs.fluidbox_multiplier item.fluidbox_multiplier = inputs.fluidbox_multiplier
end end
item.ignored_by_stats = inputs.ignored_by_stats item.ignored_by_stats = inputs.ignored_by_stats
return item return item
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.ingredient(item) thxbob.lib.error.ingredient(item)
return nil return nil
end end
end end
function thxbob.lib.item.ingredient(inputs) --returns a valid ingredient only if the item exists. function thxbob.lib.item.ingredient(inputs) --returns a valid ingredient only if the item exists.
local item = thxbob.lib.item.ingredient_simple(inputs) local item = thxbob.lib.item.ingredient_simple(inputs)
if item then if item then
return item return item
else else
if inputs and inputs.name then if inputs and inputs.name then
log(inputs.name) log(inputs.name)
end end
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.ingredient(inputs) thxbob.lib.error.ingredient(inputs)
return nil return nil
end end
end end
--Same as ingredient, but has support for amount_min, amount_max and probability --Same as ingredient, but has support for amount_min, amount_max and probability
function thxbob.lib.item.result_simple(inputs) function thxbob.lib.item.result_simple(inputs)
local item = {} local item = {}
if type(inputs) == "table" then if type(inputs) == "table" then
if inputs.name and type(inputs.name) == "string" then if inputs.name and type(inputs.name) == "string" then
item.name = inputs.name item.name = inputs.name
else else
log(debug.traceback()) log(debug.traceback())
log("Unable to determine a result name") log("Unable to determine a result name")
return nil return nil
end end
if inputs.amount and type(inputs.amount) == "number" then if inputs.amount and type(inputs.amount) == "number" then
item.amount = inputs.amount item.amount = inputs.amount
elseif inputs.amount_min and inputs.amount_max then elseif inputs.amount_min and inputs.amount_max then
item.amount_min = inputs.amount_min item.amount_min = inputs.amount_min
item.amount_max = inputs.amount_max item.amount_max = inputs.amount_max
else else
log(debug.traceback()) log(debug.traceback())
log("Unable to determine a result amount") log("Unable to determine a result amount")
return nil return nil
end end
if inputs.probability then if inputs.probability then
item.probability = inputs.probability item.probability = inputs.probability
end end
if inputs.type then if inputs.type then
item.type = inputs.type item.type = inputs.type
else else
item.type = thxbob.lib.item.get_basic_type_simple(item.name) item.type = thxbob.lib.item.get_basic_type_simple(item.name)
end end
if item.type == "item" then if item.type == "item" then
if item.amount then if item.amount then
if type(item.amount) ~= "number" or item.amount < 1 then if type(item.amount) ~= "number" or item.amount < 1 then
item.amount = 1 item.amount = 1
else else
item.amount = math.floor(item.amount) item.amount = math.floor(item.amount)
end end
end end
if item.amount_min then if item.amount_min then
if type(item.amount_min) ~= "number" or item.amount_min < 1 then if type(item.amount_min) ~= "number" or item.amount_min < 1 then
item.amount_min = 0 item.amount_min = 0
else else
item.amount_min = math.floor(item.amount_min) item.amount_min = math.floor(item.amount_min)
end end
end end
if item.amount_max then if item.amount_max then
if type(item.amount_max) ~= "number" or item.amount_max < 1 then if type(item.amount_max) ~= "number" or item.amount_max < 1 then
item.amount_max = 1 item.amount_max = 1
else else
item.amount_max = math.ceil(item.amount_max) item.amount_max = math.ceil(item.amount_max)
end end
end end
end end
if item.type == "fluid" then if item.type == "fluid" then
item.fluidbox_index = inputs.fluidbox_index item.fluidbox_index = inputs.fluidbox_index
item.temperature = inputs.temperature item.temperature = inputs.temperature
else else
item.extra_count_fraction = inputs.extra_count_fraction item.extra_count_fraction = inputs.extra_count_fraction
item.percent_spoiled = inputs.percent_spoiled item.percent_spoiled = inputs.percent_spoiled
end end
item.ignored_by_stats = inputs.ignored_by_stats item.ignored_by_stats = inputs.ignored_by_stats
item.ignored_by_productivity = inputs.ignored_by_productivity item.ignored_by_productivity = inputs.ignored_by_productivity
item.show_details_in_recipe_tooltip = inputs.show_details_in_recipe_tooltip item.show_details_in_recipe_tooltip = inputs.show_details_in_recipe_tooltip
end end
if if
type(item.name) == "string" type(item.name) == "string"
and (type(item.amount) == "number" or (type(item.amount_min) == "number" and type(item.amount_max) == "number")) and (type(item.amount) == "number" or (type(item.amount_min) == "number" and type(item.amount_max) == "number"))
and (item.probability == nil or type(item.probability) == "number") and (item.probability == nil or type(item.probability) == "number")
and (item.type == "item" or item.type == "fluid") and (item.type == "item" or item.type == "fluid")
then then
return item return item
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.result(item) thxbob.lib.error.result(item)
return nil return nil
end end
end end
function thxbob.lib.item.result(inputs) --returns a valid result only if the item exists. function thxbob.lib.item.result(inputs) --returns a valid result only if the item exists.
local item = thxbob.lib.item.result_simple(inputs) local item = thxbob.lib.item.result_simple(inputs)
if item then if item then
return item return item
else else
if inputs and inputs.name then if inputs and inputs.name then
log(inputs.name) log(inputs.name)
end end
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.result(inputs) thxbob.lib.error.result(inputs)
return nil return nil
end end
end end
function thxbob.lib.item.combine(item1_in, item2_in) function thxbob.lib.item.combine(item1_in, item2_in)
local item = {} local item = {}
local item1 = thxbob.lib.item.result(item1_in) local item1 = thxbob.lib.item.result(item1_in)
local item2 = thxbob.lib.item.result(item2_in) local item2 = thxbob.lib.item.result(item2_in)
if item1 and item2 then if item1 and item2 then
item.name = item1.name item.name = item1.name
item.type = item1.type item.type = item1.type
if item1.amount and item2.amount then if item1.amount and item2.amount then
item.amount = item1.amount + item2.amount item.amount = item1.amount + item2.amount
elseif item1.amount_min and item1.amount_max and item2.amount_min and item2.amount_max then elseif item1.amount_min and item1.amount_max and item2.amount_min and item2.amount_max then
item.amount_min = item1.amount_min + item2.amount_min item.amount_min = item1.amount_min + item2.amount_min
item.amount_max = item1.amount_max + item2.amount_max item.amount_max = item1.amount_max + item2.amount_max
elseif item1.amount_min and item1.amount_max and item2.amount then elseif item1.amount_min and item1.amount_max and item2.amount then
item.amount_min = item1.amount_min + item2.amount item.amount_min = item1.amount_min + item2.amount
item.amount_max = item1.amount_max + item2.amount item.amount_max = item1.amount_max + item2.amount
elseif item1.amount and item2.amount_min and item2.amount_max then elseif item1.amount and item2.amount_min and item2.amount_max then
item.amount_min = item1.amount + item2.amount_min item.amount_min = item1.amount + item2.amount_min
item.amount_max = item1.amount + item2.amount_max item.amount_max = item1.amount + item2.amount_max
end end
if item1.probability and item2.probability then if item1.probability and item2.probability then
item.probability = (item1.probability + item2.probability) / 2 item.probability = (item1.probability + item2.probability) / 2
elseif item1.probability then elseif item1.probability then
item.probability = (item1.probability + 1) / 2 item.probability = (item1.probability + 1) / 2
elseif item2.probability then elseif item2.probability then
item.probability = (item2.probability + 1) / 2 item.probability = (item2.probability + 1) / 2
end end
if item1.ignored_by_productivity and item2.ignored_by_productivity then if item1.ignored_by_productivity and item2.ignored_by_productivity then
item.ignored_by_productivity = item1.ignored_by_productivity + item2.ignored_by_productivity item.ignored_by_productivity = item1.ignored_by_productivity + item2.ignored_by_productivity
elseif item1.ignored_by_productivity then elseif item1.ignored_by_productivity then
item.ignored_by_productivity = item1.ignored_by_productivity item.ignored_by_productivity = item1.ignored_by_productivity
elseif item2.ignored_by_productivity then elseif item2.ignored_by_productivity then
item.ignored_by_productivity = item2.ignored_by_productivity item.ignored_by_productivity = item2.ignored_by_productivity
end end
if item1.ignored_by_stats and item2.ignored_by_stats then if item1.ignored_by_stats and item2.ignored_by_stats then
item.ignored_by_stats = item1.ignored_by_stats + item2.ignored_by_stats item.ignored_by_stats = item1.ignored_by_stats + item2.ignored_by_stats
elseif item1.ignored_by_stats then elseif item1.ignored_by_stats then
item.ignored_by_stats = item1.ignored_by_stats item.ignored_by_stats = item1.ignored_by_stats
elseif item2.ignored_by_stats then elseif item2.ignored_by_stats then
item.ignored_by_stats = item2.ignored_by_stats item.ignored_by_stats = item2.ignored_by_stats
end end
item.fluidbox_index = item1.fluidbox_index or item2.fluidbox_index item.fluidbox_index = item1.fluidbox_index or item2.fluidbox_index
return item return item
else else
return nil return nil
end end
end end
function thxbob.lib.item.add(list, item_in) --increments amount if exists function thxbob.lib.item.add(list, item_in) --increments amount if exists
local item = thxbob.lib.item.result(item_in) local item = thxbob.lib.item.result(item_in)
if type(list) == "table" and item then if type(list) == "table" and item then
local addit = true local addit = true
for i, object in pairs(list) do for i, object in pairs(list) do
if object.name == item.name then if object.name == item.name then
addit = false addit = false
list[i] = thxbob.lib.item.combine(object, item) list[i] = thxbob.lib.item.combine(object, item)
end end
end end
if addit then if addit then
table.insert(list, item) table.insert(list, item)
end end
end end
end end
function thxbob.lib.item.add_new(list, item_in) --ignores if exists function thxbob.lib.item.add_new(list, item_in) --ignores if exists
local item = thxbob.lib.item.result(item_in) local item = thxbob.lib.item.result(item_in)
if type(list) == "table" and item then if type(list) == "table" and item then
local addit = true local addit = true
for i, object in pairs(list) do for i, object in pairs(list) do
local basic_object = thxbob.lib.item.result(object) local basic_object = thxbob.lib.item.result(object)
if basic_object and item.name == basic_object.name then if basic_object and item.name == basic_object.name then
addit = false addit = false
end end
end end
if addit then if addit then
table.insert(list, item) table.insert(list, item)
end end
end end
end end
function thxbob.lib.item.remove(list, item) function thxbob.lib.item.remove(list, item)
if type(list) == "table" and type(item) == "string" then if type(list) == "table" and type(item) == "string" then
for i, object in ipairs(list) do for i, object in ipairs(list) do
if object.name == item then if object.name == item then
table.remove(list, i) table.remove(list, i)
end end
end end
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.item(item) thxbob.lib.error.item(item)
end end
end end
function thxbob.lib.item.set(list, item_in) function thxbob.lib.item.set(list, item_in)
local item = thxbob.lib.item.result(item_in) local item = thxbob.lib.item.result(item_in)
if type(list) == "table" and item then if type(list) == "table" and item then
local addit = true local addit = true
for i, object in pairs(list) do for i, object in pairs(list) do
if object.name == item.name then if object.name == item.name then
list[i] = item list[i] = item
addit = false addit = false
end end
end end
if addit then if addit then
table.insert(list, item) table.insert(list, item)
end end
end end
end end
function thxbob.lib.item.hide(item_name) function thxbob.lib.item.hide(item_name)
if type(item_name) == "string" then if type(item_name) == "string" then
local item = data.raw.item[item_name] or data.raw.fluid[item_name] local item = data.raw.item[item_name] or data.raw.fluid[item_name]
if item then if item then
item.hidden = true item.hidden = true
end end
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.item(item_name) thxbob.lib.error.item(item_name)
end end
end end
function thxbob.lib.item.hide_entity(type_name, entity_name) function thxbob.lib.item.hide_entity(type_name, entity_name)
if type(type_name) == "string" and type(entity_name) == "string" then if type(type_name) == "string" and type(entity_name) == "string" then
local entities = data.raw[type_name] local entities = data.raw[type_name]
if entities then if entities then
local entity = entities[entity_name] local entity = entities[entity_name]
if entity then if entity then
entity.hidden = true entity.hidden = true
end end
end end
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.item(entity_name) thxbob.lib.error.item(entity_name)
end end
end end
function thxbob.lib.item.set_subgroup(item_name, subgroup) function thxbob.lib.item.set_subgroup(item_name, subgroup)
if type(item_name) == "string" and type(subgroup) == "string" then if type(item_name) == "string" and type(subgroup) == "string" then
local item = data.raw.item[item_name] local item = data.raw.item[item_name]
if item then if item then
item.subgroup = subgroup item.subgroup = subgroup
else else
item = data.raw.fluid[item_name] item = data.raw.fluid[item_name]
if item then if item then
item.subgroup = subgroup item.subgroup = subgroup
end end
end end
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.item(item_name) thxbob.lib.error.item(item_name)
end end
end end

File diff suppressed because it is too large Load diff

View file

@ -1,419 +1,419 @@
local BioInd = require('common')('Bio_Industries_2') local BioInd = require('common')('Bio_Industries_2')
if not thxbob.lib.tech then if not thxbob.lib.tech then
thxbob.lib.tech = {} thxbob.lib.tech = {}
end end
local function add_new_science_pack(technology, pack, amount) local function add_new_science_pack(technology, pack, amount)
if technology.unit and technology.unit.ingredients then if technology.unit and technology.unit.ingredients then
local addit = true local addit = true
for i, ingredient in pairs(technology.unit.ingredients) do for i, ingredient in pairs(technology.unit.ingredients) do
if ingredient[1] == pack then if ingredient[1] == pack then
addit = false addit = false
end end
end end
if addit then if addit then
table.insert(technology.unit.ingredients, { pack, amount }) table.insert(technology.unit.ingredients, { pack, amount })
end end
end end
end end
local function add_science_pack(technology, pack, amount) local function add_science_pack(technology, pack, amount)
if technology.unit and technology.unit.ingredients then if technology.unit and technology.unit.ingredients then
local addit = true local addit = true
for i, ingredient in pairs(technology.unit.ingredients) do for i, ingredient in pairs(technology.unit.ingredients) do
if ingredient[1] == pack then if ingredient[1] == pack then
addit = false addit = false
ingredient[2] = ingredient[2] + amount ingredient[2] = ingredient[2] + amount
end end
end end
if addit then if addit then
table.insert(technology.unit.ingredients, { pack, amount }) table.insert(technology.unit.ingredients, { pack, amount })
end end
end end
end end
local function remove_science_pack(technology, pack) local function remove_science_pack(technology, pack)
if technology.unit and technology.unit.ingredients then if technology.unit and technology.unit.ingredients then
for i, ingredient in pairs(technology.unit.ingredients) do for i, ingredient in pairs(technology.unit.ingredients) do
if ingredient[1] == pack then if ingredient[1] == pack then
table.remove(technology.unit.ingredients, i) table.remove(technology.unit.ingredients, i)
end end
end end
end end
end end
local function replace_science_pack(technology, old, new) local function replace_science_pack(technology, old, new)
if technology.unit and technology.unit.ingredients then if technology.unit and technology.unit.ingredients then
local doit = false local doit = false
local amount = 0 local amount = 0
for i, ingredient in pairs(technology.unit.ingredients) do for i, ingredient in pairs(technology.unit.ingredients) do
if ingredient[1] == old then if ingredient[1] == old then
doit = true doit = true
amount = ingredient[2] + amount amount = ingredient[2] + amount
end end
end end
if doit then if doit then
remove_science_pack(technology, old) remove_science_pack(technology, old)
add_science_pack(technology, new, amount) add_science_pack(technology, new, amount)
end end
end end
end end
function thxbob.lib.tech.replace_science_pack(technology, old, new) function thxbob.lib.tech.replace_science_pack(technology, old, new)
if if
type(technology) == "string" type(technology) == "string"
and type(old) == "string" and type(old) == "string"
and type(new) == "string" and type(new) == "string"
and data.raw.technology[technology] and data.raw.technology[technology]
-- data.raw.tool[old] and -- data.raw.tool[old] and
and data.raw.tool[new] and data.raw.tool[new]
then then
if data.raw.technology[technology].unit then if data.raw.technology[technology].unit then
replace_science_pack(data.raw.technology[technology], old, new) replace_science_pack(data.raw.technology[technology], old, new)
end end
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.technology(technology) thxbob.lib.error.technology(technology)
thxbob.lib.error.item_of_type(old, "tool", "Old science pack") thxbob.lib.error.item_of_type(old, "tool", "Old science pack")
thxbob.lib.error.item_of_type(new, "tool", "New science pack") thxbob.lib.error.item_of_type(new, "tool", "New science pack")
end end
end end
function thxbob.lib.tech.add_new_science_pack(technology, pack, amount) function thxbob.lib.tech.add_new_science_pack(technology, pack, amount)
if if
type(technology) == "string" type(technology) == "string"
and type(pack) == "string" and type(pack) == "string"
and type(amount) == "number" and type(amount) == "number"
and data.raw.technology[technology] and data.raw.technology[technology]
and data.raw.tool[pack] and data.raw.tool[pack]
then then
if data.raw.technology[technology].unit then if data.raw.technology[technology].unit then
add_new_science_pack(data.raw.technology[technology], pack, amount) add_new_science_pack(data.raw.technology[technology], pack, amount)
end end
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.technology(technology) thxbob.lib.error.technology(technology)
thxbob.lib.error.item_of_type(pack, "tool", "Science pack") thxbob.lib.error.item_of_type(pack, "tool", "Science pack")
end end
end end
function thxbob.lib.tech.add_science_pack(technology, pack, amount) function thxbob.lib.tech.add_science_pack(technology, pack, amount)
if if
type(technology) == "string" type(technology) == "string"
and type(pack) == "string" and type(pack) == "string"
and type(amount) == "number" and type(amount) == "number"
and data.raw.technology[technology] and data.raw.technology[technology]
and data.raw.tool[pack] and data.raw.tool[pack]
then then
if data.raw.technology[technology].unit then if data.raw.technology[technology].unit then
add_science_pack(data.raw.technology[technology], pack, amount) add_science_pack(data.raw.technology[technology], pack, amount)
end end
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.technology(technology) thxbob.lib.error.technology(technology)
thxbob.lib.error.item_of_type(pack, "tool", "Science pack") thxbob.lib.error.item_of_type(pack, "tool", "Science pack")
end end
end end
function thxbob.lib.tech.add_science_packs(technology, science_packs) function thxbob.lib.tech.add_science_packs(technology, science_packs)
if type(technology) == "string" and type(science_packs) == "table" then if type(technology) == "string" and type(science_packs) == "table" then
for i, science_pack in pairs(science_packs) do for i, science_pack in pairs(science_packs) do
if if
type(science_pack) == "table" type(science_pack) == "table"
and type(science_pack[1]) == "string" and type(science_pack[1]) == "string"
and data.raw.tool[science_pack[1]] and data.raw.tool[science_pack[1]]
and type(science_pack[2]) == "number" and type(science_pack[2]) == "number"
then then
thxbob.lib.tech.add_science_pack(technology, science_pack[1], science_pack[2]) thxbob.lib.tech.add_science_pack(technology, science_pack[1], science_pack[2])
end end
end end
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.technology(technology) thxbob.lib.error.technology(technology)
end end
end end
function thxbob.lib.tech.remove_science_pack(technology, pack) function thxbob.lib.tech.remove_science_pack(technology, pack)
if type(technology) == "string" and type(pack) == "string" and data.raw.technology[technology] then if type(technology) == "string" and type(pack) == "string" and data.raw.technology[technology] then
if data.raw.technology[technology].unit then if data.raw.technology[technology].unit then
remove_science_pack(data.raw.technology[technology], pack) remove_science_pack(data.raw.technology[technology], pack)
end end
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.technology(technology) thxbob.lib.error.technology(technology)
end end
end end
function thxbob.lib.tech.clear_science_packs(technology) function thxbob.lib.tech.clear_science_packs(technology)
if type(technology) == "string" and data.raw.technology[technology] then if type(technology) == "string" and data.raw.technology[technology] then
if data.raw.technology[technology].unit then if data.raw.technology[technology].unit then
data.raw.technology[technology].unit.ingredients = {} data.raw.technology[technology].unit.ingredients = {}
end end
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.technology(technology) thxbob.lib.error.technology(technology)
end end
end end
function thxbob.lib.tech.set_science_packs(technology, science_packs) function thxbob.lib.tech.set_science_packs(technology, science_packs)
if type(technology) == "string" and data.raw.technology[technology] and type(science_packs) == "table" then if type(technology) == "string" and data.raw.technology[technology] and type(science_packs) == "table" then
thxbob.lib.tech.clear_science_packs(technology) thxbob.lib.tech.clear_science_packs(technology)
thxbob.lib.tech.add_science_packs(technology, science_packs) thxbob.lib.tech.add_science_packs(technology, science_packs)
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.technology(technology) thxbob.lib.error.technology(technology)
end end
end end
function thxbob.lib.tech.set_science_pack_count(technology, count) function thxbob.lib.tech.set_science_pack_count(technology, count)
if type(technology) == "string" and data.raw.technology[technology] then if type(technology) == "string" and data.raw.technology[technology] then
local prototype = data.raw.technology[technology] local prototype = data.raw.technology[technology]
if prototype.unit then if prototype.unit then
prototype.unit.count = count prototype.unit.count = count
end end
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.technology(technology) thxbob.lib.error.technology(technology)
end end
end end
local function has_recipe_unlock(technology, recipe) local function has_recipe_unlock(technology, recipe)
if technology.effects then if technology.effects then
for i, effect in pairs(technology.effects) do for i, effect in pairs(technology.effects) do
if effect.type == "unlock-recipe" and effect.recipe == recipe then if effect.type == "unlock-recipe" and effect.recipe == recipe then
return true return true
end end
end end
end end
return false return false
end end
local function add_recipe_unlock(technology, recipe) local function add_recipe_unlock(technology, recipe)
local addit = true local addit = true
if not technology.effects then if not technology.effects then
technology.effects = {} technology.effects = {}
end end
for i, effect in pairs(technology.effects) do for i, effect in pairs(technology.effects) do
if effect.type == "unlock-recipe" and effect.recipe == recipe then if effect.type == "unlock-recipe" and effect.recipe == recipe then
addit = false addit = false
end end
end end
if addit then if addit then
table.insert(technology.effects, { type = "unlock-recipe", recipe = recipe }) table.insert(technology.effects, { type = "unlock-recipe", recipe = recipe })
end end
end end
local function remove_recipe_unlock(technology, recipe) local function remove_recipe_unlock(technology, recipe)
if technology.effects then if technology.effects then
for i, effect in pairs(technology.effects) do for i, effect in pairs(technology.effects) do
if effect.type == "unlock-recipe" and effect.recipe == recipe then if effect.type == "unlock-recipe" and effect.recipe == recipe then
table.remove(technology.effects, i) table.remove(technology.effects, i)
end end
end end
end end
end end
function thxbob.lib.tech.has_recipe_unlock(technology, recipe) function thxbob.lib.tech.has_recipe_unlock(technology, recipe)
if if
type(technology) == "string" type(technology) == "string"
and type(recipe) == "string" and type(recipe) == "string"
and data.raw.technology[technology] and data.raw.technology[technology]
and data.raw.recipe[recipe] and data.raw.recipe[recipe]
then then
local hasit = false local hasit = false
hasit = has_recipe_unlock(data.raw.technology[technology], recipe) hasit = has_recipe_unlock(data.raw.technology[technology], recipe)
return hasit return hasit
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.technology(technology) thxbob.lib.error.technology(technology)
thxbob.lib.error.recipe(recipe) thxbob.lib.error.recipe(recipe)
return false return false
end end
end end
function thxbob.lib.tech.add_recipe_unlock(technology, recipe) function thxbob.lib.tech.add_recipe_unlock(technology, recipe)
if if
type(technology) == "string" type(technology) == "string"
and type(recipe) == "string" and type(recipe) == "string"
and data.raw.technology[technology] and data.raw.technology[technology]
and data.raw.recipe[recipe] and data.raw.recipe[recipe]
then then
add_recipe_unlock(data.raw.technology[technology], recipe) add_recipe_unlock(data.raw.technology[technology], recipe)
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.technology(technology) thxbob.lib.error.technology(technology)
thxbob.lib.error.recipe(recipe) thxbob.lib.error.recipe(recipe)
end end
end end
function thxbob.lib.tech.remove_recipe_unlock(technology, recipe) function thxbob.lib.tech.remove_recipe_unlock(technology, recipe)
if if
type(technology) == "string" type(technology) == "string"
and type(recipe) == "string" and type(recipe) == "string"
and data.raw.technology[technology] and data.raw.technology[technology]
-- data.raw.recipe[recipe] --don't check to see if something we're removing exists. -- data.raw.recipe[recipe] --don't check to see if something we're removing exists.
then then
remove_recipe_unlock(data.raw.technology[technology], recipe) remove_recipe_unlock(data.raw.technology[technology], recipe)
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.technology(technology) thxbob.lib.error.technology(technology)
thxbob.lib.error.recipe(recipe) thxbob.lib.error.recipe(recipe)
end end
end end
local function add_prerequisite(technology, prerequisite) local function add_prerequisite(technology, prerequisite)
local addit = true local addit = true
if technology.prerequisites then if technology.prerequisites then
for i, check in ipairs(technology.prerequisites) do for i, check in ipairs(technology.prerequisites) do
if check == prerequisite then if check == prerequisite then
addit = false addit = false
end end
end end
else else
technology.prerequisites = {} technology.prerequisites = {}
end end
if addit then if addit then
table.insert(technology.prerequisites, prerequisite) table.insert(technology.prerequisites, prerequisite)
end end
end end
local function remove_prerequisite(technology, prerequisite) local function remove_prerequisite(technology, prerequisite)
if technology.prerequisites then if technology.prerequisites then
for i, check in ipairs(technology.prerequisites) do for i, check in ipairs(technology.prerequisites) do
if check == prerequisite then if check == prerequisite then
table.remove(technology.prerequisites, i) table.remove(technology.prerequisites, i)
end end
end end
end end
end end
local function replace_prerequisite(technology, old, new) local function replace_prerequisite(technology, old, new)
if technology.prerequisites then if technology.prerequisites then
for i, prerequisite in ipairs(technology.prerequisites) do for i, prerequisite in ipairs(technology.prerequisites) do
if prerequisite == old then if prerequisite == old then
remove_prerequisite(technology, old) remove_prerequisite(technology, old)
add_prerequisite(technology, new) add_prerequisite(technology, new)
end end
end end
end end
end end
function thxbob.lib.tech.replace_prerequisite(technology, old, new) function thxbob.lib.tech.replace_prerequisite(technology, old, new)
if if
type(technology) == "string" type(technology) == "string"
and type(old) == "string" and type(old) == "string"
and type(new) == "string" and type(new) == "string"
and data.raw.technology[technology] and data.raw.technology[technology]
-- data.raw.technology[old] and -- data.raw.technology[old] and
and data.raw.technology[new] and data.raw.technology[new]
then then
replace_prerequisite(data.raw.technology[technology], old, new) replace_prerequisite(data.raw.technology[technology], old, new)
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.technology(technology) thxbob.lib.error.technology(technology)
thxbob.lib.error.technology(old, "Old prerequisite", "Old prerequisite technology") thxbob.lib.error.technology(old, "Old prerequisite", "Old prerequisite technology")
thxbob.lib.error.technology(new, "New prerequisite", "New prerequisite technology") thxbob.lib.error.technology(new, "New prerequisite", "New prerequisite technology")
end end
end end
function thxbob.lib.tech.add_prerequisite(technology, prerequisite) function thxbob.lib.tech.add_prerequisite(technology, prerequisite)
if if
type(technology) == "string" type(technology) == "string"
and type(prerequisite) == "string" and type(prerequisite) == "string"
and data.raw.technology[technology] and data.raw.technology[technology]
and data.raw.technology[prerequisite] and data.raw.technology[prerequisite]
then then
add_prerequisite(data.raw.technology[technology], prerequisite) add_prerequisite(data.raw.technology[technology], prerequisite)
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.technology(technology) thxbob.lib.error.technology(technology)
thxbob.lib.error.technology(prerequisite, "Prerequisite", "Prerequisite technology") thxbob.lib.error.technology(prerequisite, "Prerequisite", "Prerequisite technology")
end end
end end
function thxbob.lib.tech.remove_prerequisite(technology, prerequisite) function thxbob.lib.tech.remove_prerequisite(technology, prerequisite)
if if
type(technology) == "string" type(technology) == "string"
and type(prerequisite) == "string" and type(prerequisite) == "string"
and data.raw.technology[technology] and data.raw.technology[technology]
-- data.raw.technology[prerequisite] -- data.raw.technology[prerequisite]
then then
remove_prerequisite(data.raw.technology[technology], prerequisite) remove_prerequisite(data.raw.technology[technology], prerequisite)
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.technology(technology) thxbob.lib.error.technology(technology)
thxbob.lib.error.technology(prerequisite, "Prerequisite", "Prerequisite technology") thxbob.lib.error.technology(prerequisite, "Prerequisite", "Prerequisite technology")
end end
end end
function thxbob.lib.tech.hide(technology_name) function thxbob.lib.tech.hide(technology_name)
if type(technology_name) == "string" and data.raw.technology[technology_name] then if type(technology_name) == "string" and data.raw.technology[technology_name] then
local technology = data.raw.technology[technology_name] local technology = data.raw.technology[technology_name]
technology.hidden = true technology.hidden = true
technology.enabled = false technology.enabled = false
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.technology(technology_name) thxbob.lib.error.technology(technology_name)
end end
end end
function thxbob.lib.tech.ignore_tech_cost_multiplier(technology_name, ignore) function thxbob.lib.tech.ignore_tech_cost_multiplier(technology_name, ignore)
if type(technology_name) == "string" and type(ignore) == "boolean" then if type(technology_name) == "string" and type(ignore) == "boolean" then
local technology = data.raw.technology[technology_name] local technology = data.raw.technology[technology_name]
if technology then if technology then
technology.ignore_tech_cost_multiplier = ignore technology.ignore_tech_cost_multiplier = ignore
end end
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.technology(technology_name) thxbob.lib.error.technology(technology_name)
end end
end end
function thxbob.lib.tech.technology_icon_constant(technology_icon, constant_icon, x, y) function thxbob.lib.tech.technology_icon_constant(technology_icon, constant_icon, x, y)
local scale = 0.5 local scale = 0.5
local xshift = x or 64 local xshift = x or 64
local yshift = y or 64 local yshift = y or 64
if type(technology_icon) == "table" and technology_icon.icon and technology_icon.icon_size then if type(technology_icon) == "table" and technology_icon.icon and technology_icon.icon_size then
local icons = { local icons = {
technology_icon, technology_icon,
{ {
icon = constant_icon, icon = constant_icon,
icon_size = 128, icon_size = 128,
scale = scale, scale = scale,
shift = { xshift * scale, yshift * scale }, shift = { xshift * scale, yshift * scale },
}, },
} }
return icons return icons
else else
log(debug.traceback()) log(debug.traceback())
log(technology_icon .. " not given in required table format") log(technology_icon .. " not given in required table format")
end end
end end
function thxbob.lib.tech.technology_line_icon_constant(technology_line, first, last, technology_icon, constant_icon) function thxbob.lib.tech.technology_line_icon_constant(technology_line, first, last, technology_icon, constant_icon)
local scale = 0.5 local scale = 0.5
if type(technology_icon) == "table" and technology_icon.icon and technology_icon.icon_size then if type(technology_icon) == "table" and technology_icon.icon and technology_icon.icon_size then
for i = first, last do for i = first, last do
local tech_name = technology_line .. "-" .. i local tech_name = technology_line .. "-" .. i
if data.raw.technology[tech_name] then if data.raw.technology[tech_name] then
data.raw.technology[tech_name].icons = { data.raw.technology[tech_name].icons = {
technology_icon, technology_icon,
{ {
icon = constant_icon, icon = constant_icon,
icon_size = 128, icon_size = 128,
scale = scale, scale = scale,
shift = { 64 * scale, 64 * scale }, shift = { 64 * scale, 64 * scale },
}, },
} }
else else
log(debug.traceback()) log(debug.traceback())
thxbob.lib.error.technology(tech_name) thxbob.lib.error.technology(tech_name)
end end
end end
else else
log(debug.traceback()) log(debug.traceback())
log(technology_icon .. " not given in required table format") log(technology_icon .. " not given in required table format")
end end
end end