diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/server/ai_memory.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/server/ai_memory.h')
| -rw-r--r-- | game/server/ai_memory.h | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/game/server/ai_memory.h b/game/server/ai_memory.h new file mode 100644 index 0000000..d348c53 --- /dev/null +++ b/game/server/ai_memory.h @@ -0,0 +1,119 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: An NPC's memory of potential enemies +// +//=============================================================================// + +#include "mempool.h" +#include "utlmap.h" + +#ifndef AI_MEMORY_H +#define AI_MEMORY_H +#pragma once + +class CAI_Network; + +DECLARE_POINTER_HANDLE(AIEnemiesIter_t); + +const float AI_DEF_ENEMY_DISCARD_TIME = 60.0; + +#define AI_UNKNOWN_ENEMY (((CBaseEntity *)NULL)+1) // use this to probe for unseen attackers +#define AI_INVALID_TIME (FLT_MAX * -1.0) + +//----------------------------------------------------------------------------- +// AI_EnemyInfo_t +// +// Purpose: Stores relevant tactical information about an enemy +// +//----------------------------------------------------------------------------- +struct AI_EnemyInfo_t +{ + AI_EnemyInfo_t(); + + EHANDLE hEnemy; // Pointer to the enemy + + Vector vLastKnownLocation; + Vector vLastSeenLocation; + float timeLastSeen; // Last time enemy was seen + float timeFirstSeen; // First time enemy was seen + float timeLastReacquired; + float timeValidEnemy; // First time can be selected (reaction delay) + float timeLastReceivedDamageFrom; + float timeAtFirstHand; // Time at which the enemy was seen firsthand + bool bDangerMemory; // Memory of danger position w/o Enemy pointer + bool bEludedMe; // True if enemy not at last known location + bool bUnforgettable; + bool bMobbedMe; // True if enemy was part of a mob at some point + + DECLARE_SIMPLE_DATADESC(); +}; + +//----------------------------------------------------------------------------- +// CAI_Enemies +// +// Purpose: Stores a set of AI_EnemyInfo_t's +// +//----------------------------------------------------------------------------- +class CAI_Enemies +{ +public: + CAI_Enemies(void); + ~CAI_Enemies(); + + AI_EnemyInfo_t *GetFirst( AIEnemiesIter_t *pIter ); + AI_EnemyInfo_t *GetNext( AIEnemiesIter_t *pIter ); + AI_EnemyInfo_t *Find( CBaseEntity *pEntity, bool bTryDangerMemory = false ); + AI_EnemyInfo_t *GetDangerMemory(); + + int NumEnemies() const { return m_Map.Count(); } + int GetSerialNumber() const { return m_serial; } + + void RefreshMemories(void); + bool UpdateMemory( CAI_Network* pAINet, CBaseEntity *enemy, const Vector &vPosition, float reactionDelay, bool firstHand ); + void OnTookDamageFrom( CBaseEntity *pEnemy ); + + bool HasMemory( CBaseEntity *enemy ); + void ClearMemory( CBaseEntity *enemy ); + + const Vector & LastKnownPosition( CBaseEntity *pEnemy ); + const Vector & LastSeenPosition( CBaseEntity *pEnemy ); + + float TimeLastReacquired( CBaseEntity *pEnemy ); + float LastTimeSeen( CBaseEntity *pEnemy, bool bCheckDangerMemory = true ); + float FirstTimeSeen( CBaseEntity *pEnemy); + bool HasFreeKnowledgeOf( CBaseEntity *pEnemy ); + + float LastTimeTookDamageFrom( CBaseEntity *pEnemy); + + float TimeAtFirstHand( CBaseEntity *pEnemy ); + + void MarkAsEluded( CBaseEntity *enemy ); // Don't know where he is (whole squad) + bool HasEludedMe( CBaseEntity *pEnemy ); + + void SetTimeValidEnemy( CBaseEntity *pEnemy, float flTime ); + + void SetUnforgettable( CBaseEntity *pEnemy, bool bUnforgettable = true ); + void SetMobbedMe( CBaseEntity *pEnemy, bool bMobbedMe = true ); + + void SetFreeKnowledgeDuration( float flDuration ); + void SetEnemyDiscardTime( float flTime ); + float GetEnemyDiscardTime( void ) const { return m_flEnemyDiscardTime; } + + DECLARE_SIMPLE_DATADESC(); + + typedef CUtlMap<CBaseEntity *, AI_EnemyInfo_t*, unsigned char> CMemMap; + +private: + bool ShouldDiscardMemory( AI_EnemyInfo_t *pMemory ); + + CMemMap m_Map; + float m_flFreeKnowledgeDuration; + float m_flEnemyDiscardTime; + Vector m_vecDefaultLKP; + Vector m_vecDefaultLSP; + int m_serial; +}; + +//----------------------------------------------------------------------------- + +#endif // AI_MEMORY_H |