|
|
|
/** |
|
* |
|
*/ |
|
class SHOOTERGAME_API dtQueryFilter_Example : public dtQueryFilter |
|
{ |
|
public: |
|
dtQueryFilter_Example(bool inIsVirtual = true) : dtQueryFilter(inIsVirtual) |
|
{ |
|
|
|
} |
|
|
|
virtual ~dtQueryFilter_Example() {} |
|
protected: |
|
|
|
virtual float getVirtualCost(const float* pa, const float* pb, |
|
const dtPolyRef prevRef, const dtMeshTile* prevTile, const dtPoly* prevPoly, |
|
const dtPolyRef curRef, const dtMeshTile* curTile, const dtPoly* curPoly, |
|
const dtPolyRef nextRef, const dtMeshTile* nextTile, const dtPoly* nextPoly) const override; |
|
|
|
private: |
|
float GetCustomCost(const FVector2D StartPosition, const FVector2D EndPosition) const; |
|
}; |
|
|
|
/** |
|
* |
|
*/ |
|
class SHOOTERGAME_API FRecastQueryFilter_Example : public INavigationQueryFilterInterface, public dtQueryFilter_Example |
|
{ |
|
public: |
|
FRecastQueryFilter_Example(bool bIsVirtual = true); |
|
virtual ~FRecastQueryFilter_Example() {} |
|
|
|
virtual void Reset() override; |
|
|
|
virtual void SetAreaCost(uint8 AreaType, float Cost) override; |
|
virtual void SetFixedAreaEnteringCost(uint8 AreaType, float Cost) override; |
|
virtual void SetExcludedArea(uint8 AreaType) override; |
|
virtual void SetAllAreaCosts(const float* CostArray, const int32 Count) override; |
|
virtual void GetAllAreaCosts(float* CostArray, float* FixedCostArray, const int32 Count) const override; |
|
virtual void SetBacktrackingEnabled(const bool bBacktracking) override; |
|
virtual bool IsBacktrackingEnabled() const override; |
|
virtual bool IsEqual(const INavigationQueryFilterInterface* Other) const override; |
|
virtual void SetIncludeFlags(uint16 Flags) override; |
|
virtual uint16 GetIncludeFlags() const override; |
|
virtual void SetExcludeFlags(uint16 Flags) override; |
|
virtual uint16 GetExcludeFlags() const override; |
|
virtual INavigationQueryFilterInterface* CreateCopy() const override; |
|
|
|
const dtQueryFilter* GetAsDetourQueryFilter() const { return this; } |
|
|
|
/** note that it results in losing all area cost setup. Call it before setting anything else */ |
|
void SetIsVirtual(bool bIsVirtual); |
|
}; |
|
|
|
/** |
|
* |
|
*/ |
|
UCLASS() |
|
class SHOOTERGAME_API AMyRecastNavMesh : public ARecastNavMesh |
|
{ |
|
GENERATED_BODY() |
|
|
|
public: |
|
AMyRecastNavMesh(const FObjectInitializer& ObjectInitializer); |
|
FRecastQueryFilter_Example* GetCustomFilter() const; |
|
|
|
protected: |
|
virtual void Tick(float deltaTime) override; |
|
virtual void BeginPlay() override; |
|
|
|
private: |
|
FRecastQueryFilter_Example DefaultNavFilter; |
|
void SetupCustomNavFilter(); |
|
}; |