Files
UnrealEngineUWP/Engine/Source/Developer/CQTest/Private/Components/PIENetworkTestStateRestorer.cpp
sebastian lewicki 695acb1980 Upgrading the CQTest plugin to an Engine module
Introducing the CQTestEnhancedInput plugin as this requires use of the EnhancedInput Engine Plugin (Engine modules cannot make use of the Engine Plugin)
#jira UE-217806
#rb Devin.Doucette, Jerome.Delattre, rob.huyett, sean.sweeney

[CL 36039088 by sebastian lewicki in ue5-main branch]
2024-09-05 10:24:20 -04:00

62 lines
1.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "Components/PIENetworkTestStateRestorer.h"
#include "GameMapsSettings.h"
#include "GameFramework/GameMode.h"
#include "GameFramework/WorldSettings.h"
DEFINE_LOG_CATEGORY_STATIC(LogPieNetworkStateRestorer, Log, All);
FPIENetworkTestStateRestorer::FPIENetworkTestStateRestorer(const FSoftClassPath InGameInstanceClass, const TSubclassOf<AGameModeBase> InGameMode)
{
check(GWorld);
if (InGameInstanceClass.IsValid())
{
UGameMapsSettings* GameMapSettings = GetMutableDefault<UGameMapsSettings>();
if (GameMapSettings)
{
OriginalGameInstance = GameMapSettings->GameInstanceClass;
GameMapSettings->GameInstanceClass = InGameInstanceClass;
}
else
{
UE_LOG(LogPieNetworkStateRestorer, Error, TEXT("Unable to get UGameMapsSettings in when creating FPIENetworkTestStateRestorer"));
}
}
if (GWorld->GetWorldSettings() != nullptr)
{
OriginalGameMode = GWorld->GetWorldSettings()->DefaultGameMode;
GWorld->GetWorldSettings()->DefaultGameMode = InGameMode;
}
if (!GWorld->HasAllFlags(RF_WasLoaded))
{
GWorld->SetFlags(RF_WasLoaded);
SetWasLoadedFlag = true;
}
}
void FPIENetworkTestStateRestorer::Restore() {
if (GWorld && SetWasLoadedFlag)
{
GWorld->ClearFlags(RF_WasLoaded);
}
if (OriginalGameInstance.IsValid())
{
UGameMapsSettings* GameMapSettings = GetMutableDefault<UGameMapsSettings>();
if (GameMapSettings)
{
GameMapSettings->GameInstanceClass = OriginalGameInstance;
}
else
{
UE_LOG(LogPieNetworkStateRestorer, Error, TEXT("Unable to get UGameMapsSettings when destroying FPIENetworkTestStateRestorer"));
}
}
if (GWorld && OriginalGameMode != nullptr)
{
GWorld->GetWorldSettings()->DefaultGameMode = OriginalGameMode;
}
}