Calculate energy share relative to node maximum
- Network nodes don’t have a energy limit of the weakest node
This commit is contained in:
parent
098204aca0
commit
a526fc56ea
@ -1,3 +1,11 @@
|
||||
local function round(x)
|
||||
if x >= 0 then
|
||||
return math.floor(x+0.5)
|
||||
else
|
||||
math.ceil(x-0.5)
|
||||
end
|
||||
end
|
||||
|
||||
-- internal var net_master stores all slave nodes
|
||||
-- sparktech_net_passive = are used to follow nets, do not count towards energy
|
||||
-- sparktech_net_trigger = trigger updates
|
||||
@ -13,7 +21,7 @@ local function net_get_slaves(master)
|
||||
local cor = string.split(val, ":")
|
||||
slaves[#slaves + 1] = { x=tonumber(cor[1]), y=tonumber(cor[2]), z=tonumber(cor[3])}
|
||||
end
|
||||
minetest.debug("slaves " .. dump2(slaves))
|
||||
--minetest.debug("slaves " .. dump2(slaves))
|
||||
return slaves
|
||||
end
|
||||
|
||||
@ -22,16 +30,21 @@ local function net_distribute(pos)
|
||||
nodes[#nodes +1] = pos
|
||||
-- all nodes are in local now
|
||||
local energy = 0
|
||||
local nodecount = #nodes
|
||||
for x = 1, nodecount do
|
||||
for x = 1, #nodes do
|
||||
energy = energy + minetest.get_meta(nodes[x]):get_int("energy")
|
||||
end
|
||||
local max_energy = 0
|
||||
for x = 1, #nodes do
|
||||
max_energy = max_energy + minetest.get_item_group(minetest.get_node(nodes[x]).name, "sparktech_energy_max")
|
||||
end
|
||||
|
||||
-- now we know all energy in the system, now to distribute it
|
||||
|
||||
local share = energy / nodecount;
|
||||
for x = 1, nodecount do
|
||||
minetest.get_meta(nodes[x]):set_int("energy",share)
|
||||
local share = energy / max_energy;
|
||||
for x = 1, #nodes do
|
||||
local meta = minetest.get_meta(nodes[x])
|
||||
local node = minetest.get_node(nodes[x])
|
||||
meta:set_int("energy", round(share * minetest.get_item_group(node.name, "sparktech_energy_max")))
|
||||
end
|
||||
end
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user