crafter_client/waila.lua

113 lines
2.8 KiB
Lua

local minetest,vector = minetest,vector
local hud_item_name = ""
local all_nodes
local hud_bg = minetest.localplayer:hud_add({
hud_elem_type = "image", -- see HUD element types, default "text"
position = {x=0.5, y=0},
name = "", -- default ""
scale = {x=2.25, y=2.25}, -- default {x=0,y=0}
text = "waila.png", -- default ""
offset = { x = 0, y = 29.25},
z_index = 0,
})
local hud_name = minetest.localplayer:hud_add({
name = "hud_name",
position = {x=0.5,y=0},
hud_elem_type = "text",
number = 0xFFFFFF,
alignment = 0,
offset = { x = 0, y = 17},
text = "",
z_index = 1,
})
local hud_node = minetest.localplayer:hud_add({
name = "hud_node",
position = {x=0.5,y=0},
hud_elem_type = "text",
number = 0xFFFFFF,
alignment = 0,
offset = { x = 0, y = 36},
text = "",
z_index = 1,
})
local waih_name = minetest.localplayer:hud_add({
name = "hud_name",
position = {x=0.5,y=1},
hud_elem_type = "text",
number = 0xFFFFFF,
alignment = 0,
offset = { x = 0, y = -150},
text = "",
z_index = 1,
})
local pos_min = 10
local pos_max = -150
local waih_timer = 0
local old_item = ""
local function update()
if all_nodes then
--waila
if minetest.camera then
local pos = minetest.camera:get_pos()
local pos2 = vector.add(pos,vector.multiply(minetest.camera:get_look_dir(), 4))
local ray = minetest.raycast(pos, pos2, false, false)
local pointed_thing = ray:next()
if pointed_thing and pointed_thing.under and all_nodes[minetest.get_node_or_nil(pointed_thing.under).name] then
local node = minetest.get_node_or_nil(pointed_thing.under).name
if hud_item_name ~= node then
local def = minetest.get_item_def(node)
minetest.localplayer:hud_change(hud_name, "text", def.description)
minetest.localplayer:hud_change(hud_node, "text", node)
minetest.localplayer:hud_change(hud_bg, "text", "waila.png")
hud_item_name = node
end
else
--make hud invisible
minetest.localplayer:hud_change(hud_name, "text", "")
minetest.localplayer:hud_change(hud_node, "text", "")
minetest.localplayer:hud_change(hud_bg, "text", "")
hud_item_name = ""
end
end
--waih
local item = minetest.localplayer:get_wielded_item():get_name()
if waih_timer > 0 then
waih_timer = waih_timer - 0.01
if waih_timer <= 0 then
waih_timer = 0
minetest.localplayer:hud_change(waih_name, "text", "")
end
end
if item ~= old_item then
waih_timer = 1
local waih_text
if all_nodes[item] then
waih_text = minetest.get_item_def(item).description or item
else
waih_text = "Unknown"
end
minetest.localplayer:hud_change(waih_name, "text", waih_text)
end
old_item = item
elseif nodes then
all_nodes = table.copy(nodes)
end
minetest.after(0.01, function()
update()
end)
end
update()