aboutsummaryrefslogtreecommitdiff
path: root/mp/src/game/server/ai_motor.h
diff options
context:
space:
mode:
Diffstat (limited to 'mp/src/game/server/ai_motor.h')
-rw-r--r--mp/src/game/server/ai_motor.h450
1 files changed, 225 insertions, 225 deletions
diff --git a/mp/src/game/server/ai_motor.h b/mp/src/game/server/ai_motor.h
index 234355d1..d7f14293 100644
--- a/mp/src/game/server/ai_motor.h
+++ b/mp/src/game/server/ai_motor.h
@@ -1,225 +1,225 @@
-//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-// $NoKeywords: $
-//=============================================================================//
-
-#ifndef AI_MOTOR_H
-#define AI_MOTOR_H
-
-#ifdef _WIN32
-#pragma once
-#endif
-
-#include "simtimer.h"
-#include "ai_component.h"
-#include "ai_navtype.h"
-#include "ai_movetypes.h"
-#include "AI_Interest_Target.h"
-
-//-----------------------------------------------------------------------------
-// Forward declarations
-//-----------------------------------------------------------------------------
-enum Navigation_t;
-class CAI_PlaneSolver;
-class CAI_MoveProbe;
-class CAI_Navigator;
-
-#define AI_CALC_YAW_SPEED -1
-#define AI_KEEP_YAW_SPEED -2
-
-//-----------------------------------------------------------------------------
-
-float AI_ClampYaw( float yawSpeedPerSec, float current, float target, float time );
-
-//-----------------------------------------------------------------------------
-// CAI_Motor
-//
-// Purpose: Implements the primitive locomotion of AIs.
-//-----------------------------------------------------------------------------
-
-class CAI_Motor : public CAI_Component,
- public CAI_ProxyMovementSink
-{
-public:
- CAI_Motor(CAI_BaseNPC *pOuter);
- virtual ~CAI_Motor();
-
- void Init( IAI_MovementSink *pMovementServices );
-
- // --------------------------------
- // The current timestep the motor is working on
- // --------------------------------
- float GetMoveInterval() { return m_flMoveInterval; }
- float SetMoveInterval( float flInterval ) { return (m_flMoveInterval = flInterval); }
-
- // ----------------------------------------------------
- // Translational movement
- // ----------------------------------------------------
- AIMoveResult_t MoveNormalExecute( const AILocalMoveGoal_t &move );
-
- virtual void MoveClimbStart( const Vector &climbDest, const Vector &climbDir, float climbDist, float yaw );
- virtual AIMoveResult_t MoveClimbExecute( const Vector &climbDest, const Vector &climbDir, float climbDist, float yaw, int climbNodesLeft );
- virtual void MoveClimbStop();
-
- //---------------------------------
-
-
- virtual void MoveJumpStart( const Vector &velocity );
- virtual int MoveJumpExecute();
- virtual AIMoveResult_t MoveJumpStop();
-
- virtual void ResetMoveCalculations();
- virtual void MoveStart();
- virtual void MoveStop();
- virtual void MovePaused();
-
- //---------------------------------
-
- float GetIdealSpeed() const;
- float GetIdealAccel() const;
- float GetCurSpeed() const { return m_vecVelocity.Length(); }
- const Vector & GetCurVel() const { return m_vecVelocity; }
-
- virtual float OverrideMaxYawSpeed( Activity activity ) { return -1; }
- bool IsDeceleratingToGoal() const { return false; }
-
- //---------------------------------
- // Raw ground step forward to the specifed position
- //
-
- AIMotorMoveResult_t MoveGroundStep( const Vector &newPos, CBaseEntity *pMoveTarget = NULL, float yaw = -1, bool bAsFarAsCan = true, bool bTestZ = true, AIMoveTrace_t *pTraceResult = NULL );
-
- // ----------------------------------------------------
- // Rotational movement (yaw); goal and speed
- // ----------------------------------------------------
-
- void SetYawSpeed( float yawSpeed ) { m_YawSpeed = yawSpeed; }
- float GetYawSpeed() const { return m_YawSpeed; }
- float GetIdealYaw() const { return m_IdealYaw; }
- void SetIdealYaw( float idealYaw) { m_IdealYaw = idealYaw; }
-
- // Set ideal yaw specified as a vector
- void SetIdealYaw( const Vector &vecFacing) { SetIdealYaw( UTIL_VecToYaw( vecFacing )); }
-
- // Set ideal yaw based on a specified target
- void SetIdealYawToTarget( const Vector &target, float noise = 0.0, float offset = 0.0 );
-
- // Set the ideal yaw and run the current or specified timestep worth of rotation. Note
- // it is not correct to call any "update" variant of these methods more
- // than once per think cycle
- void SetIdealYawAndUpdate( float idealYaw, float yawSpeed = AI_CALC_YAW_SPEED );
- void SetIdealYawAndUpdate( const Vector &vecFacing, float yawSpeed = AI_CALC_YAW_SPEED ) { SetIdealYawAndUpdate( UTIL_VecToYaw( vecFacing ), yawSpeed ); }
- void SetIdealYawToTargetAndUpdate( const Vector &target, float yawSpeed = AI_CALC_YAW_SPEED );
-
- // Add multiple facing goals while moving/standing still.
- virtual void AddFacingTarget( CBaseEntity *pTarget, float flImportance, float flDuration, float flRamp = 0.0 );
- virtual void AddFacingTarget( const Vector &vecPosition, float flImportance, float flDuration, float flRamp = 0.0 );
- virtual void AddFacingTarget( CBaseEntity *pTarget, const Vector &vecPosition, float flImportance, float flDuration, float flRamp = 0.0 );
- virtual float GetFacingDirection( Vector &vecDir );
-
- // Force the heading to the ideal yaw
- void SnapYaw() { UpdateYaw(360); }
-
- // Run the current or specified timestep worth of rotation
- virtual void UpdateYaw( int speed = -1 );
-
- //
- virtual void RecalculateYawSpeed();
-
- // Returns the difference ( in degrees ) between npc's current yaw and ideal_yaw
- float DeltaIdealYaw();
-
- // Issues turn gestures when needed due to turning
- virtual void MaintainTurnActivity( void ) { };
- virtual bool AddTurnGesture( float flYD ) { return false; };
-
- // --------------------------------
- // Move primitives
- // --------------------------------
- virtual float MinStoppingDist( float flMinResult = 10.0 ); // how far before I can come to a complete stop?
- virtual float MinCheckDist(); // how far should I look ahead in my route?
-
- //---------------------------------
-
- CAI_Navigator *GetNavigator( void );
- int SelectWeightedSequence( Activity activity );
- float GetSequenceGroundSpeed( int iSequence );
-
- float CalcIntervalMove();
-
- // Yaw locking
- bool IsYawLocked( void ) const { return m_bYawLocked; }
- void SetYawLocked( bool state ) { m_bYawLocked = state; }
-
-protected:
-
- //
- // Common services provided by CAI_BaseNPC, Convenience methods to simplify derived code
- //
- CAI_MoveProbe * GetMoveProbe() { return m_pMoveProbe; }
- void SetSmoothedVelocity(const Vector &vecVelocity);
- Vector GetSmoothedVelocity();
- float CalcIdealYaw( const Vector &vecTarget );
- float SetBoneController ( int iController, float flValue );
- float GetSequenceMoveYaw( int iSequence );
- void SetPlaybackRate( float flRate );
- float GetPlaybackRate(); //get
- float SetPoseParameter( const char *szName, float flValue );
- float SetPoseParameter( int iParameter, float flValue );
- float GetPoseParameter( const char *szName );
- bool HasPoseParameter( int iSequence, const char *szName );
- bool HasPoseParameter( int iSequence, int iParameter );
- void SetMoveType( MoveType_t val, MoveCollide_t moveCollide = MOVECOLLIDE_DEFAULT );
- float StepHeight() const;
- bool CanStandOn( CBaseEntity *pSurface ) const;
-
- // ----------------------------------------------------
- // Primitives
- // ----------------------------------------------------
-
- virtual void MoveFacing( const AILocalMoveGoal_t &move );
-
- virtual AIMotorMoveResult_t MoveGroundExecute( const AILocalMoveGoal_t &move, AIMoveTrace_t *pTraceResult );
- AIMotorMoveResult_t MoveGroundExecuteWalk( const AILocalMoveGoal_t &move, float speed, float dist, AIMoveTrace_t *pTraceResult );
- virtual AIMotorMoveResult_t MoveFlyExecute( const AILocalMoveGoal_t &move, AIMoveTrace_t *pTraceResult );
-
-protected: // made protected while animation transition details worked out, private:
-
- // --------------------------------
- void SetMoveVel(const Vector &velocity) { m_vecVelocity = velocity; }
- float IdealVelocity(); // how fast should I be moving in an ideal state?
-
- // --------------------------------
- float m_flMoveInterval;
-
- float m_IdealYaw;
- float m_YawSpeed;
-
- Vector m_vecVelocity;
- Vector m_vecAngularVelocity;
-
- // --------------------------------
-
- int m_nDismountSequence;
- Vector m_vecDismount;
-
- // --------------------------------
-
- CAI_InterestTarget m_facingQueue;
-
- // --------------------------------
-
- CAI_MoveProbe * m_pMoveProbe;
-
- bool m_bYawLocked;
-
- //---------------------------------
-public:
- DECLARE_SIMPLE_DATADESC();
-};
-
-//=============================================================================
-
-#endif // AI_MOTOR_H
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef AI_MOTOR_H
+#define AI_MOTOR_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "simtimer.h"
+#include "ai_component.h"
+#include "ai_navtype.h"
+#include "ai_movetypes.h"
+#include "AI_Interest_Target.h"
+
+//-----------------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------------
+enum Navigation_t;
+class CAI_PlaneSolver;
+class CAI_MoveProbe;
+class CAI_Navigator;
+
+#define AI_CALC_YAW_SPEED -1
+#define AI_KEEP_YAW_SPEED -2
+
+//-----------------------------------------------------------------------------
+
+float AI_ClampYaw( float yawSpeedPerSec, float current, float target, float time );
+
+//-----------------------------------------------------------------------------
+// CAI_Motor
+//
+// Purpose: Implements the primitive locomotion of AIs.
+//-----------------------------------------------------------------------------
+
+class CAI_Motor : public CAI_Component,
+ public CAI_ProxyMovementSink
+{
+public:
+ CAI_Motor(CAI_BaseNPC *pOuter);
+ virtual ~CAI_Motor();
+
+ void Init( IAI_MovementSink *pMovementServices );
+
+ // --------------------------------
+ // The current timestep the motor is working on
+ // --------------------------------
+ float GetMoveInterval() { return m_flMoveInterval; }
+ float SetMoveInterval( float flInterval ) { return (m_flMoveInterval = flInterval); }
+
+ // ----------------------------------------------------
+ // Translational movement
+ // ----------------------------------------------------
+ AIMoveResult_t MoveNormalExecute( const AILocalMoveGoal_t &move );
+
+ virtual void MoveClimbStart( const Vector &climbDest, const Vector &climbDir, float climbDist, float yaw );
+ virtual AIMoveResult_t MoveClimbExecute( const Vector &climbDest, const Vector &climbDir, float climbDist, float yaw, int climbNodesLeft );
+ virtual void MoveClimbStop();
+
+ //---------------------------------
+
+
+ virtual void MoveJumpStart( const Vector &velocity );
+ virtual int MoveJumpExecute();
+ virtual AIMoveResult_t MoveJumpStop();
+
+ virtual void ResetMoveCalculations();
+ virtual void MoveStart();
+ virtual void MoveStop();
+ virtual void MovePaused();
+
+ //---------------------------------
+
+ float GetIdealSpeed() const;
+ float GetIdealAccel() const;
+ float GetCurSpeed() const { return m_vecVelocity.Length(); }
+ const Vector & GetCurVel() const { return m_vecVelocity; }
+
+ virtual float OverrideMaxYawSpeed( Activity activity ) { return -1; }
+ bool IsDeceleratingToGoal() const { return false; }
+
+ //---------------------------------
+ // Raw ground step forward to the specifed position
+ //
+
+ AIMotorMoveResult_t MoveGroundStep( const Vector &newPos, CBaseEntity *pMoveTarget = NULL, float yaw = -1, bool bAsFarAsCan = true, bool bTestZ = true, AIMoveTrace_t *pTraceResult = NULL );
+
+ // ----------------------------------------------------
+ // Rotational movement (yaw); goal and speed
+ // ----------------------------------------------------
+
+ void SetYawSpeed( float yawSpeed ) { m_YawSpeed = yawSpeed; }
+ float GetYawSpeed() const { return m_YawSpeed; }
+ float GetIdealYaw() const { return m_IdealYaw; }
+ void SetIdealYaw( float idealYaw) { m_IdealYaw = idealYaw; }
+
+ // Set ideal yaw specified as a vector
+ void SetIdealYaw( const Vector &vecFacing) { SetIdealYaw( UTIL_VecToYaw( vecFacing )); }
+
+ // Set ideal yaw based on a specified target
+ void SetIdealYawToTarget( const Vector &target, float noise = 0.0, float offset = 0.0 );
+
+ // Set the ideal yaw and run the current or specified timestep worth of rotation. Note
+ // it is not correct to call any "update" variant of these methods more
+ // than once per think cycle
+ void SetIdealYawAndUpdate( float idealYaw, float yawSpeed = AI_CALC_YAW_SPEED );
+ void SetIdealYawAndUpdate( const Vector &vecFacing, float yawSpeed = AI_CALC_YAW_SPEED ) { SetIdealYawAndUpdate( UTIL_VecToYaw( vecFacing ), yawSpeed ); }
+ void SetIdealYawToTargetAndUpdate( const Vector &target, float yawSpeed = AI_CALC_YAW_SPEED );
+
+ // Add multiple facing goals while moving/standing still.
+ virtual void AddFacingTarget( CBaseEntity *pTarget, float flImportance, float flDuration, float flRamp = 0.0 );
+ virtual void AddFacingTarget( const Vector &vecPosition, float flImportance, float flDuration, float flRamp = 0.0 );
+ virtual void AddFacingTarget( CBaseEntity *pTarget, const Vector &vecPosition, float flImportance, float flDuration, float flRamp = 0.0 );
+ virtual float GetFacingDirection( Vector &vecDir );
+
+ // Force the heading to the ideal yaw
+ void SnapYaw() { UpdateYaw(360); }
+
+ // Run the current or specified timestep worth of rotation
+ virtual void UpdateYaw( int speed = -1 );
+
+ //
+ virtual void RecalculateYawSpeed();
+
+ // Returns the difference ( in degrees ) between npc's current yaw and ideal_yaw
+ float DeltaIdealYaw();
+
+ // Issues turn gestures when needed due to turning
+ virtual void MaintainTurnActivity( void ) { };
+ virtual bool AddTurnGesture( float flYD ) { return false; };
+
+ // --------------------------------
+ // Move primitives
+ // --------------------------------
+ virtual float MinStoppingDist( float flMinResult = 10.0 ); // how far before I can come to a complete stop?
+ virtual float MinCheckDist(); // how far should I look ahead in my route?
+
+ //---------------------------------
+
+ CAI_Navigator *GetNavigator( void );
+ int SelectWeightedSequence( Activity activity );
+ float GetSequenceGroundSpeed( int iSequence );
+
+ float CalcIntervalMove();
+
+ // Yaw locking
+ bool IsYawLocked( void ) const { return m_bYawLocked; }
+ void SetYawLocked( bool state ) { m_bYawLocked = state; }
+
+protected:
+
+ //
+ // Common services provided by CAI_BaseNPC, Convenience methods to simplify derived code
+ //
+ CAI_MoveProbe * GetMoveProbe() { return m_pMoveProbe; }
+ void SetSmoothedVelocity(const Vector &vecVelocity);
+ Vector GetSmoothedVelocity();
+ float CalcIdealYaw( const Vector &vecTarget );
+ float SetBoneController ( int iController, float flValue );
+ float GetSequenceMoveYaw( int iSequence );
+ void SetPlaybackRate( float flRate );
+ float GetPlaybackRate(); //get
+ float SetPoseParameter( const char *szName, float flValue );
+ float SetPoseParameter( int iParameter, float flValue );
+ float GetPoseParameter( const char *szName );
+ bool HasPoseParameter( int iSequence, const char *szName );
+ bool HasPoseParameter( int iSequence, int iParameter );
+ void SetMoveType( MoveType_t val, MoveCollide_t moveCollide = MOVECOLLIDE_DEFAULT );
+ float StepHeight() const;
+ bool CanStandOn( CBaseEntity *pSurface ) const;
+
+ // ----------------------------------------------------
+ // Primitives
+ // ----------------------------------------------------
+
+ virtual void MoveFacing( const AILocalMoveGoal_t &move );
+
+ virtual AIMotorMoveResult_t MoveGroundExecute( const AILocalMoveGoal_t &move, AIMoveTrace_t *pTraceResult );
+ AIMotorMoveResult_t MoveGroundExecuteWalk( const AILocalMoveGoal_t &move, float speed, float dist, AIMoveTrace_t *pTraceResult );
+ virtual AIMotorMoveResult_t MoveFlyExecute( const AILocalMoveGoal_t &move, AIMoveTrace_t *pTraceResult );
+
+protected: // made protected while animation transition details worked out, private:
+
+ // --------------------------------
+ void SetMoveVel(const Vector &velocity) { m_vecVelocity = velocity; }
+ float IdealVelocity(); // how fast should I be moving in an ideal state?
+
+ // --------------------------------
+ float m_flMoveInterval;
+
+ float m_IdealYaw;
+ float m_YawSpeed;
+
+ Vector m_vecVelocity;
+ Vector m_vecAngularVelocity;
+
+ // --------------------------------
+
+ int m_nDismountSequence;
+ Vector m_vecDismount;
+
+ // --------------------------------
+
+ CAI_InterestTarget m_facingQueue;
+
+ // --------------------------------
+
+ CAI_MoveProbe * m_pMoveProbe;
+
+ bool m_bYawLocked;
+
+ //---------------------------------
+public:
+ DECLARE_SIMPLE_DATADESC();
+};
+
+//=============================================================================
+
+#endif // AI_MOTOR_H