Add experimental ItemWheel (replaces hotbar)
This commit is contained in:
parent
2deb4f5b01
commit
20ef67cf5b
28
builtin.lua
28
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
|
||||
|
3
init.lua
3
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
|
||||
|
||||
|
149
itemwheel.lua
Normal file
149
itemwheel.lua
Normal file
@ -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)
|
BIN
textures/hud_new.png
Normal file
BIN
textures/hud_new.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.4 KiB |
BIN
textures/hud_wielded.png
Normal file
BIN
textures/hud_wielded.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 143 B |
Loading…
x
Reference in New Issue
Block a user