I might've finally fixed it, time will tell
This commit is contained in:
parent
3a0df044be
commit
177baaa698
@ -130,7 +130,7 @@ local function get_recipe(i1, heat)
|
|||||||
for _, d in pairs(results) do
|
for _, d in pairs(results) do
|
||||||
local i1a = ItemStack(d.input)
|
local i1a = ItemStack(d.input)
|
||||||
|
|
||||||
if i1a:get_name() == i1.fluid then
|
if i1a:get_name() == i1.fluid and heat > d.heat then
|
||||||
result = d
|
result = d
|
||||||
result.output = ItemStack(result.output)
|
result.output = ItemStack(result.output)
|
||||||
result.input = i1a
|
result.input = i1a
|
||||||
@ -166,13 +166,12 @@ end
|
|||||||
|
|
||||||
local function controller_timer (pos, elapsed)
|
local function controller_timer (pos, elapsed)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local refresh = false
|
local refresh = true
|
||||||
|
|
||||||
if not elethermal.cache[minetest.pos_to_string(pos)] and not validate_structure(pos) then
|
if not elethermal.cache[minetest.pos_to_string(pos)] and not validate_structure(pos) then
|
||||||
refresh = false
|
|
||||||
meta:set_string("infotext", "Thermal Evaporation Plant Incomplete")
|
meta:set_string("infotext", "Thermal Evaporation Plant Incomplete")
|
||||||
meta:set_string("formspec", "")
|
meta:set_string("formspec", "")
|
||||||
return
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
local contpos = minetest.pos_to_string(pos)
|
local contpos = minetest.pos_to_string(pos)
|
||||||
@ -185,17 +184,25 @@ local function controller_timer (pos, elapsed)
|
|||||||
|
|
||||||
while true do
|
while true do
|
||||||
local baseline = math.floor(minetest.get_heat(pos) + 273.15)
|
local baseline = math.floor(minetest.get_heat(pos) + 273.15)
|
||||||
-- TODO: check sunlight for solar panels
|
local reach_heat = math.floor(th.thermal + (th.height * 10)) + baseline
|
||||||
heat = math.floor(th.thermal + (th.height * 10)) + baseline
|
|
||||||
if heat < 0 then
|
if heat < reach_heat then
|
||||||
heat = 0
|
heat = heat + reach_heat / 10
|
||||||
|
end
|
||||||
|
|
||||||
|
if heat > reach_heat then
|
||||||
|
heat = reach_heat
|
||||||
|
end
|
||||||
|
|
||||||
|
if heat < baseline then
|
||||||
|
heat = baseline
|
||||||
end
|
end
|
||||||
|
|
||||||
if heat > 1000 then
|
if heat > 1000 then
|
||||||
heat = 1000
|
heat = 1000
|
||||||
end
|
end
|
||||||
|
|
||||||
local recipe = get_recipe(in_buffer, heat - baseline)
|
local recipe = get_recipe(in_buffer, heat)
|
||||||
|
|
||||||
if not recipe then
|
if not recipe then
|
||||||
break
|
break
|
||||||
@ -210,27 +217,24 @@ local function controller_timer (pos, elapsed)
|
|||||||
local outp_perc = math.floor(heat_perc * recipe.output:get_count())
|
local outp_perc = math.floor(heat_perc * recipe.output:get_count())
|
||||||
|
|
||||||
if in_buffer.amount < take_perc then
|
if in_buffer.amount < take_perc then
|
||||||
if in_buffer.amount <= 0 then
|
refresh = false
|
||||||
break
|
break
|
||||||
end
|
|
||||||
|
|
||||||
take_perc = in_buffer.amount
|
|
||||||
outp_perc = math.floor(take_perc / recipe.output:get_count())
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if out_buffer.amount + outp_perc > out_buffer.capacity then
|
if out_buffer.amount + outp_perc > out_buffer.capacity then
|
||||||
|
refresh = false
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
|
|
||||||
if out_buffer.fluid ~= "" and out_buffer.fluid ~= recipe.output:get_name() then
|
if out_buffer.fluid ~= "" and out_buffer.fluid ~= recipe.output:get_name() then
|
||||||
|
refresh = false
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
|
|
||||||
out_buffer.fluid = recipe.output:get_name()
|
out_buffer.fluid = recipe.output:get_name()
|
||||||
out_buffer.amount = out_buffer.amount + outp_perc
|
out_buffer.amount = out_buffer.amount + outp_perc
|
||||||
in_buffer.amount = in_buffer.amount - take_perc
|
in_buffer.amount = in_buffer.amount - take_perc
|
||||||
refresh = true
|
heat = heat - (recipe.heat - baseline)
|
||||||
|
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -242,7 +246,6 @@ local function controller_timer (pos, elapsed)
|
|||||||
meta:set_string("output_fluid", out_buffer.fluid)
|
meta:set_string("output_fluid", out_buffer.fluid)
|
||||||
meta:set_int("output_fluid_storage", out_buffer.amount)
|
meta:set_int("output_fluid_storage", out_buffer.amount)
|
||||||
|
|
||||||
meta:set_string("infotext", "")
|
|
||||||
meta:set_string("formspec", controller_formspec(in_buffer, out_buffer, heat))
|
meta:set_string("formspec", controller_formspec(in_buffer, out_buffer, heat))
|
||||||
return refresh
|
return refresh
|
||||||
end
|
end
|
||||||
@ -266,7 +269,7 @@ minetest.register_node("elepower_thermal:evaporator_controller", {
|
|||||||
},
|
},
|
||||||
output = {
|
output = {
|
||||||
capacity = 8000,
|
capacity = 8000,
|
||||||
accepts = nil,
|
accepts = false,
|
||||||
drainable = true,
|
drainable = true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -379,32 +382,16 @@ minetest.register_node("elepower_thermal:evaporator_input", {
|
|||||||
node_io_put_liquid = function(pos, node, side, putter, liquid, millibuckets)
|
node_io_put_liquid = function(pos, node, side, putter, liquid, millibuckets)
|
||||||
local ctrl, ctrl_meta = get_port_controller(pos)
|
local ctrl, ctrl_meta = get_port_controller(pos)
|
||||||
if not ctrl then return millibuckets end
|
if not ctrl then return millibuckets end
|
||||||
|
if millibuckets == 0 then return 0 end
|
||||||
|
local didnt_fit = fluid_lib.insert_into_buffer(ctrl, "input", liquid, millibuckets)
|
||||||
|
|
||||||
local buffers = fluid_lib.get_node_buffers(ctrl)
|
|
||||||
local leftovers = 0
|
|
||||||
for buffer,data in pairs(buffers) do
|
|
||||||
if millibuckets == 0 then break end
|
|
||||||
local didnt_fit = fluid_lib.insert_into_buffer(ctrl, buffer, liquid, millibuckets)
|
|
||||||
millibuckets = millibuckets - (millibuckets - didnt_fit)
|
|
||||||
leftovers = leftovers + didnt_fit
|
|
||||||
end
|
|
||||||
start_timer(ctrl)
|
start_timer(ctrl)
|
||||||
return leftovers
|
return didnt_fit
|
||||||
end,
|
end,
|
||||||
node_io_room_for_liquid = function(pos, node, side, liquid, millibuckets)
|
node_io_room_for_liquid = function(pos, node, side, liquid, millibuckets)
|
||||||
local ctrl, ctrl_meta = get_port_controller(pos)
|
local ctrl, ctrl_meta = get_port_controller(pos)
|
||||||
if not ctrl then return 0 end
|
if not ctrl then return 0 end
|
||||||
|
return fluid_lib.can_insert_into_buffer(ctrl, "input", liquid, millibuckets)
|
||||||
local buffers = fluid_lib.get_node_buffers(ctrl)
|
|
||||||
local insertable = 0
|
|
||||||
for buffer,data in pairs(buffers) do
|
|
||||||
local insert = fluid_lib.can_insert_into_buffer(ctrl, buffer, liquid, millibuckets)
|
|
||||||
if insert > 0 then
|
|
||||||
insertable = insert
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return insertable
|
|
||||||
end,
|
end,
|
||||||
on_destruct = break_structure,
|
on_destruct = break_structure,
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user