sqwarmed/sdk_src/game/server/swarm/asw_sentry_top.h

112 lines
2.9 KiB
C++

#ifndef _DEFINED_ASW_SENTRY_TOP_H
#define _DEFINED_ASW_SENTRY_TOP_H
#pragma once
class CASW_Player;
class CASW_Marine;
class CASW_Sentry_Base;
class ITraceFilter;
class CASW_Sentry_Top : public CBaseAnimating
{
public:
DECLARE_CLASS( CASW_Sentry_Top, CBaseAnimating );
DECLARE_SERVERCLASS();
DECLARE_DATADESC();
virtual void Precache();
CASW_Sentry_Top();
virtual ~CASW_Sentry_Top();
virtual void Spawn( void );
void AnimThink( void );
virtual int ShouldTransmit( const CCheckTransmitInfo *pInfo );
int UpdateTransmitState();
void SetSentryBase(CASW_Sentry_Base* pSentryBase);
void SetDeployYaw(float yaw) { m_fDeployYaw = anglemod(yaw); }
void SetCurrentYaw(float yaw) { m_fCurrentYaw = anglemod(yaw); }
virtual int GetSentryDamage();
virtual void SetTopModel();
void PlayTurnSound();
void UpdateGoal();
void TurnToGoal(float deltatime);
void FindEnemy();
virtual bool IsValidEnemy( CAI_BaseNPC *pNPC );
virtual void CheckFiring();
virtual void Fire( void );
virtual void MakeTracer( const Vector &vecTracerSrc, const trace_t &tr, int iTracerType );
virtual void OnUsedQuarterAmmo( void );
virtual void OnLowAmmo( void );
virtual void OnOutOfAmmo( void );
bool CanSee(CBaseEntity* pEnt);
virtual ITraceFilter *GetVisibilityTraceFilter(); // new's up and returns a pointer to a trace filter. you must delete this trace filter after use.
virtual float GetYawTo(CBaseEntity* pEnt);
float GetPitchTo(CBaseEntity* pEnt);
Vector GetFiringPosition();
float GetRange();
float m_fLastThinkTime;
float m_fNextFireTime;
float m_fGoalYaw, m_fCurrentYaw;
CNetworkVar(float, m_fDeployYaw);
CNetworkVar(bool, m_bLowAmmo);
int m_iEnemySkip;
EHANDLE m_hEnemy;
int m_iCanSeeError;
int m_iAmmoType;
int m_iBaseTurnRate; // angles per second
CNetworkVar(int, m_iSentryAngle);
//float m_flTimeNextScanPing;
float m_fTurnRate; // actual turn rate
float m_flTimeFirstFired;
// sound stuff
float m_flNextTurnSound;
virtual const Vector& GetBulletSpread( void )
{
static Vector cone;
cone = VECTOR_CONE_5DEGREES;
return cone;
}
CASW_Sentry_Base* GetSentryBase();
bool HasAmmo();
int GetAmmo();
//EHANDLE m_hSentryBase;
CNetworkHandle(CBaseEntity, m_hSentryBase);
/// Constants:
enum
{
ASW_SENTRY_TURNRATE= 150, // angles per second
ASW_SENTRY_ANGLE= 60, // spread on each side
ASW_SENTRY_FIRING_HEIGHT= 50,
ASW_SENTRY_FIRE_ANGLE_THRESHOLD= 3,
ASW_SENTRY_RANGE= 525, // just the default
};
protected:
// helper function used by FindEnemy
Vector GetEnemyVelocity( CBaseEntity *pEnemy = NULL );
virtual CAI_BaseNPC *SelectOptimalEnemy() ;
float m_flShootRange;
bool m_bHasHysteresis; // if true, CheckFiring() will be called even if there is no m_hEnemy
};
inline float CASW_Sentry_Top::GetRange()
{
return m_flShootRange;
}
#endif /* _DEFINED_ASW_SENTRY_TOP_H */