/* ================== Host_ClientFrame ================== */ void Host_ClientFrame( void ) { // if client is not active, do nothing if( !cls.initialized ) return; // decide the simulation time cl.oldtime = cl.time; cl.time += host.frametime; if( menu.hInstance ) { // menu time (not paused, not clamped) menu.globals->time = host.realtime; menu.globals->frametime = host.realframetime; menu.globals->demoplayback = cls.demoplayback; menu.globals->demorecording = cls.demorecording; } // if in the debugger last frame, don't timeout if( host.frametime > 5.0f ) cls.netchan.last_received = Sys_DoubleTime(); VGui_RunFrame (); clgame.dllFuncs.pfnFrame( host.frametime ); // fetch results from server CL_ReadPackets(); VID_CheckChanges(); // allow sound and video DLL change if( cls.state == ca_active ) { if( !cl.video_prepped ) CL_PrepVideo(); if( !cl.audio_prepped ) CL_PrepSound(); } // update the screen SCR_UpdateScreen (); // update audio S_RenderFrame( &cl.refdef ); // send a new command message to the server CL_SendCommand(); // predict all unacknowledged movements CL_PredictMovement(); // decay dynamic lights CL_DecayLights (); SCR_RunCinematic(); Con_RunConsole(); cls.framecount++; }
/** * @sa Qcommon_Frame */ void CL_Frame (int now, void* data) { static int lastFrame = 0; int delta; if (sys_priority->modified || sys_affinity->modified) Sys_SetAffinityAndPriority(); /* decide the simulation time */ delta = now - lastFrame; if (lastFrame) cls.frametime = delta / 1000.0; else cls.frametime = 0; cls.realtime = Sys_Milliseconds(); cl.time = now; lastFrame = now; /* frame rate calculation */ if (delta) cls.framerate = 1000.0 / delta; if (cls.state == ca_connected) { /* we run full speed when connecting */ CL_RunHTTPDownloads(); } /* fetch results from server */ CL_ReadPackets(); CL_SendCommand(); IN_Frame(); GAME_Frame(); /* update camera position */ CL_CameraMove(); if (cls.state == ca_active) CL_ParticleRun(); /* update the screen */ SCR_UpdateScreen(); /* advance local effects for next frame */ SCR_RunConsole(); /* LE updates */ LE_Think(); /* sound frame */ S_Frame(); /* send a new command message to the server */ CL_SendCommand(); }
void CL_Frame(int packetdelta, int renderdelta, int timedelta, qboolean packetframe, qboolean renderframe) { static int lasttimecalled; // Dedicated? if (dedicated->value) { return; } // Calculate simulation time. cls.nframetime = packetdelta / 1000000.0f; cls.rframetime = renderdelta / 1000000.0f; cls.realtime = curtime; cl.time += timedelta / 1000; // Don't extrapolate too far ahead. if (cls.nframetime > 0.5f) { cls.nframetime = 0.5f; } if (cls.rframetime > 0.5f) { cls.rframetime = 0.5f; } // if in the debugger last frame, don't timeout. if (timedelta > 5000000) { cls.netchan.last_received = Sys_Milliseconds(); } // Reset power shield / power screen sound counter. num_power_sounds = 0; if (!cl_timedemo->value) { // Don't throttle too much when connecting / loading. if ((cls.state == ca_connected) && (packetdelta > 100000)) { packetframe = true; } } // Run HTTP downloads more often while connecting. #ifdef USE_CURL if (cls.state == ca_connected) { CL_RunHTTPDownloads(); } #endif // Update input stuff. if (packetframe || renderframe) { CL_ReadPackets(); CL_UpdateWindowedMouse(); IN_Update(); Cbuf_Execute(); CL_FixCvarCheats(); if (cls.state > ca_connecting) { CL_RefreshCmd(); } else { CL_RefreshMove(); } } if (cls.forcePacket || userinfo_modified) { packetframe = true; cls.forcePacket = false; } if (packetframe) { CL_SendCmd(); CL_CheckForResend(); // Run HTTP downloads during game. #ifdef USE_CURL CL_RunHTTPDownloads(); #endif } if (renderframe) { VID_CheckChanges(); CL_PredictMovement(); if (!cl.refresh_prepped && (cls.state == ca_active)) { CL_PrepRefresh(); } /* update the screen */ if (host_speeds->value) { time_before_ref = Sys_Milliseconds(); } SCR_UpdateScreen(); if (host_speeds->value) { time_after_ref = Sys_Milliseconds(); } /* update audio */ S_Update(cl.refdef.vieworg, cl.v_forward, cl.v_right, cl.v_up); /* advance local effects for next frame */ CL_RunDLights(); CL_RunLightStyles(); SCR_RunCinematic(); SCR_RunConsole(); /* Update framecounter */ cls.framecount++; if (log_stats->value) { if (cls.state == ca_active) { if (!lasttimecalled) { lasttimecalled = Sys_Milliseconds(); if (log_stats_file) { fprintf(log_stats_file, "0\n"); } } else { int now = Sys_Milliseconds(); if (log_stats_file) { fprintf(log_stats_file, "%d\n", now - lasttimecalled); } lasttimecalled = now; } } } } }
void CL_Frame(int msec) { static int extratime; static int lasttimecalled; if (dedicated->value) { return; } extratime += msec; if (!cl_timedemo->value) { if ((cls.state == ca_connected) && (extratime < 100)) { return; /* don't flood packets out while connecting */ } if (extratime < 1000 / cl_maxfps->value) { return; /* framerate is too high */ } } /* decide the simulation time */ cls.frametime = extratime / 1000.0; cl.time += extratime; cls.realtime = curtime; extratime = 0; if (cls.frametime > (1.0 / 5)) { cls.frametime = (1.0 / 5); } /* if in the debugger last frame, don't timeout */ if (msec > 5000) { cls.netchan.last_received = Sys_Milliseconds(); } /* fetch results from server */ CL_ReadPackets(); /* send a new command message to the server */ CL_SendCommand(); /* predict all unacknowledged movements */ CL_PredictMovement(); /* allow renderer DLL change */ VID_CheckChanges(); if (!cl.refresh_prepped && (cls.state == ca_active)) { CL_PrepRefresh(); } /* update the screen */ if (host_speeds->value) { time_before_ref = Sys_Milliseconds(); } SCR_UpdateScreen(); if (host_speeds->value) { time_after_ref = Sys_Milliseconds(); } /* update audio */ S_Update(cl.refdef.vieworg, cl.v_forward, cl.v_right, cl.v_up); #ifdef CDA CDAudio_Update(); #endif /* advance local effects for next frame */ CL_RunDLights(); CL_RunLightStyles(); SCR_RunCinematic(); SCR_RunConsole(); cls.framecount++; if (log_stats->value) { if (cls.state == ca_active) { if (!lasttimecalled) { lasttimecalled = Sys_Milliseconds(); if (log_stats_file) { fprintf(log_stats_file, "0\n"); } } else { int now = Sys_Milliseconds(); if (log_stats_file) { fprintf(log_stats_file, "%d\n", now - lasttimecalled); } lasttimecalled = now; } } } }