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/server/ai_component.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/server/ai_component.h')
| -rw-r--r-- | sp/src/game/server/ai_component.h | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/sp/src/game/server/ai_component.h b/sp/src/game/server/ai_component.h new file mode 100644 index 00000000..d7151eb8 --- /dev/null +++ b/sp/src/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
|