330 lines
12 KiB
Lua
330 lines
12 KiB
Lua
-- This generates bottle items and fill/empty recipes for gasses.
|
|
|
|
local function get_item(name)
|
|
local items = data.raw["item"]
|
|
if items then
|
|
return items[name]
|
|
end
|
|
return nil
|
|
end
|
|
|
|
local function get_recipes_for_barrel(name)
|
|
local recipes = data.raw["recipe"]
|
|
if recipes then
|
|
return recipes["fill-" .. name], recipes["empty-" .. name]
|
|
end
|
|
return nil
|
|
end
|
|
|
|
-- Generates the icons definition for a barrel item with the provided name and fluid definition using the provided empty barrel base icon
|
|
local function generate_gas_bottle_item_icons(fluid)
|
|
return {
|
|
{ icon = "__boblibrary__/graphics/icons/cylinder/gas-canister.png", icon_size = 32 },
|
|
{ icon = "__boblibrary__/graphics/icons/cylinder/cylinder-top.png", icon_size = 32, tint = fluid.flow_color },
|
|
{ icon = "__boblibrary__/graphics/icons/cylinder/cylinder-mid.png", icon_size = 32, tint = fluid.base_color },
|
|
}
|
|
end
|
|
|
|
local function generate_fluid_canister_item_icons(fluid)
|
|
return {
|
|
{ icon = "__boblibrary__/graphics/icons/cylinder/empty-canister.png", icon_size = 32 },
|
|
{ icon = "__boblibrary__/graphics/icons/cylinder/canister-top.png", icon_size = 32, tint = fluid.flow_color },
|
|
{ icon = "__boblibrary__/graphics/icons/cylinder/canister-bottom.png", icon_size = 32, tint = fluid.base_color },
|
|
}
|
|
end
|
|
|
|
-- Generates the icons definition for a fill-barrel recipe with the provided fluid definition and icon
|
|
local function generate_fill_recipe_icons(fluid, icon)
|
|
if fluid.icon and fluid.icon_size then
|
|
table.insert(
|
|
icon,
|
|
{ icon = fluid.icon, icon_size = fluid.icon_size, scale = 16.0 / fluid.icon_size, shift = { 4, -8 } }
|
|
)
|
|
elseif fluid.icons and util.combine_icons then
|
|
icon = util.combine_icons(icon, fluid.icons, { scale = 0.5, shift = { 4, -8 } })
|
|
end
|
|
return icon
|
|
end
|
|
|
|
local function generate_fill_gas_bottle_icons(fluid)
|
|
local icon = generate_gas_bottle_item_icons(fluid)
|
|
return generate_fill_recipe_icons(fluid, icon)
|
|
end
|
|
|
|
local function generate_fill_fluid_canister_icons(fluid)
|
|
local icon = generate_fluid_canister_item_icons(fluid)
|
|
return generate_fill_recipe_icons(fluid, icon)
|
|
end
|
|
|
|
-- Generates the icons definition for a empty-barrel recipe with the provided fluid definition and icon
|
|
local function generate_empty_recipe_icons(fluid, icon)
|
|
if fluid.icon and fluid.icon_size then
|
|
table.insert(
|
|
icon,
|
|
{ icon = fluid.icon, icon_size = fluid.icon_size, scale = 16.0 / fluid.icon_size, shift = { 7, 8 } }
|
|
)
|
|
elseif fluid.icons and util.combine_icons then
|
|
icon = util.combine_icons(icon, fluid.icons, { scale = 0.5, shift = { 7, 8 } })
|
|
end
|
|
return icon
|
|
end
|
|
|
|
local function generate_empty_gas_bottle_icons(fluid)
|
|
local icon = generate_gas_bottle_item_icons(fluid)
|
|
return generate_empty_recipe_icons(fluid, icon)
|
|
end
|
|
|
|
local function generate_empty_fluid_canister_icons(fluid)
|
|
local icon = generate_fluid_canister_item_icons(fluid)
|
|
return generate_empty_recipe_icons(fluid, icon)
|
|
end
|
|
|
|
-- Generates a gas bottle item with the provided name and fluid definition
|
|
local function create_gas_bottle_item(fluid)
|
|
local result = {
|
|
type = "item",
|
|
name = fluid.name .. "-barrel",
|
|
localised_name = { "item-name.filled-gas-canister", fluid.localised_name or { "fluid-name." .. fluid.name } },
|
|
icons = generate_gas_bottle_item_icons(fluid),
|
|
subgroup = "bob-gas-bottle",
|
|
order = "b[" .. fluid.name .. "-barrel" .. "]",
|
|
stack_size = 10,
|
|
}
|
|
|
|
data:extend({ result })
|
|
return result
|
|
end
|
|
|
|
-- Generates a fluid canister item with the provided name and fluid definition
|
|
local function create_fluid_canister_item(fluid)
|
|
local result = {
|
|
type = "item",
|
|
name = fluid.name .. "-barrel",
|
|
localised_name = { "item-name.filled-canister", fluid.localised_name or { "fluid-name." .. fluid.name } },
|
|
icons = generate_gas_bottle_item_icons(fluid),
|
|
subgroup = "bob-canister",
|
|
order = "b[" .. fluid.name .. "-barrel" .. "]",
|
|
stack_size = 10,
|
|
}
|
|
|
|
data:extend({ result })
|
|
return result
|
|
end
|
|
|
|
-- Creates a recipe to fill the provided barrel item with the provided fluid
|
|
local function create_fill_gas_bottle_recipe(fluid)
|
|
local recipe = {
|
|
type = "recipe",
|
|
name = "fill-" .. fluid.name .. "-barrel",
|
|
localised_name = { "recipe-name.fill-gas-canister", fluid.localised_name or { "fluid-name." .. fluid.name } },
|
|
category = "air-pump",
|
|
subgroup = "bob-gas-bottle",
|
|
energy_required = 0.2,
|
|
order = "b[fill-" .. fluid.name .. "-barrel" .. "]",
|
|
enabled = false,
|
|
icons = generate_fill_gas_bottle_icons(fluid),
|
|
ingredients = {
|
|
{ type = "fluid", name = fluid.name, amount = 50 },
|
|
{ type = "item", name = "gas-canister", amount = 1 },
|
|
},
|
|
results = {
|
|
{ type = "item", name = fluid.name .. "-barrel", amount = 1 },
|
|
},
|
|
allow_decomposition = false,
|
|
}
|
|
|
|
data:extend({ recipe })
|
|
return recipe
|
|
end
|
|
|
|
-- Creates a recipe to fill the provided barrel item with the provided fluid
|
|
local function create_fill_fluid_canister_recipe(fluid)
|
|
local recipe = {
|
|
type = "recipe",
|
|
name = "fill-" .. fluid.name .. "-barrel",
|
|
localised_name = { "recipe-name.fill-canister", fluid.localised_name or { "fluid-name." .. fluid.name } },
|
|
category = "air-pump",
|
|
subgroup = "bob-canister",
|
|
energy_required = 0.2,
|
|
order = "b[fill-" .. fluid.name .. "-barrel" .. "]",
|
|
enabled = false,
|
|
icons = generate_fill_fluid_canister_icons(fluid),
|
|
ingredients = {
|
|
{ type = "fluid", name = fluid.name, amount = 50 },
|
|
{ type = "item", name = "gas-canister", amount = 1 },
|
|
},
|
|
results = {
|
|
{ type = "item", name = fluid.name .. "-barrel", amount = 1 },
|
|
},
|
|
allow_decomposition = false,
|
|
}
|
|
|
|
data:extend({ recipe })
|
|
return recipe
|
|
end
|
|
|
|
-- Creates a recipe to empty the provided full barrel item producing the provided fluid
|
|
local function create_empty_gas_bottle_recipe(fluid)
|
|
local recipe = {
|
|
type = "recipe",
|
|
name = "empty-" .. fluid.name .. "-barrel",
|
|
localised_name = {
|
|
"recipe-name.empty-filled-gas-canister",
|
|
fluid.localised_name or { "fluid-name." .. fluid.name },
|
|
},
|
|
category = "air-pump",
|
|
subgroup = "bob-empty-gas-bottle",
|
|
energy_required = 0.2,
|
|
order = "c[empty-" .. fluid.name .. "-barrel" .. "]",
|
|
enabled = false,
|
|
icons = generate_empty_gas_bottle_icons(fluid),
|
|
ingredients = {
|
|
{ type = "item", name = fluid.name .. "-barrel", amount = 1 },
|
|
},
|
|
results = {
|
|
{ type = "fluid", name = fluid.name, amount = 50 },
|
|
{ type = "item", name = "gas-canister", amount = 1 },
|
|
},
|
|
allow_decomposition = false,
|
|
}
|
|
|
|
data:extend({ recipe })
|
|
return recipe
|
|
end
|
|
|
|
-- Creates a recipe to empty the provided full barrel item producing the provided fluid
|
|
local function create_empty_fluid_canister_recipe(fluid)
|
|
local recipe = {
|
|
type = "recipe",
|
|
name = "empty-" .. fluid.name .. "-barrel",
|
|
localised_name = { "recipe-name.empty-filled-canister", fluid.localised_name or { "fluid-name." .. fluid.name } },
|
|
category = "air-pump",
|
|
subgroup = "bob-empty-canister",
|
|
energy_required = 0.2,
|
|
order = "c[empty-" .. fluid.name .. "-barrel" .. "]",
|
|
enabled = false,
|
|
icons = generate_empty_fluid_canister_icons(fluid),
|
|
ingredients = {
|
|
{ type = "item", name = fluid.name .. "-barrel", amount = 1 },
|
|
},
|
|
results = {
|
|
{ type = "fluid", name = fluid.name, amount = 50 },
|
|
{ type = "item", name = "gas-canister", amount = 1 },
|
|
},
|
|
allow_decomposition = false,
|
|
}
|
|
|
|
data:extend({ recipe })
|
|
return recipe
|
|
end
|
|
|
|
function bobmods.lib.create_gas_bottle(fluid)
|
|
if
|
|
fluid
|
|
and data.raw["item-subgroup"]["bob-empty-gas-bottle"]
|
|
and data.raw["recipe-category"]["air-pump"]
|
|
and data.raw["item-subgroup"]["bob-gas-bottle"]
|
|
then
|
|
-- check if a barrel already exists for this fluid if not - create one
|
|
local barrel_item = get_item(fluid.name .. "-barrel")
|
|
if barrel_item then
|
|
barrel_item.icons = generate_gas_bottle_item_icons(fluid)
|
|
barrel_item.localised_name =
|
|
{ "item-name.filled-gas-canister", fluid.localised_name or { "fluid-name." .. fluid.name } }
|
|
barrel_item.subgroup = "bob-gas-bottle"
|
|
else
|
|
barrel_item = create_gas_bottle_item(fluid)
|
|
end
|
|
|
|
-- check if the barrel has a recipe if not - create one
|
|
local fill_recipe, empty_recipe = get_recipes_for_barrel(fluid.name .. "-barrel")
|
|
|
|
if fill_recipe then
|
|
fill_recipe.localised_name =
|
|
{ "recipe-name.fill-gas-canister", fluid.localised_name or { "fluid-name." .. fluid.name } }
|
|
fill_recipe.category = "air-pump"
|
|
fill_recipe.subgroup = "bob-gas-bottle"
|
|
fill_recipe.icons = generate_fill_gas_bottle_icons(fluid)
|
|
|
|
bobmods.lib.recipe.replace_ingredient(fill_recipe.name, "empty-barrel", "gas-canister")
|
|
bobmods.lib.tech.remove_recipe_unlock("fluid-handling", fill_recipe.name)
|
|
bobmods.lib.tech.remove_recipe_unlock("fluid-barrel-processing", fill_recipe.name)
|
|
else
|
|
fill_recipe = create_fill_gas_bottle_recipe(fluid)
|
|
end
|
|
|
|
if empty_recipe then
|
|
empty_recipe.localised_name =
|
|
{ "recipe-name.empty-filled-gas-canister", fluid.localised_name or { "fluid-name." .. fluid.name } }
|
|
empty_recipe.category = "air-pump"
|
|
empty_recipe.subgroup = "bob-empty-gas-bottle"
|
|
empty_recipe.icons = generate_empty_gas_bottle_icons(fluid)
|
|
|
|
bobmods.lib.recipe.remove_result(empty_recipe.name, "empty-barrel")
|
|
bobmods.lib.recipe.set_result(empty_recipe.name, "gas-canister")
|
|
bobmods.lib.tech.remove_recipe_unlock("fluid-handling", empty_recipe.name)
|
|
bobmods.lib.tech.remove_recipe_unlock("fluid-barrel-processing", empty_recipe.name)
|
|
else
|
|
empty_recipe = create_empty_gas_bottle_recipe(fluid)
|
|
end
|
|
|
|
-- add barrel recipe to the unlock list of the technology
|
|
bobmods.lib.tech.add_recipe_unlock("gas-canisters", fill_recipe.name)
|
|
bobmods.lib.tech.add_recipe_unlock("gas-canisters", empty_recipe.name)
|
|
end
|
|
end
|
|
|
|
function bobmods.lib.create_fluid_canister(fluid)
|
|
if
|
|
fluid
|
|
and data.raw["item-subgroup"]["bob-empty-canister"]
|
|
and data.raw["recipe-category"]["barrelling"]
|
|
and data.raw["item-subgroup"]["bob-canister"]
|
|
then
|
|
-- check if a barrel already exists for this fluid if not - create one
|
|
local barrel_item = get_item(fluid.name .. "-barrel")
|
|
if barrel_item then
|
|
barrel_item.icons = generate_fluid_canister_item_icons(fluid)
|
|
barrel_item.localised_name =
|
|
{ "item-name.filled-gas-canister", fluid.localised_name or { "fluid-name." .. fluid.name } }
|
|
barrel_item.subgroup = "bob-canister"
|
|
else
|
|
barrel_item = create_fluid_canister_item(fluid)
|
|
end
|
|
|
|
-- check if the barrel has a recipe if not - create one
|
|
local fill_recipe, empty_recipe = get_recipes_for_barrel(fluid.name .. "-barrel")
|
|
|
|
if fill_recipe then
|
|
fill_recipe.localised_name =
|
|
{ "recipe-name.fill-canister", fluid.localised_name or { "fluid-name." .. fluid.name } }
|
|
fill_recipe.subgroup = "bob-canister"
|
|
fill_recipe.icons = generate_fill_fluid_canister_icons(fluid)
|
|
|
|
bobmods.lib.recipe.replace_ingredient(fill_recipe.name, "empty-barrel", "empty-canister")
|
|
bobmods.lib.tech.remove_recipe_unlock("fluid-handling", fill_recipe.name)
|
|
bobmods.lib.tech.remove_recipe_unlock("fluid-barrel-processing", fill_recipe.name)
|
|
else
|
|
fill_recipe = create_fill_fluid_canister_recipe(fluid)
|
|
end
|
|
|
|
if empty_recipe then
|
|
empty_recipe.localised_name =
|
|
{ "recipe-name.empty-filled-canister", fluid.localised_name or { "fluid-name." .. fluid.name } }
|
|
empty_recipe.subgroup = "bob-empty-canister"
|
|
empty_recipe.icons = generate_empty_fluid_canister_icons(fluid)
|
|
|
|
bobmods.lib.recipe.remove_result(empty_recipe.name, "empty-barrel")
|
|
bobmods.lib.recipe.add_result(empty_recipe.name, "empty-canister")
|
|
bobmods.lib.tech.remove_recipe_unlock("fluid-handling", empty_recipe.name)
|
|
bobmods.lib.tech.remove_recipe_unlock("fluid-barrel-processing", empty_recipe.name)
|
|
else
|
|
empty_recipe = create_empty_fluid_canister_recipe(fluid)
|
|
end
|
|
|
|
-- add barrel recipe to the unlock list of the technology
|
|
bobmods.lib.tech.add_recipe_unlock("fluid-canister-processing", fill_recipe.name)
|
|
bobmods.lib.tech.add_recipe_unlock("fluid-canister-processing", empty_recipe.name)
|
|
end
|
|
end
|