238 } |
238 } |
239 |
239 |
240 public: |
240 public: |
241 NetworkGameWindow(const WindowDesc *desc) : QueryStringBaseWindow(desc) |
241 NetworkGameWindow(const WindowDesc *desc) : QueryStringBaseWindow(desc) |
242 { |
242 { |
243 ttd_strlcpy(this->edit_str_buf, _network_player_name, lengthof(this->edit_str_buf)); |
243 ttd_strlcpy(this->edit_str_buf, _settings_client.network.player_name, lengthof(this->edit_str_buf)); |
244 this->afilter = CS_ALPHANUMERAL; |
244 this->afilter = CS_ALPHANUMERAL; |
245 InitializeTextBuffer(&this->text, this->edit_str_buf, lengthof(this->edit_str_buf), 120); |
245 InitializeTextBuffer(&this->text, this->edit_str_buf, lengthof(this->edit_str_buf), 120); |
246 |
246 |
247 UpdateNetworkGameWindow(true); |
247 UpdateNetworkGameWindow(true); |
248 |
248 |
288 this->SetWidgetHiddenState(NGWW_NEWGRF, sel == NULL || |
288 this->SetWidgetHiddenState(NGWW_NEWGRF, sel == NULL || |
289 !sel->online || |
289 !sel->online || |
290 sel->info.grfconfig == NULL); |
290 sel->info.grfconfig == NULL); |
291 |
291 |
292 SetDParam(0, 0x00); |
292 SetDParam(0, 0x00); |
293 SetDParam(1, _lan_internet_types_dropdown[_network_lan_internet]); |
293 SetDParam(1, _lan_internet_types_dropdown[_settings_client.network.lan_internet]); |
294 this->DrawWidgets(); |
294 this->DrawWidgets(); |
295 |
295 |
296 /* Edit box to set player name */ |
296 /* Edit box to set player name */ |
297 this->DrawEditBox(NGWW_PLAYER); |
297 this->DrawEditBox(NGWW_PLAYER); |
298 |
298 |
313 const NetworkGameList *ngl = this->servers[i]; |
313 const NetworkGameList *ngl = this->servers[i]; |
314 this->DrawServerLine(ngl, y, ngl == sel); |
314 this->DrawServerLine(ngl, y, ngl == sel); |
315 y += NET_PRC__SIZE_OF_ROW; |
315 y += NET_PRC__SIZE_OF_ROW; |
316 } |
316 } |
317 |
317 |
318 const NetworkGameList *last_joined = NetworkGameListAddItem(inet_addr(_network_last_host), _network_last_port); |
318 const NetworkGameList *last_joined = NetworkGameListAddItem(inet_addr(_settings_client.network.last_host), _settings_client.network.last_port); |
319 /* Draw the last joined server, if any */ |
319 /* Draw the last joined server, if any */ |
320 if (last_joined != NULL) this->DrawServerLine(last_joined, y = this->widget[NGWW_LASTJOINED].top + 3, last_joined == sel); |
320 if (last_joined != NULL) this->DrawServerLine(last_joined, y = this->widget[NGWW_LASTJOINED].top + 3, last_joined == sel); |
321 |
321 |
322 /* Draw the right menu */ |
322 /* Draw the right menu */ |
323 GfxFillRect(this->widget[NGWW_DETAILS].left + 1, 43, this->widget[NGWW_DETAILS].right - 1, 92, 157); |
323 GfxFillRect(this->widget[NGWW_DETAILS].left + 1, 43, this->widget[NGWW_DETAILS].right - 1, 92, 157); |
404 case NGWW_CANCEL: // Cancel button |
404 case NGWW_CANCEL: // Cancel button |
405 DeleteWindowById(WC_NETWORK_WINDOW, 0); |
405 DeleteWindowById(WC_NETWORK_WINDOW, 0); |
406 break; |
406 break; |
407 |
407 |
408 case NGWW_CONN_BTN: // 'Connection' droplist |
408 case NGWW_CONN_BTN: // 'Connection' droplist |
409 ShowDropDownMenu(this, _lan_internet_types_dropdown, _network_lan_internet, NGWW_CONN_BTN, 0, 0); // do it for widget NSSW_CONN_BTN |
409 ShowDropDownMenu(this, _lan_internet_types_dropdown, _settings_client.network.lan_internet, NGWW_CONN_BTN, 0, 0); // do it for widget NSSW_CONN_BTN |
410 break; |
410 break; |
411 |
411 |
412 case NGWW_NAME: // Sort by name |
412 case NGWW_NAME: // Sort by name |
413 case NGWW_CLIENTS: // Sort by connected clients |
413 case NGWW_CLIENTS: // Sort by connected clients |
414 case NGWW_INFO: // Connectivity (green dot) |
414 case NGWW_INFO: // Connectivity (green dot) |
430 this->server = (id_v < this->servers.Length()) ? this->servers[id_v] : NULL; |
430 this->server = (id_v < this->servers.Length()) ? this->servers[id_v] : NULL; |
431 this->SetDirty(); |
431 this->SetDirty(); |
432 } break; |
432 } break; |
433 |
433 |
434 case NGWW_LASTJOINED: { |
434 case NGWW_LASTJOINED: { |
435 NetworkGameList *last_joined = NetworkGameListAddItem(inet_addr(_network_last_host), _network_last_port); |
435 NetworkGameList *last_joined = NetworkGameListAddItem(inet_addr(_settings_client.network.last_host), _settings_client.network.last_port); |
436 if (last_joined != NULL) { |
436 if (last_joined != NULL) { |
437 this->server = last_joined; |
437 this->server = last_joined; |
438 this->SetDirty(); |
438 this->SetDirty(); |
439 } |
439 } |
440 } break; |
440 } break; |
441 |
441 |
442 case NGWW_FIND: // Find server automatically |
442 case NGWW_FIND: // Find server automatically |
443 switch (_network_lan_internet) { |
443 switch (_settings_client.network.lan_internet) { |
444 case 0: NetworkUDPSearchGame(); break; |
444 case 0: NetworkUDPSearchGame(); break; |
445 case 1: NetworkUDPQueryMasterServer(); break; |
445 case 1: NetworkUDPQueryMasterServer(); break; |
446 } |
446 } |
447 break; |
447 break; |
448 |
448 |
449 case NGWW_ADD: // Add a server |
449 case NGWW_ADD: // Add a server |
450 ShowQueryString( |
450 ShowQueryString( |
451 BindCString(_network_default_ip), |
451 BindCString(_settings_client.network.connect_to_ip), |
452 STR_NETWORK_ENTER_IP, |
452 STR_NETWORK_ENTER_IP, |
453 31 | 0x1000, // maximum number of characters OR |
453 31 | 0x1000, // maximum number of characters OR |
454 250, // characters up to this width pixels, whichever is satisfied first |
454 250, // characters up to this width pixels, whichever is satisfied first |
455 this, CS_ALPHANUMERAL); |
455 this, CS_ALPHANUMERAL); |
456 break; |
456 break; |
459 ShowNetworkStartServerWindow(); |
459 ShowNetworkStartServerWindow(); |
460 break; |
460 break; |
461 |
461 |
462 case NGWW_JOIN: // Join Game |
462 case NGWW_JOIN: // Join Game |
463 if (this->server != NULL) { |
463 if (this->server != NULL) { |
464 snprintf(_network_last_host, sizeof(_network_last_host), "%s", inet_ntoa(*(struct in_addr *)&this->server->ip)); |
464 snprintf(_settings_client.network.last_host, sizeof(_settings_client.network.last_host), "%s", inet_ntoa(*(struct in_addr *)&this->server->ip)); |
465 _network_last_port = this->server->port; |
465 _settings_client.network.last_port = this->server->port; |
466 ShowNetworkLobbyWindow(this->server); |
466 ShowNetworkLobbyWindow(this->server); |
467 } |
467 } |
468 break; |
468 break; |
469 |
469 |
470 case NGWW_REFRESH: // Refresh |
470 case NGWW_REFRESH: // Refresh |
519 |
519 |
520 if (this->HandleEditBoxKey(NGWW_PLAYER, key, keycode, state) == 1) return state; // enter pressed |
520 if (this->HandleEditBoxKey(NGWW_PLAYER, key, keycode, state) == 1) return state; // enter pressed |
521 |
521 |
522 /* The name is only allowed when it starts with a letter! */ |
522 /* The name is only allowed when it starts with a letter! */ |
523 if (!StrEmpty(this->edit_str_buf) && this->edit_str_buf[0] != ' ') { |
523 if (!StrEmpty(this->edit_str_buf) && this->edit_str_buf[0] != ' ') { |
524 ttd_strlcpy(_network_player_name, this->edit_str_buf, lengthof(_network_player_name)); |
524 ttd_strlcpy(_settings_client.network.player_name, this->edit_str_buf, lengthof(_settings_client.network.player_name)); |
525 } else { |
525 } else { |
526 ttd_strlcpy(_network_player_name, "Player", lengthof(_network_player_name)); |
526 ttd_strlcpy(_settings_client.network.player_name, "Player", lengthof(_settings_client.network.player_name)); |
527 } |
527 } |
528 return state; |
528 return state; |
529 } |
529 } |
530 |
530 |
531 virtual void OnQueryTextFinished(char *str) |
531 virtual void OnQueryTextFinished(char *str) |
663 FiosItem *map; ///< Selected map |
663 FiosItem *map; ///< Selected map |
664 byte widget_id; ///< The widget that has the pop-up input menu |
664 byte widget_id; ///< The widget that has the pop-up input menu |
665 |
665 |
666 NetworkStartServerWindow(const WindowDesc *desc) : QueryStringBaseWindow(desc) |
666 NetworkStartServerWindow(const WindowDesc *desc) : QueryStringBaseWindow(desc) |
667 { |
667 { |
668 ttd_strlcpy(this->edit_str_buf, _network_server_name, lengthof(this->edit_str_buf)); |
668 ttd_strlcpy(this->edit_str_buf, _settings_client.network.server_name, lengthof(this->edit_str_buf)); |
669 |
669 |
670 _saveload_mode = SLD_NEW_GAME; |
670 _saveload_mode = SLD_NEW_GAME; |
671 BuildFileList(); |
671 BuildFileList(); |
672 this->vscroll.cap = 12; |
672 this->vscroll.cap = 12; |
673 this->vscroll.count = _fios_num + 1; |
673 this->vscroll.count = _fios_num + 1; |
674 |
674 |
675 this->afilter = CS_ALPHANUMERAL; |
675 this->afilter = CS_ALPHANUMERAL; |
676 InitializeTextBuffer(&this->text, this->edit_str_buf, lengthof(this->edit_str_buf), 160); |
676 InitializeTextBuffer(&this->text, this->edit_str_buf, lengthof(this->edit_str_buf), 160); |
677 |
677 |
678 this->field = NSSW_GAMENAME; |
678 this->field = NSSW_GAMENAME; |
679 _network_game_info.use_password = !StrEmpty(_network_server_password); |
679 _network_game_info.use_password = !StrEmpty(_settings_client.network.server_password); |
680 |
680 |
681 this->FindWindowPlacementAndResize(desc); |
681 this->FindWindowPlacementAndResize(desc); |
682 } |
682 } |
683 |
683 |
684 virtual void OnPaint() |
684 virtual void OnPaint() |
735 ShowOnScreenKeyboard(this, NSSW_GAMENAME, 0, 0); |
735 ShowOnScreenKeyboard(this, NSSW_GAMENAME, 0, 0); |
736 break; |
736 break; |
737 |
737 |
738 case NSSW_SETPWD: // Set password button |
738 case NSSW_SETPWD: // Set password button |
739 this->widget_id = NSSW_SETPWD; |
739 this->widget_id = NSSW_SETPWD; |
740 ShowQueryString(BindCString(_network_server_password), STR_NETWORK_SET_PASSWORD, 20, 250, this, CS_ALPHANUMERAL); |
740 ShowQueryString(BindCString(_settings_client.network.server_password), STR_NETWORK_SET_PASSWORD, 20, 250, this, CS_ALPHANUMERAL); |
741 break; |
741 break; |
742 |
742 |
743 case NSSW_SELMAP: { // Select map |
743 case NSSW_SELMAP: { // Select map |
744 int y = (pt.y - NSSWND_START) / NSSWND_ROWSIZE; |
744 int y = (pt.y - NSSWND_START) / NSSWND_ROWSIZE; |
745 |
745 |
860 { |
860 { |
861 EventState state = ES_NOT_HANDLED; |
861 EventState state = ES_NOT_HANDLED; |
862 if (this->field == NSSW_GAMENAME) { |
862 if (this->field == NSSW_GAMENAME) { |
863 if (this->HandleEditBoxKey(NSSW_GAMENAME, key, keycode, state) == 1) return state; // enter pressed |
863 if (this->HandleEditBoxKey(NSSW_GAMENAME, key, keycode, state) == 1) return state; // enter pressed |
864 |
864 |
865 ttd_strlcpy(_network_server_name, this->text.buf, sizeof(_network_server_name)); |
865 ttd_strlcpy(_settings_client.network.server_name, this->text.buf, sizeof(_settings_client.network.server_name)); |
866 } |
866 } |
867 |
867 |
868 return state; |
868 return state; |
869 } |
869 } |
870 |
870 |
871 virtual void OnQueryTextFinished(char *str) |
871 virtual void OnQueryTextFinished(char *str) |
872 { |
872 { |
873 if (str == NULL) return; |
873 if (str == NULL) return; |
874 |
874 |
875 if (this->widget_id == NSSW_SETPWD) { |
875 if (this->widget_id == NSSW_SETPWD) { |
876 ttd_strlcpy(_network_server_password, str, lengthof(_network_server_password)); |
876 ttd_strlcpy(_settings_client.network.server_password, str, lengthof(_settings_client.network.server_password)); |
877 _network_game_info.use_password = !StrEmpty(_network_server_password); |
877 _network_game_info.use_password = !StrEmpty(_settings_client.network.server_password); |
878 } else { |
878 } else { |
879 int32 value = atoi(str); |
879 int32 value = atoi(str); |
880 this->InvalidateWidget(this->widget_id); |
880 this->InvalidateWidget(this->widget_id); |
881 switch (this->widget_id) { |
881 switch (this->widget_id) { |
882 default: NOT_REACHED(); |
882 default: NOT_REACHED(); |
1102 } break; |
1102 } break; |
1103 |
1103 |
1104 case NLWW_JOIN: // Join company |
1104 case NLWW_JOIN: // Join company |
1105 /* Button can be clicked only when it is enabled */ |
1105 /* Button can be clicked only when it is enabled */ |
1106 _network_playas = this->company; |
1106 _network_playas = this->company; |
1107 NetworkClientConnectGame(_network_last_host, _network_last_port); |
1107 NetworkClientConnectGame(_settings_client.network.last_host, _settings_client.network.last_port); |
1108 break; |
1108 break; |
1109 |
1109 |
1110 case NLWW_NEW: // New company |
1110 case NLWW_NEW: // New company |
1111 _network_playas = PLAYER_NEW_COMPANY; |
1111 _network_playas = PLAYER_NEW_COMPANY; |
1112 NetworkClientConnectGame(_network_last_host, _network_last_port); |
1112 NetworkClientConnectGame(_settings_client.network.last_host, _settings_client.network.last_port); |
1113 break; |
1113 break; |
1114 |
1114 |
1115 case NLWW_SPECTATE: // Spectate game |
1115 case NLWW_SPECTATE: // Spectate game |
1116 _network_playas = PLAYER_SPECTATOR; |
1116 _network_playas = PLAYER_SPECTATOR; |
1117 NetworkClientConnectGame(_network_last_host, _network_last_port); |
1117 NetworkClientConnectGame(_settings_client.network.last_host, _settings_client.network.last_port); |
1118 break; |
1118 break; |
1119 |
1119 |
1120 case NLWW_REFRESH: // Refresh |
1120 case NLWW_REFRESH: // Refresh |
1121 NetworkTCPQueryServer(_network_last_host, _network_last_port); // company info |
1121 NetworkTCPQueryServer(_settings_client.network.last_host, _settings_client.network.last_port); // company info |
1122 NetworkUDPQueryServer(_network_last_host, _network_last_port); // general data |
1122 NetworkUDPQueryServer(_settings_client.network.last_host, _settings_client.network.last_port); // general data |
1123 break; |
1123 break; |
1124 } |
1124 } |
1125 } |
1125 } |
1126 }; |
1126 }; |
1127 |
1127 |
1160 * @param ngl Selected game pointer which is passed to the new window */ |
1160 * @param ngl Selected game pointer which is passed to the new window */ |
1161 static void ShowNetworkLobbyWindow(NetworkGameList *ngl) |
1161 static void ShowNetworkLobbyWindow(NetworkGameList *ngl) |
1162 { |
1162 { |
1163 DeleteWindowById(WC_NETWORK_WINDOW, 0); |
1163 DeleteWindowById(WC_NETWORK_WINDOW, 0); |
1164 |
1164 |
1165 NetworkTCPQueryServer(_network_last_host, _network_last_port); // company info |
1165 NetworkTCPQueryServer(_settings_client.network.last_host, _settings_client.network.last_port); // company info |
1166 NetworkUDPQueryServer(_network_last_host, _network_last_port); // general data |
1166 NetworkUDPQueryServer(_settings_client.network.last_host, _settings_client.network.last_port); // general data |
1167 |
1167 |
1168 new NetworkLobbyWindow(&_network_lobby_window_desc, ngl); |
1168 new NetworkLobbyWindow(&_network_lobby_window_desc, ngl); |
1169 } |
1169 } |
1170 |
1170 |
1171 // The window below gives information about the connected clients |
1171 // The window below gives information about the connected clients |
1892 struct NetworkCompanyPasswordWindow : public QueryStringBaseWindow { |
1892 struct NetworkCompanyPasswordWindow : public QueryStringBaseWindow { |
1893 NetworkCompanyPasswordWindow(const WindowDesc *desc, Window *parent) : QueryStringBaseWindow(desc) |
1893 NetworkCompanyPasswordWindow(const WindowDesc *desc, Window *parent) : QueryStringBaseWindow(desc) |
1894 { |
1894 { |
1895 this->parent = parent; |
1895 this->parent = parent; |
1896 this->afilter = CS_ALPHANUMERAL; |
1896 this->afilter = CS_ALPHANUMERAL; |
1897 InitializeTextBuffer(&this->text, this->edit_str_buf, min(lengthof(_network_default_company_pass), lengthof(this->edit_str_buf)), 0); |
1897 InitializeTextBuffer(&this->text, this->edit_str_buf, min(lengthof(_settings_client.network.default_company_pass), lengthof(this->edit_str_buf)), 0); |
1898 |
1898 |
1899 this->FindWindowPlacementAndResize(desc); |
1899 this->FindWindowPlacementAndResize(desc); |
1900 } |
1900 } |
1901 |
1901 |
1902 void OnOk() |
1902 void OnOk() |
1903 { |
1903 { |
1904 if (this->IsWidgetLowered(NCPWW_SAVE_AS_DEFAULT_PASSWORD)) { |
1904 if (this->IsWidgetLowered(NCPWW_SAVE_AS_DEFAULT_PASSWORD)) { |
1905 snprintf(_network_default_company_pass, lengthof(_network_default_company_pass), "%s", this->edit_str_buf); |
1905 snprintf(_settings_client.network.default_company_pass, lengthof(_settings_client.network.default_company_pass), "%s", this->edit_str_buf); |
1906 } |
1906 } |
1907 |
1907 |
1908 /* empty password is a '*' because of console argument */ |
1908 /* empty password is a '*' because of console argument */ |
1909 if (StrEmpty(this->edit_str_buf)) snprintf(this->edit_str_buf, lengthof(this->edit_str_buf), "*"); |
1909 if (StrEmpty(this->edit_str_buf)) snprintf(this->edit_str_buf, lengthof(this->edit_str_buf), "*"); |
1910 char *password = this->edit_str_buf; |
1910 char *password = this->edit_str_buf; |