mirror of
https://github.com/0TheSpy/Seaside.git
synced 2025-01-07 10:03:29 +08:00
152 lines
2.3 KiB
C++
152 lines
2.3 KiB
C++
#ifndef IPREDICTIONSYSTEM_H
|
|
#define IPREDICTIONSYSTEM_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "predictable_entity.h"
|
|
|
|
class CBaseEntity;
|
|
|
|
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 |