// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "NavigationOctreeController.h" #include "NavigationDirtyAreasController.h" struct FNavigationDirtyElement; class UNavArea; struct FNavigationDataHandler { FNavigationOctreeController& OctreeController; FNavigationDirtyAreasController& DirtyAreasController; NAVIGATIONSYSTEM_API FNavigationDataHandler(FNavigationOctreeController& InOctreeController, FNavigationDirtyAreasController& InDirtyAreasController); NAVIGATIONSYSTEM_API void ConstructNavOctree(const FVector& Origin, const double Radius, const ENavDataGatheringModeConfig DataGatheringMode, const float GatheringNavModifiersWarningLimitTime); UE_DEPRECATED(5.5, "Use RegisterFromNavOctree instead.") NAVIGATIONSYSTEM_API void RemoveNavOctreeElementId(const FOctreeElementId2& ElementId, int32 UpdateFlags); /** * Removes the octree node and the NavigationElementHandle-OctreeElementId pair associated to the specified OctreeElementId. * It will also dirty the area base of the NavigationElement values and the specified update flags. */ NAVIGATIONSYSTEM_API void RemoveFromNavOctree(const FOctreeElementId2& ElementId, int32 UpdateFlags); NAVIGATIONSYSTEM_API FSetElementId RegisterElementWithNavOctree(const TSharedRef& ElementRef, int32 UpdateFlags); UE_DEPRECATED(5.5, "Use RegisterNavigationElementWithNavOctree instead.") NAVIGATIONSYSTEM_API FSetElementId RegisterNavOctreeElement(UObject& ElementOwner, INavRelevantInterface& ElementInterface, int32 UpdateFlags); NAVIGATIONSYSTEM_API void AddElementToNavOctree(const FNavigationDirtyElement& DirtyElement); /** * Removes associated NavOctreeElement and invalidates associated pending updates. Also removes element from the list of children * of the NavigationParent, if any. * @param ElementRef Navigation element for which we must remove the associated NavOctreeElement * @param UpdateFlags Flags indicating in which context the method is called to allow/forbid certain operations * * @return True if associated NavOctreeElement has been removed or pending update has been invalidated; false otherwise. */ NAVIGATIONSYSTEM_API bool UnregisterElementWithNavOctree(const TSharedRef& ElementRef, int32 UpdateFlags); UE_DEPRECATED(5.5, "Use the overloaded version with FNavigationElement instead.") NAVIGATIONSYSTEM_API bool UnregisterNavOctreeElement(UObject& ElementOwner, INavRelevantInterface& ElementInterface, int32 UpdateFlags); /** * Unregister element associated with the provided handle and register the new element. * Also update any pending update associated to that element. */ NAVIGATIONSYSTEM_API void UpdateNavOctreeElement(FNavigationElementHandle ElementHandle, const TSharedRef& UpdatedElement, int32 UpdateFlags); UE_DEPRECATED(5.5, "Use the overloaded version with FNavigationElement instead.") NAVIGATIONSYSTEM_API void UpdateNavOctreeElement(UObject& ElementOwner, INavRelevantInterface& ElementInterface, int32 UpdateFlags); UE_DEPRECATED(5.5, "This method is no longer public and should not be called directly.") NAVIGATIONSYSTEM_API void UpdateNavOctreeParentChain(UObject& ElementOwner, bool bSkipElementOwnerUpdate = false); NAVIGATIONSYSTEM_API bool UpdateNavOctreeElementBounds(FNavigationElementHandle Element, const FBox& NewBounds, const TConstArrayView DirtyAreas); UE_DEPRECATED(5.5, "Use the overloaded version with FNavigationElement instead.") NAVIGATIONSYSTEM_API bool UpdateNavOctreeElementBounds(UObject& Object, const FBox& NewBounds, const TConstArrayView DirtyAreas); NAVIGATIONSYSTEM_API void FindElementsInNavOctree(const FBox& QueryBox, const FNavigationOctreeFilter& Filter, TArray& Elements); NAVIGATIONSYSTEM_API bool ReplaceAreaInOctreeData(FNavigationElementHandle Element, TSubclassOf OldArea, TSubclassOf NewArea, bool bReplaceChildClasses) const; UE_DEPRECATED(5.5, "Use the overloaded version with FNavigationElement instead.") NAVIGATIONSYSTEM_API bool ReplaceAreaInOctreeData(const UObject& Object, TSubclassOf OldArea, TSubclassOf NewArea, bool bReplaceChildClasses); NAVIGATIONSYSTEM_API void AddLevelCollisionToOctree(ULevel& Level); NAVIGATIONSYSTEM_API void RemoveLevelCollisionFromOctree(ULevel& Level); UE_DEPRECATED(5.5, "This method will be removed. Use UNavigationSystemV1 version instead.") NAVIGATIONSYSTEM_API void UpdateActorAndComponentsInNavOctree(AActor& Actor); NAVIGATIONSYSTEM_API void ProcessPendingOctreeUpdates(); NAVIGATIONSYSTEM_API void DemandLazyDataGathering(FNavigationRelevantData& ElementData); UE_DEPRECATED(5.4, "Use the overloaded version taking a list of areas as parameter instead.") NAVIGATIONSYSTEM_API bool UpdateNavOctreeElementBounds(UObject& Object, const FBox& NewBounds, const FBox& DirtyArea); private: void UpdateNavOctreeParentChain(const TSharedRef& Element, bool bSkipElementOwnerUpdate = false); };