RealtimeStyleTransferRuntime/Source/LyraGame/Cosmetics/LyraCosmeticDeveloperSettin...

95 lines
2.5 KiB
C++
Raw Permalink Normal View History

2022-05-23 18:41:30 +00:00
// Copyright Epic Games, Inc. All Rights Reserved.
#include "LyraCosmeticDeveloperSettings.h"
#include "Misc/App.h"
#include "Widgets/Notifications/SNotificationList.h"
#include "Framework/Notifications/NotificationManager.h"
#include "System/LyraDevelopmentStatics.h"
#include "Engine/World.h"
#include "TimerManager.h"
#include "Engine/Engine.h"
#include "GameFramework/PlayerController.h"
#include "LyraControllerComponent_CharacterParts.h"
#include "EngineUtils.h"
#define LOCTEXT_NAMESPACE "LyraCheats"
ULyraCosmeticDeveloperSettings::ULyraCosmeticDeveloperSettings()
{
}
FName ULyraCosmeticDeveloperSettings::GetCategoryName() const
{
return FApp::GetProjectName();
}
#if WITH_EDITOR
void ULyraCosmeticDeveloperSettings::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent)
{
Super::PostEditChangeProperty(PropertyChangedEvent);
ApplySettings();
}
void ULyraCosmeticDeveloperSettings::PostReloadConfig(FProperty* PropertyThatWasLoaded)
{
Super::PostReloadConfig(PropertyThatWasLoaded);
ApplySettings();
}
void ULyraCosmeticDeveloperSettings::PostInitProperties()
{
Super::PostInitProperties();
ApplySettings();
}
void ULyraCosmeticDeveloperSettings::ApplySettings()
{
if (GIsEditor && (GEngine != nullptr))
{
ReapplyLoadoutIfInPIE();
}
}
void ULyraCosmeticDeveloperSettings::ReapplyLoadoutIfInPIE()
{
#if WITH_SERVER_CODE
// Update the loadout on all players
UWorld* ServerWorld = ULyraDevelopmentStatics::FindPlayInEditorAuthorityWorld();
if (ServerWorld != nullptr)
{
ServerWorld->GetTimerManager().SetTimerForNextTick(FTimerDelegate::CreateLambda([=]()
{
for (TActorIterator<APlayerController> PCIterator(ServerWorld); PCIterator; ++PCIterator)
{
if (APlayerController* PC = *PCIterator)
{
if (ULyraControllerComponent_CharacterParts* CosmeticComponent = PC->FindComponentByClass<ULyraControllerComponent_CharacterParts>())
{
CosmeticComponent->ApplyDeveloperSettings();
}
}
}
}));
}
#endif // WITH_SERVER_CODE
}
void ULyraCosmeticDeveloperSettings::OnPlayInEditorStarted() const
{
// Show a notification toast to remind the user that there's an experience override set
if (CheatCosmeticCharacterParts.Num() > 0)
{
FNotificationInfo Info(LOCTEXT("CosmeticOverrideActive", "Applying Cosmetic Override"));
Info.ExpireDuration = 2.0f;
FSlateNotificationManager::Get().AddNotification(Info);
}
}
#endif // WITH_EDITOR
#undef LOCTEXT_NAMESPACE