Files
GTASource/game/Peds/DefensiveArea.h
expvintl 419f2e4752 init
2025-02-23 17:40:52 +08:00

85 lines
2.5 KiB
C++

#ifndef DEFENSIVE_AREA_H
#define DEFENSIVE_AREA_H
// Game includes
#include "Peds/Area.h"
//-------------------------------------------------------------------------
// Defines a defensive area used during combat
//-------------------------------------------------------------------------
class CDefensiveArea : public CArea
{
public:
CDefensiveArea();
virtual ~CDefensiveArea();
bool IsPointInDefensiveArea( const Vector3& vPoint, const bool bVisualiseArea = false, const bool bIsDead = false, const bool bEditing = false ) const { return IsPointInArea(vPoint, bVisualiseArea, bIsDead, bEditing); }
// Gets/Sets the default cover direction, direction to be in cover from when no target is near
Vector3 GetDefaultCoverFromPosition() const { return m_vDefaultCoverFromPosition; }
void SetDefaultCoverFromPosition(const Vector3& val) { m_vDefaultCoverFromPosition = val; }
bool GetUseCenterAsGoToPosition() const { return m_bUseCenterAsGoToPosition; }
void SetUseCenterAsGoToPosition(bool bUseCenter) { m_bUseCenterAsGoToPosition = bUseCenter; }
public:
static float GetMinRadius() { return sm_fMinRadius; }
private:
virtual void OnReset();
virtual void OnSetSphere();
private:
Vector3 m_vDefaultCoverFromPosition;
bool m_bUseCenterAsGoToPosition;
private:
static float sm_fMinRadius;
};
//-------------------------------------------------------------------------
// Manages the defensive areas of a ped
//-------------------------------------------------------------------------
class CDefensiveAreaManager
{
public:
CDefensiveAreaManager();
~CDefensiveAreaManager();
void UpdateDefensiveAreas();
void SetCurrentDefensiveArea(CDefensiveArea* pDefensiveArea);
void SwapDefensiveAreaForCoverSearch();
CDefensiveArea* GetCurrentDefensiveArea() { return m_pCurrentDefensiveArea; }
CDefensiveArea* GetPrimaryDefensiveArea() { return &m_primaryDefensiveArea; }
CDefensiveArea* GetSecondaryDefensiveArea(bool bCreateIfInactive = false);
CDefensiveArea* GetAlternateDefensiveArea();
CDefensiveArea* GetDefensiveAreaForCoverSearch();
void ClearPrimaryDefensiveArea();
private:
// Defines an area the ped needs to defend
CDefensiveArea m_primaryDefensiveArea;
// Secondary area to fall back to if there is no cover in the first
CDefensiveArea* m_pSecondaryDefensiveArea;
// This is the current cover area (should always point to the primary or secondary)
CDefensiveArea* m_pCurrentDefensiveArea;
// This bool tracks if we should be using our secondary defensive area for cover queries
bool m_bUseSecondaryAreaForCover;
};
#endif //DEFENSIVE_AREA_H