[ServerList] Fix sorting comparator
This commit is contained in:
parent
20b8c1cec4
commit
7531f468fd
@ -557,36 +557,38 @@ namespace Components
|
|||||||
Game::menuDef_t* menu = Game::Menus_FindByName(Game::uiContext, "pc_join_unranked");
|
Game::menuDef_t* menu = Game::Menus_FindByName(Game::uiContext, "pc_join_unranked");
|
||||||
if(!menu || !Game::Menu_IsVisible(Game::uiContext, menu)) return;
|
if(!menu || !Game::Menu_IsVisible(Game::uiContext, menu)) return;
|
||||||
|
|
||||||
std::sort(ServerList::VisibleList.begin(), ServerList::VisibleList.end(), [] (unsigned int const &server1, unsigned int const &server2)
|
std::sort(ServerList::VisibleList.begin(), ServerList::VisibleList.end(), [] (const unsigned int &server1, const unsigned int &server2) -> bool
|
||||||
{
|
{
|
||||||
ServerInfo* info1 = nullptr;
|
ServerInfo* info1 = nullptr;
|
||||||
ServerInfo* info2 = nullptr;
|
ServerInfo* info2 = nullptr;
|
||||||
|
|
||||||
auto list = ServerList::GetList();
|
auto list = ServerList::GetList();
|
||||||
if (!list) return 0;
|
if (!list) return false;
|
||||||
|
|
||||||
if (list->size() > server1) info1 = &(*list)[server1];
|
if (list->size() > server1) info1 = &(*list)[server1];
|
||||||
if (list->size() > server2) info2 = &(*list)[server2];
|
if (list->size() > server2) info2 = &(*list)[server2];
|
||||||
|
|
||||||
if (!info1) return 1;
|
if (!info1) return false;
|
||||||
if (!info2) return -1;
|
if (!info2) return false;
|
||||||
|
|
||||||
// Numerical comparisons
|
// Numerical comparisons
|
||||||
if (ServerList::SortKey == ServerList::Column::Ping)
|
if (ServerList::SortKey == ServerList::Column::Ping)
|
||||||
{
|
{
|
||||||
return ((info1->ping < info2->ping) ^ !ServerList::SortAsc);
|
return info1->ping < info2->ping;
|
||||||
}
|
}
|
||||||
else if (ServerList::SortKey == ServerList::Column::Players)
|
else if (ServerList::SortKey == ServerList::Column::Players)
|
||||||
{
|
{
|
||||||
return ((info1->clients < info2->clients) ^ !ServerList::SortAsc);
|
return info1->clients < info2->clients;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string text1 = Utils::String::ToLower(Colors::Strip(ServerList::GetServerInfoText(info1, ServerList::SortKey, true)));
|
std::string text1 = Utils::String::ToLower(Colors::Strip(ServerList::GetServerInfoText(info1, ServerList::SortKey, true)));
|
||||||
std::string text2 = Utils::String::ToLower(Colors::Strip(ServerList::GetServerInfoText(info2, ServerList::SortKey, true)));
|
std::string text2 = Utils::String::ToLower(Colors::Strip(ServerList::GetServerInfoText(info2, ServerList::SortKey, true)));
|
||||||
|
|
||||||
// ASCII-based comparison
|
// ASCII-based comparison
|
||||||
return ((text1.compare(text2) <= 0) ^ !ServerList::SortAsc);
|
return text1.compare(text2) < 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (!ServerList::SortAsc) std::reverse(ServerList::VisibleList.begin(), ServerList::VisibleList.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
ServerList::ServerInfo* ServerList::GetServer(unsigned int index)
|
ServerList::ServerInfo* ServerList::GetServer(unsigned int index)
|
||||||
|
Loading…
Reference in New Issue
Block a user