statistiche convertite in pannello panel_lib

master
Zughy 2020-07-28 02:34:20 +02:00
parent f00f33b3b0
commit b78937dcf4
4 changed files with 111 additions and 160 deletions

View File

@ -1,8 +1,8 @@
function quake.scoreboard_create(panel_name, arena, p_name)
function quake.scoreboard_create(arena, p_name)
if arena.teams_enabled then
local panel = Panel:new({
name = panel_name,
name = "scoreboard",
player = p_name,
bg_scale = { x = 45, y = 28 },
position = { x = 0.5, y = 0.5 },
@ -36,23 +36,23 @@ function quake.scoreboard_create(panel_name, arena, p_name)
players_clmn = {
alignment = { x = 0, y = 1 },
offset = {x = -250, y = -130},
text = "player",
text = "player"
},
kls_clmn = {
alignment = { x = 0, y = 1 },
offset = {x = 0, y = -130},
text = "0",
text = "0"
},
dts_clmn = {
alignment = { x = 0, y = 1 },
offset = {x = 250, y = -130},
text = "0",
text = "0"
},
}
})
else
local panel = Panel:new({
name = panel_name,
name = "scoreboard",
player = p_name,
bg_scale = { x = 45, y = 28 },
position = { x = 0.5, y = 0.5 },

View File

@ -1,155 +1,99 @@
local saved_huds = {} --p_name = {hud_name, index}
function quake.HUD_stats_create(p_name)
function quake.HUD_stats_create(arena, p_name)
local panel = Panel:new({
name = "stats",
player = p_name,
bg = "",
position = { x = 0, y = 1 },
alignment = { x = -1, y = 0 },
title = "",
local player = minetest.get_player_by_name(p_name)
sub_img_elems = {
killleader_bg = {
scale = { x = 1.3, y = 1 },
offset = { x = 10, y = -90 },
alignment = { x = 1, y = 0 },
text = "quake_hud_bg.png"
},
killleader_icon = {
scale = { x = 2, y = 2 },
offset = { x = 10, y = -90 },
alignment = { x = 1, y = 0 },
text = "quake_hud_killleader.png"
},
kills_bg = {
scale = { x = 0.45, y = 1 },
offset = { x = 10, y = -55 },
alignment = { x = 1, y = 0 },
text = "quake_hud_bg.png"
},
kills_icon = {
scale = { x = 2, y = 2 },
offset = { x = 10, y = -55 },
alignment = { x = 1, y = 0 },
text = "quake_hud_kills.png"
},
deaths_bg = {
scale = { x = 0.45, y = 1 },
offset = { x = 10, y = -20 },
alignment = { x = 1, y = 0 },
text = "quake_hud_bg.png"
},
deaths_icon = {
scale = { x = 2, y = 2 },
offset = { x = 10, y = -20 },
alignment = { x = 1, y = 0 },
text = "quake_hud_deaths.png"
}
},
local KLR_BG_ID, KLR_icon_ID, KLR_data_ID, KLS_BG_ID, KLS_icon_ID, KLS_data_ID, DTS_BG_ID, DTS_icon_ID, DTS_data_ID
--[[ --annnouncer
player:hud_add({
hud_elem_type = "image",
position = {x =0.1, y = 0.9},
offset = {x = 0, y = -25},
text = "quake_gui_bg.png",
alignment = { x = 0},
scale = { x = 1.3, y = 1},
number = 0xFFFFFF,
})
]]
-- kill leader
KLR_BG_ID = player:hud_add({
hud_elem_type = "image",
position = {x = 0, y = 1},
offset = {x = 10, y = -90},
text = "quake_hud_bg.png",
alignment = { x = 1.0},
scale = { x = 1.3, y = 1},
number = 0xFFFFFF,
})
KLR_icon_ID = player:hud_add({
hud_elem_type = "image",
position = {x = 0, y = 1},
offset = {x = 10, y = -90},
text = "quake_hud_killleader.png",
alignment = { x = 1.0},
scale = { x = 2, y = 2},
number = 0xFFFFFF,
})
local kill_leader = arena.kill_leader
local kl_kills = 0
if kill_leader ~= "" then
kl_kills = arena.players[kill_leader].kills
end
KLR_data_ID = player:hud_add({
hud_elem_type = "text",
position = {x = 0, y = 1},
offset = {x = 50, y = -90},
text = kl_kills .. " | " .. kill_leader,
alignment = { x = 1.0},
scale = { x = 100, y = 30},
number = 0xFFFFFF,
})
-- kills
KLS_BG_ID = player:hud_add({
hud_elem_type = "image",
position = {x =0, y = 1},
offset = {x = 10, y = -55},
text = "quake_hud_bg.png",
alignment = { x = 1.0},
scale = { x = 0.45, y = 1},
number = 0xFFFFFF,
})
KLS_icon_ID = player:hud_add({
hud_elem_type = "image",
position = {x = 0, y = 1},
offset = {x = 10, y = -55},
text = "quake_hud_kills.png",
alignment = { x = 1.0},
scale = { x = 2, y = 2},
number = 0xFFFFFF,
})
KLS_data_ID = player:hud_add({
hud_elem_type = "text",
position = {x = 0, y = 1},
offset = {x = 50, y = -55},
text = "0",
alignment = { x = 1.0},
scale = { x = 100, y = 30},
number = 0xFFFFFF,
})
-- deaths
DTS_BG_ID = player:hud_add({
hud_elem_type = "image",
position = {x =0, y = 1},
offset = {x = 10, y = -20},
text = "quake_hud_bg.png",
alignment = { x = 1.0},
scale = { x = 0.45, y = 1},
number = 0xFFFFFF,
})
DTS_icon_ID = player:hud_add({
hud_elem_type = "image",
position = {x = 0, y = 1},
offset = {x = 10, y = -20},
text = "quake_hud_deaths.png",
alignment = { x = 1.0},
scale = { x = 2, y = 2},
number = 0xFFFFFF,
})
DTS_data_ID = player:hud_add({
hud_elem_type = "text",
position = {x = 0, y = 1},
offset = {x = 50, y = -20},
text = "0",
alignment = { x = 1.0},
scale = { x = 100, y = 30},
number = 0xFFFFFF,
})
saved_huds[p_name] = {
KLR_BG = KLR_BG_ID,
KLR_icon = KLR_icon_ID,
KLR_data = KLR_data_ID,
KLS_BG = KLS_BG_ID,
KLS_icon = KLS_icon_ID,
KLS_data = KLS_data_ID,
DTS_BG = DTS_BG_ID,
DTS_icon = DTS_icon_ID,
DTS_data = DTS_data_ID
}
sub_txt_elems = {
killleader_txt = {
alignment = { x = 1, y = 0 },
offset = { x = 50, y = -90 },
text = "0 |"
},
kills_txt = {
alignment = { x = 1, y = 0 },
offset = { x = 50, y = -55 },
text = "0"
},
deaths_txt = {
alignment = { x = 1, y = 0 },
offset = { x = 50, y = -20 },
text = "0"
}
}
})
end
function quake.HUD_stats_update(arena, p_name, field, new_value)
function quake.HUD_stats_update(arena, p_name, stat)
local player = minetest.get_player_by_name(p_name)
player:hud_change(saved_huds[p_name][field], "text", new_value)
local panel = panel_lib.get_panel(p_name, "stats")
end
minetest.log("action", dump(panel))
if stat == "kill_leader" then
local kill_leader = arena.kill_leader
panel:update(nil,
{killleader_txt = {
text = arena.players[kill_leader].kills .. " | " .. kill_leader
}})
elseif stat == "kills" then
panel:update(nil,
{kills_txt = {
text = arena.players[p_name].kills
}})
function quake.HUD_stats_remove(p_name)
local player = minetest.get_player_by_name(p_name)
for name, id in pairs(saved_huds[p_name]) do
player:hud_remove(id)
elseif stat == "deaths" then
panel:update(nil,
{deaths_txt = {
text = arena.players[p_name].deaths
}})
end
end

View File

@ -1,9 +1,11 @@
arena_lib.on_load("quake", function(arena)
for pl_name, stats in pairs(arena.players) do
quake.HUD_stats_create(arena, pl_name)
quake.scoreboard_create("scoreboard", arena, pl_name)
quake.HUD_stats_create(pl_name)
quake.scoreboard_create(arena, pl_name)
panel_lib.get_panel(pl_name, "stats"):show()
minetest.sound_play("quake_voice_countdown", {
to_player = pl_name,
@ -51,8 +53,8 @@ arena_lib.on_join("quake", function(p_name, arena)
local weapon = ItemStack("quake:railgun")
local weapon2 = ItemStack("quake:rocket_launcher")
quake.HUD_stats_create(arena, p_name)
quake.scoreboard_create("scoreboard", arena, p_name)
quake.HUD_stats_create(p_name)
quake.scoreboard_create(arena, p_name)
player:get_meta():set_int("quake_weap_delay", 0)
@ -70,6 +72,9 @@ arena_lib.on_join("quake", function(p_name, arena)
minetest.after(0.01, function()
quake.scoreboard_update(arena)
if arena.kill_leader ~= "" then
quake.HUD_stats_update(arena, p_name, "kill_leader")
end
end)
end)
@ -98,10 +103,11 @@ arena_lib.on_end("quake", function(arena, players)
for pl_name, stats in pairs(players) do
local panel = panel_lib.get_panel(pl_name, "scoreboard")
local stats = panel_lib.get_panel(pl_name, "stats")
local scoreboard = panel_lib.get_panel(pl_name, "scoreboard")
quake.HUD_stats_remove(pl_name)
panel:remove()
stats:remove()
scoreboard:remove()
quake.update_storage(pl_name)
minetest.get_player_by_name(pl_name):set_physics_override({
@ -115,7 +121,7 @@ end)
arena_lib.on_death("quake", function(arena, p_name, reason)
quake.HUD_stats_update(arena, p_name, "DTS_data", arena.players[p_name].deaths)
quake.HUD_stats_update(arena, p_name, "deaths")
arena.players[p_name].killstreak = 0
-- se muoio suicida, perdo una kill
@ -129,7 +135,7 @@ arena_lib.on_death("quake", function(arena, p_name, reason)
end
p_stats.kills = p_stats.kills - 1
quake.HUD_stats_update(arena, p_name, "KLS_data", p_stats.kills)
quake.HUD_stats_update(arena, p_name, "kills")
quake.scoreboard_update(arena)
quake.subtract_exp(p_name, 10)
@ -137,7 +143,7 @@ arena_lib.on_death("quake", function(arena, p_name, reason)
if arena.kill_leader == p_name then
quake.calc_kill_leader(arena, p_name)
for pl_name, stats in pairs(arena.players) do
quake.HUD_stats_update(arena, pl_name, "KLR_data", arena.players[p_name].kills .. " | " .. p_name)
quake.HUD_stats_update(arena, pl_name, "kill_leader")
end
end
end
@ -148,10 +154,11 @@ end)
arena_lib.on_quit("quake", function(arena, p_name)
local panel = panel_lib.get_panel(p_name, "scoreboard")
local stats = panel_lib.get_panel(p_name, "stats")
local scoreboard = panel_lib.get_panel(p_name, "scoreboard")
quake.HUD_stats_remove(p_name)
panel:remove()
stats:remove()
scoreboard:remove()
minetest.get_player_by_name(p_name):set_physics_override({
speed = 1,

View File

@ -256,7 +256,7 @@ function kill(arena, p_name, target)
-- visibilità kill leader
local kill_leader = arena.kill_leader
for pl_name, stats in pairs(arena.players) do
quake.HUD_stats_update(arena, pl_name, "KLR_data", arena.players[kill_leader].kills .. " | " .. kill_leader)
quake.HUD_stats_update(arena, pl_name, "kill_leader")
end
-- eventuale killstreak
@ -278,7 +278,7 @@ function kill(arena, p_name, target)
end
-- aggiorno HUD
quake.HUD_stats_update(arena, p_name, "KLS_data", p_stats.kills)
quake.HUD_stats_update(arena, p_name, "kills")
quake.scoreboard_update(arena)
-- aggiungo XP