// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "MassEntityTypes.h" #include "MassProcessor.h" #include "UObject/ObjectKey.h" #include "MassObserverRegistry.generated.h" #define UE_API MASSENTITY_API struct FMassObserverManager; /** * A wrapper type for a TArray to support having map-of-arrays UPROPERTY members in FMassEntityObserverClassesMap */ USTRUCT(meta = (Deprecated = "5.7", DepracationMessage = "FMassProcessorClassCollection is no longer being used and will be removed in the upcoming engine released")) struct FMassProcessorClassCollection { GENERATED_BODY() UPROPERTY() TArray> ClassCollection; }; /** * A wrapper type for a TMap to support having array-of-maps UPROPERTY members in UMassObserverRegistry */ USTRUCT(meta = (Deprecated = "5.7", DepracationMessage = "FMassEntityObserverClassesMap is no longer being used and will be removed in the upcoming engine released")) struct FMassEntityObserverClassesMap { GENERATED_BODY() /** a helper accessor simplifying access while still keeping Container private */ const TMap, FMassProcessorClassCollection>& operator*() const { return Container; } TMap, FMassProcessorClassCollection>& operator*() { return Container; } private: UPROPERTY() TMap, FMassProcessorClassCollection> Container; }; UCLASS(MinimalAPI) class UMassObserverRegistry : public UObject { GENERATED_BODY() public: UE_API UMassObserverRegistry(); static UMassObserverRegistry& GetMutable() { return *GetMutableDefault(); } static const UMassObserverRegistry& Get() { return *GetDefault(); } UE_API void RegisterObserver(TNotNull ObservedType, uint8 OperationFlags, TSubclassOf ObserverClass); void RegisterObserver(TNotNull ObservedType, EMassObservedOperationFlags OperationFlags, TSubclassOf ObserverClass) { RegisterObserver(ObservedType, static_cast(OperationFlags), ObserverClass); } UE_API void RegisterObserver(const UScriptStruct& ObservedType, EMassObservedOperation Operation, TSubclassOf ObserverClass); using FObserverClassesMap = TMap, TArray>; protected: void OnModulePackagesUnloaded(TConstArrayView Packages); FDelegateHandle ModulesUnloadedHandle; friend FMassObserverManager; FObserverClassesMap FragmentObserverMaps[static_cast(EMassObservedOperation::MAX)]; FObserverClassesMap TagObserverMaps[static_cast(EMassObservedOperation::MAX)]; UE_DEPRECATED(5.7, "Use FragmentObserverMaps instead") UPROPERTY() FMassEntityObserverClassesMap FragmentObservers[(uint8)EMassObservedOperation::MAX]; UE_DEPRECATED(5.7, "Use TagObserverMaps instead") UPROPERTY() FMassEntityObserverClassesMap TagObservers[(uint8)EMassObservedOperation::MAX]; }; #undef UE_API