// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "MassEntityTypes.h" #include "MassProcessor.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() struct FMassProcessorClassCollection { GENERATED_BODY() UPROPERTY() TArray> ClassCollection; }; /** * A wrapper type for a TMap to support having array-of-maps UPROPERTY members in UMassObserverRegistry */ USTRUCT() 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(const UScriptStruct& ObservedType, const EMassObservedOperation Operation, TSubclassOf ObserverClass); protected: friend FMassObserverManager; UPROPERTY() FMassEntityObserverClassesMap FragmentObservers[(uint8)EMassObservedOperation::MAX]; UPROPERTY() FMassEntityObserverClassesMap TagObservers[(uint8)EMassObservedOperation::MAX]; }; #undef UE_API