source-engine/engine/cl_pred.cpp

75 lines
2.1 KiB
C++
Raw Normal View History

2020-04-23 00:56:21 +08:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $Workfile: $
// $Date: $
//
//-----------------------------------------------------------------------------
// $Log: $
//
// $NoKeywords: $
//=============================================================================//
#include "client_pch.h"
#include "demo.h"
#include "host.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
//-----------------------------------------------------------------------------
// Purpose:
// Input : world_start_state -
// validframe -
// start_command -
// stop_command -
//-----------------------------------------------------------------------------
void CL_Predict( int world_start_state, bool validframe, int start_command, int stop_command )
{
// Allow client .dll to do prediction.
g_pClientSidePrediction->Update(
world_start_state,
validframe,
start_command,
stop_command );
}
//-----------------------------------------------------------------------------
// Purpose: Determine if we received a new message, which means we need to
// redo prediction
//-----------------------------------------------------------------------------
void CL_RunPrediction( PREDICTION_REASON reason )
{
tmZone( TELEMETRY_LEVEL0, TMZF_NONE, "%s", __FUNCTION__ );
if ( !cl.IsActive() )
return;
if ( cl.m_nDeltaTick < 0 )
{
// no valid snapshot received yet
return;
}
// Don't do prediction if skipping ahead during demo playback
if ( demoplayer->IsSkipping() )
{
return;
}
//Msg( "%i pred reason %s\n", host_framecount, reason == PREDICTION_SIMULATION_RESULTS_ARRIVING_ON_SEND_FRAME ?
// "same frame" : "normal" );
bool valid = cl.m_nDeltaTick > 0; // cl.GetReceiveList( cl.delta_tick ) != NULL;
//Msg( "%i/%i CL_RunPrediction: last ack %i most recent %i\n",
// host_framecount, cl.tickcount,
// cl.last_command_ack,
// cl.netchan->m_nOutSequenceNr - 1 );
CL_Predict( cl.m_nDeltaTick,
valid,
cl.last_command_ack,
cl.lastoutgoingcommand + cl.chokedcommands );
}