95 lines
2.5 KiB
C++
95 lines
2.5 KiB
C++
|
// 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
|