MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / MultiDoClientFrame

Function MultiDoClientFrame

Descent3/multi_client.cpp:315–493  ·  view source on GitHub ↗

Do client stuff for this frame

Source from the content-addressed store, hash-verified

313
314// Do client stuff for this frame
315void 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);

Callers 1

MultiDoFrameFunction · 0.85

Calls 15

MultiProcessIncomingFunction · 0.85
MultiLeaveGameFunction · 0.85
SetFunctionModeFunction · 0.85
MultiSendMyInfoFunction · 0.85
GetServerGameTimeFunction · 0.85
ShowProgressScreenFunction · 0.85
PlayerSetCustomTextureFunction · 0.85

Tested by

no test coverage detected