From 7a55b89b5f233146578ebd4165685579fa31371e Mon Sep 17 00:00:00 2001 From: geneotech Date: Thu, 8 Aug 2024 21:57:44 +0200 Subject: [PATCH] Play ranked -> Quick play. Choose casual server with players if no ranked has players. --- src/application/gui/main_menu_button_type.h | 2 +- src/application/gui/main_menu_gui.h | 12 ++------ src/application/gui/start_client_gui.cpp | 8 +++--- src/application/gui/start_client_gui.h | 2 +- src/application/gui/start_client_tab_type.h | 2 +- src/application/setups/main_menu_setup.cpp | 2 +- src/work.cpp | 31 +++++++++++++++------ 7 files changed, 33 insertions(+), 26 deletions(-) diff --git a/src/application/gui/main_menu_button_type.h b/src/application/gui/main_menu_button_type.h index 31d191db0..01e85cf9e 100644 --- a/src/application/gui/main_menu_button_type.h +++ b/src/application/gui/main_menu_button_type.h @@ -11,7 +11,7 @@ enum class main_menu_button_type { DOWNLOAD_ON_STEAM, #endif DOWNLOAD_MAPS, - PLAY_RANKED, + QUICK_PLAY, BROWSE_SERVERS, HOST_SERVER, #if !WEB_LOWEND diff --git a/src/application/gui/main_menu_gui.h b/src/application/gui/main_menu_gui.h index 474c29cad..177c81e42 100644 --- a/src/application/gui/main_menu_gui.h +++ b/src/application/gui/main_menu_gui.h @@ -15,7 +15,6 @@ using viewing_main_menu_context = viewing_menu_context; struct main_menu_gui { bool show = true; - bool has_play_ranked_button = false; main_menu_context::tree_type tree; main_menu_context::root_type root; @@ -74,7 +73,7 @@ struct main_menu_gui { } if (change.was_pressed(augs::event::keys::key::C)) { - button_callback(main_menu_button_type::PLAY_RANKED); + button_callback(main_menu_button_type::QUICK_PLAY); return true; } @@ -134,10 +133,7 @@ struct main_menu_gui { root.set_menu_buttons_colors(cyan); root.buttons[std::size_t(main_menu_button_type::DOWNLOAD_MAPS)].colorize = green; - - if (has_play_ranked_button) { - root.buttons[std::size_t(main_menu_button_type::PLAY_RANKED)].color_wave = true; - } + root.buttons[std::size_t(main_menu_button_type::QUICK_PLAY)].color_wave = true; root.set_menu_buttons_sizes(context.get_necessary_images(), gui_font, { 1000, 1000 }); @@ -146,10 +142,6 @@ struct main_menu_gui { root.buttons[i].set_complete_caption(format_enum(e)); } - if (!has_play_ranked_button) { - root.buttons[std::size_t(main_menu_button_type::PLAY_RANKED)].set_complete_caption("Quick play"); - } - int bi = 0; #if !WEB_LOWEND diff --git a/src/application/gui/start_client_gui.cpp b/src/application/gui/start_client_gui.cpp index 38766fe00..a7ae0195e 100644 --- a/src/application/gui/start_client_gui.cpp +++ b/src/application/gui/start_client_gui.cpp @@ -206,11 +206,11 @@ bool start_client_gui_state::perform( checkbox("Show", show); } - else if (current_tab == start_client_tab_type::BEST_RANKED) { + else if (current_tab == start_client_tab_type::BEST_SERVER) { if (!best_server.has_value()) { auto cs = scoped_style_color(ImGuiCol_FrameBg, rgba(255,255,255,0)); - auto sname = std::string("Finding the best ranked server..."); + auto sname = std::string("Finding the best server..."); input_text("##BestServer", sname, ImGuiInputTextFlags_ReadOnly); } else { @@ -570,7 +570,7 @@ bool start_client_gui_state::perform( ; const bool best_still_unresolved = - current_tab == start_client_tab_type::BEST_RANKED + current_tab == start_client_tab_type::BEST_SERVER && best_server == std::nullopt ; @@ -578,7 +578,7 @@ bool start_client_gui_state::perform( if (ImGui::Button("Connect!")) { switch (current_tab) { - case start_client_tab_type::BEST_RANKED: + case start_client_tab_type::BEST_SERVER: if (best_server) { into_connect_string = std::string(best_server->get_connect_string()); into_displayed_connecting_server_name = best_server->heartbeat.server_name; diff --git a/src/application/gui/start_client_gui.h b/src/application/gui/start_client_gui.h index 944aa5820..1df5b3897 100644 --- a/src/application/gui/start_client_gui.h +++ b/src/application/gui/start_client_gui.h @@ -50,7 +50,7 @@ class start_client_gui_state : public standard_window_mixin avatar_submitted_when; - start_client_tab_type current_tab = start_client_tab_type::BEST_RANKED; + start_client_tab_type current_tab = start_client_tab_type::BEST_SERVER; bool request_refresh_best_server = false; bool request_server_list_open = false; diff --git a/src/application/gui/start_client_tab_type.h b/src/application/gui/start_client_tab_type.h index b05784ae1..bf03d159a 100644 --- a/src/application/gui/start_client_tab_type.h +++ b/src/application/gui/start_client_tab_type.h @@ -2,7 +2,7 @@ enum class start_client_tab_type { // GEN INTROSPECTOR enum class start_client_tab_type - BEST_RANKED, + BEST_SERVER, CUSTOM_ADDRESS, REPLAY_DEMO, diff --git a/src/application/setups/main_menu_setup.cpp b/src/application/setups/main_menu_setup.cpp index 6b272fafd..2ce6df7c5 100644 --- a/src/application/setups/main_menu_setup.cpp +++ b/src/application/setups/main_menu_setup.cpp @@ -177,7 +177,7 @@ main_menu_setup::main_menu_setup( initial_step_number = cosm.get_total_steps_passed(); #if 0 - gui.root.buttons[main_menu_button_type::PLAY_RANKED].set_appearing_caption("Connect to official server"); + gui.root.buttons[main_menu_button_type::QUICK_PLAY].set_appearing_caption("Connect to official server"); gui.root.buttons[main_menu_button_type::BROWSE_SERVERS].set_appearing_caption("Browse servers"); gui.root.buttons[main_menu_button_type::HOST_SERVER].set_appearing_caption("Host server"); gui.root.buttons[main_menu_button_type::CONNECT_TO_SERVER].set_appearing_caption("Connect to server"); diff --git a/src/work.cpp b/src/work.cpp index 80d2e6ed2..c46cdda40 100644 --- a/src/work.cpp +++ b/src/work.cpp @@ -2106,7 +2106,6 @@ work_result work( WEBSTATIC auto launch_main_menu = [&]() { if (!has_main_menu()) { main_menu_gui = {}; - main_menu_gui.has_play_ranked_button = ranked_servers_enabled; setup_launcher([&]() { emplace_main_menu(*official, config.main_menu); @@ -2600,10 +2599,26 @@ work_result work( }; WEBSTATIC auto perform_start_client_gui = [&](const auto frame_num) { - const auto best_server = browse_servers_gui.find_best_server(ranked_servers_enabled); + auto best_casual = browse_servers_gui.find_best_server(false); + auto best_ranked = browse_servers_gui.find_best_server(ranked_servers_enabled); + + if (ranked_servers_enabled) { + const bool has_casual_with_players = best_casual && best_casual->heartbeat.num_online > 0; + const bool no_ranked_with_players = !best_ranked.has_value() || best_ranked->heartbeat.num_online == 0; + + if (has_casual_with_players && no_ranked_with_players) { + best_ranked = best_casual; + } + } + +#if PLATFORM_WEB + if (!is_signed_in()) { + best_ranked = best_casual; + } +#endif const bool perform_result = start_client_gui.perform( - best_server, + best_ranked, browse_servers_gui.refresh_in_progress(), frame_num, get_general_renderer(), @@ -2627,8 +2642,8 @@ work_result work( browse_servers_gui.open(); - if (best_server.has_value()) { - browse_servers_gui.select_server(*best_server); + if (best_ranked.has_value()) { + browse_servers_gui.select_server(*best_ranked); } } }; @@ -3340,7 +3355,7 @@ work_result work( #if BUILD_NETWORKING if (start_client_gui.show) { - if (start_client_gui.current_tab == start_client_tab_type::BEST_RANKED) { + if (start_client_gui.current_tab == start_client_tab_type::BEST_SERVER) { if (!browse_servers_gui.refreshed_at_least_once()) { browse_servers_gui.refresh_server_list(get_browse_servers_input()); } @@ -3685,7 +3700,7 @@ work_result work( break; - case T::PLAY_RANKED: + case T::QUICK_PLAY: if (common_input_state[augs::event::keys::key::LSHIFT]) { #if !IS_PRODUCTION_BUILD client_start_requested = true; @@ -3693,7 +3708,7 @@ work_result work( } else { start_client_gui.open(); - start_client_gui.current_tab = start_client_tab_type::BEST_RANKED; + start_client_gui.current_tab = start_client_tab_type::BEST_SERVER; } break;