This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
nekohook/modules/source2013/sdk/game/server/ai_localnavigator.h
2020-08-04 13:13:01 -04:00

74 lines
2.2 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================//
#ifndef AI_LOCALNAVIGATOR_H
#define AI_LOCALNAVIGATOR_H
#include "ai_component.h"
#include "ai_movetypes.h"
#include "ai_obstacle_type.h"
#include "simtimer.h"
#if defined(_WIN32)
#pragma once
#endif
class CAI_PlaneSolver;
class CAI_MoveProbe;
//-----------------------------------------------------------------------------
// CAI_LocalNavigator
//
// Purpose: Handles all the immediate tasks of navigation, independent of
// path. Implements steering.
//-----------------------------------------------------------------------------
class CAI_LocalNavigator : public CAI_Component, public CAI_ProxyMovementSink {
public:
CAI_LocalNavigator(CAI_BaseNPC *pOuter);
virtual ~CAI_LocalNavigator();
void Init(IAI_MovementSink *pMovementServices);
//---------------------------------
AIMoveResult_t MoveCalc(AILocalMoveGoal_t *pResult,
bool bPreviouslyValidated = false);
void ResetMoveCalculations();
//---------------------------------
void AddObstacle(const Vector &pos, float radius,
AI_MoveSuggType_t type = AIMST_AVOID_OBJECT);
bool HaveObstacles();
protected:
AIMoveResult_t MoveCalcRaw(AILocalMoveGoal_t *pResult, bool bOnlyCurThink);
bool MoveCalcDirect(AILocalMoveGoal_t *pMoveGoal, bool bOnlyCurThink,
float *pDistClear, AIMoveResult_t *pResult);
bool MoveCalcSteer(AILocalMoveGoal_t *pMoveGoal, float distClear,
AIMoveResult_t *pResult);
bool MoveCalcStop(AILocalMoveGoal_t *pMoveGoal, float distClear,
AIMoveResult_t *pResult);
CAI_MoveProbe *GetMoveProbe() { return m_pMoveProbe; }
const CAI_MoveProbe *GetMoveProbe() const { return m_pMoveProbe; }
private:
// --------------------------------
bool m_fLastWasClear;
AILocalMoveGoal_t m_LastMoveGoal;
CSimpleSimTimer m_FullDirectTimer;
CAI_PlaneSolver *m_pPlaneSolver;
CAI_MoveProbe *m_pMoveProbe;
DECLARE_SIMPLE_DATADESC();
};
#endif // AI_LOCALNAVIGATOR_H