i3/src/hud.lua

183 lines
4.3 KiB
Lua
Raw Normal View History

IMPORT("ceil", "get_connected_players", "str_to_pos", "add_hud_waypoint")
2021-11-26 03:32:04 +01:00
local function init_hud(player)
local name = player:get_player_name()
local data = i3.data[name]
2022-09-14 15:30:31 +02:00
local wdesc_y = -90
if core.global_exists"hb" then
wdesc_y -= ceil(hb.hudbars_count / 2) * 5
elseif not i3.settings.damage_enabled then
wdesc_y += 15
end
2021-11-26 03:32:04 +01:00
data.hud = {
bg = player:hud_add {
hud_elem_type = "image",
2023-01-19 17:30:57 +01:00
position = {x = 1, y = 1},
offset = {x = -320, y = 0},
2021-11-26 03:32:04 +01:00
alignment = {x = 1, y = 1},
2023-01-21 19:18:40 +01:00
scale = {x = 300, y = 105},
2021-11-26 03:32:04 +01:00
text = "i3_bg.png",
z_index = 0xDEAD,
},
img = player:hud_add {
hud_elem_type = "image",
2023-01-19 17:30:57 +01:00
position = {x = 1, y = 1},
offset = {x = -310, y = 20},
2021-11-26 03:32:04 +01:00
alignment = {x = 1, y = 1},
scale = {x = 1, y = 1},
2021-11-26 03:32:04 +01:00
text = "",
z_index = 0xDEAD,
},
text = player:hud_add {
hud_elem_type = "text",
2023-01-19 17:30:57 +01:00
position = {x = 1, y = 1},
offset = {x = -235, y = 40},
2021-11-26 03:32:04 +01:00
alignment = {x = 1, y = 1},
number = 0xffffff,
text = "",
z_index = 0xDEAD,
style = 1,
},
wielditem = player:hud_add {
hud_elem_type = "text",
position = {x = 0.5, y = 1},
2022-09-14 15:30:31 +02:00
offset = {x = 0, y = wdesc_y},
alignment = {x = 0, y = -1},
number = 0xffffff,
text = "",
z_index = 0xDEAD,
style = 1,
},
2021-11-26 03:32:04 +01:00
}
end
local function show_hud(player, data)
local hud_info_bg = player:hud_get(data.hud.bg)
2023-01-19 17:30:57 +01:00
local dt = 0.016
local offset_y = hud_info_bg.offset.y
local speed = 5 * i3.settings.hud_speed
2021-11-26 03:32:04 +01:00
2023-01-19 17:30:57 +01:00
if offset_y < -100 then
2021-11-26 03:32:04 +01:00
data.show_hud = false
data.hud_timer = (data.hud_timer or 0) + dt
end
player:hud_change(data.hud.text, "text", data.hud_msg)
if data.hud_img then
player:hud_change(data.hud.img, "text", data.hud_img)
end
if data.show_hud then
2023-01-19 17:30:57 +01:00
for name, def in pairs(data.hud) do
if name ~= "wielditem" then
local hud_info = player:hud_get(def)
2021-11-26 03:32:04 +01:00
2023-01-19 17:30:57 +01:00
player:hud_change(def, "offset", {
x = hud_info.offset.x,
y = hud_info.offset.y - speed
})
end
2021-11-26 03:32:04 +01:00
end
elseif data.show_hud == false then
2021-12-13 00:20:26 +01:00
if data.hud_timer >= i3.settings.hud_timer_max then
2023-01-19 17:30:57 +01:00
for name, def in pairs(data.hud) do
if name ~= "wielditem" then
local hud_info = player:hud_get(def)
player:hud_change(def, "offset", {
x = hud_info.offset.x,
y = hud_info.offset.y + speed
})
end
2021-11-26 03:32:04 +01:00
end
2023-01-19 17:30:57 +01:00
if offset_y > 0 then
data.show_hud = nil
2021-11-26 03:32:04 +01:00
data.hud_timer = nil
2023-01-19 17:30:57 +01:00
data.hud_msg = nil
data.hud_img = nil
2021-11-26 03:32:04 +01:00
end
end
end
end
core.register_globalstep(function(dt)
local players = get_connected_players()
players[0] = #players
for i = 1, players[0] do
local player = players[i]
local name = player:get_player_name()
local data = i3.data[name]
if not data then return end
if not data.wielditem_hud then
2022-08-29 11:28:46 +02:00
player:hud_change(data.hud.wielditem, "text", "")
return
end
data.timer = (data.timer or 0) + dt
2022-08-28 14:45:37 +02:00
local wieldidx = player:get_wield_index()
2022-08-28 14:45:37 +02:00
if wieldidx == data.old_wieldidx then
if data.timer >= i3.settings.wielditem_fade_after then
2022-08-29 11:28:46 +02:00
player:hud_change(data.hud.wielditem, "text", "")
end
return
end
2022-08-29 11:28:46 +02:00
data.timer = 0
2022-08-28 14:45:37 +02:00
data.old_wieldidx = wieldidx
2022-08-28 14:45:37 +02:00
local wielditem = player:get_wielded_item()
local meta = wielditem:get_meta()
2022-08-28 14:45:37 +02:00
local meta_desc = meta:get_string"short_description"
meta_desc = meta_desc:gsub("\27", "")
meta_desc = core.strip_colors(meta_desc)
local desc = meta_desc ~= "" and meta_desc or wielditem:get_short_description()
player:hud_change(data.hud.wielditem, "text", desc:trim())
end
end)
2021-11-26 03:32:04 +01:00
core.register_globalstep(function()
2021-11-30 20:47:01 +01:00
local players = get_connected_players()
players[0] = #players
for i = 1, players[0] do
local player = players[i]
local name = player:get_player_name()
local data = i3.data[name]
if data and data.show_hud ~= nil then
2021-11-26 03:32:04 +01:00
show_hud(player, data)
end
end
end)
2021-11-26 04:58:57 +01:00
local function init_waypoints(player)
local name = player:get_player_name()
local data = i3.data[name]
data.waypoints = data.waypoints or {}
for _, v in ipairs(data.waypoints) do
if not v.hide then
2023-01-07 12:28:07 +01:00
local id = add_hud_waypoint(player, v.name, str_to_pos(v.pos), v.color, v.image)
2021-11-26 04:58:57 +01:00
v.id = id
end
end
end
return function(player)
init_hud(player)
init_waypoints(player)
end