Server list changes

This commit is contained in:
Federico Cecchetto 2022-06-01 23:31:30 +02:00
parent 46454bae4a
commit 6898d6e842
2 changed files with 155 additions and 110 deletions

View File

@ -8,9 +8,33 @@ end
game:addlocalizedstring("MENU_NUMPLAYERS", "Players")
game:addlocalizedstring("MENU_PING", "Ping")
local offsets = {10, 500, 950, 700, 1100}
local columns = {"@MENU_HOST_NAME", "@MENU_MAP", "@MENU_NUMPLAYERS", "@MENU_TYPE1", "@MENU_PING"}
local columns = {
{
offset = 10,
text = "@MENU_HOST_NAME",
dataindex = 0
},
{
offset = 500,
text = "@MENU_MAP",
dataindex = 1
},
{
offset = 700,
text = "@MENU_TYPE1",
dataindex = 3
},
{
offset = 950,
text = "@MENU_NUMPLAYERS",
dataindex = 2
},
{
offset = 1100,
text = "@MENU_PING",
dataindex = 4
}
}
function textlength(text, font, height)
local _, _, width = luiglobals.GetTextDimensions(text, font, height)
@ -18,6 +42,10 @@ function textlength(text, font, height)
end
function trimtext(text, font, height, maxwidth)
if (maxwidth < 0) then
return text
end
while (textlength(text, font, height) > maxwidth) do
text = text:sub(1, #text - 1)
end
@ -37,12 +65,10 @@ SystemLinkJoinMenu.AddHeaderButton = function(menu, f12_arg1, width)
button:addElement(LUI.Divider.new(CoD.CreateState(nil, 0, nil, nil, CoD.AnchorTypes.BottomLeftRight), 40,
LUI.Divider.Grey))
local gettext = function(i)
return Engine.Localize(columns[i])
end
button.m_eventHandlers = {}
for i = 1, #offsets do
SystemLinkJoinMenu.MakeText(button.textHolder, offsets[i], gettext(i), nil)
for i = 1, #columns do
SystemLinkJoinMenu.MakeText(button.textHolder, columns[i].offset, Engine.Localize(columns[i].text), nil)
end
element:addElement(button)
@ -56,12 +82,25 @@ SystemLinkJoinMenu.AddServerButton = function(menu, controller, index)
button:addEventHandler("button_action", SystemLinkJoinMenu.OnJoinGame)
local gettext = function(i)
local text = Lobby.GetServerData(controller, index, i - 1)
return trimtext(text, CoD.TextSettings.TitleFontSmall.Font, 14, 400)
local text = Lobby.GetServerData(controller, index, columns[i].dataindex)
local islast = not columns[i + 1]
local end_ = islast and 1130 or columns[i + 1].offset
local maxlength = end_ - columns[i].offset
if (maxlength < 0) then
maxlength = columns[i].offset - end_
end
for i = 1, #offsets do
SystemLinkJoinMenu.MakeText(button.textHolder, offsets[i], gettext(i), luiglobals.Colors.h1.medium_grey)
if (not islast) then
maxlength = maxlength - 50
end
return trimtext(text, CoD.TextSettings.TitleFontSmall.Font, 14, maxlength)
end
for i = 1, #columns do
SystemLinkJoinMenu.MakeText(button.textHolder, columns[i].offset, gettext(i), luiglobals.Colors.h1.medium_grey)
end
menu.list:addElement(button)
@ -73,7 +112,7 @@ SystemLinkJoinMenu.MakeText = function(menu, f5_arg1, text, color)
state.font = CoD.TextSettings.TitleFontSmall.Font
state.top = -6
state.height = 14
state.alignment = LUI.Alignment.Left
state.alignment = nil
state.glow = LUI.GlowState.None
state.color = color
@ -116,7 +155,6 @@ function menu_systemlink_join(f19_arg0, f19_arg1)
SystemLinkJoinMenu.UpdateGameList(menu)
menu:registerEventHandler("updateGameList", SystemLinkJoinMenu.UpdateGameList)
menu:addElement(LUI.UITimer.new(250, "updateGameList"))
LUI.ButtonHelperText.ClearHelperTextObjects(menu.help, {
side = "all"

View File

@ -1,24 +1,26 @@
#include <std_include.hpp>
#include "loader/component_loader.hpp"
#include "server_list.hpp"
#include "localized_strings.hpp"
#include "network.hpp"
#include "scheduler.hpp"
#include "party.hpp"
#include "console.hpp"
#include "command.hpp"
#include "game/game.hpp"
#include "game/ui_scripting/execution.hpp"
#include <utils/cryptography.hpp>
#include <utils/string.hpp>
#include <utils/hook.hpp>
#include "console.hpp"
#include "command.hpp"
namespace server_list
{
namespace
{
const int server_limit = 18;
const int server_limit = 100;
struct server_info
{
@ -107,11 +109,6 @@ namespace server_list
int ui_feeder_count()
{
std::lock_guard<std::mutex> _(mutex);
if (update_server_list)
{
update_server_list = false;
return 0;
}
const auto count = static_cast<int>(servers.size());
const auto index = get_page_base_index();
const auto diff = count - index;
@ -272,6 +269,15 @@ namespace server_list
lui_open_menu_hook.invoke<void>(controllerIndex, menuName, isPopup, isModal, isExclusive);
}
void check_refresh()
{
if (update_server_list)
{
update_server_list = false;
ui_scripting::notify("updateGameList", {});
}
}
}
bool sl_key_event(const int key, const int down)
@ -430,6 +436,7 @@ namespace server_list
}), true);
scheduler::loop(do_frame_work, scheduler::pipeline::main);
scheduler::loop(check_refresh, scheduler::pipeline::lui, 10ms);
network::on("getServersResponse", [](const game::netadr_s& target, const std::string_view& data)
{