Valentin Anger 965aeaa868 Improve energy balancing and add a new hud
- Now a function that actually creates the
  relative average is used
- A new hud has been added to show the energy level
  of items hold in the players hand
2017-01-13 20:22:16 +01:00

94 lines
2.9 KiB
Lua

sparktech_energy_hud = {}
sparktech_toolenergy_hud = {}
local sparktool_dig_stlye_alt = minetest.setting_getbool("sparktool_dig_stlye_alt")
local on_use = nil
if sparktool_dig_stlye_alt then
on_use = function() return nil end
end
minetest.register_tool("sparkdebug:multimeter", {
description = "Multimeter",
inventory_image = "multimeter.png",
stack_max = 1,
on_use = on_use,
on_place = function(itemstack, placer, pointed_thing)
if pointed_thing["type"] == "node" then
sparktech_energy_hud[placer:get_player_name()]["pos"] = pointed_thing["under"]
end
return itemstack
end
})
minetest.register_on_joinplayer(function(player)
local idx = player:hud_add({
hud_elem_type = "statbar",
position = {x = 0.5, y = 0.5},
offset = {x =-100, y = -40},
text = "bar_red.png",
direction = 0,
number = 20
})
local idy = player:hud_add({
hud_elem_type = "text",
position = {x = 0.5, y = 0.5},
offset = {x = 0, y = -50},
text = "",
direction = 0,
number = "0xFFFFFF"
})
sparktech_energy_hud[player:get_player_name()] = {idb = idx, idt = idy, pos = {x = 0, y = 0, z = 0}}
end)
minetest.register_globalstep(function(dtime)
for k, i in pairs(sparktech_energy_hud) do
local meta = minetest.get_meta(i["pos"])
local node = minetest.get_node(i["pos"])
minetest.get_player_by_name(k):hud_change(i["idb"], "number", meta:get_int("energy") / minetest.get_item_group(node.name, "sparktech_energy_max") * 400)
local val = minetest.get_item_group(node.name, "sparktech_energy_max")
if val == 0 then
minetest.get_player_by_name(k):hud_change(i["idt"], "text", "")
else
minetest.get_player_by_name(k):hud_change(i["idt"], "text", meta:get_int("energy") .. " / " .. val)
end
end
end)
minetest.register_on_joinplayer(function(player)
local idx = player:hud_add({
hud_elem_type = "statbar",
position = {x = 0.85, y = 0.95},
offset = {x =-100, y = -40},
text = "bar_red.png",
direction = 0,
number = 20
})
local idy = player:hud_add({
hud_elem_type = "text",
position = {x = 0.85, y = 0.95},
offset = {x = 0, y = -50},
text = "",
direction = 0,
number = "0xFFFFFF"
})
sparktech_toolenergy_hud[player:get_player_name()] = {idb = idx, idt = idy}
end)
minetest.register_globalstep(function(dtime)
for k, i in pairs(sparktech_toolenergy_hud) do
local player = minetest.get_player_by_name(k)
local item = player:get_wielded_item()
local energy = tonumber(item:get_metadata())
local energymax = minetest.get_item_group(item:get_name(), "sparktech_energy_max")
if energy == nil then
energy = 0
end
player:hud_change(i["idb"], "number", energy / energymax * 400)
if energymax == 0 then
player:hud_change(i["idt"], "text", "")
else
player:hud_change(i["idt"], "text", energy .. " / " .. energymax)
end
end
end)