diff options
| author | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
|---|---|---|
| committer | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
| commit | 39ed87570bdb2f86969d4be821c94b722dc71179 (patch) | |
| tree | abc53757f75f40c80278e87650ea92808274aa59 /sp/src/game/client/c_basecombatcharacter.h | |
| download | source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip | |
First version of the SOurce SDK 2013
Diffstat (limited to 'sp/src/game/client/c_basecombatcharacter.h')
| -rw-r--r-- | sp/src/game/client/c_basecombatcharacter.h | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/sp/src/game/client/c_basecombatcharacter.h b/sp/src/game/client/c_basecombatcharacter.h new file mode 100644 index 00000000..becc5de2 --- /dev/null +++ b/sp/src/game/client/c_basecombatcharacter.h @@ -0,0 +1,194 @@ +//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Defines the client-side representation of CBaseCombatCharacter.
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef C_BASECOMBATCHARACTER_H
+#define C_BASECOMBATCHARACTER_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "shareddefs.h"
+#include "c_baseflex.h"
+#ifdef GLOWS_ENABLE
+#include "glow_outline_effect.h"
+#endif // GLOWS_ENABLE
+
+class C_BaseCombatWeapon;
+class C_WeaponCombatShield;
+
+#define BCC_DEFAULT_LOOK_TOWARDS_TOLERANCE 0.9f
+
+class C_BaseCombatCharacter : public C_BaseFlex
+{
+ DECLARE_CLASS( C_BaseCombatCharacter, C_BaseFlex );
+public:
+ DECLARE_CLIENTCLASS();
+ DECLARE_PREDICTABLE();
+
+ C_BaseCombatCharacter( void );
+ virtual ~C_BaseCombatCharacter( void );
+
+ virtual void OnPreDataChanged( DataUpdateType_t updateType );
+ virtual void OnDataChanged( DataUpdateType_t updateType );
+
+ virtual bool IsBaseCombatCharacter( void ) { return true; };
+ virtual C_BaseCombatCharacter *MyCombatCharacterPointer( void ) { return this; }
+
+ // -----------------------
+ // Vision
+ // -----------------------
+ enum FieldOfViewCheckType { USE_FOV, DISREGARD_FOV };
+ bool IsAbleToSee( const CBaseEntity *entity, FieldOfViewCheckType checkFOV ); // Visible starts with line of sight, and adds all the extra game checks like fog, smoke, camo...
+ bool IsAbleToSee( C_BaseCombatCharacter *pBCC, FieldOfViewCheckType checkFOV ); // Visible starts with line of sight, and adds all the extra game checks like fog, smoke, camo...
+
+ virtual bool IsLookingTowards( const CBaseEntity *target, float cosTolerance = BCC_DEFAULT_LOOK_TOWARDS_TOLERANCE ) const; // return true if our view direction is pointing at the given target, within the cosine of the angular tolerance. LINE OF SIGHT IS NOT CHECKED.
+ virtual bool IsLookingTowards( const Vector &target, float cosTolerance = BCC_DEFAULT_LOOK_TOWARDS_TOLERANCE ) const; // return true if our view direction is pointing at the given target, within the cosine of the angular tolerance. LINE OF SIGHT IS NOT CHECKED.
+
+ virtual bool IsInFieldOfView( CBaseEntity *entity ) const; // Calls IsLookingAt with the current field of view.
+ virtual bool IsInFieldOfView( const Vector &pos ) const;
+
+ enum LineOfSightCheckType
+ {
+ IGNORE_NOTHING,
+ IGNORE_ACTORS
+ };
+ virtual bool IsLineOfSightClear( CBaseEntity *entity, LineOfSightCheckType checkType = IGNORE_NOTHING ) const;// strictly LOS check with no other considerations
+ virtual bool IsLineOfSightClear( const Vector &pos, LineOfSightCheckType checkType = IGNORE_NOTHING, CBaseEntity *entityToIgnore = NULL ) const;
+
+
+ // -----------------------
+ // Ammo
+ // -----------------------
+ void RemoveAmmo( int iCount, int iAmmoIndex );
+ void RemoveAmmo( int iCount, const char *szName );
+ void RemoveAllAmmo( );
+ int GetAmmoCount( int iAmmoIndex ) const;
+ int GetAmmoCount( char *szName ) const;
+
+ C_BaseCombatWeapon* Weapon_OwnsThisType( const char *pszWeapon, int iSubType = 0 ) const; // True if already owns a weapon of this class
+ virtual bool Weapon_Switch( C_BaseCombatWeapon *pWeapon, int viewmodelindex = 0 );
+ virtual bool Weapon_CanSwitchTo(C_BaseCombatWeapon *pWeapon);
+
+ // I can't use my current weapon anymore. Switch me to the next best weapon.
+ bool SwitchToNextBestWeapon(C_BaseCombatWeapon *pCurrent);
+
+ virtual C_BaseCombatWeapon *GetActiveWeapon( void ) const;
+ int WeaponCount() const;
+ C_BaseCombatWeapon *GetWeapon( int i ) const;
+
+ // This is a sort of hack back-door only used by physgun!
+ void SetAmmoCount( int iCount, int iAmmoIndex );
+
+ float GetNextAttack() const { return m_flNextAttack; }
+ void SetNextAttack( float flWait ) { m_flNextAttack = flWait; }
+
+ virtual int BloodColor();
+
+ // Blood color (see BLOOD_COLOR_* macros in baseentity.h)
+ void SetBloodColor( int nBloodColor );
+
+ virtual void DoMuzzleFlash();
+
+#ifdef GLOWS_ENABLE
+ CGlowObject *GetGlowObject( void ){ return m_pGlowEffect; }
+ virtual void GetGlowEffectColor( float *r, float *g, float *b );
+#endif // GLOWS_ENABLE
+
+public:
+
+ float m_flNextAttack;
+
+protected:
+
+#ifdef GLOWS_ENABLE
+ virtual void UpdateGlowEffect( void );
+ virtual void DestroyGlowEffect( void );
+#endif // GLOWS_ENABLE
+
+ int m_bloodColor; // color of blood particless
+
+private:
+ bool ComputeLOS( const Vector &vecEyePosition, const Vector &vecTarget ) const;
+
+ CNetworkArray( int, m_iAmmo, MAX_AMMO_TYPES );
+
+ CHandle<C_BaseCombatWeapon> m_hMyWeapons[MAX_WEAPONS];
+ CHandle< C_BaseCombatWeapon > m_hActiveWeapon;
+
+#ifdef GLOWS_ENABLE
+ bool m_bGlowEnabled;
+ bool m_bOldGlowEnabled;
+ CGlowObject *m_pGlowEffect;
+#endif // GLOWS_ENABLE
+
+private:
+ C_BaseCombatCharacter( const C_BaseCombatCharacter & ); // not defined, not accessible
+
+
+//-----------------------
+#ifdef INVASION_CLIENT_DLL
+public:
+ virtual void Release( void );
+ virtual void SetDormant( bool bDormant );
+ virtual void OnPreDataChanged( DataUpdateType_t updateType );
+ virtual void OnDataChanged( DataUpdateType_t updateType );
+ virtual void ClientThink( void );
+
+ // TF2 Powerups
+ virtual bool CanBePoweredUp( void ) { return true; }
+ bool HasPowerup( int iPowerup ) { return ( m_iPowerups & (1 << iPowerup) ) != 0; };
+ virtual void PowerupStart( int iPowerup, bool bInitial );
+ virtual void PowerupEnd( int iPowerup );
+ void RemoveAllPowerups( void );
+
+ // Powerup effects
+ void AddEMPEffect( float flSize );
+ void AddBuffEffect( float flSize );
+
+ C_WeaponCombatShield *GetShield( void );
+
+public:
+ int m_iPowerups;
+ int m_iPrevPowerups;
+#endif
+
+};
+
+inline C_BaseCombatCharacter *ToBaseCombatCharacter( C_BaseEntity *pEntity )
+{
+ if ( !pEntity || !pEntity->IsBaseCombatCharacter() )
+ return NULL;
+
+#if _DEBUG
+ return dynamic_cast<C_BaseCombatCharacter *>( pEntity );
+#else
+ return static_cast<C_BaseCombatCharacter *>( pEntity );
+#endif
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+inline int C_BaseCombatCharacter::WeaponCount() const
+{
+ return MAX_WEAPONS;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : i -
+//-----------------------------------------------------------------------------
+inline C_BaseCombatWeapon *C_BaseCombatCharacter::GetWeapon( int i ) const
+{
+ Assert( (i >= 0) && (i < MAX_WEAPONS) );
+ return m_hMyWeapons[i].Get();
+}
+
+EXTERN_RECV_TABLE(DT_BaseCombatCharacter);
+
+#endif // C_BASECOMBATCHARACTER_H
|