// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Subsystems/GameInstanceSubsystem.h" #include "UObject/SoftObjectPtr.h" #include "GameUIManagerSubsystem.generated.h" #define UE_API COMMONGAME_API class FSubsystemCollectionBase; class UCommonLocalPlayer; class UGameUIPolicy; class UObject; /** * This manager is intended to be replaced by whatever your game needs to * actually create, so this class is abstract to prevent it from being created. * * If you just need the basic functionality you will start by sublcassing this * subsystem in your own game. */ UCLASS(MinimalAPI, Abstract, config = Game) class UGameUIManagerSubsystem : public UGameInstanceSubsystem { GENERATED_BODY() public: UGameUIManagerSubsystem() { } UE_API virtual void Initialize(FSubsystemCollectionBase& Collection) override; UE_API virtual void Deinitialize() override; UE_API virtual bool ShouldCreateSubsystem(UObject* Outer) const override; const UGameUIPolicy* GetCurrentUIPolicy() const { return CurrentPolicy; } UGameUIPolicy* GetCurrentUIPolicy() { return CurrentPolicy; } UE_API virtual void NotifyPlayerAdded(UCommonLocalPlayer* LocalPlayer); UE_API virtual void NotifyPlayerRemoved(UCommonLocalPlayer* LocalPlayer); UE_API virtual void NotifyPlayerDestroyed(UCommonLocalPlayer* LocalPlayer); protected: UE_API void SwitchToPolicy(UGameUIPolicy* InPolicy); private: UPROPERTY(Transient) TObjectPtr CurrentPolicy = nullptr; UPROPERTY(config, EditAnywhere) TSoftClassPtr DefaultUIPolicyClass; }; #undef UE_API