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.
191 lines
4.9 KiB
191 lines
4.9 KiB
5 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose: Defender's sentrygun
|
||
|
//
|
||
|
// $NoKeywords: $
|
||
|
//=============================================================================//
|
||
|
|
||
|
#ifndef TF_OBJ_SENTRYGUN_H
|
||
|
#define TF_OBJ_SENTRYGUN_H
|
||
|
#ifdef _WIN32
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
#include "tf_obj.h"
|
||
|
|
||
|
enum TFTURRET_ANIM
|
||
|
{
|
||
|
TFTURRET_ANIM_NONE = 0,
|
||
|
TFTURRET_ANIM_FIRE,
|
||
|
TFTURRET_ANIM_SPIN,
|
||
|
};
|
||
|
|
||
|
enum target_ranges
|
||
|
{
|
||
|
RANGE_NEAR,
|
||
|
RANGE_MID,
|
||
|
RANGE_FAR,
|
||
|
};
|
||
|
|
||
|
// Sentrygun damages
|
||
|
#define SG_MACHINEGUN_DAMAGE 5
|
||
|
|
||
|
// ------------------------------------------------------------------------ //
|
||
|
// The Base Sentrygun
|
||
|
// ------------------------------------------------------------------------ //
|
||
|
class CObjectSentrygun : public CBaseObject
|
||
|
{
|
||
|
DECLARE_CLASS( CObjectSentrygun, CBaseObject );
|
||
|
public:
|
||
|
DECLARE_DATADESC();
|
||
|
DECLARE_SERVERCLASS();
|
||
|
|
||
|
CObjectSentrygun();
|
||
|
|
||
|
static CObjectSentrygun* Create(const Vector &vOrigin, const QAngle &vAngles, int iType);
|
||
|
|
||
|
virtual void Spawn();
|
||
|
virtual void Precache();
|
||
|
virtual void SetupAttachedVersion( void );
|
||
|
virtual void SetupUnattachedVersion( void );
|
||
|
virtual void GetControlPanelInfo( int nPanelIndex, const char *&pPanelName );
|
||
|
virtual void FinishedBuilding( void );
|
||
|
virtual bool IsSentrygun( void ) { return true; };
|
||
|
virtual bool WantsCoverFromSentryGun() { return false; }
|
||
|
virtual void SetTechnology( bool bSmarter, bool bSensors );
|
||
|
virtual int OnTakeDamage( const CTakeDamageInfo &info );
|
||
|
virtual void Killed( void );
|
||
|
|
||
|
// Ammo filling
|
||
|
virtual bool ClientCommand( CBaseTFPlayer *pPlayer, const CCommand &args );
|
||
|
virtual bool TakeAmmoFrom( CBaseTFPlayer *pPlayer );
|
||
|
|
||
|
// Think functions
|
||
|
void SentryRotate(void);
|
||
|
void Attack(void);
|
||
|
void Sentry_Explode( void );
|
||
|
bool FInViewCone( CBaseEntity *pEntity );
|
||
|
int BloodColor( void ) { return DONT_BLEED; }
|
||
|
|
||
|
virtual void CheckShield( void );
|
||
|
void RestartAnimation();
|
||
|
void ResetOrientation();
|
||
|
|
||
|
virtual void SetSentryAnim( TFTURRET_ANIM anim );
|
||
|
virtual CBaseEntity *FindTarget( void );
|
||
|
virtual float GetPriority( CBaseEntity *pTarget );
|
||
|
virtual void FoundTarget();
|
||
|
virtual bool ValidTarget( CBaseEntity *pTarget );
|
||
|
virtual int Range( CBaseEntity *pTarget );
|
||
|
|
||
|
// Combat functions
|
||
|
virtual bool HasAmmo( void );
|
||
|
virtual bool Fire( void );
|
||
|
virtual bool WillSuppress( void ) { return true; };
|
||
|
|
||
|
virtual bool CanTakeEMPDamage( void ) { return true; }
|
||
|
|
||
|
// Turret Functions
|
||
|
bool MoveTurret( void );
|
||
|
|
||
|
// Object functions
|
||
|
void ObjectMoved( void );
|
||
|
|
||
|
// Designator interactions
|
||
|
void DesignateTarget( CBaseEntity *pTarget );
|
||
|
// Turtle mode
|
||
|
bool IsTurtled( void );
|
||
|
bool IsTurtling( void ); // Return true if we're in the process of turtling / unturtling
|
||
|
void ToggleTurtle( void );
|
||
|
void Turtle( void );
|
||
|
void UnTurtle( void );
|
||
|
|
||
|
private:
|
||
|
// Recompute sentrygun orientation...
|
||
|
void RecomputeOrientation();
|
||
|
|
||
|
public:
|
||
|
// Variables
|
||
|
int m_iRightBound;
|
||
|
int m_iLeftBound;
|
||
|
bool m_bTurningRight;
|
||
|
int m_iShardIndex;
|
||
|
int m_iAmmoType;
|
||
|
bool m_bSmarter;
|
||
|
bool m_bSensors;
|
||
|
float m_flNextLook;
|
||
|
|
||
|
// Attacking
|
||
|
float m_flNextAttack;
|
||
|
CNetworkVar( int, m_iAmmo );
|
||
|
int m_iMaxAmmo;
|
||
|
Vector m_vecFireTarget;
|
||
|
Vector m_vecLastKnownPosition;
|
||
|
bool m_bSuppressing;
|
||
|
float m_flStartedSuppressing;
|
||
|
|
||
|
// Movement
|
||
|
CNetworkVar( int, m_iBaseTurnRate );
|
||
|
float m_fTurnRate;
|
||
|
QAngle m_vecCurAngles;
|
||
|
QAngle m_vecGoalAngles;
|
||
|
Vector m_vecCurDishAngles;
|
||
|
|
||
|
// Turtling
|
||
|
CNetworkVar( bool, m_bTurtled );
|
||
|
bool m_bTurtling;
|
||
|
float m_flTurtlingFinishedAt;
|
||
|
|
||
|
// Data sent to clients
|
||
|
// Bone controllers
|
||
|
float m_fBoneXRotator;
|
||
|
float m_fBoneYRotator;
|
||
|
|
||
|
// Target data
|
||
|
CNetworkHandle( CBaseEntity, m_hEnemy );
|
||
|
EHANDLE m_hDesignatedEnemy;
|
||
|
|
||
|
CNetworkVar( int, m_nAnimationParity );
|
||
|
CNetworkVar( int, m_nOrientationParity );
|
||
|
};
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Plasma Sentrygun
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class CObjectSentrygunPlasma : public CObjectSentrygun
|
||
|
{
|
||
|
DECLARE_CLASS( CObjectSentrygunPlasma, CObjectSentrygun );
|
||
|
public:
|
||
|
DECLARE_SERVERCLASS();
|
||
|
virtual void Spawn();
|
||
|
virtual bool Fire( void );
|
||
|
virtual void CheckShield( void );
|
||
|
virtual bool HasAmmo( void );
|
||
|
|
||
|
private:
|
||
|
float m_flNextAmmoRecharge;
|
||
|
int m_nBurstCount;
|
||
|
};
|
||
|
|
||
|
#define SG_PLASMA_MODEL "models/sentry2.mdl"
|
||
|
#define PLASMA_SENTRYGUN_RECHARGE_TIME 1.25 // Time it takes to recharge 1 round of ammo
|
||
|
#define PLASMA_SENTRY_BURST_COUNT 4
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Rocket launcher Sentrygun
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class CObjectSentrygunRocketlauncher : public CObjectSentrygun
|
||
|
{
|
||
|
DECLARE_CLASS( CObjectSentrygunRocketlauncher, CObjectSentrygun );
|
||
|
public:
|
||
|
DECLARE_SERVERCLASS();
|
||
|
virtual void Spawn();
|
||
|
virtual bool Fire( void );
|
||
|
|
||
|
virtual void SetTechnology( bool bSmarter, bool bSensors );
|
||
|
};
|
||
|
|
||
|
#define SG_ROCKETLAUNCHER_MODEL "models/sentry3.mdl"
|
||
|
|
||
|
#endif // TF_OBJ_SENTRYGUN_H
|