You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
2.0 KiB
59 lines
2.0 KiB
#ifndef _INCLUDED_ASW_LAG_COMPENSATION_H |
|
#define _INCLUDED_ASW_LAG_COMPENSATION_H |
|
|
|
// this class deals with storing an entity's position regularly |
|
// and can rewind the entity to some time (approx.) so lagged player's shots will still hit without them having to 'aim in front' to make up for their lag |
|
|
|
// how many samples of history we store |
|
#define ASW_LAG_NUM_POSITION_HISTORY_SAMPLES 5 |
|
// minimum amount of lag a player has to be under to trigger lag compensation |
|
#define ASW_MIN_LAG_TIME 0.01 |
|
// minimum amount of time between sample histories (extra samples within this time aren't stored) |
|
#define ASW_LAG_MIN_SAMPLE_TIME_DIFFERENCE 0.05 |
|
|
|
class CBasePlayer; |
|
class CASW_Player; |
|
class CUserCmd; |
|
|
|
class CASW_Lag_Compensation |
|
{ |
|
public: |
|
CASW_Lag_Compensation(); |
|
virtual ~CASW_Lag_Compensation(); |
|
void Init(CBaseAnimating *pOwner); |
|
|
|
// adds a sample to the history |
|
void StorePositionHistory(); |
|
|
|
// pass in a time to rewind back to |
|
void MoveToLaggedPosition( const float fLaggedTime ); |
|
const Vector& GetLaggedPosition( const float fLaggedTime ); |
|
void UndoLaggedPosition(); |
|
Vector GetLagCompensationOffset(); |
|
|
|
// position history |
|
Vector m_vecPositionHistory[ASW_LAG_NUM_POSITION_HISTORY_SAMPLES]; |
|
float m_fPositionHistoryTime[ASW_LAG_NUM_POSITION_HISTORY_SAMPLES]; |
|
int m_iPositionHistoryTail; // which index in the above array is the current |
|
|
|
// real position |
|
Vector m_vecRealPosition; |
|
bool m_bSetRealPosition; |
|
float m_fRealSimulationTime; |
|
|
|
// handle to the entity we're doing lag compensation for |
|
CHandle<CBaseAnimating> m_hOwnerEntity; |
|
|
|
CAI_BaseNPC *GetOwnerNPC(); |
|
|
|
// moves all lag compensating entities |
|
static void AllowLagCompensation(CBasePlayer *player); |
|
static void RequestLagCompensation(CASW_Player *player, const CUserCmd *cmd ); |
|
static void FinishLagCompensation(); |
|
static bool IsInLagCompensation() { return s_bInLagCompensation; } |
|
|
|
static bool s_bInLagCompensation; |
|
static CBasePlayer *s_pLagCompensatingPlayer; |
|
}; |
|
|
|
#endif // _INCLUDED_ASW_LAG_COMPENSATION_H
|