160 lines
3.5 KiB
Lua
160 lines
3.5 KiB
Lua
-- hudplus/api.lua
|
|
|
|
local huds = {}
|
|
|
|
-- [function] Get HUD
|
|
function hudplus.hud_get(name, hud_name, key)
|
|
assert(name and hud_name, "hudplus.hud_get: Invalid parameters")
|
|
if type(name) == "userdata" then
|
|
name = name:get_player_name()
|
|
end
|
|
|
|
if not huds[name] then
|
|
huds[name] = {}
|
|
end
|
|
|
|
local hud = huds[name][hud_name]
|
|
if hud then
|
|
if key then
|
|
return hud[key]
|
|
else
|
|
return hud
|
|
end
|
|
end
|
|
end
|
|
|
|
-- [function] Add HUD
|
|
function hudplus.hud_add(player, hud_name, def)
|
|
assert(player and hud_name and def, "hudplus.hud_add: Invalid parameters")
|
|
if type(player) == "string" then
|
|
player = minetest.get_player_by_name(player)
|
|
end
|
|
|
|
local name = player:get_player_name()
|
|
if not huds[name] then
|
|
huds[name] = {}
|
|
end
|
|
|
|
if not huds[name][hud_name] then
|
|
def.hud_elem_type = def.type or def.hud_elem_type
|
|
def.position = def.pos or def.position
|
|
|
|
if def.show == false then
|
|
huds[name][hud_name] = {
|
|
def = def,
|
|
show = false,
|
|
}
|
|
else
|
|
local id = player:hud_add(def)
|
|
huds[name][hud_name] = {
|
|
id = id,
|
|
def = def,
|
|
show = true,
|
|
}
|
|
|
|
if def.hide_after then
|
|
minetest.after(def.hide_after, function()
|
|
hudplus.hud_hide(player, hud_name)
|
|
|
|
if def.on_hide then
|
|
def.on_hide()
|
|
end
|
|
end)
|
|
end
|
|
|
|
return id
|
|
end
|
|
end
|
|
end
|
|
|
|
-- [function] Remove HUD
|
|
function hudplus.hud_remove(player, hud_name)
|
|
assert(player and hud_name, "hudplus.hud_remove: Invalid parameters")
|
|
if type(player) == "string" then
|
|
player = minetest.get_player_by_name(player)
|
|
end
|
|
|
|
local name = player:get_player_name()
|
|
local hud = hudplus.hud_get(name, hud_name)
|
|
if hud then
|
|
player:hud_remove(hud.id)
|
|
return true
|
|
end
|
|
end
|
|
|
|
-- [function] Change HUD
|
|
function hudplus.hud_change(player, hud_name, key, val)
|
|
assert(player and hud_name and key, "hudplus.hud_change: Invalid parameters")
|
|
if type(player) == "string" then
|
|
player = minetest.get_player_by_name(player)
|
|
end
|
|
|
|
if key == "type" then key = "hud_elem_type" end
|
|
if key == "pos" then key = "position" end
|
|
|
|
local name = player:get_player_name()
|
|
local hud = hudplus.hud_get(name, hud_name)
|
|
if hud then
|
|
player:hud_change(hud.id, key, val)
|
|
return true
|
|
end
|
|
end
|
|
|
|
-- [function] Hide HUD
|
|
function hudplus.hud_hide(player, hud_name)
|
|
assert(player and hud_name, "hudplus.hud_hide: Invalid parameters")
|
|
if type(player) == "string" then
|
|
player = minetest.get_player_by_name(player)
|
|
end
|
|
|
|
local name = player:get_player_name()
|
|
local hud = hudplus.hud_get(name, hud_name)
|
|
if hud then
|
|
if hud.show == true then
|
|
player:hud_remove(hud.id)
|
|
hud.show = false
|
|
|
|
local def = hud.def
|
|
if def.on_hide then
|
|
def.on_hide()
|
|
end
|
|
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
|
|
-- [function] Show HUD
|
|
function hudplus.hud_show(player, hud_name)
|
|
assert(player and hud_name, "hudplus.hud_hide: Invalid parameters")
|
|
if type(player) == "string" then
|
|
player = minetest.get_player_by_name(player)
|
|
end
|
|
|
|
local name = player:get_player_name()
|
|
local hud = hudplus.hud_get(name, hud_name)
|
|
if hud then
|
|
if hud.show == false then
|
|
hud.id = player:hud_add(hud.def)
|
|
hud.show = true
|
|
|
|
local def = hud.def
|
|
if def.hide_after then
|
|
minetest.after(def.hide_after, function()
|
|
hudplus.hud_hide(player, hud_name)
|
|
|
|
if def.on_hide then
|
|
def.on_hide()
|
|
end
|
|
end)
|
|
end
|
|
|
|
if def.on_show then
|
|
def.on_show()
|
|
end
|
|
|
|
return true
|
|
end
|
|
end
|
|
end
|