Files
UnrealEngineUWP/Engine/Plugins/Runtime/SmartObjects/Source/SmartObjectsModule/Public/SmartObjectOctree.h
mieszko zielinski 31a5065342 Moved GameplayBehaviors out of restricted folder over to Experimental
Moved SmartObjects out of restricted folder
Moved StateTree out of restricted folder
Moved ZoneGraph out of restricted folder
Moved ZoneGraphAnnotations out of restricted folder

#jira UE-115297

#ROBOMERGE-OWNER: mieszko.zielinski
#ROBOMERGE-AUTHOR: mieszko.zielinski
#ROBOMERGE-SOURCE: CL 17648223 via CL 17648246 via CL 17648261 via CL 17648385 via CL 17648390
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v875-17642767)
#ROBOMERGE-CONFLICT from-shelf
#ROBOMERGE[STARSHIP]: UE5-Main

[CL 17648742 by mieszko zielinski in ue5-release-engine-test branch]
2021-09-28 13:33:00 -04:00

61 lines
1.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "SmartObjectTypes.h"
#include "Templates/SharedPointer.h"
#include "Math/GenericOctree.h"
typedef TSharedRef<struct FSmartObjectOctreeID, ESPMode::ThreadSafe> FSmartObjectOctreeIDSharedRef;
struct SMARTOBJECTSMODULE_API FSmartObjectOctreeID : public TSharedFromThis<FSmartObjectOctreeID, ESPMode::ThreadSafe>
{
FOctreeElementId2 ID;
};
struct SMARTOBJECTSMODULE_API FSmartObjectOctreeElement
{
FBoxCenterAndExtent Bounds;
FSmartObjectID SmartObjectID;
FSmartObjectOctreeIDSharedRef SharedOctreeID;
FSmartObjectOctreeElement(const FBoxCenterAndExtent& Bounds, const FSmartObjectID& SmartObjectID, const FSmartObjectOctreeIDSharedRef& SharedOctreeID);
};
struct FSmartObjectOctreeSemantics
{
enum { MaxElementsPerLeaf = 16 };
enum { MinInclusiveElementsPerNode = 7 };
enum { MaxNodeDepth = 12 };
typedef TInlineAllocator<MaxElementsPerLeaf> ElementAllocator;
FORCEINLINE static const FBoxCenterAndExtent& GetBoundingBox(const FSmartObjectOctreeElement& Element)
{
return Element.Bounds;
}
FORCEINLINE static bool AreElementsEqual(const FSmartObjectOctreeElement& A, const FSmartObjectOctreeElement& B)
{
return A.SmartObjectID == B.SmartObjectID;
}
static void SetElementId(const FSmartObjectOctreeElement& Element, FOctreeElementId2 Id);
};
class FSmartObjectOctree : public TOctree2<FSmartObjectOctreeElement, FSmartObjectOctreeSemantics>
{
public:
FSmartObjectOctree();
FSmartObjectOctree(const FVector& Origin, float Radius);
virtual ~FSmartObjectOctree();
/** Add new node and initialize using SmartObject runtime data */
void AddNode(const FBoxCenterAndExtent& Bounds, const FSmartObjectID& SmartObjectID, const FSmartObjectOctreeIDSharedRef& SharedOctreeID);
/** Updates element bounds remove/add operation */
void UpdateNode(const FOctreeElementId2& Id, const FBox& NewBounds);
/** Remove node */
void RemoveNode(const FOctreeElementId2& Id);
};