Files
UnrealEngine/Engine/Source/Runtime/Navmesh/Public/DetourCrowd/DetourSharedBoundary.h
2025-05-18 13:04:45 +08:00

60 lines
1.5 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Containers/Array.h"
#include "Containers/Set.h"
#include "Containers/SparseArray.h"
#include "CoreMinimal.h"
#include "Detour/DetourLargeWorldCoordinates.h"
#include "Detour/DetourNavMesh.h"
#include "Detour/DetourNavMeshQuery.h"
#include "HAL/Platform.h"
struct dtSharedBoundaryEdge
{
dtReal v0[3];
dtReal v1[3];
dtPolyRef p0;
dtPolyRef p1;
};
struct dtSharedBoundaryData
{
dtReal Center[3];
dtReal Radius;
dtReal AccessTime;
dtQueryFilter* Filter;
uint8 SingleAreaId;
TArray<dtSharedBoundaryEdge> Edges;
TSet<dtPolyRef> Polys;
dtSharedBoundaryData() : Filter(nullptr) {}
};
class dtSharedBoundary
{
public:
TSparseArray<dtSharedBoundaryData> Data;
dtQueryFilter SingleAreaFilter;
dtReal CurrentTime;
dtReal NextClearTime;
void Initialize();
void Tick(dtReal DeltaTime);
int32 FindData(dtReal* Center, dtReal Radius, dtPolyRef ReqPoly, dtQueryFilter* NavFilter) const;
int32 FindData(dtReal* Center, dtReal Radius, dtPolyRef ReqPoly, uint8 SingleAreaId) const;
int32 CacheData(dtReal* Center, dtReal Radius, dtPolyRef CenterPoly, dtNavMeshQuery* NavQuery, dtQueryFilter* NavFilter);
int32 CacheData(dtReal* Center, dtReal Radius, dtPolyRef CenterPoly, dtNavMeshQuery* NavQuery, uint8 SingleAreaId);
void FindEdges(dtSharedBoundaryData& Data, dtPolyRef CenterPoly, dtNavMeshQuery* NavQuery, dtQueryFilter* NavFilter);
bool HasSample(int32 Idx) const;
private:
bool IsValid(int32 Idx, dtNavMeshQuery* NavQuery, dtQueryFilter* NavFilter) const;
};