aboutsummaryrefslogtreecommitdiff
path: root/mp/src/game/server/ai_utils.h
diff options
context:
space:
mode:
authorJørgen P. Tjernø <[email protected]>2013-12-02 19:31:46 -0800
committerJørgen P. Tjernø <[email protected]>2013-12-02 19:46:31 -0800
commitf56bb35301836e56582a575a75864392a0177875 (patch)
treede61ddd39de3e7df52759711950b4c288592f0dc /mp/src/game/server/ai_utils.h
parentMark some more files as text. (diff)
downloadsource-sdk-2013-f56bb35301836e56582a575a75864392a0177875.tar.xz
source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.zip
Fix line endings. WHAMMY.
Diffstat (limited to 'mp/src/game/server/ai_utils.h')
-rw-r--r--mp/src/game/server/ai_utils.h596
1 files changed, 298 insertions, 298 deletions
diff --git a/mp/src/game/server/ai_utils.h b/mp/src/game/server/ai_utils.h
index d3fa4b0f..8cdde7ba 100644
--- a/mp/src/game/server/ai_utils.h
+++ b/mp/src/game/server/ai_utils.h
@@ -1,298 +1,298 @@
-//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose: Simple, small, free-standing tools for building AIs
-//
-//=============================================================================//
-
-#ifndef AI_UTILS_H
-#define AI_UTILS_H
-
-#include "simtimer.h"
-#include "ai_component.h"
-
-#if defined( _WIN32 )
-#pragma once
-#endif
-
-//-----------------------------------------------------------------------------
-//
-// Function to get the local player. AI does not want asserts or warnings,
-// just NULL result
-//
-//-----------------------------------------------------------------------------
-
-inline CBasePlayer *AI_GetSinglePlayer()
-{
- if ( gpGlobals->maxClients > 1 )
- {
- return NULL;
- }
-
- return UTIL_GetLocalPlayer();
-}
-
-inline bool AI_IsSinglePlayer()
-{
- return ( gpGlobals->maxClients == 1 );
-}
-
-
-//-----------------------------------------------------------------------------
-//
-// CAI_MoveMonitor
-//
-// Purpose: Watch an entity, trigger if moved more than a tolerance
-//
-//-----------------------------------------------------------------------------
-
-class CAI_MoveMonitor
-{
-public:
- CAI_MoveMonitor()
- : m_vMark( 0, 0, 0 ),
- m_flMarkTolerance( NO_MARK )
- {
- }
-
- void SetMark( CBaseEntity *pEntity, float tolerance )
- {
- if ( pEntity )
- {
- m_vMark = pEntity->GetAbsOrigin();
- m_flMarkTolerance = tolerance;
- }
- }
-
- void ClearMark()
- {
- m_flMarkTolerance = NO_MARK;
- }
-
- bool IsMarkSet()
- {
- return ( m_flMarkTolerance != NO_MARK );
- }
-
- bool TargetMoved( CBaseEntity *pEntity )
- {
- if ( IsMarkSet() && pEntity != NULL )
- {
- float distance = ( m_vMark - pEntity->GetAbsOrigin() ).Length();
- if ( distance > m_flMarkTolerance )
- return true;
- }
- return false;
- }
-
- bool TargetMoved2D( CBaseEntity *pEntity )
- {
- if ( IsMarkSet() && pEntity != NULL )
- {
- float distance = ( m_vMark.AsVector2D() - pEntity->GetAbsOrigin().AsVector2D() ).Length();
- if ( distance > m_flMarkTolerance )
- return true;
- }
- return false;
- }
-
- Vector GetMarkPos() { return m_vMark; }
-
-private:
- enum
- {
- NO_MARK = -1
- };
-
- Vector m_vMark;
- float m_flMarkTolerance;
-
- DECLARE_SIMPLE_DATADESC();
-};
-
-
-//-----------------------------------------------------------------------------
-//
-// CAI_ShotRegulator
-//
-// Purpose: Assists in creating non-constant bursty shooting style
-//
-//-----------------------------------------------------------------------------
-class CAI_ShotRegulator
-{
-public:
- CAI_ShotRegulator();
-
- // Sets the various parameters for burst (this one's for backwards compatibility)
- // NOTE: This will modify the next shot time
- void SetParameters( int minShotsPerBurst, int maxShotsPerBurst, float minRestTime, float maxRestTime = 0.0 );
-
- // NOTE: The next 3 methods will *not* modify the next shot time
- // Sets the number of shots to shoot in a single burst
- void SetBurstShotCountRange( int minShotsPerBurst, int maxShotsPerBurst );
-
- // How much time should I rest between bursts?
- void SetRestInterval( float flMinRestInterval, float flMaxRestInterval );
-
- // How much time should I wait in between shots in a single burst?
- void SetBurstInterval( float flMinBurstInterval, float flMaxBurstInterval );
-
- // Poll the current parameters
- void GetBurstShotCountRange( int *pMinShotsPerBurst, int *pMaxShotsPerBurst ) const;
- void GetRestInterval( float *pMinRestInterval, float *pMaxRestInterval ) const;
- void GetBurstInterval( float *pMinBurstInterval, float *pMaxBurstInterval ) const;
-
- // Reset the state. If true, the next burst time is set to now,
- // otherwise it'll wait one rest interval before shooting
- void Reset( bool bStartShooting = true );
-
- // Should we shoot?
- bool ShouldShoot() const;
-
- // When will I shoot next?
- float NextShotTime() const;
-
- // Am I in the middle of a rest period?
- bool IsInRestInterval() const;
-
- // NOTE: These will not modify the next shot time
- int GetBurstShotsRemaining() const;
- void SetBurstShotsRemaining( int shots );
-
- // Call this when the NPC fired the weapon;
- void OnFiredWeapon();
-
- // Causes us to potentially delay our shooting time
- void FireNoEarlierThan( float flTime );
-
- // Prevent/Allow shooting
- void EnableShooting( void );
- void DisableShooting( void );
-
-private:
- float m_flNextShotTime;
- bool m_bInRestInterval;
- unsigned short m_nBurstShotsRemaining;
- unsigned short m_nMinBurstShots, m_nMaxBurstShots;
- float m_flMinRestInterval, m_flMaxRestInterval;
- float m_flMinBurstInterval, m_flMaxBurstInterval;
- bool m_bDisabled;
-
- DECLARE_SIMPLE_DATADESC();
-};
-
-
-//-----------------------------------------------------------------------------
-//
-// CAI_AccelDecay
-//
-// Purpose: Maintain a smooth acceleration, deceleration curve
-//
-//-----------------------------------------------------------------------------
-
-class CAI_AccelDecay
-{
-public:
- CAI_AccelDecay();
-
- void SetParameters( float minVelocity, float maxVelocity, float accelPercent, float decelPercent );
- float Update( float flCurrent, float flTarget, float flInterval );
- void ResetVelocity( float flVelocity = 0.0f );
- void SetMaxVelocity( float maxVelocity );
-
-private:
- float m_velocity;
-
- float m_maxVelocity; // = 300;
- float m_minVelocity; // = 10;
-
- float m_invDecay; // 0.8 // maintain X percent of velocity when slowing down
- float m_decayTime;// 0.4161 // Sum( 1..cycle, HEIGHTINVDECAY^cycle )
- float m_accel; // 0.5 // accel toward maxVelocity by X percent each cycle
-
- DECLARE_SIMPLE_DATADESC();
-};
-
-
-
-//-----------------------------------------------------------------------------
-//
-// Purpose: Utility to allow place grace in cover
-//
-//-----------------------------------------------------------------------------
-
-struct AI_FreePassParams_t
-{
- float timeToTrigger; // How long after not detected to issue pass
- float duration; // How long in the open pass before revoked
- float moveTolerance; // How far in open needed to move to revoke pass
- float refillRate; // After hiding again during pass, how quickly to reinstitute pass(seconds per second)
- float coverDist; // When hiding, how far from an obstructing object needed to be considered in cover
-
- float peekTime; // How long allowed to peek
- float peekTimeAfterDamage; // How long allowed to peek after damaged by
- float peekEyeDist; // how far spaced out the eyes are
- float peekEyeDistZ; // how far below eye position to test eyes (handles peek up)
-
- DECLARE_SIMPLE_DATADESC();
-};
-
-//-------------------------------------
-
-class CAI_FreePass : public CAI_Component
-{
-public:
- CAI_FreePass()
- : m_FreePassTimeRemaining(0)
- {
- }
-
- void Reset( float passTime = -1, float moveTolerance = -1 );
-
- void SetPassTarget( CBaseEntity *pTarget ) { m_hTarget = pTarget; m_FreePassTimeRemaining = 0; }
- CBaseEntity * GetPassTarget() { return m_hTarget; }
-
- void SetParams( const AI_FreePassParams_t &params ) { m_Params = params; }
- const AI_FreePassParams_t &GetParams() const { return m_Params; }
-
- //---------------------------------
- // Free pass
- //---------------------------------
- void Update();
-
- bool HasPass();
- void Revoke( bool bUpdateMemory = false );
-
- float GetTimeRemaining() { return m_FreePassTimeRemaining; }
- void SetTimeRemaining( float passTime ) { m_FreePassTimeRemaining = passTime; }
-
- bool ShouldAllowFVisible( bool bBaseResult );
-
-private:
- EHANDLE m_hTarget;
-
- float m_FreePassTimeRemaining;
- CAI_MoveMonitor m_FreePassMoveMonitor;
-
- AI_FreePassParams_t m_Params;
-
- DECLARE_SIMPLE_DATADESC();
-};
-
-//-----------------------------------------------------------------------------
-
-class CTraceFilterNav : public CTraceFilterSimple
-{
-public:
- CTraceFilterNav( CAI_BaseNPC *pProber, bool bIgnoreTransientEntities, const IServerEntity *passedict, int collisionGroup, bool m_bAllowPlayerAvoid = true );
- bool ShouldHitEntity( IHandleEntity *pServerEntity, int contentsMask );
-
-private:
- CAI_BaseNPC *m_pProber;
- bool m_bIgnoreTransientEntities;
- bool m_bCheckCollisionTable;
- bool m_bAllowPlayerAvoid;
-};
-
-extern string_t g_iszFuncBrushClassname;
-
-#endif // AI_UTILS_H
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Simple, small, free-standing tools for building AIs
+//
+//=============================================================================//
+
+#ifndef AI_UTILS_H
+#define AI_UTILS_H
+
+#include "simtimer.h"
+#include "ai_component.h"
+
+#if defined( _WIN32 )
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+//
+// Function to get the local player. AI does not want asserts or warnings,
+// just NULL result
+//
+//-----------------------------------------------------------------------------
+
+inline CBasePlayer *AI_GetSinglePlayer()
+{
+ if ( gpGlobals->maxClients > 1 )
+ {
+ return NULL;
+ }
+
+ return UTIL_GetLocalPlayer();
+}
+
+inline bool AI_IsSinglePlayer()
+{
+ return ( gpGlobals->maxClients == 1 );
+}
+
+
+//-----------------------------------------------------------------------------
+//
+// CAI_MoveMonitor
+//
+// Purpose: Watch an entity, trigger if moved more than a tolerance
+//
+//-----------------------------------------------------------------------------
+
+class CAI_MoveMonitor
+{
+public:
+ CAI_MoveMonitor()
+ : m_vMark( 0, 0, 0 ),
+ m_flMarkTolerance( NO_MARK )
+ {
+ }
+
+ void SetMark( CBaseEntity *pEntity, float tolerance )
+ {
+ if ( pEntity )
+ {
+ m_vMark = pEntity->GetAbsOrigin();
+ m_flMarkTolerance = tolerance;
+ }
+ }
+
+ void ClearMark()
+ {
+ m_flMarkTolerance = NO_MARK;
+ }
+
+ bool IsMarkSet()
+ {
+ return ( m_flMarkTolerance != NO_MARK );
+ }
+
+ bool TargetMoved( CBaseEntity *pEntity )
+ {
+ if ( IsMarkSet() && pEntity != NULL )
+ {
+ float distance = ( m_vMark - pEntity->GetAbsOrigin() ).Length();
+ if ( distance > m_flMarkTolerance )
+ return true;
+ }
+ return false;
+ }
+
+ bool TargetMoved2D( CBaseEntity *pEntity )
+ {
+ if ( IsMarkSet() && pEntity != NULL )
+ {
+ float distance = ( m_vMark.AsVector2D() - pEntity->GetAbsOrigin().AsVector2D() ).Length();
+ if ( distance > m_flMarkTolerance )
+ return true;
+ }
+ return false;
+ }
+
+ Vector GetMarkPos() { return m_vMark; }
+
+private:
+ enum
+ {
+ NO_MARK = -1
+ };
+
+ Vector m_vMark;
+ float m_flMarkTolerance;
+
+ DECLARE_SIMPLE_DATADESC();
+};
+
+
+//-----------------------------------------------------------------------------
+//
+// CAI_ShotRegulator
+//
+// Purpose: Assists in creating non-constant bursty shooting style
+//
+//-----------------------------------------------------------------------------
+class CAI_ShotRegulator
+{
+public:
+ CAI_ShotRegulator();
+
+ // Sets the various parameters for burst (this one's for backwards compatibility)
+ // NOTE: This will modify the next shot time
+ void SetParameters( int minShotsPerBurst, int maxShotsPerBurst, float minRestTime, float maxRestTime = 0.0 );
+
+ // NOTE: The next 3 methods will *not* modify the next shot time
+ // Sets the number of shots to shoot in a single burst
+ void SetBurstShotCountRange( int minShotsPerBurst, int maxShotsPerBurst );
+
+ // How much time should I rest between bursts?
+ void SetRestInterval( float flMinRestInterval, float flMaxRestInterval );
+
+ // How much time should I wait in between shots in a single burst?
+ void SetBurstInterval( float flMinBurstInterval, float flMaxBurstInterval );
+
+ // Poll the current parameters
+ void GetBurstShotCountRange( int *pMinShotsPerBurst, int *pMaxShotsPerBurst ) const;
+ void GetRestInterval( float *pMinRestInterval, float *pMaxRestInterval ) const;
+ void GetBurstInterval( float *pMinBurstInterval, float *pMaxBurstInterval ) const;
+
+ // Reset the state. If true, the next burst time is set to now,
+ // otherwise it'll wait one rest interval before shooting
+ void Reset( bool bStartShooting = true );
+
+ // Should we shoot?
+ bool ShouldShoot() const;
+
+ // When will I shoot next?
+ float NextShotTime() const;
+
+ // Am I in the middle of a rest period?
+ bool IsInRestInterval() const;
+
+ // NOTE: These will not modify the next shot time
+ int GetBurstShotsRemaining() const;
+ void SetBurstShotsRemaining( int shots );
+
+ // Call this when the NPC fired the weapon;
+ void OnFiredWeapon();
+
+ // Causes us to potentially delay our shooting time
+ void FireNoEarlierThan( float flTime );
+
+ // Prevent/Allow shooting
+ void EnableShooting( void );
+ void DisableShooting( void );
+
+private:
+ float m_flNextShotTime;
+ bool m_bInRestInterval;
+ unsigned short m_nBurstShotsRemaining;
+ unsigned short m_nMinBurstShots, m_nMaxBurstShots;
+ float m_flMinRestInterval, m_flMaxRestInterval;
+ float m_flMinBurstInterval, m_flMaxBurstInterval;
+ bool m_bDisabled;
+
+ DECLARE_SIMPLE_DATADESC();
+};
+
+
+//-----------------------------------------------------------------------------
+//
+// CAI_AccelDecay
+//
+// Purpose: Maintain a smooth acceleration, deceleration curve
+//
+//-----------------------------------------------------------------------------
+
+class CAI_AccelDecay
+{
+public:
+ CAI_AccelDecay();
+
+ void SetParameters( float minVelocity, float maxVelocity, float accelPercent, float decelPercent );
+ float Update( float flCurrent, float flTarget, float flInterval );
+ void ResetVelocity( float flVelocity = 0.0f );
+ void SetMaxVelocity( float maxVelocity );
+
+private:
+ float m_velocity;
+
+ float m_maxVelocity; // = 300;
+ float m_minVelocity; // = 10;
+
+ float m_invDecay; // 0.8 // maintain X percent of velocity when slowing down
+ float m_decayTime;// 0.4161 // Sum( 1..cycle, HEIGHTINVDECAY^cycle )
+ float m_accel; // 0.5 // accel toward maxVelocity by X percent each cycle
+
+ DECLARE_SIMPLE_DATADESC();
+};
+
+
+
+//-----------------------------------------------------------------------------
+//
+// Purpose: Utility to allow place grace in cover
+//
+//-----------------------------------------------------------------------------
+
+struct AI_FreePassParams_t
+{
+ float timeToTrigger; // How long after not detected to issue pass
+ float duration; // How long in the open pass before revoked
+ float moveTolerance; // How far in open needed to move to revoke pass
+ float refillRate; // After hiding again during pass, how quickly to reinstitute pass(seconds per second)
+ float coverDist; // When hiding, how far from an obstructing object needed to be considered in cover
+
+ float peekTime; // How long allowed to peek
+ float peekTimeAfterDamage; // How long allowed to peek after damaged by
+ float peekEyeDist; // how far spaced out the eyes are
+ float peekEyeDistZ; // how far below eye position to test eyes (handles peek up)
+
+ DECLARE_SIMPLE_DATADESC();
+};
+
+//-------------------------------------
+
+class CAI_FreePass : public CAI_Component
+{
+public:
+ CAI_FreePass()
+ : m_FreePassTimeRemaining(0)
+ {
+ }
+
+ void Reset( float passTime = -1, float moveTolerance = -1 );
+
+ void SetPassTarget( CBaseEntity *pTarget ) { m_hTarget = pTarget; m_FreePassTimeRemaining = 0; }
+ CBaseEntity * GetPassTarget() { return m_hTarget; }
+
+ void SetParams( const AI_FreePassParams_t &params ) { m_Params = params; }
+ const AI_FreePassParams_t &GetParams() const { return m_Params; }
+
+ //---------------------------------
+ // Free pass
+ //---------------------------------
+ void Update();
+
+ bool HasPass();
+ void Revoke( bool bUpdateMemory = false );
+
+ float GetTimeRemaining() { return m_FreePassTimeRemaining; }
+ void SetTimeRemaining( float passTime ) { m_FreePassTimeRemaining = passTime; }
+
+ bool ShouldAllowFVisible( bool bBaseResult );
+
+private:
+ EHANDLE m_hTarget;
+
+ float m_FreePassTimeRemaining;
+ CAI_MoveMonitor m_FreePassMoveMonitor;
+
+ AI_FreePassParams_t m_Params;
+
+ DECLARE_SIMPLE_DATADESC();
+};
+
+//-----------------------------------------------------------------------------
+
+class CTraceFilterNav : public CTraceFilterSimple
+{
+public:
+ CTraceFilterNav( CAI_BaseNPC *pProber, bool bIgnoreTransientEntities, const IServerEntity *passedict, int collisionGroup, bool m_bAllowPlayerAvoid = true );
+ bool ShouldHitEntity( IHandleEntity *pServerEntity, int contentsMask );
+
+private:
+ CAI_BaseNPC *m_pProber;
+ bool m_bIgnoreTransientEntities;
+ bool m_bCheckCollisionTable;
+ bool m_bAllowPlayerAvoid;
+};
+
+extern string_t g_iszFuncBrushClassname;
+
+#endif // AI_UTILS_H