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.
129 lines
3.7 KiB
129 lines
3.7 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef TF_PASSTIME_BALL_H |
|
#define TF_PASSTIME_BALL_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "passtime_ballcontroller_playerseek.h" |
|
#include "predictable_entity.h" |
|
#include "util_shared.h" |
|
#include "baseanimating.h" |
|
#include "utllinkedlist.h" |
|
|
|
class CSpriteTrail; |
|
class CBallPlayerToucher; |
|
//----------------------------------------------------------------------------- |
|
class CPasstimeBall : public CBaseAnimating |
|
{ |
|
public: |
|
DECLARE_CLASS( CPasstimeBall, CBaseAnimating ); |
|
DECLARE_NETWORKCLASS(); |
|
CPasstimeBall(); |
|
~CPasstimeBall(); |
|
|
|
virtual void Spawn() OVERRIDE; |
|
virtual void Precache() OVERRIDE; |
|
virtual void VPhysicsCollision( int index, gamevcollisionevent_t *pEvent ) OVERRIDE; |
|
virtual int OnTakeDamage( const CTakeDamageInfo &info ) OVERRIDE; |
|
virtual unsigned int PhysicsSolidMaskForEntity() const OVERRIDE; |
|
virtual void ChangeTeam( int iTeamNum ) OVERRIDE; |
|
virtual bool IsDeflectable() OVERRIDE; |
|
virtual void Deflected( CBaseEntity *pDeflectedBy, Vector& vecDir ) OVERRIDE; |
|
virtual bool ShouldCollide( int collisionGroup, int contentsMask ) const OVERRIDE; |
|
virtual int UpdateTransmitState() OVERRIDE; |
|
|
|
CTFPlayer *GetCarrier() const; |
|
CTFPlayer *GetPrevCarrier() const; |
|
CTFPlayer *GetThrower() const; |
|
int GetCollisionCount() const; |
|
int GetCarryDuration() const; |
|
|
|
void ResetTrail(); |
|
void HideTrail(); |
|
|
|
void MoveTo( const Vector &pos, const Vector &vel ); |
|
void MoveToSpawner( const Vector &pos ); |
|
|
|
void SetStateOutOfPlay(); |
|
void SetStateFree(); |
|
void SetStateCarried( CTFPlayer *pCarrier ); |
|
bool BOutOfPlay() const; |
|
|
|
static CPasstimeBall *Create( Vector position, QAngle angles ); |
|
|
|
void SetHomingTarget( CTFPlayer *pPlayer ); |
|
CTFPlayer *GetHomingTarget() const; |
|
float GetAirtimeSec() const; |
|
float GetAirtimeDistance() const; |
|
|
|
void StartLagCompensation( CBasePlayer *player, CUserCmd *cmd ); |
|
void FinishLagCompensation( CBasePlayer *player ); |
|
|
|
private: |
|
friend class CBallPlayerToucher; |
|
void OnTouch( CBaseEntity *pOther ); |
|
void DefaultThink(); |
|
void TouchPlayer( CTFPlayer *pPlayer ); |
|
void BlockReflect( CTFPlayer *pPlayer, const Vector& origin, const Vector& ballvel ); |
|
void BlockDamage( CTFPlayer *pPlayer, const Vector& ballvel ); |
|
bool BIgnorePlayer( CTFPlayer *pPlayer ); |
|
void OnCollision(); |
|
void UpdateLagCompensationHistory(); |
|
void SetThrower( CTFPlayer *pPlayer ); |
|
void OnBecomeNotCarried(); |
|
void SetIdleRespawnTime(); |
|
void DisableIdleRespawnTime(); |
|
bool BShouldPanicRespawn() const; |
|
bool CreateModelCollider(); |
|
void CreateSphereCollider(); |
|
|
|
enum EState |
|
{ |
|
STATE_OUT_OF_PLAY, |
|
STATE_FREE, |
|
STATE_CARRIED |
|
}; |
|
|
|
EState m_eState; |
|
CHandle<CTFPlayer> m_hThrower; |
|
EHANDLE m_hBlocker; |
|
CSpriteTrail *m_pTrail; |
|
bool m_bTrailActive; |
|
bool m_bLeftOwner; |
|
CSoundPatch *m_pHumLoop; |
|
CSoundPatch *m_pBeepLoop; |
|
CBaseEntity *m_pPlayerToucher; |
|
CPasstimeBallControllerPlayerSeek m_playerSeek; |
|
bool m_bTouchedSinceSpawn; |
|
float m_flLastCollisionTime; |
|
float m_flAirtimeDistance; |
|
Vector m_vecPrevOrigin; // note: C_BaseEntity has m_vecOldOrigin in client code only |
|
float m_flLastTeamChangeTime; // for stats |
|
float m_flBeginCarryTime; |
|
float m_flIdleRespawnTime; |
|
|
|
struct LagRecord |
|
{ |
|
float flSimulationTime; |
|
Vector vecOrigin; |
|
}; |
|
|
|
CUtlFixedLinkedList<LagRecord> m_lagCompensationHistory; |
|
LagRecord m_lagCompensationRestore; |
|
bool m_bLagCompensationNeedsRestore; |
|
float m_flLagCompensationTeleportDistanceSqr; |
|
|
|
CNetworkVar( int, m_iCollisionCount ); |
|
CNetworkHandle( CTFPlayer, m_hHomingTarget ); |
|
CNetworkHandle( CTFPlayer, m_hCarrier ); |
|
CNetworkHandle( CTFPlayer, m_hPrevCarrier ); |
|
}; |
|
|
|
#endif // TF_PASSTIME_BALL_H
|
|
|