From e5336a1bdc44021605c20f9c50876b6cb5c90f9a Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Tue, 20 Sep 2011 19:57:39 +0000 Subject: Auto-select IWAD based on query response from server. Subversion-branch: /branches/v2-branch Subversion-revision: 2387 --- src/setup/multiplayer.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/setup/multiplayer.c b/src/setup/multiplayer.c index d3a77639..91335c6c 100644 --- a/src/setup/multiplayer.c +++ b/src/setup/multiplayer.c @@ -769,12 +769,36 @@ static txt_window_action_t *JoinGameAction(void) return action; } -static void SelectQueryAddress(TXT_UNCAST_ARG(button), TXT_UNCAST_ARG(addr)) +static void SelectQueryAddress(TXT_UNCAST_ARG(button), + TXT_UNCAST_ARG(querydata)) { TXT_CAST_ARG(txt_button_t, button); + TXT_CAST_ARG(net_querydata_t, querydata); + int i; + + // Set address to connect to: free(connect_address); connect_address = strdup(button->label); + + // Auto-choose IWAD if there is already a player connected. + + if (querydata->num_players > 0 + && !(querydata->gamemission == doom && querydata->gamemode == shareware)) + { + for (i = 0; found_iwads[i] != NULL; ++i) + { + if (found_iwads[i]->mode == querydata->gamemode + && found_iwads[i]->mission == querydata->gamemission) + { + found_iwad_selected = i; + break; + } + } + } + + // Finished with search. + TXT_CloseWindow(query_window); } @@ -794,7 +818,7 @@ static void QueryResponseCallback(net_addr_t *addr, TXT_AddWidgets(results_table, TXT_NewLabel(ping_time_str), TXT_NewButton2(NET_AddrToString(addr), - SelectQueryAddress, addr), + SelectQueryAddress, querydata), TXT_NewLabel(description), NULL); -- cgit v1.2.3