You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
This change allow new NavigationSystem created after initial map load (e.g. ANavSystemConfigOverride) to properly recreate its custom nav link mappings and octree. #rb Aris.Theophanidis, mikko.mononen, robert.seiver [CL 32486904 by yoan stamant in 5.4 branch]
92 lines
3.5 KiB
C++
92 lines
3.5 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "Subsystems/WorldSubsystem.h"
|
|
#include "UObject/WeakInterfacePtr.h"
|
|
#include "NavigationObjectRepository.generated.h"
|
|
|
|
class INavLinkCustomInterface;
|
|
class INavRelevantInterface;
|
|
|
|
DECLARE_DELEGATE_OneParam(FOnNavRelevantObjectRegistrationEvent, INavRelevantInterface&);
|
|
DECLARE_DELEGATE_OneParam(FOnCustomNavLinkObjectRegistrationEvent, INavLinkCustomInterface&);
|
|
|
|
/**
|
|
* World subsystem dedicated to store different types of navigation related objects that the
|
|
* NavigationSystem needs to access.
|
|
*/
|
|
UCLASS()
|
|
class UNavigationObjectRepository : public UWorldSubsystem
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
|
|
/**
|
|
* Adds the provided object implementing INavRelevantInterface to the list of registered navigation relevant objects.
|
|
* @param NavRelevantObject INavRelevantInterface of the object to register.
|
|
* @note Method will also assert if same interface pointers is registered twice.
|
|
*/
|
|
void RegisterNavRelevantObject(INavRelevantInterface& NavRelevantObject);
|
|
|
|
/**
|
|
* Removes the provided interface from the list of registered navigation relevant objects.
|
|
* @param NavRelevantObject INavRelevantInterface of the object to unregister.
|
|
* @note Method will also assert if interface can't be removed (i.e. not registered or already unregistered).
|
|
*/
|
|
void UnregisterNavRelevantObject(INavRelevantInterface& NavRelevantObject);
|
|
|
|
/**
|
|
* Returns the list of registered navigation relevant objects.
|
|
* @return Const view on the list of all registered navigation relevant objects.
|
|
*/
|
|
TConstArrayView<TWeakInterfacePtr<INavRelevantInterface>> GetNavRelevantObjects() const
|
|
{
|
|
return NavRelevantObjects;
|
|
}
|
|
|
|
/**
|
|
* Adds the provided interface to the list of registered custom navigation links.
|
|
* @param CustomNavLinkObject INavLinkCustomInterface of the object to register.
|
|
* @note Method will also assert if same interface pointers is registered twice.
|
|
*/
|
|
void RegisterCustomNavLinkObject(INavLinkCustomInterface& CustomNavLinkObject);
|
|
|
|
/**
|
|
* Removes the provided interface from the list of registered custom navigation links.
|
|
* @param CustomNavLinkObject INavLinkCustomInterface of the object to unregister.
|
|
* @note Method will also assert if interface can't be removed (i.e. not registered or already unregistered).
|
|
*/
|
|
void UnregisterCustomNavLinkObject(INavLinkCustomInterface& CustomNavLinkObject);
|
|
|
|
/**
|
|
* Returns the list of registered custom navigation links.
|
|
* @return Const view on the list of all registered custom navigation links.
|
|
*/
|
|
TConstArrayView<TWeakInterfacePtr<INavLinkCustomInterface>> GetCustomLinks() const
|
|
{
|
|
return CustomLinkObjects;
|
|
}
|
|
|
|
/** Delegate executed when a navigation relevant object is registered to the repository. */
|
|
FOnNavRelevantObjectRegistrationEvent OnNavRelevantObjectRegistered;
|
|
|
|
/** Delegate executed when a navigation relevant object is unregistered from the repository. */
|
|
FOnNavRelevantObjectRegistrationEvent OnNavRelevantObjectUnregistered;
|
|
|
|
/** Delegate executed when a custom navigation link is registered to the repository. */
|
|
FOnCustomNavLinkObjectRegistrationEvent OnCustomNavLinkObjectRegistered;
|
|
|
|
/** Delegate executed when a custom navigation link is unregistered from the repository. */
|
|
FOnCustomNavLinkObjectRegistrationEvent OnCustomNavLinkObjectUnregistered;
|
|
|
|
private:
|
|
|
|
/** List of registered navigation relevant objects. */
|
|
TArray<TWeakInterfacePtr<INavRelevantInterface>> NavRelevantObjects;
|
|
|
|
/** List of registered custom navigation link objects. */
|
|
TArray<TWeakInterfacePtr<INavLinkCustomInterface>> CustomLinkObjects;
|
|
};
|