summaryrefslogtreecommitdiff
path: root/itemwheel.lua
diff options
context:
space:
mode:
Diffstat (limited to 'itemwheel.lua')
-rw-r--r--itemwheel.lua149
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