Skip to content

Instantly share code, notes, and snippets.

@mtrebi
Created July 25, 2016 09:36
Show Gist options
  • Save mtrebi/9fcda04146b580fb7063f5f948645daa to your computer and use it in GitHub Desktop.
Save mtrebi/9fcda04146b580fb7063f5f948645daa to your computer and use it in GitHub Desktop.
/**
*
*/
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();
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment