533 break; |
519 break; |
534 } |
520 } |
535 } |
521 } |
536 |
522 |
537 static const Widget _network_game_window_widgets[] = { |
523 static const Widget _network_game_window_widgets[] = { |
538 { WWT_CLOSEBOX, RESIZE_NONE, BGC, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, |
524 { WWT_CLOSEBOX, RESIZE_NONE, BGC, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, |
539 { WWT_CAPTION, RESIZE_RIGHT, BGC, 11, 449, 0, 13, STR_NETWORK_MULTIPLAYER, STR_NULL}, |
525 { WWT_CAPTION, RESIZE_RIGHT, BGC, 11, 449, 0, 13, STR_NETWORK_MULTIPLAYER, STR_NULL}, |
540 { WWT_PANEL, RESIZE_RB, BGC, 0, 449, 14, 263, 0x0, STR_NULL}, |
526 { WWT_PANEL, RESIZE_RB, BGC, 0, 449, 14, 263, 0x0, STR_NULL}, |
541 |
527 |
542 /* LEFT SIDE */ |
528 /* LEFT SIDE */ |
543 { WWT_PANEL, RESIZE_LR, BGC, 290, 440, 22, 33, 0x0, STR_NETWORK_ENTER_NAME_TIP}, |
529 { WWT_PANEL, RESIZE_LR, BGC, 290, 440, 22, 33, 0x0, STR_NETWORK_ENTER_NAME_TIP}, |
544 |
530 |
545 { WWT_INSET, RESIZE_NONE, BGC, 90, 181, 22, 33, STR_NETWORK_COMBO1, STR_NETWORK_CONNECTION_TIP}, |
531 { WWT_INSET, RESIZE_NONE, BGC, 90, 181, 22, 33, STR_NETWORK_LAN_INTERNET_COMBO, STR_NETWORK_CONNECTION_TIP}, |
546 { WWT_TEXTBTN, RESIZE_NONE, BGC, 170, 180, 23, 32, STR_0225, STR_NETWORK_CONNECTION_TIP}, |
532 { WWT_TEXTBTN, RESIZE_NONE, BGC, 170, 180, 23, 32, STR_0225, STR_NETWORK_CONNECTION_TIP}, |
547 |
533 |
548 { WWT_PUSHTXTBTN, RESIZE_RIGHT, BTC, 10, 70, 42, 53, STR_NETWORK_GAME_NAME, STR_NETWORK_GAME_NAME_TIP}, |
534 { WWT_PUSHTXTBTN, RESIZE_RIGHT, BTC, 10, 70, 42, 53, STR_NETWORK_GAME_NAME, STR_NETWORK_GAME_NAME_TIP}, |
549 { WWT_PUSHTXTBTN, RESIZE_LR, BTC, 71, 150, 42, 53, STR_NETWORK_CLIENTS_CAPTION, STR_NETWORK_CLIENTS_CAPTION_TIP}, |
535 { WWT_PUSHTXTBTN, RESIZE_LR, BTC, 71, 150, 42, 53, STR_NETWORK_CLIENTS_CAPTION, STR_NETWORK_CLIENTS_CAPTION_TIP}, |
550 { WWT_PUSHTXTBTN, RESIZE_LR, BTC, 151, 190, 42, 53, STR_EMPTY, STR_NETWORK_INFO_ICONS_TIP}, |
536 { WWT_PUSHTXTBTN, RESIZE_LR, BTC, 151, 190, 42, 53, STR_EMPTY, STR_NETWORK_INFO_ICONS_TIP}, |
551 |
537 |
552 { WWT_MATRIX, RESIZE_RB, BGC, 10, 190, 54, 236, (13 << 8) + 1, STR_NETWORK_CLICK_GAME_TO_SELECT}, |
538 { WWT_MATRIX, RESIZE_RB, BGC, 10, 190, 54, 236, (13 << 8) + 1, STR_NETWORK_CLICK_GAME_TO_SELECT}, |
553 { WWT_SCROLLBAR, RESIZE_LRB, BGC, 191, 202, 42, 236, STR_NULL, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
539 { WWT_SCROLLBAR, RESIZE_LRB, BGC, 191, 202, 42, 236, STR_NULL, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
554 |
540 |
555 { WWT_PUSHTXTBTN, RESIZE_TB, BTC, 10, 110, 246, 257, STR_NETWORK_FIND_SERVER, STR_NETWORK_FIND_SERVER_TIP}, |
541 { WWT_PUSHTXTBTN, RESIZE_TB, BTC, 10, 110, 246, 257, STR_NETWORK_FIND_SERVER, STR_NETWORK_FIND_SERVER_TIP}, |
556 { WWT_PUSHTXTBTN, RESIZE_TB, BTC, 118, 218, 246, 257, STR_NETWORK_ADD_SERVER, STR_NETWORK_ADD_SERVER_TIP}, |
542 { WWT_PUSHTXTBTN, RESIZE_TB, BTC, 118, 218, 246, 257, STR_NETWORK_ADD_SERVER, STR_NETWORK_ADD_SERVER_TIP}, |
557 |
543 |
558 /* RIGHT SIDE */ |
544 /* RIGHT SIDE */ |
559 { WWT_PUSHTXTBTN, RESIZE_TB, BTC, 226, 326, 246, 257, STR_NETWORK_START_SERVER, STR_NETWORK_START_SERVER_TIP}, |
545 { WWT_PUSHTXTBTN, RESIZE_TB, BTC, 226, 326, 246, 257, STR_NETWORK_START_SERVER, STR_NETWORK_START_SERVER_TIP}, |
560 { WWT_PUSHTXTBTN, RESIZE_TB, BTC, 334, 434, 246, 257, STR_012E_CANCEL, STR_NULL}, |
546 { WWT_PUSHTXTBTN, RESIZE_TB, BTC, 334, 434, 246, 257, STR_012E_CANCEL, STR_NULL}, |
561 |
547 |
562 { WWT_PANEL, RESIZE_LRB, BGC, 210, 440, 42, 236, 0x0, STR_NULL}, |
548 { WWT_PANEL, RESIZE_LRB, BGC, 210, 440, 42, 236, 0x0, STR_NULL}, |
563 |
549 |
564 { WWT_PUSHTXTBTN, RESIZE_LRTB, BTC, 215, 315, 215, 226, STR_NETWORK_JOIN_GAME, STR_NULL}, |
550 { WWT_PUSHTXTBTN, RESIZE_LRTB, BTC, 215, 315, 215, 226, STR_NETWORK_JOIN_GAME, STR_NULL}, |
565 { WWT_PUSHTXTBTN, RESIZE_LRTB, BTC, 330, 435, 215, 226, STR_NETWORK_REFRESH, STR_NETWORK_REFRESH_TIP}, |
551 { WWT_PUSHTXTBTN, RESIZE_LRTB, BTC, 330, 435, 215, 226, STR_NETWORK_REFRESH, STR_NETWORK_REFRESH_TIP}, |
566 |
552 |
567 { WWT_PUSHTXTBTN, RESIZE_LRTB, BTC, 330, 435, 197, 208, STR_NEWGRF_SETTINGS_BUTTON, STR_NULL}, |
553 { WWT_PUSHTXTBTN, RESIZE_LRTB, BTC, 330, 435, 197, 208, STR_NEWGRF_SETTINGS_BUTTON, STR_NULL}, |
568 |
554 |
569 { WWT_RESIZEBOX, RESIZE_LRTB, BGC, 438, 449, 252, 263, 0x0, STR_RESIZE_BUTTON }, |
555 { WWT_RESIZEBOX, RESIZE_LRTB, BGC, 438, 449, 252, 263, 0x0, STR_RESIZE_BUTTON }, |
570 |
556 |
571 { WIDGETS_END}, |
557 { WIDGETS_END}, |
572 }; |
558 }; |
573 |
559 |
574 static const WindowDesc _network_game_window_desc = { |
560 static const WindowDesc _network_game_window_desc = { |
694 SetWindowDirty(w); |
681 SetWindowDirty(w); |
695 } break; |
682 } break; |
696 case 7: case 8: /* Connection type */ |
683 case 7: case 8: /* Connection type */ |
697 ShowDropDownMenu(w, _connection_types_dropdown, _network_advertise, 8, 0, 0); // do it for widget 8 |
684 ShowDropDownMenu(w, _connection_types_dropdown, _network_advertise, 8, 0, 0); // do it for widget 8 |
698 break; |
685 break; |
699 case 9: case 10: /* Number of Players (hide 0 and 1 players) */ |
686 case 9: case 11: // Click on up/down button for number of players |
700 ShowDropDownMenu(w, _players_dropdown, _network_game_info.clients_max, 10, 0, 3); |
687 case 12: case 14: // Click on up/down button for number of companies |
701 break; |
688 case 15: case 17: // Click on up/down button for number of spectators |
702 case 11: case 12: /* Number of Companies (hide 0, 9 and 10 companies; max is 8) */ |
689 /* Don't allow too fast scrolling */ |
703 ShowDropDownMenu(w, _players_dropdown, _network_game_info.companies_max, 12, 0, 1537); |
690 if ((w->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { |
704 break; |
691 HandleButtonClick(w, e->we.click.widget); |
705 case 13: case 14: /* Number of Spectators */ |
692 SetWindowDirty(w); |
706 ShowDropDownMenu(w, _players_dropdown, _network_game_info.spectators_max, 14, 0, 0); |
693 switch (e->we.click.widget) { |
707 break; |
694 default: NOT_REACHED(); |
708 case 15: case 16: { /* Language */ |
695 case 9: case 11: _network_game_info.clients_max = clamp(_network_game_info.clients_max + e->we.click.widget - 10, 2, MAX_CLIENTS); break; |
|
696 case 12: case 14: _network_game_info.companies_max = clamp(_network_game_info.companies_max + e->we.click.widget - 13, 1, MAX_PLAYERS); break; |
|
697 case 15: case 17: _network_game_info.spectators_max = clamp(_network_game_info.spectators_max + e->we.click.widget - 16, 0, MAX_CLIENTS); break; |
|
698 } |
|
699 } |
|
700 _left_button_clicked = false; |
|
701 break; |
|
702 case 10: // Click on number of players |
|
703 nd->widget_id = 10; |
|
704 SetDParam(0, _network_game_info.clients_max); |
|
705 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_NETWORK_NUMBER_OF_CLIENTS, 3, 50, w, CS_NUMERAL); |
|
706 break; |
|
707 case 13: // Click on number of companies |
|
708 nd->widget_id = 13; |
|
709 SetDParam(0, _network_game_info.companies_max); |
|
710 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_NETWORK_NUMBER_OF_COMPANIES, 3, 50, w, CS_NUMERAL); |
|
711 break; |
|
712 case 16: // Click on number of companies |
|
713 nd->widget_id = 16; |
|
714 SetDParam(0, _network_game_info.spectators_max); |
|
715 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_NETWORK_NUMBER_OF_SPECTATORS, 3, 50, w, CS_NUMERAL); |
|
716 break; |
|
717 case 18: case 19: { /* Language */ |
709 uint sel = 0; |
718 uint sel = 0; |
710 for (uint i = 0; i < lengthof(_language_dropdown) - 1; i++) { |
719 for (uint i = 0; i < lengthof(_language_dropdown) - 1; i++) { |
711 if (_language_dropdown[i] == STR_NETWORK_LANG_ANY + _network_game_info.server_lang) { |
720 if (_language_dropdown[i] == STR_NETWORK_LANG_ANY + _network_game_info.server_lang) { |
712 sel = i; |
721 sel = i; |
713 break; |
722 break; |
714 } |
723 } |
715 } |
724 } |
716 ShowDropDownMenu(w, _language_dropdown, sel, 16, 0, 0); |
725 ShowDropDownMenu(w, _language_dropdown, sel, 19, 0, 0); |
717 break; |
726 break; |
718 } |
727 } |
719 case 17: /* Start game */ |
728 case 20: /* Start game */ |
720 _is_network_server = true; |
729 _is_network_server = true; |
721 |
730 |
722 if (nd->map == NULL) { // start random new game |
731 if (nd->map == NULL) { // start random new game |
723 ShowGenerateLandscape(); |
732 ShowGenerateLandscape(); |
724 } else { // load a scenario |
733 } else { // load a scenario |
767 |
776 |
768 ttd_strlcpy(_network_server_name, WP(w, network_ql_d).q.text.buf, sizeof(_network_server_name)); |
777 ttd_strlcpy(_network_server_name, WP(w, network_ql_d).q.text.buf, sizeof(_network_server_name)); |
769 } |
778 } |
770 break; |
779 break; |
771 |
780 |
772 case WE_ON_EDIT_TEXT: { |
781 case WE_ON_EDIT_TEXT: |
773 ttd_strlcpy(_network_server_password, e->we.edittext.str, lengthof(_network_server_password)); |
782 if (e->we.edittext.str == NULL) break; |
774 _network_game_info.use_password = (_network_server_password[0] != '\0'); |
783 |
|
784 if (nd->widget_id == 4) { |
|
785 ttd_strlcpy(_network_server_password, e->we.edittext.str, lengthof(_network_server_password)); |
|
786 _network_game_info.use_password = (_network_server_password[0] != '\0'); |
|
787 } else { |
|
788 int32 value = atoi(e->we.edittext.str); |
|
789 InvalidateWidget(w, nd->widget_id); |
|
790 switch (nd->widget_id) { |
|
791 default: NOT_REACHED(); |
|
792 case 10: _network_game_info.clients_max = clamp(value, 2, MAX_CLIENTS); break; |
|
793 case 13: _network_game_info.companies_max = clamp(value, 1, MAX_PLAYERS); break; |
|
794 case 16: _network_game_info.spectators_max = clamp(value, 0, MAX_CLIENTS); break; |
|
795 } |
|
796 } |
|
797 |
775 SetWindowDirty(w); |
798 SetWindowDirty(w); |
776 } break; |
799 break; |
777 } |
800 } |
778 } |
801 } |
779 |
802 |
780 static const Widget _network_start_server_window_widgets[] = { |
803 static const Widget _network_start_server_window_widgets[] = { |
781 { WWT_CLOSEBOX, RESIZE_NONE, BGC, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW }, |
804 { WWT_CLOSEBOX, RESIZE_NONE, BGC, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW }, |
782 { WWT_CAPTION, RESIZE_NONE, BGC, 11, 419, 0, 13, STR_NETWORK_START_GAME_WINDOW, STR_NULL}, |
805 { WWT_CAPTION, RESIZE_NONE, BGC, 11, 419, 0, 13, STR_NETWORK_START_GAME_WINDOW, STR_NULL}, |
783 { WWT_PANEL, RESIZE_NONE, BGC, 0, 419, 14, 243, 0x0, STR_NULL}, |
806 { WWT_PANEL, RESIZE_NONE, BGC, 0, 419, 14, 243, 0x0, STR_NULL}, |
784 |
807 |
785 { WWT_PANEL, RESIZE_NONE, BGC, 100, 272, 22, 33, 0x0, STR_NETWORK_NEW_GAME_NAME_TIP}, |
808 { WWT_PANEL, RESIZE_NONE, BGC, 100, 272, 22, 33, 0x0, STR_NETWORK_NEW_GAME_NAME_TIP}, |
786 { WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 285, 405, 22, 33, STR_NETWORK_SET_PASSWORD, STR_NETWORK_PASSWORD_TIP}, |
809 { WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 285, 405, 22, 33, STR_NETWORK_SET_PASSWORD, STR_NETWORK_PASSWORD_TIP}, |
787 |
810 |
788 { WWT_INSET, RESIZE_NONE, BGC, 10, 271, 62, 216, 0x0, STR_NETWORK_SELECT_MAP_TIP}, |
811 { WWT_INSET, RESIZE_NONE, BGC, 10, 271, 62, 216, 0x0, STR_NETWORK_SELECT_MAP_TIP}, |
789 { WWT_SCROLLBAR, RESIZE_NONE, BGC, 259, 270, 63, 215, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
812 { WWT_SCROLLBAR, RESIZE_NONE, BGC, 259, 270, 63, 215, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
790 /* Combo boxes to control Connection Type / Max Clients / Max Companies / Max Observers / Language */ |
813 /* Combo/selection boxes to control Connection Type / Max Clients / Max Companies / Max Observers / Language */ |
791 { WWT_INSET, RESIZE_NONE, BGC, 280, 410, 77, 88, STR_NETWORK_COMBO1, STR_NETWORK_CONNECTION_TIP}, |
814 { WWT_INSET, RESIZE_NONE, BGC, 280, 410, 77, 88, STR_NETWORK_LAN_INTERNET_COMBO, STR_NETWORK_CONNECTION_TIP}, |
792 { WWT_TEXTBTN, RESIZE_NONE, BGC, 399, 409, 78, 87, STR_0225, STR_NETWORK_CONNECTION_TIP}, |
815 { WWT_TEXTBTN, RESIZE_NONE, BGC, 399, 409, 78, 87, STR_0225, STR_NETWORK_CONNECTION_TIP}, |
793 { WWT_INSET, RESIZE_NONE, BGC, 280, 410, 109, 120, STR_NETWORK_COMBO2, STR_NETWORK_NUMBER_OF_CLIENTS_TIP}, |
816 { WWT_IMGBTN, RESIZE_NONE, BGC, 280, 291, 109, 120, SPR_ARROW_DOWN, STR_NETWORK_NUMBER_OF_CLIENTS_TIP}, |
794 { WWT_TEXTBTN, RESIZE_NONE, BGC, 399, 409, 110, 119, STR_0225, STR_NETWORK_NUMBER_OF_CLIENTS_TIP}, |
817 { WWT_PUSHTXTBTN, RESIZE_NONE, BGC, 292, 397, 109, 120, STR_NETWORK_CLIENTS_SELECT, STR_NETWORK_NUMBER_OF_CLIENTS_TIP}, |
795 { WWT_INSET, RESIZE_NONE, BGC, 280, 410, 141, 152, STR_NETWORK_COMBO3, STR_NETWORK_NUMBER_OF_COMPANIES_TIP}, |
818 { WWT_IMGBTN, RESIZE_NONE, BGC, 398, 410, 109, 120, SPR_ARROW_UP, STR_NETWORK_NUMBER_OF_CLIENTS_TIP}, |
796 { WWT_TEXTBTN, RESIZE_NONE, BGC, 399, 409, 142, 151, STR_0225, STR_NETWORK_NUMBER_OF_COMPANIES_TIP}, |
819 { WWT_IMGBTN, RESIZE_NONE, BGC, 280, 291, 141, 152, SPR_ARROW_DOWN, STR_NETWORK_NUMBER_OF_COMPANIES_TIP}, |
797 { WWT_INSET, RESIZE_NONE, BGC, 280, 410, 173, 184, STR_NETWORK_COMBO4, STR_NETWORK_NUMBER_OF_SPECTATORS_TIP}, |
820 { WWT_PUSHTXTBTN, RESIZE_NONE, BGC, 292, 397, 141, 152, STR_NETWORK_COMPANIES_SELECT, STR_NETWORK_NUMBER_OF_COMPANIES_TIP}, |
798 { WWT_TEXTBTN, RESIZE_NONE, BGC, 399, 409, 174, 183, STR_0225, STR_NETWORK_NUMBER_OF_SPECTATORS_TIP}, |
821 { WWT_IMGBTN, RESIZE_NONE, BGC, 398, 410, 141, 152, SPR_ARROW_UP, STR_NETWORK_NUMBER_OF_COMPANIES_TIP}, |
799 { WWT_INSET, RESIZE_NONE, BGC, 280, 410, 205, 216, STR_NETWORK_COMBO5, STR_NETWORK_LANGUAGE_TIP}, |
822 { WWT_IMGBTN, RESIZE_NONE, BGC, 280, 291, 173, 184, SPR_ARROW_DOWN, STR_NETWORK_NUMBER_OF_SPECTATORS_TIP}, |
800 { WWT_TEXTBTN, RESIZE_NONE, BGC, 399, 409, 206, 215, STR_0225, STR_NETWORK_LANGUAGE_TIP}, |
823 { WWT_PUSHTXTBTN, RESIZE_NONE, BGC, 292, 397, 173, 184, STR_NETWORK_SPECTATORS_SELECT, STR_NETWORK_NUMBER_OF_SPECTATORS_TIP}, |
801 |
824 { WWT_IMGBTN, RESIZE_NONE, BGC, 398, 410, 173, 184, SPR_ARROW_UP, STR_NETWORK_NUMBER_OF_SPECTATORS_TIP}, |
802 { WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 40, 140, 224, 235, STR_NETWORK_START_GAME, STR_NETWORK_START_GAME_TIP}, |
825 |
803 { WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 150, 250, 224, 235, STR_NETWORK_LOAD_GAME, STR_NETWORK_LOAD_GAME_TIP}, |
826 { WWT_INSET, RESIZE_NONE, BGC, 280, 410, 205, 216, STR_NETWORK_LANGUAGE_COMBO, STR_NETWORK_LANGUAGE_TIP}, |
804 { WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 260, 360, 224, 235, STR_012E_CANCEL, STR_NULL}, |
827 { WWT_TEXTBTN, RESIZE_NONE, BGC, 399, 409, 206, 215, STR_0225, STR_NETWORK_LANGUAGE_TIP}, |
|
828 |
|
829 { WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 40, 140, 224, 235, STR_NETWORK_START_GAME, STR_NETWORK_START_GAME_TIP}, |
|
830 { WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 150, 250, 224, 235, STR_NETWORK_LOAD_GAME, STR_NETWORK_LOAD_GAME_TIP}, |
|
831 { WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 260, 360, 224, 235, STR_012E_CANCEL, STR_NULL}, |
805 { WIDGETS_END}, |
832 { WIDGETS_END}, |
806 }; |
833 }; |
807 |
834 |
808 static const WindowDesc _network_start_server_window_desc = { |
835 static const WindowDesc _network_start_server_window_desc = { |
809 WDP_CENTER, WDP_CENTER, 420, 244, 420, 244, |
836 WDP_CENTER, WDP_CENTER, 420, 244, 420, 244, |