New fluid storage method, tank fix

This commit is contained in:
Evert Prants 2018-06-18 21:26:56 +03:00
parent b1340e953e
commit 5f5c172a15
Signed by: evert
GPG Key ID: 1688DA83D222D0B5
3 changed files with 99 additions and 67 deletions

View File

@ -86,7 +86,7 @@ function fluidity.tanks.fill_tank_at(pos, fluid, amount, overfill)
local remainder = 0
if count + amount > capacity then
if overfill then
remainder = (count + amount) - capacity
remainder = capacity - count
count = capacity
else
return nil
@ -268,7 +268,7 @@ function fluidity.tanks.register_fluid_tank(data)
local capacity = data.capacity or 64000
local tanknode = modname..":"..tankname
if not tanknode then
if not minetest.registered_nodes[tanknode] then
minetest.register_node(tanknode, {
description = tankdesc,
drawtype = "glasslike_framed_optional",

View File

@ -52,13 +52,13 @@ function metal_caster.get_metal_caster_formspec_default()
end
function metal_caster.get_metal_caster_formspec(data)
local water_percent = data.water_level / metal_caster.max_coolant
local metal_percent = data.metal_level / metal_caster.max_metal
local water_percent = data.water_fluid_storage / metal_caster.max_coolant
local metal_percent = data.metal_fluid_storage / metal_caster.max_metal
local metal_formspec = "label[0.08,3.75;No Molten Metal]"
if data.metal ~= "" then
metal_formspec = "label[0.08,3.75;"..data.metal..": "..data.metal_level.."/"..metal_caster.max_metal.." mB]"
metal_formspec = "label[0.08,3.75;"..data.metal..": "..data.metal_fluid_storage.."/"..metal_caster.max_metal.." mB]"
end
return "size[8,8.5]"..
@ -72,7 +72,7 @@ function metal_caster.get_metal_caster_formspec(data)
"image[0.08,0;1.4,2.8;melter_gui_barbg.png]"..
"image[0.08,"..(2.44 - water_percent * 2.44)..";1.4,"..(water_percent * 2.8)..";default_water.png]"..
"image[0.08,0;1.4,2.8;melter_gui_gauge.png]"..
"label[0.08,3.4;Water: "..data.water_level.."/"..metal_caster.max_coolant.." mB]"..
"label[0.08,3.4;Water: "..data.water_fluid_storage.."/"..metal_caster.max_coolant.." mB]"..
"image[6.68,0;1.4,2.8;melter_gui_barbg.png]"..
"image[6.68,"..(2.44 - metal_percent * 2.44)..";1.4,"..(metal_percent * 2.8)..";"..data.metal_texture.."]"..
"image[6.68,0;1.4,2.8;melter_gui_gauge.png]"..
@ -243,13 +243,13 @@ local function caster_node_timer(pos, elapsed)
local inv = meta:get_inventory()
-- Current amount of water (coolant) in the block
local coolant_count = meta:get_int("water_level")
local coolant_count = meta:get_int("water_fluid_storage")
-- Current amount of metal in the block
local metal_count = meta:get_int("metal_level")
local metal_count = meta:get_int("metal_fluid_storage")
-- Current metal used
local metal = meta:get_string("metal")
local metal = meta:get_string("metal_fluid")
local metal_type = ""
local dumping = meta:get_int("dump")
@ -421,32 +421,30 @@ local function caster_node_timer(pos, elapsed)
end
end
if refresh then
meta:set_int("water_level", coolant_count)
meta:set_int("metal_level", metal_count)
meta:set_string("metal", metal)
meta:set_int("water_fluid_storage", coolant_count)
meta:set_int("metal_fluid_storage", metal_count)
meta:set_string("metal_fluid", metal)
local metal_texture = "default_lava.png"
local metal_name = ""
local metal_texture = "default_lava.png"
local metal_name = ""
local infotext = "Metal Caster\n"
infotext = infotext.."Water: "..coolant_count.."/"..metal_caster.max_coolant.." mB \n"
if metal ~= "" then
metal_texture = "fluidity_"..fluidity.get_metal_for_fluid(metal)..".png"
local infotext = "Metal Caster\n"
infotext = infotext.."Water: "..coolant_count.."/"..metal_caster.max_coolant.." mB \n"
if metal ~= "" then
metal_texture = "fluidity_"..fluidity.get_metal_for_fluid(metal)..".png"
local metal_node = minetest.registered_nodes[metal]
metal_name = fluidity.fluid_name(metal_node.description)
infotext = infotext..metal_name..": "..metal_count.."/"..metal_caster.max_metal.." mB"
else
infotext = infotext.."No Molten Metal"
end
meta:set_string("infotext", infotext)
meta:set_string("formspec", metal_caster.get_metal_caster_formspec(
{water_level=coolant_count, metal_level=metal_count, metal_texture=metal_texture, metal=metal_name}))
local metal_node = minetest.registered_nodes[metal]
metal_name = fluidity.fluid_name(metal_node.description)
infotext = infotext..metal_name..": "..metal_count.."/"..metal_caster.max_metal.." mB"
else
infotext = infotext.."No Molten Metal"
end
meta:set_string("infotext", infotext)
meta:set_string("formspec", metal_caster.get_metal_caster_formspec(
{water_fluid_storage=coolant_count, metal_fluid_storage=metal_count, metal_texture=metal_texture, metal=metal_name}))
return refresh
end
@ -463,11 +461,12 @@ local function on_construct(pos)
inv:set_size('bucket_out', 1)
-- Fluid buffers
meta:set_int('water_level', 0)
meta:set_int('metal_level', 0)
meta:set_int('water_fluid_storage', 0)
meta:set_int('metal_fluid_storage', 0)
-- Metal source block
meta:set_string('metal', '')
meta:set_string('metal_fluid', '')
meta:set_string('water_fluid', 'default:water_source')
-- Default infotext
meta:set_string("infotext", "Metal Caster Inactive")
@ -548,6 +547,7 @@ minetest.register_node("metal_melter:metal_caster", {
cracky=2,
tubedevice = 1,
tubedevice_receiver = 1,
fluid_container = 1,
},
legacy_facedir_simple = true,
is_ground_content = false,
@ -582,6 +582,17 @@ minetest.register_node("metal_melter:metal_caster", {
allow_metadata_inventory_move = allow_metadata_inventory_move,
allow_metadata_inventory_take = allow_metadata_inventory_take,
fluid_buffers = {
water = {
capacity = metal_caster.max_coolant,
accepts = {"default:water_source"}
},
metal = {
capacity = metal_caster.max_metal,
accepts = "group:molten_metal",
}
},
tube = pipeworks,
})

View File

@ -186,13 +186,13 @@ local function melter_node_timer(pos, elapsed)
local inv = meta:get_inventory()
-- Current amount of lava in the block
local heat_count = meta:get_int("lava_level")
local heat_count = meta:get_int("lava_fluid_storage")
-- Current amount of metal in the block
local metal_count = meta:get_int("metal_level")
local metal_count = meta:get_int("metal_fluid_storage")
-- Current metal used
local metal = meta:get_string("metal")
local metal = meta:get_string("metal_fluid")
local dumping = meta:get_int("dump")
if dumping and dumping == 1 then
@ -326,38 +326,36 @@ local function melter_node_timer(pos, elapsed)
end
-- Refresh metadata and formspec
if refresh then
meta:set_int("lava_level", heat_count)
meta:set_int("metal_level", metal_count)
meta:set_string("metal", metal)
meta:set_int("lava_fluid_storage", heat_count)
meta:set_int("metal_fluid_storage", metal_count)
meta:set_string("metal_fluid", metal)
local metal_texture = "default_lava.png"
local metal_name = ""
local metal_texture = "default_lava.png"
local metal_name = ""
local infotext = "Metal Melter\n"
infotext = infotext.."Lava: "..heat_count.."/"..metal_melter.max_fuel.." mB \n"
if metal ~= "" then
metal_texture = "fluidity_"..fluidity.get_metal_for_fluid(metal)..".png"
local infotext = "Metal Melter\n"
infotext = infotext.."Lava: "..heat_count.."/"..metal_melter.max_fuel.." mB \n"
if metal ~= "" then
metal_texture = "fluidity_"..fluidity.get_metal_for_fluid(metal)..".png"
local metal_node = minetest.registered_nodes[metal]
metal_name = fluidity.fluid_name(metal_node.description)
infotext = infotext..metal_name..": "..metal_count.."/"..metal_melter.max_metal.." mB"
else
infotext = infotext.."No Molten Metal"
end
if heat_count > 144 then
swap_node(pos, "metal_melter:metal_melter_filled")
else
swap_node(pos, "metal_melter:metal_melter")
end
meta:set_string("infotext", infotext)
meta:set_string("formspec", metal_melter.get_metal_melter_formspec(
{lava_level=heat_count, metal_level=metal_count, metal_texture=metal_texture, metal=metal_name}))
local metal_node = minetest.registered_nodes[metal]
metal_name = fluidity.fluid_name(metal_node.description)
infotext = infotext..metal_name..": "..metal_count.."/"..metal_melter.max_metal.." mB"
else
infotext = infotext.."No Molten Metal"
end
if heat_count > 144 then
swap_node(pos, "metal_melter:metal_melter_filled")
else
swap_node(pos, "metal_melter:metal_melter")
end
meta:set_string("infotext", infotext)
meta:set_string("formspec", metal_melter.get_metal_melter_formspec(
{lava_level=heat_count, metal_level=metal_count, metal_texture=metal_texture, metal=metal_name}))
-- If true, calls for another clock cycle.
return refresh
end
@ -374,11 +372,12 @@ local function on_construct(pos)
inv:set_size('bucket_out', 1)
-- Fluid buffers
meta:set_int('lava_level', 0)
meta:set_int('metal_level', 0)
meta:set_int('lava_fluid_storage', 0)
meta:set_int('metal_fluid_storage', 0)
-- Metal source block
meta:set_string('metal', '')
meta:set_string('metal_fluid', '')
meta:set_string('lava_fluid', 'default:lava_source')
-- Default infotext
meta:set_string("infotext", "Metal Melter Inactive")
@ -444,6 +443,7 @@ minetest.register_node("metal_melter:metal_melter", {
cracky = 2,
tubedevice = 1,
tubedevice_receiver = 1,
fluid_container = 1,
},
legacy_facedir_simple = true,
is_ground_content = false,
@ -474,6 +474,16 @@ minetest.register_node("metal_melter:metal_melter", {
allow_metadata_inventory_move = allow_metadata_inventory_move,
allow_metadata_inventory_take = allow_metadata_inventory_take,
fluid_buffers = {
lava = {
capacity = metal_melter.max_fuel,
accepts = {"default:lava_source"}
},
metal = {
capacity = metal_melter.max_metal
}
},
tube = pipeworks,
})
@ -488,7 +498,8 @@ minetest.register_node("metal_melter:metal_melter_filled", {
cracky = 2,
tubedevice = 1,
tubedevice_receiver = 1,
not_in_creative_inventory = 1
not_in_creative_inventory = 1,
fluid_container = 1,
},
legacy_facedir_simple = true,
is_ground_content = false,
@ -512,6 +523,16 @@ minetest.register_node("metal_melter:metal_melter_filled", {
allow_metadata_inventory_move = allow_metadata_inventory_move,
allow_metadata_inventory_take = allow_metadata_inventory_take,
fluid_buffers = {
lava = {
capacity = metal_melter.max_fuel,
accepts = {"default:lava_source"}
},
metal = {
capacity = metal_melter.max_metal
}
},
tube = pipeworks,
})