// 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 PCIterator(ServerWorld); PCIterator; ++PCIterator) { if (APlayerController* PC = *PCIterator) { if (ULyraControllerComponent_CharacterParts* CosmeticComponent = PC->FindComponentByClass()) { 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