diff options
Diffstat (limited to 'game/server/ai_component.h')
| -rw-r--r-- | game/server/ai_component.h | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/game/server/ai_component.h b/game/server/ai_component.h new file mode 100644 index 0000000..2385d61 --- /dev/null +++ b/game/server/ai_component.h @@ -0,0 +1,171 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef AI_COMPONENT_H +#define AI_COMPONENT_H + +#if defined( _WIN32 ) +#pragma once +#endif + +class CAI_BaseNPC; +class CAI_Enemies; +typedef int AI_TaskFailureCode_t; +struct Task_t; + +//----------------------------------------------------------------------------- +// CAI_Component +// +// Purpose: Shared functionality of all classes that assume some of the +// responsibilities of an owner AI. +//----------------------------------------------------------------------------- + +class CAI_Component +{ + DECLARE_CLASS_NOBASE( CAI_Component ); +protected: + CAI_Component( CAI_BaseNPC *pOuter = NULL ) + : m_pOuter(pOuter) + { + } + + virtual ~CAI_Component() {} + +public: + virtual void SetOuter( CAI_BaseNPC *pOuter ) { m_pOuter = pOuter; } + + CAI_BaseNPC * GetOuter() { return m_pOuter; } + const CAI_BaseNPC * GetOuter() const { return m_pOuter; } + + Hull_t GetHullType() const; + float GetHullWidth() const; + float GetHullHeight() const; + const Vector & GetHullMins() const; + const Vector & GetHullMaxs() const; + +protected: + // + // Common services provided by CAI_BaseNPC, Convenience methods to simplify derived code + // + edict_t * GetEdict(); + + const Vector & GetLocalOrigin() const; + void SetLocalOrigin( const Vector &origin ); + + const Vector & GetAbsOrigin() const; + const QAngle& GetAbsAngles() const; + + void SetLocalAngles( const QAngle& angles ); + const QAngle & GetLocalAngles( void ) const; + + const Vector& WorldAlignMins() const; + const Vector& WorldAlignMaxs() const; + Vector WorldSpaceCenter() const; + + int GetCollisionGroup() const; + + void SetSolid( SolidType_t val ); + SolidType_t GetSolid() const; + + float GetGravity() const; + void SetGravity( float ); + + CBaseEntity* GetEnemy(); + const Vector & GetEnemyLKP() const; + void TranslateNavGoal( CBaseEntity *pEnemy, Vector &chasePosition); + + CBaseEntity* GetTarget(); + void SetTarget( CBaseEntity *pTarget ); + + const Task_t* GetCurTask( void ); + virtual void TaskFail( AI_TaskFailureCode_t ); + void TaskFail( const char *pszGeneralFailText ); + virtual void TaskComplete( bool fIgnoreSetFailedCondition = false ); + int TaskIsRunning(); + inline int TaskIsComplete(); + + Activity GetActivity(); + void SetActivity( Activity NewActivity ); + float GetIdealSpeed() const; + float GetIdealAccel() const; + int GetSequence(); + + int GetEntFlags() const; + void AddEntFlag( int flags ); + void RemoveEntFlag( int flagsToRemove ); + void ToggleEntFlag( int flagToToggle ); + + void SetGroundEntity( CBaseEntity *ground ); + + CBaseEntity* GetGoalEnt(); + void SetGoalEnt( CBaseEntity *pGoalEnt ); + + void Remember( int iMemory ); + void Forget( int iMemory ); + bool HasMemory( int iMemory ); + + CAI_Enemies * GetEnemies(); + + const char * GetEntClassname(); + + int CapabilitiesGet(); + + float GetLastThink( const char *szContext = NULL ); + +public: +#if defined(new) +#error +#endif + + void *operator new( size_t nBytes ) + { + MEM_ALLOC_CREDIT(); + void *pResult = MemAlloc_Alloc( nBytes ); + memset( pResult, 0, nBytes ); + return pResult; + }; + + void *operator new( size_t nBytes, int nBlockUse, const char *pFileName, int nLine ) + { + MEM_ALLOC_CREDIT(); + void *pResult = MemAlloc_Alloc( nBytes, pFileName, nLine ); + memset( pResult, 0, nBytes ); + return pResult; + } + +private: + CAI_BaseNPC *m_pOuter; +}; + +//----------------------------------------------------------------------------- + +template <class NPC_CLASS, class BASE_COMPONENT = CAI_Component> +class CAI_ComponentWithOuter : public BASE_COMPONENT +{ +protected: + CAI_ComponentWithOuter(NPC_CLASS *pOuter = NULL) + : BASE_COMPONENT(pOuter) + { + } + +public: + // Hides base version + void SetOuter( NPC_CLASS *pOuter ) { BASE_COMPONENT::SetOuter((CAI_BaseNPC *)pOuter); } + NPC_CLASS * GetOuter() { return (NPC_CLASS *)(BASE_COMPONENT::GetOuter()); } + const NPC_CLASS * GetOuter() const { return (NPC_CLASS *)(BASE_COMPONENT::GetOuter()); } +}; + +//----------------------------------------------------------------------------- + +#define DEFINE_AI_COMPONENT_OUTER( NPC_CLASS ) \ + void SetOuter( NPC_CLASS *pOuter ) { CAI_Component::SetOuter((CAI_BaseNPC *)pOuter); } \ + NPC_CLASS * GetOuter() { return (NPC_CLASS *)(CAI_Component::GetOuter()); } \ + const NPC_CLASS * GetOuter() const { return (NPC_CLASS *)(CAI_Component::GetOuter()); } + +//----------------------------------------------------------------------------- + +#endif // AI_COMPONENT_H |