Do client stuff for this frame
| 313 | |
| 314 | // Do client stuff for this frame |
| 315 | void MultiDoClientFrame() { |
| 316 | int i; |
| 317 | Multi_last_sent_time[Player_num][0] += Frametime; |
| 318 | |
| 319 | // Get data from the server |
| 320 | MultiProcessIncoming(); |
| 321 | |
| 322 | if (Netgame.flags & NF_EXIT_NOW) { |
| 323 | // DLL says we should bail! |
| 324 | Netgame.flags &= ~NF_EXIT_NOW; |
| 325 | MultiLeaveGame(); |
| 326 | SetFunctionMode(MENU_MODE); |
| 327 | return; |
| 328 | } |
| 329 | |
| 330 | if (NetPlayers[Player_num].sequence == NETSEQ_LEVEL_START) { |
| 331 | MultiSendMyInfo(); |
| 332 | NetPlayers[Player_num].sequence = NETSEQ_NEED_GAMETIME; |
| 333 | First_gametime_req = timer_GetTime(); |
| 334 | } else if (NetPlayers[Player_num].sequence == NETSEQ_NEED_GAMETIME) { |
| 335 | // Ask for gametime |
| 336 | GetServerGameTime(); |
| 337 | Last_gametime_req = timer_GetTime(); |
| 338 | NetPlayers[Player_num].sequence = NETSEQ_WAIT_GAMETIME; |
| 339 | } else if (NetPlayers[Player_num].sequence == NETSEQ_WAIT_GAMETIME) { |
| 340 | if (Got_new_game_time) { |
| 341 | NetPlayers[Player_num].sequence = NETSEQ_REQUEST_PLAYERS; |
| 342 | } else { |
| 343 | // Wait for server response |
| 344 | if ((timer_GetTime() - First_gametime_req) > NET_CLIENT_GAMETIME_REQ_TIMEOUT) { |
| 345 | // Giving up, we waited too long. |
| 346 | mprintf(0, "Server disconnected while waiting for gametime!\n"); |
| 347 | MultiLeaveGame(); |
| 348 | ShowProgressScreen(TXT_MLTDISCFRMSERV); |
| 349 | Sleep(2000); |
| 350 | } else if ((timer_GetTime() - Last_gametime_req) > NET_CLIENT_GAMETIME_REQ_RETRY) { |
| 351 | NetPlayers[Player_num].sequence = NETSEQ_NEED_GAMETIME; |
| 352 | } |
| 353 | } |
| 354 | |
| 355 | } else if (NetPlayers[Player_num].sequence == NETSEQ_REQUEST_PLAYERS) { |
| 356 | MultiSendRequestForPlayers(); |
| 357 | NetPlayers[Player_num].sequence = NETSEQ_PLAYERS; |
| 358 | } else if (NetPlayers[Player_num].sequence == NETSEQ_REQUEST_BUILDINGS) { |
| 359 | MultiSendRequestForBuildings(); |
| 360 | NetPlayers[Player_num].sequence = NETSEQ_BUILDINGS; |
| 361 | } else if (NetPlayers[Player_num].sequence == NETSEQ_REQUEST_OBJECTS) { |
| 362 | MultiSendRequestForObjects(); |
| 363 | NetPlayers[Player_num].sequence = NETSEQ_OBJECTS; |
| 364 | } else if (NetPlayers[Player_num].sequence == NETSEQ_REQUEST_WORLD) { |
| 365 | MultiSendRequestForWorldStates(); |
| 366 | NetPlayers[Player_num].sequence = NETSEQ_WORLD; |
| 367 | NetPlayers[Player_num].custom_file_seq = 0; |
| 368 | } else if (NetPlayers[Player_num].sequence == NETSEQ_PLAYING) { |
| 369 | if (NetPlayers[Player_num].custom_file_seq == 0) { |
| 370 | // Tell the server about our custom data (once only) |
| 371 | if (NetPlayers[Player_num].ship_logo[0]) |
| 372 | PlayerSetCustomTexture(Player_num, NetPlayers[Player_num].ship_logo); |
no test coverage detected