From 58613409255bcf46e896d084a81b96d04df281fa Mon Sep 17 00:00:00 2001 From: obligaron Date: Thu, 6 Jan 2022 11:42:56 +0100 Subject: [PATCH] ZeroTier Submenu: Show "Loading..." info for public games and display if none are found --- Source/DiabloUI/selgame.cpp | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/Source/DiabloUI/selgame.cpp b/Source/DiabloUI/selgame.cpp index e634ff47f..ca22ef74b 100644 --- a/Source/DiabloUI/selgame.cpp +++ b/Source/DiabloUI/selgame.cpp @@ -40,6 +40,7 @@ const char *title = ""; std::vector> vecSelGameDlgItems; std::vector> vecSelGameDialog; std::vector Gamelist; +uint32_t firstPublicGameInfoRequestSend = 0; int HighlightedItem; void selgame_FreeVectors() @@ -98,16 +99,27 @@ void selgame_GameSelection_Init() vecSelGameDialog.push_back(std::make_unique(_("Select Action"), rect4, UiFlags::AlignCenter | UiFlags::FontSize30 | UiFlags::ColorUiSilver, 3)); #ifdef PACKET_ENCRYPTION - vecSelGameDlgItems.push_back(std::make_unique(_("Create Game"), 0)); + vecSelGameDlgItems.push_back(std::make_unique(_("Create Game"), 0, UiFlags::ColorUiGold)); #endif - vecSelGameDlgItems.push_back(std::make_unique(_("Create Public Game"), 1)); - vecSelGameDlgItems.push_back(std::make_unique(_("Join Game"), 2)); - - for (unsigned i = 0; i < Gamelist.size(); i++) { - vecSelGameDlgItems.push_back(std::make_unique(Gamelist[i].c_str(), i + 3)); + vecSelGameDlgItems.push_back(std::make_unique(_("Create Public Game"), 1, UiFlags::ColorUiGold)); + vecSelGameDlgItems.push_back(std::make_unique(_("Join Game"), 2, UiFlags::ColorUiGold)); + + vecSelGameDlgItems.push_back(std::make_unique("", -1, UiFlags::ElementDisabled)); + vecSelGameDlgItems.push_back(std::make_unique(_("Public Games"), -1, UiFlags::ElementDisabled | UiFlags::ColorWhitegold)); + + if (Gamelist.empty()) { + // We expect the game list is recevied after 3 seconds + if (firstPublicGameInfoRequestSend == 0 || (SDL_GetTicks() - firstPublicGameInfoRequestSend) < 2000) + vecSelGameDlgItems.push_back(std::make_unique(_("Loading..."), -1, UiFlags::ElementDisabled | UiFlags::ColorUiSilver)); + else + vecSelGameDlgItems.push_back(std::make_unique(_("None"), -1, UiFlags::ElementDisabled | UiFlags::ColorUiSilver)); + } else { + for (unsigned i = 0; i < Gamelist.size(); i++) { + vecSelGameDlgItems.push_back(std::make_unique(Gamelist[i].c_str(), i + 3, UiFlags::ColorUiGold)); + } } - vecSelGameDialog.push_back(std::make_unique(vecSelGameDlgItems, 6, PANEL_LEFT + 305, (UI_OFFSET_Y + 255), 285, 26, UiFlags::AlignCenter | UiFlags::FontSize24 | UiFlags::ColorUiGold)); + vecSelGameDialog.push_back(std::make_unique(vecSelGameDlgItems, 6, PANEL_LEFT + 305, (UI_OFFSET_Y + 255), 285, 26, UiFlags::AlignCenter | UiFlags::FontSize24)); SDL_Rect rect5 = { (Sint16)(PANEL_LEFT + 299), (Sint16)(UI_OFFSET_Y + 427), 140, 35 }; vecSelGameDialog.push_back(std::make_unique(_("OK"), &UiFocusNavigationSelect, rect5, UiFlags::AlignCenter | UiFlags::VerticalCenter | UiFlags::FontSize30 | UiFlags::ColorUiGold)); @@ -541,6 +553,8 @@ void RefreshGameList() if ((lastRequest == 0 || currentTime - lastRequest > 30000) && DvlNet_SendInfoRequest()) { lastRequest = currentTime; lastUpdate = currentTime - 3000; // Give 2 sec for responses, but don't wait 5 + if (firstPublicGameInfoRequestSend == 0) + firstPublicGameInfoRequestSend = currentTime; } if (lastUpdate == 0 || currentTime - lastUpdate > 5000) { @@ -556,6 +570,7 @@ void RefreshGameList() bool UiSelectGame(GameData *gameData, int *playerId) { + firstPublicGameInfoRequestSend = 0; gdwPlayerId = playerId; m_game_data = gameData; selgame_Init();