diff options
Diffstat (limited to 'itemwheel.lua')
-rw-r--r-- | itemwheel.lua | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/itemwheel.lua b/itemwheel.lua new file mode 100644 index 0000000..66c4305 --- /dev/null +++ b/itemwheel.lua @@ -0,0 +1,149 @@ +local hb = {} + +local function update_wheel(player) + local name = player:get_player_name() + if not player or not name then + return + end + + local i = player:get_wield_index() + local i1 = i - 1 + local i3 = i + 1 + + -- it's a wheel + if i1 < 1 then + i1 = HUD_IW_MAX + end + if i3 > HUD_IW_MAX then + i3 = 1 + end + + -- get the displayed items + local inv = player:get_inventory() + local item = hb[name].item + local item2 = player:get_wielded_item():get_name() + + -- update all items when wielded has changed + if item and item2 and item ~= item2 or item == "wheel_init" then + local items = {} + items[1] = inv:get_stack("main", i1):get_name() or nil + items[2] = item2 + items[3] = inv:get_stack("main", i3):get_name() or nil + + for n, m in pairs(items) do + -- some default values + local image = "hud_wielded.png" + local scale = false + local s1 = {x = 1, y = 1} + local s2 = {x = 3, y = 3} + if n ~= 2 then + s1 = {x = 0.6, y = 0.6} + s2 = {x = 2, y = 2} + end + + -- get the images + local def = minetest.registered_items[m] + if def then + if def.tiles then + image = minetest.inventorycube(def.tiles[1], def.tiles[6] or def.tiles[3] or def.tiles[1], def.tiles[3] or def.tiles[1]) + scale = true + end + if def.inventory_image and def.inventory_image ~= "" then + image = def.inventory_image + scale = false + end + if def.wielded_image and def.wielded_image ~= "" then + image = def.wielded_image + scale = false + end + end + + -- get the id and update hud elements + local id = hb[name].id[n] + if id and image then + if scale then + player:hud_change(id, "scale", s1) + else + player:hud_change(id, "scale", s2) + end + -- make previous and next item darker + --if n ~= 2 then + --image = image .. "^[colorize:#0005" + --end + player:hud_change(id, "text", image) + end + end + end + + -- update wielded buffer + if hb[name].id[2] ~= nil then + hb[name].item = item + end +end + +minetest.register_on_joinplayer(function(player) + local name = player:get_player_name() + hb[name]= {} + hb[name].id = {} + hb[name].item = "wheel_init" + + minetest.after(0.1, function() + + -- hide builtin hotbar + local hud_flags = player:hud_get_flags() + hud_flags.hotbar = false + player:hud_set_flags(hud_flags) + + player:hud_add({ + hud_elem_type = "image", + text = "hud_new.png", + position = {x=0.5, y=1}, + scale = {x=1, y=1}, + alignment = {x=0, y=-1}, + offset = {x = 0, y = 0} + }) + + hb[name].id[1] = player:hud_add({ + hud_elem_type = "image", + text = "hud_wielded.png", + position = {x = 0.5, y = 1}, + scale = {x = 1, y = 1}, + alignment = {x = 0, y = -1}, + offset = {x = -75, y = -8} + }) + + hb[name].id[2] = player:hud_add({ + hud_elem_type = "image", + text = "hud_wielded.png", + position = {x = 0.5, y = 1}, + scale = {x = 3, y = 3}, + alignment = {x = 0, y = -1}, + offset = {x = 0, y = -20} + }) + + hb[name].id[3] = player:hud_add({ + hud_elem_type = "image", + text = "hud_wielded.png", + position = {x = 0.5, y = 1}, + scale = {x = 1, y = 1}, + alignment = {x = 0, y = -1}, + offset = {x = 75, y = -8} + }) + + -- init item wheel + hb[name].item = "wheel_init" + update_wheel(player) + end) +end) + + +local timer = 0 +minetest.register_globalstep(function(dtime) + timer = timer + dtime + if timer >= HUD_IW_TICK then + timer = 0 + for _, player in ipairs(minetest.get_connected_players()) do + update_wheel(player) + end + end--timer +end)
\ No newline at end of file |