Browse Source

ZeroTier Submenu: Show "Loading..." info for public games and display if none are found

pull/3901/head
obligaron 4 years ago committed by Anders Jenbo
parent
commit
5861340925
  1. 29
      Source/DiabloUI/selgame.cpp

29
Source/DiabloUI/selgame.cpp

@ -40,6 +40,7 @@ const char *title = "";
std::vector<std::unique_ptr<UiListItem>> vecSelGameDlgItems;
std::vector<std::unique_ptr<UiItemBase>> vecSelGameDialog;
std::vector<std::string> Gamelist;
uint32_t firstPublicGameInfoRequestSend = 0;
int HighlightedItem;
void selgame_FreeVectors()
@ -98,16 +99,27 @@ void selgame_GameSelection_Init()
vecSelGameDialog.push_back(std::make_unique<UiArtText>(_("Select Action"), rect4, UiFlags::AlignCenter | UiFlags::FontSize30 | UiFlags::ColorUiSilver, 3));
#ifdef PACKET_ENCRYPTION
vecSelGameDlgItems.push_back(std::make_unique<UiListItem>(_("Create Game"), 0));
vecSelGameDlgItems.push_back(std::make_unique<UiListItem>(_("Create Game"), 0, UiFlags::ColorUiGold));
#endif
vecSelGameDlgItems.push_back(std::make_unique<UiListItem>(_("Create Public Game"), 1));
vecSelGameDlgItems.push_back(std::make_unique<UiListItem>(_("Join Game"), 2));
for (unsigned i = 0; i < Gamelist.size(); i++) {
vecSelGameDlgItems.push_back(std::make_unique<UiListItem>(Gamelist[i].c_str(), i + 3));
vecSelGameDlgItems.push_back(std::make_unique<UiListItem>(_("Create Public Game"), 1, UiFlags::ColorUiGold));
vecSelGameDlgItems.push_back(std::make_unique<UiListItem>(_("Join Game"), 2, UiFlags::ColorUiGold));
vecSelGameDlgItems.push_back(std::make_unique<UiListItem>("", -1, UiFlags::ElementDisabled));
vecSelGameDlgItems.push_back(std::make_unique<UiListItem>(_("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<UiListItem>(_("Loading..."), -1, UiFlags::ElementDisabled | UiFlags::ColorUiSilver));
else
vecSelGameDlgItems.push_back(std::make_unique<UiListItem>(_("None"), -1, UiFlags::ElementDisabled | UiFlags::ColorUiSilver));
} else {
for (unsigned i = 0; i < Gamelist.size(); i++) {
vecSelGameDlgItems.push_back(std::make_unique<UiListItem>(Gamelist[i].c_str(), i + 3, UiFlags::ColorUiGold));
}
}
vecSelGameDialog.push_back(std::make_unique<UiList>(vecSelGameDlgItems, 6, PANEL_LEFT + 305, (UI_OFFSET_Y + 255), 285, 26, UiFlags::AlignCenter | UiFlags::FontSize24 | UiFlags::ColorUiGold));
vecSelGameDialog.push_back(std::make_unique<UiList>(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<UiArtTextButton>(_("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();

Loading…
Cancel
Save