972 |
992 |
973 case WE_PAINT: { |
993 case WE_PAINT: { |
974 const NetworkGameInfo *gi = &nd->server->info; |
994 const NetworkGameInfo *gi = &nd->server->info; |
975 int y = NET_PRC__OFFSET_TOP_WIDGET_COMPANY, pos; |
995 int y = NET_PRC__OFFSET_TOP_WIDGET_COMPANY, pos; |
976 |
996 |
977 SetWindowWidgetDisabledState(w, 7, nd->company == (byte)-1); |
997 /* Join button is disabled when no company is selected */ |
978 SetWindowWidgetDisabledState(w, 8, gi->companies_on >= gi->companies_max); |
998 SetWindowWidgetDisabledState(w, NLWW_JOIN, nd->company == INVALID_PLAYER); |
979 /* You can not join a server as spectator when it has no companies active.. |
999 /* Cannot start new company if there are too many */ |
980 * it causes some nasty crashes */ |
1000 SetWindowWidgetDisabledState(w, NLWW_NEW, gi->companies_on >= gi->companies_max); |
981 SetWindowWidgetDisabledState(w, 9, gi->spectators_on >= gi->spectators_max || |
1001 /* Cannot spectate if there are too many spectators */ |
982 gi->companies_on == 0); |
1002 SetWindowWidgetDisabledState(w, NLWW_SPECTATE, gi->spectators_on >= gi->spectators_max); |
983 |
1003 |
|
1004 /* Draw window widgets */ |
|
1005 SetDParamStr(0, gi->server_name); |
984 DrawWindowWidgets(w); |
1006 DrawWindowWidgets(w); |
985 |
|
986 SetDParamStr(0, gi->server_name); |
|
987 DrawString(10, 22, STR_NETWORK_PREPARE_TO_JOIN, TC_GOLD); |
|
988 |
1007 |
989 /* Draw company list */ |
1008 /* Draw company list */ |
990 pos = w->vscroll.pos; |
1009 pos = w->vscroll.pos; |
991 while (pos < gi->companies_on) { |
1010 while (pos < gi->companies_on) { |
992 byte company = NetworkLobbyFindCompanyIndex(pos); |
1011 byte company = NetworkLobbyFindCompanyIndex(pos); |
1066 } |
1085 } |
1067 } break; |
1086 } break; |
1068 |
1087 |
1069 case WE_CLICK: |
1088 case WE_CLICK: |
1070 switch (e->we.click.widget) { |
1089 switch (e->we.click.widget) { |
1071 case 0: case 11: /* Close 'X' | Cancel button */ |
1090 case NLWW_CLOSE: // Close 'X' |
|
1091 case NLWW_CANCEL: // Cancel button |
1072 ShowNetworkGameWindow(); |
1092 ShowNetworkGameWindow(); |
1073 break; |
1093 break; |
1074 case 4: { /* Company list */ |
1094 case NLWW_MATRIX: { // Company list |
1075 uint32 id_v = (e->we.click.pt.y - NET_PRC__OFFSET_TOP_WIDGET_COMPANY) / NET_PRC__SIZE_OF_ROW; |
1095 uint32 id_v = (e->we.click.pt.y - NET_PRC__OFFSET_TOP_WIDGET_COMPANY) / NET_PRC__SIZE_OF_ROW; |
1076 |
1096 |
1077 if (id_v >= w->vscroll.cap) return; |
1097 if (id_v >= w->vscroll.cap) break; |
1078 |
1098 |
1079 id_v += w->vscroll.pos; |
1099 id_v += w->vscroll.pos; |
1080 nd->company = (id_v >= nd->server->info.companies_on) ? INVALID_PLAYER : NetworkLobbyFindCompanyIndex(id_v); |
1100 nd->company = (id_v >= nd->server->info.companies_on) ? INVALID_PLAYER : NetworkLobbyFindCompanyIndex(id_v); |
1081 SetWindowDirty(w); |
1101 SetWindowDirty(w); |
1082 } break; |
1102 } break; |
1083 case 7: /* Join company */ |
1103 case NLWW_JOIN: // Join company |
1084 if (nd->company != (byte)-1) { |
1104 /* Button can be clicked only when it is enabled */ |
1085 _network_playas = nd->company; |
1105 _network_playas = nd->company; |
1086 NetworkClientConnectGame(_network_last_host, _network_last_port); |
1106 NetworkClientConnectGame(_network_last_host, _network_last_port); |
1087 } |
1107 break; |
1088 break; |
1108 case NLWW_NEW: // New company |
1089 case 8: /* New company */ |
|
1090 _network_playas = PLAYER_NEW_COMPANY; |
1109 _network_playas = PLAYER_NEW_COMPANY; |
1091 NetworkClientConnectGame(_network_last_host, _network_last_port); |
1110 NetworkClientConnectGame(_network_last_host, _network_last_port); |
1092 break; |
1111 break; |
1093 case 9: /* Spectate game */ |
1112 case NLWW_SPECTATE: // Spectate game |
1094 _network_playas = PLAYER_SPECTATOR; |
1113 _network_playas = PLAYER_SPECTATOR; |
1095 NetworkClientConnectGame(_network_last_host, _network_last_port); |
1114 NetworkClientConnectGame(_network_last_host, _network_last_port); |
1096 break; |
1115 break; |
1097 case 10: /* Refresh */ |
1116 case NLWW_REFRESH: // Refresh |
1098 NetworkTCPQueryServer(_network_last_host, _network_last_port); // company info |
1117 NetworkTCPQueryServer(_network_last_host, _network_last_port); // company info |
1099 NetworkUDPQueryServer(_network_last_host, _network_last_port); // general data |
1118 NetworkUDPQueryServer(_network_last_host, _network_last_port); // general data |
1100 break; |
1119 break; |
1101 } break; |
1120 } break; |
1102 |
1121 |
1105 break; |
1124 break; |
1106 } |
1125 } |
1107 } |
1126 } |
1108 |
1127 |
1109 static const Widget _network_lobby_window_widgets[] = { |
1128 static const Widget _network_lobby_window_widgets[] = { |
1110 { WWT_CLOSEBOX, RESIZE_NONE, BGC, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW }, |
1129 { WWT_CLOSEBOX, RESIZE_NONE, BGC, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW }, // NLWW_CLOSE |
1111 { WWT_CAPTION, RESIZE_NONE, BGC, 11, 419, 0, 13, STR_NETWORK_GAME_LOBBY, STR_NULL}, |
1130 { WWT_CAPTION, RESIZE_NONE, BGC, 11, 419, 0, 13, STR_NETWORK_GAME_LOBBY, STR_NULL}, |
1112 { WWT_PANEL, RESIZE_NONE, BGC, 0, 419, 14, 234, 0x0, STR_NULL}, |
1131 { WWT_PANEL, RESIZE_NONE, BGC, 0, 419, 14, 234, 0x0, STR_NULL}, |
1113 |
1132 { WWT_TEXT, RESIZE_NONE, BGC, 10, 419, 22, 34, STR_NETWORK_PREPARE_TO_JOIN, STR_NULL}, |
1114 // company list |
1133 |
1115 { WWT_PANEL, RESIZE_NONE, BTC, 10, 155, 38, 49, 0x0, STR_NULL}, |
1134 /* company list */ |
1116 { WWT_MATRIX, RESIZE_NONE, BGC, 10, 155, 50, 190, (10 << 8) + 1, STR_NETWORK_COMPANY_LIST_TIP}, |
1135 { WWT_PANEL, RESIZE_NONE, BTC, 10, 155, 38, 49, 0x0, STR_NULL}, |
1117 { WWT_SCROLLBAR, RESIZE_NONE, BGC, 156, 167, 38, 190, STR_NULL, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
1136 { WWT_MATRIX, RESIZE_NONE, BGC, 10, 155, 50, 190, (10 << 8) + 1, STR_NETWORK_COMPANY_LIST_TIP}, // NLWW_MATRIX |
1118 |
1137 { WWT_SCROLLBAR, RESIZE_NONE, BGC, 156, 167, 38, 190, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
1119 // company/player info |
1138 |
1120 { WWT_PANEL, RESIZE_NONE, BGC, 173, 404, 38, 190, 0x0, STR_NULL}, |
1139 /* company/player info */ |
1121 |
1140 { WWT_PANEL, RESIZE_NONE, BGC, 173, 404, 38, 190, 0x0, STR_NULL}, // NLWW_DETAILS |
1122 // buttons |
1141 |
1123 { WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 10, 151, 200, 211, STR_NETWORK_JOIN_COMPANY, STR_NETWORK_JOIN_COMPANY_TIP}, |
1142 /* buttons */ |
1124 { WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 10, 151, 215, 226, STR_NETWORK_NEW_COMPANY, STR_NETWORK_NEW_COMPANY_TIP}, |
1143 { WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 10, 151, 200, 211, STR_NETWORK_JOIN_COMPANY, STR_NETWORK_JOIN_COMPANY_TIP}, // NLWW_JOIN |
1125 { WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 158, 268, 200, 211, STR_NETWORK_SPECTATE_GAME, STR_NETWORK_SPECTATE_GAME_TIP}, |
1144 { WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 10, 151, 215, 226, STR_NETWORK_NEW_COMPANY, STR_NETWORK_NEW_COMPANY_TIP}, // NLWW_NEW |
1126 { WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 158, 268, 215, 226, STR_NETWORK_REFRESH, STR_NETWORK_REFRESH_TIP}, |
1145 { WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 158, 268, 200, 211, STR_NETWORK_SPECTATE_GAME, STR_NETWORK_SPECTATE_GAME_TIP}, // NLWW_SPECTATE |
1127 { WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 278, 388, 200, 211, STR_012E_CANCEL, STR_NULL}, |
1146 { WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 158, 268, 215, 226, STR_NETWORK_REFRESH, STR_NETWORK_REFRESH_TIP}, // NLWW_REFRESH |
|
1147 { WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 278, 388, 200, 211, STR_012E_CANCEL, STR_NULL}, // NLWW_CANCEL |
1128 |
1148 |
1129 { WIDGETS_END}, |
1149 { WIDGETS_END}, |
1130 }; |
1150 }; |
1131 |
1151 |
1132 static const WindowDesc _network_lobby_window_desc = { |
1152 static const WindowDesc _network_lobby_window_desc = { |