src/network/network_gui.cpp
branchgamebalance
changeset 9912 1ac8aac92385
parent 9911 0b8b245a2391
equal deleted inserted replaced
9911:0b8b245a2391 9912:1ac8aac92385
    83 	STR_NETWORK_9_PLAYERS,
    83 	STR_NETWORK_9_PLAYERS,
    84 	STR_NETWORK_10_PLAYERS,
    84 	STR_NETWORK_10_PLAYERS,
    85 	INVALID_STRING_ID
    85 	INVALID_STRING_ID
    86 };
    86 };
    87 
    87 
    88 static const StringID _language_dropdown[] = {
    88 static StringID _language_dropdown[NETLANG_COUNT + 1] = {STR_NULL};
    89 	STR_NETWORK_LANG_ANY,
    89 
    90 	STR_NETWORK_LANG_ENGLISH,
    90 void SortNetworkLanguages() {
    91 	STR_NETWORK_LANG_GERMAN,
    91 	/* Init the strings */
    92 	STR_NETWORK_LANG_FRENCH,
    92 	if (_language_dropdown[0] == STR_NULL) {
    93 	INVALID_STRING_ID
    93 		for (int i = 0; i < NETLANG_COUNT; i++) _language_dropdown[i] = STR_NETWORK_LANG_ANY + i;
    94 };
    94 		_language_dropdown[NETLANG_COUNT] = INVALID_STRING_ID;
       
    95 	}
       
    96 
       
    97 	/* Sort the strings (we don't move 'any' and the 'invalid' one) */
       
    98 	qsort(&_language_dropdown[1], NETLANG_COUNT - 1, sizeof(StringID), &StringIDSorter);
       
    99 }
    95 
   100 
    96 enum {
   101 enum {
    97 	NET_PRC__OFFSET_TOP_WIDGET          = 54,
   102 	NET_PRC__OFFSET_TOP_WIDGET          = 54,
    98 	NET_PRC__OFFSET_TOP_WIDGET_COMPANY  = 52,
   103 	NET_PRC__OFFSET_TOP_WIDGET_COMPANY  = 52,
    99 	NET_PRC__SIZE_OF_ROW                = 14,
   104 	NET_PRC__SIZE_OF_ROW                = 14,
   340 			SetDParam(2, sel->info.companies_on);
   345 			SetDParam(2, sel->info.companies_on);
   341 			SetDParam(3, sel->info.companies_max);
   346 			SetDParam(3, sel->info.companies_max);
   342 			DrawString(x, y, STR_NETWORK_CLIENTS, 2);
   347 			DrawString(x, y, STR_NETWORK_CLIENTS, 2);
   343 			y += 10;
   348 			y += 10;
   344 
   349 
   345 			SetDParam(0, _language_dropdown[sel->info.server_lang]);
   350 			SetDParam(0, STR_NETWORK_LANG_ANY + sel->info.server_lang);
   346 			DrawString(x, y, STR_NETWORK_LANGUAGE, 2); // server language
   351 			DrawString(x, y, STR_NETWORK_LANGUAGE, 2); // server language
   347 			y += 10;
   352 			y += 10;
   348 
   353 
   349 			SetDParam(0, STR_TEMPERATE_LANDSCAPE + sel->info.map_set);
   354 			SetDParam(0, STR_TEMPERATE_LANDSCAPE + sel->info.map_set);
   350 			DrawString(x, y, STR_NETWORK_TILESET, 2); // tileset
   355 			DrawString(x, y, STR_NETWORK_TILESET, 2); // tileset
   607 
   612 
   608 		SetDParam( 7, _connection_types_dropdown[_network_advertise]);
   613 		SetDParam( 7, _connection_types_dropdown[_network_advertise]);
   609 		SetDParam( 9, _players_dropdown[_network_game_info.clients_max]);
   614 		SetDParam( 9, _players_dropdown[_network_game_info.clients_max]);
   610 		SetDParam(11, _players_dropdown[_network_game_info.companies_max]);
   615 		SetDParam(11, _players_dropdown[_network_game_info.companies_max]);
   611 		SetDParam(13, _players_dropdown[_network_game_info.spectators_max]);
   616 		SetDParam(13, _players_dropdown[_network_game_info.spectators_max]);
   612 		SetDParam(15, _language_dropdown[_network_game_info.server_lang]);
   617 		SetDParam(15, STR_NETWORK_LANG_ANY + _network_game_info.server_lang);
   613 		DrawWindowWidgets(w);
   618 		DrawWindowWidgets(w);
   614 
   619 
   615 		GfxFillRect(11, 63, 258, 215, 0xD7);
   620 		GfxFillRect(11, 63, 258, 215, 0xD7);
   616 		DrawEditBox(w, &WP(w, network_ql_d).q, 3);
   621 		DrawEditBox(w, &WP(w, network_ql_d).q, 3);
   617 
   622 
   677 			ShowDropDownMenu(w, _players_dropdown, _network_game_info.companies_max, 12, 0, 1537);
   682 			ShowDropDownMenu(w, _players_dropdown, _network_game_info.companies_max, 12, 0, 1537);
   678 			break;
   683 			break;
   679 		case 13: case 14: /* Number of Spectators */
   684 		case 13: case 14: /* Number of Spectators */
   680 			ShowDropDownMenu(w, _players_dropdown, _network_game_info.spectators_max, 14, 0, 0);
   685 			ShowDropDownMenu(w, _players_dropdown, _network_game_info.spectators_max, 14, 0, 0);
   681 			break;
   686 			break;
   682 		case 15: case 16: /* Language */
   687 		case 15: case 16: { /* Language */
   683 			ShowDropDownMenu(w, _language_dropdown, _network_game_info.server_lang, 16, 0, 0);
   688 			uint sel = 0;
   684 			break;
   689 			for (uint i = 0; i < lengthof(_language_dropdown) - 1; i++) {
       
   690 				if (_language_dropdown[i] == STR_NETWORK_LANG_ANY + _network_game_info.server_lang) {
       
   691 					sel = i;
       
   692 					break;
       
   693 				}
       
   694 			}
       
   695 			ShowDropDownMenu(w, _language_dropdown, sel, 16, 0, 0);
       
   696 			break;
       
   697 		}
   685 		case 17: /* Start game */
   698 		case 17: /* Start game */
   686 			_is_network_server = true;
   699 			_is_network_server = true;
   687 
   700 
   688 			if (nd->map == NULL) { // start random new game
   701 			if (nd->map == NULL) { // start random new game
   689 				ShowGenerateLandscape();
   702 				ShowGenerateLandscape();
   713 		switch (e->we.dropdown.button) {
   726 		switch (e->we.dropdown.button) {
   714 			case  8: _network_advertise                = (e->we.dropdown.index != 0); break;
   727 			case  8: _network_advertise                = (e->we.dropdown.index != 0); break;
   715 			case 10: _network_game_info.clients_max    = e->we.dropdown.index;        break;
   728 			case 10: _network_game_info.clients_max    = e->we.dropdown.index;        break;
   716 			case 12: _network_game_info.companies_max  = e->we.dropdown.index;        break;
   729 			case 12: _network_game_info.companies_max  = e->we.dropdown.index;        break;
   717 			case 14: _network_game_info.spectators_max = e->we.dropdown.index;        break;
   730 			case 14: _network_game_info.spectators_max = e->we.dropdown.index;        break;
   718 			case 16: _network_game_info.server_lang    = e->we.dropdown.index;        break;
   731 			case 16:
       
   732 				_network_game_info.server_lang = _language_dropdown[e->we.dropdown.index] - STR_NETWORK_LANG_ANY;
       
   733 				break;
   719 		}
   734 		}
   720 
   735 
   721 		SetWindowDirty(w);
   736 		SetWindowDirty(w);
   722 		break;
   737 		break;
   723 
   738