From 20ef67cf5bb5a469efc1e1f278525e316a0c364f Mon Sep 17 00:00:00 2001 From: BlockMen Date: Sun, 12 Apr 2015 18:58:08 +0200 Subject: [PATCH] Add experimental ItemWheel (replaces hotbar) --- builtin.lua | 28 ++++++-- init.lua | 3 + itemwheel.lua | 149 +++++++++++++++++++++++++++++++++++++++ textures/hud_new.png | Bin 0 -> 3456 bytes textures/hud_wielded.png | Bin 0 -> 143 bytes 5 files changed, 175 insertions(+), 5 deletions(-) create mode 100644 itemwheel.lua create mode 100644 textures/hud_new.png create mode 100644 textures/hud_wielded.png diff --git a/builtin.lua b/builtin.lua index ea64992..057189c 100644 --- a/builtin.lua +++ b/builtin.lua @@ -1,3 +1,9 @@ +HUD_IW_MAX = 8 +HUD_IW_TICK = 0.4 +if minetest.is_singleplayer() == true then + HUD_IW_TICK = 0.2 +end + HUD_SB_SIZE = {x = 24, y = 24} HUD_HEALTH_POS = {x = 0.5,y = 1} @@ -9,6 +15,19 @@ HUD_HUNGER_OFFSET = {x = 15, y = -110} HUD_ARMOR_POS = {x = 0.5, y = 1} HUD_ARMOR_OFFSET = {x = -262, y = -110} +-- Reorder everything when using ItemWeel +hud.item_wheel = minetest.setting_getbool("hud_item_wheel") +if hud.item_wheel then + HUD_HEALTH_POS = {x = 0.5,y = 1} + HUD_HEALTH_OFFSET = {x = -385, y = -77} + HUD_AIR_POS = {x = 0.5, y = 1} + HUD_AIR_OFFSET = {x = 150, y = -77} + HUD_HUNGER_POS = {x = 0.5, y = 1} + HUD_HUNGER_OFFSET = {x = 180, y = -44} + HUD_ARMOR_POS = {x = 0.5, y = 1} + HUD_ARMOR_OFFSET = {x = -415, y = -44} +end + -- read hud.conf settings hud.read_conf() @@ -30,7 +49,7 @@ if damage_enabled then size = HUD_SB_SIZE, text = "hud_heart_fg.png", number = 20, - alignment = {x=-1,y=-1}, + alignment = {x = -1, y = -1}, offset = HUD_HEALTH_OFFSET, background = "hud_heart_bg.png", events = { @@ -49,7 +68,7 @@ if damage_enabled then size = HUD_SB_SIZE, text = "hud_air_fg.png", number = 0, - alignment = {x=-1,y=-1}, + alignment = {x = -1, y = -1}, offset = HUD_AIR_OFFSET, background = nil, events = { @@ -72,7 +91,7 @@ if damage_enabled then size = HUD_SB_SIZE, text = "hud_armor_fg.png", number = 0, - alignment = {x=-1,y=-1}, + alignment = {x = -1, y = -1}, offset = HUD_ARMOR_OFFSET, background = "hud_armor_bg.png", autohide_bg = true, @@ -85,10 +104,9 @@ if damage_enabled then size = HUD_SB_SIZE, text = "hud_hunger_fg.png", number = 0, - alignment = {x=-1,y=-1}, + alignment = {x = -1, y = -1}, offset = HUD_HUNGER_OFFSET, background = "hud_hunger_bg.png", - --autohide_bg = true, max = 0, }) else diff --git a/init.lua b/init.lua index c011f67..fe0f41f 100644 --- a/init.lua +++ b/init.lua @@ -5,4 +5,7 @@ dofile(modpath .. "/api.lua") dofile(modpath .. "/functions.lua") dofile(modpath .. "/builtin.lua") dofile(modpath .. "/legacy.lua") +if hud.item_wheel then + dofile(modpath .. "/itemwheel.lua") +end 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 diff --git a/textures/hud_new.png b/textures/hud_new.png new file mode 100644 index 0000000000000000000000000000000000000000..17fa8d25536b0bde28c7e6f33b32981b955fa214 GIT binary patch literal 3456 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 iHIu~;00030{{sL`-|o#)-b`fx00002BR0prEv; zi(^Q|oa7(>|JyUG&QLnLn5{?3AnQPa5d*`~wSVP9epPk@l}VMjMwB>~mSp4?F@)x% kCZ;F^R~DC~<`(NHc;+SRos_jJ1FB;1boFyt=akR{04v}rR{#J2 literal 0 HcmV?d00001