80 lines
1.9 KiB
C++
80 lines
1.9 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "GameUIManagerSubsystem.h"
|
|
|
|
#include "Containers/Array.h"
|
|
#include "Engine/GameInstance.h"
|
|
#include "GameUIPolicy.h"
|
|
#include "Misc/AssertionMacros.h"
|
|
#include "Templates/Casts.h"
|
|
#include "Templates/SubclassOf.h"
|
|
#include "UObject/Object.h"
|
|
#include "UObject/UObjectHash.h"
|
|
|
|
class FSubsystemCollectionBase;
|
|
class UClass;
|
|
|
|
void UGameUIManagerSubsystem::Initialize(FSubsystemCollectionBase& Collection)
|
|
{
|
|
Super::Initialize(Collection);
|
|
|
|
if (!CurrentPolicy && !DefaultUIPolicyClass.IsNull())
|
|
{
|
|
TSubclassOf<UGameUIPolicy> PolicyClass = DefaultUIPolicyClass.LoadSynchronous();
|
|
SwitchToPolicy(NewObject<UGameUIPolicy>(this, PolicyClass));
|
|
}
|
|
}
|
|
|
|
void UGameUIManagerSubsystem::Deinitialize()
|
|
{
|
|
Super::Deinitialize();
|
|
|
|
SwitchToPolicy(nullptr);
|
|
}
|
|
|
|
bool UGameUIManagerSubsystem::ShouldCreateSubsystem(UObject* Outer) const
|
|
{
|
|
if (!CastChecked<UGameInstance>(Outer)->IsDedicatedServerInstance())
|
|
{
|
|
TArray<UClass*> ChildClasses;
|
|
GetDerivedClasses(GetClass(), ChildClasses, false);
|
|
|
|
// Only create an instance if there is no override implementation defined elsewhere
|
|
return ChildClasses.Num() == 0;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void UGameUIManagerSubsystem::NotifyPlayerAdded(UCommonLocalPlayer* LocalPlayer)
|
|
{
|
|
if (ensure(LocalPlayer) && CurrentPolicy)
|
|
{
|
|
CurrentPolicy->NotifyPlayerAdded(LocalPlayer);
|
|
}
|
|
}
|
|
|
|
void UGameUIManagerSubsystem::NotifyPlayerRemoved(UCommonLocalPlayer* LocalPlayer)
|
|
{
|
|
if (LocalPlayer && CurrentPolicy)
|
|
{
|
|
CurrentPolicy->NotifyPlayerRemoved(LocalPlayer);
|
|
}
|
|
}
|
|
|
|
void UGameUIManagerSubsystem::NotifyPlayerDestroyed(UCommonLocalPlayer* LocalPlayer)
|
|
{
|
|
if (LocalPlayer && CurrentPolicy)
|
|
{
|
|
CurrentPolicy->NotifyPlayerDestroyed(LocalPlayer);
|
|
}
|
|
}
|
|
|
|
void UGameUIManagerSubsystem::SwitchToPolicy(UGameUIPolicy* InPolicy)
|
|
{
|
|
if (CurrentPolicy != InPolicy)
|
|
{
|
|
CurrentPolicy = InPolicy;
|
|
}
|
|
}
|