IPredictionSystem: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
m (I should use the preview more) |
||
Line 1: | Line 1: | ||
This interface allows you to prevent sending network data to the local player because it's already predicting the data. | This interface allows you to prevent sending network data to the local player because it's already predicting the data. | ||
//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============// | |||
// | |||
// Purpose: | |||
// | |||
// $NoKeywords: $ | |||
//=============================================================================// | |||
#ifndef IPREDICTIONSYSTEM_H | |||
#define IPREDICTIONSYSTEM_H | |||
#ifdef _WIN32 | |||
#pragma once | |||
#endif | |||
#include "predictable_entity.h" | |||
class CBaseEntity; | |||
//----------------------------------------------------------------------------- | |||
// Purpose: Interfaces derived from this are able to filter out the local player | |||
// when doing prediction on the client, this includes not sending network data to | |||
// the local player from the server if needed. | |||
//----------------------------------------------------------------------------- | |||
class IPredictionSystem | |||
{ | |||
public: | |||
IPredictionSystem() | |||
{ | |||
m_pNextSystem = g_pPredictionSystems; | |||
g_pPredictionSystems = this; | |||
m_bSuppressEvent = false; | |||
m_pSuppressHost = NULL; | |||
m_nStatusPushed = 0; | |||
}; | |||
virtual ~IPredictionSystem() {}; | |||
IPredictionSystem *GetNext() | |||
{ | |||
return m_pNextSystem; | |||
} | |||
void SetSuppressEvent( bool state ) | |||
{ | |||
m_bSuppressEvent = state; | |||
} | |||
void SetSuppressHost( CBaseEntity *host ) | |||
{ | |||
m_pSuppressHost = host; | |||
} | |||
CBaseEntity const *GetSuppressHost( void ) | |||
{ | |||
if ( DisableFiltering() ) | |||
{ | |||
return NULL; | |||
} | |||
return m_pSuppressHost; | |||
} | |||
bool CanPredict( void ) const | |||
{ | |||
if ( DisableFiltering() ) | |||
{ | |||
return false; | |||
} | |||
return !m_bSuppressEvent; | |||
} | |||
static IPredictionSystem *g_pPredictionSystems; | |||
static void SuppressEvents( bool state ) | |||
{ | |||
IPredictionSystem *sys = g_pPredictionSystems; | |||
while ( sys ) | |||
{ | |||
sys->SetSuppressEvent( state ); | |||
sys = sys->GetNext(); | |||
} | |||
} | |||
static void SuppressHostEvents( CBaseEntity *host ) | |||
{ | |||
IPredictionSystem *sys = g_pPredictionSystems; | |||
while ( sys ) | |||
{ | |||
sys->SetSuppressHost( host ); | |||
sys = sys->GetNext(); | |||
} | |||
} | |||
private: | |||
static void Push( void ) | |||
{ | |||
IPredictionSystem *sys = g_pPredictionSystems; | |||
while ( sys ) | |||
{ | |||
sys->_Push(); | |||
sys = sys->GetNext(); | |||
} | |||
} | |||
static void Pop( void ) | |||
{ | |||
IPredictionSystem *sys = g_pPredictionSystems; | |||
while ( sys ) | |||
{ | |||
sys->_Pop(); | |||
sys = sys->GetNext(); | |||
} | |||
} | |||
void _Push( void ) | |||
{ | |||
++m_nStatusPushed; | |||
} | |||
void _Pop( void ) | |||
{ | |||
--m_nStatusPushed; | |||
} | |||
bool DisableFiltering( void ) const | |||
{ | |||
return ( m_nStatusPushed > 0 ) ? true : false; | |||
} | |||
IPredictionSystem *m_pNextSystem; | |||
bool m_bSuppressEvent; | |||
CBaseEntity *m_pSuppressHost; | |||
int m_nStatusPushed; | |||
friend class CDisablePredictionFiltering; | |||
}; | |||
class CDisablePredictionFiltering | |||
{ | |||
public: | |||
CDisablePredictionFiltering( bool disable = true ) | |||
{ | |||
m_bDisabled = disable; | |||
if ( m_bDisabled ) | |||
{ | |||
IPredictionSystem::Push(); | |||
} | |||
} | |||
~CDisablePredictionFiltering( void ) | |||
{ | |||
if ( m_bDisabled ) | |||
{ | |||
IPredictionSystem::Pop(); | |||
} | |||
} | |||
private: | |||
bool m_bDisabled; | |||
}; | |||
#endif // IPREDICTIONSYSTEM_H | |||
==See Also== | ==See Also== | ||
* [http://hl2sdk.gigcities.com/ipredictionsystem_8h-source.html ipredictionsystem.h on HL2 SDK Doxygen] | * [http://hl2sdk.gigcities.com/ipredictionsystem_8h-source.html ipredictionsystem.h on HL2 SDK Doxygen] | ||
[[Category:Interfaces]] | [[Category:Interfaces]] |
Revision as of 05:25, 10 September 2006
This interface allows you to prevent sending network data to the local player because it's already predicting the data.
//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef IPREDICTIONSYSTEM_H #define IPREDICTIONSYSTEM_H #ifdef _WIN32 #pragma once #endif #include "predictable_entity.h" class CBaseEntity; //----------------------------------------------------------------------------- // Purpose: Interfaces derived from this are able to filter out the local player // when doing prediction on the client, this includes not sending network data to // the local player from the server if needed. //----------------------------------------------------------------------------- class IPredictionSystem { public: IPredictionSystem() { m_pNextSystem = g_pPredictionSystems; g_pPredictionSystems = this; m_bSuppressEvent = false; m_pSuppressHost = NULL; m_nStatusPushed = 0; }; virtual ~IPredictionSystem() {}; IPredictionSystem *GetNext() { return m_pNextSystem; } void SetSuppressEvent( bool state ) { m_bSuppressEvent = state; } void SetSuppressHost( CBaseEntity *host ) { m_pSuppressHost = host; } CBaseEntity const *GetSuppressHost( void ) { if ( DisableFiltering() ) { return NULL; } return m_pSuppressHost; } bool CanPredict( void ) const { if ( DisableFiltering() ) { return false; } return !m_bSuppressEvent; } static IPredictionSystem *g_pPredictionSystems; static void SuppressEvents( bool state ) { IPredictionSystem *sys = g_pPredictionSystems; while ( sys ) { sys->SetSuppressEvent( state ); sys = sys->GetNext(); } } static void SuppressHostEvents( CBaseEntity *host ) { IPredictionSystem *sys = g_pPredictionSystems; while ( sys ) { sys->SetSuppressHost( host ); sys = sys->GetNext(); } } private: static void Push( void ) { IPredictionSystem *sys = g_pPredictionSystems; while ( sys ) { sys->_Push(); sys = sys->GetNext(); } } static void Pop( void ) { IPredictionSystem *sys = g_pPredictionSystems; while ( sys ) { sys->_Pop(); sys = sys->GetNext(); } } void _Push( void ) { ++m_nStatusPushed; } void _Pop( void ) { --m_nStatusPushed; } bool DisableFiltering( void ) const { return ( m_nStatusPushed > 0 ) ? true : false; } IPredictionSystem *m_pNextSystem; bool m_bSuppressEvent; CBaseEntity *m_pSuppressHost; int m_nStatusPushed; friend class CDisablePredictionFiltering; }; class CDisablePredictionFiltering { public: CDisablePredictionFiltering( bool disable = true ) { m_bDisabled = disable; if ( m_bDisabled ) { IPredictionSystem::Push(); } } ~CDisablePredictionFiltering( void ) { if ( m_bDisabled ) { IPredictionSystem::Pop(); } } private: bool m_bDisabled; }; #endif // IPREDICTIONSYSTEM_H