Files
UnrealEngine/Engine/Source/Developer/DeveloperToolSettings/Private/CookerSettings.cpp
2025-05-18 13:04:45 +08:00

98 lines
4.3 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "CookerSettings.h"
#include "UObject/UnrealType.h"
#include "HAL/IConsoleManager.h"
#include UE_INLINE_GENERATED_CPP_BY_NAME(CookerSettings)
DEFINE_LOG_CATEGORY_STATIC(LogCookerSettings, Log, All);
UCookerSettings::UCookerSettings(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
, bEnableCookOnTheSide(false)
, bEnableBuildDDCInBackground(false)
, bIterativeCookingForLaunchOn(false)
, bCookOnTheFlyForLaunchOn(false)
, CookProgressDisplayMode(ECookProgressDisplayMode::RemainingPackages)
, bIgnoreIniSettingsOutOfDateForIteration(false)
, bIgnoreScriptPackagesOutOfDateForIteration(false)
, bCompileBlueprintsInDevelopmentMode(true)
, BlueprintComponentDataCookingMethod(EBlueprintComponentDataCookingMethod::EnabledBlueprintsOnly)
, bAllowCookedDataInEditorBuilds(false)
, bCookBlueprintComponentTemplateData(false)
{
SectionName = TEXT("Cooker");
DefaultASTCQualityBySpeed = 2; // Medium preset
DefaultASTCQualityBySize = 3; // 6x6
DefaultASTCQualityBySizeHQ = 4; // 4x4
{
static IConsoleVariable* ASTCTextureCompressorCVar = IConsoleManager::Get().FindConsoleVariable(TEXT("cook.ASTCTextureCompressor"));
DefaultASTCCompressor = (ASTCTextureCompressorCVar && ASTCTextureCompressorCVar->GetInt() != 0) ? ETextureFormatASTCCompressor::Arm : ETextureFormatASTCCompressor::IntelISPC;
}
}
void UCookerSettings::PostInitProperties()
{
Super::PostInitProperties();
UObject::UpdateClassesExcludedFromDedicatedServer(ClassesExcludedOnDedicatedServer, ModulesExcludedOnDedicatedServer);
UObject::UpdateClassesExcludedFromDedicatedClient(ClassesExcludedOnDedicatedClient, ModulesExcludedOnDedicatedClient);
// In the 'false' case, we previously deferred to the 'EnabledBlueprintsOnly' method, which is the current default, so we don't need to handle it here.
if (bCookBlueprintComponentTemplateData)
{
BlueprintComponentDataCookingMethod = EBlueprintComponentDataCookingMethod::AllBlueprints;
}
}
#if WITH_EDITOR
void UCookerSettings::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent)
{
static FName NAME_ClassesExcludedOnDedicatedServer = GET_MEMBER_NAME_CHECKED(UCookerSettings, ClassesExcludedOnDedicatedServer);
static FName NAME_ClassesExcludedOnDedicatedClient = GET_MEMBER_NAME_CHECKED(UCookerSettings, ClassesExcludedOnDedicatedClient);
static FName NAME_ModulesExcludedOnDedicatedServer(TEXT("ModulesExcludedOnDedicatedServer"));
static FName NAME_ModulesExcludedOnDedicatedClient(TEXT("ModulesExcludedOnDedicatedClient"));
static FName NAME_bCookBlueprintComponentTemplateData = GET_MEMBER_NAME_CHECKED(UCookerSettings, bCookBlueprintComponentTemplateData);
static FName NAME_BlueprintComponentDataCookingMethod = GET_MEMBER_NAME_CHECKED(UCookerSettings, BlueprintComponentDataCookingMethod);
if(PropertyChangedEvent.Property)
{
if(PropertyChangedEvent.Property->GetFName() == NAME_ClassesExcludedOnDedicatedServer
|| PropertyChangedEvent.Property->GetFName() == NAME_ModulesExcludedOnDedicatedServer)
{
UObject::UpdateClassesExcludedFromDedicatedServer(ClassesExcludedOnDedicatedServer, ModulesExcludedOnDedicatedServer);
}
else if(PropertyChangedEvent.Property->GetFName() == NAME_ClassesExcludedOnDedicatedClient
|| PropertyChangedEvent.Property->GetFName() == NAME_ModulesExcludedOnDedicatedClient)
{
UObject::UpdateClassesExcludedFromDedicatedClient(ClassesExcludedOnDedicatedClient, ModulesExcludedOnDedicatedClient);
}
else if (bCookBlueprintComponentTemplateData
&& PropertyChangedEvent.Property->GetFName() == NAME_BlueprintComponentDataCookingMethod)
{
UE_LOG(LogCookerSettings, Warning, TEXT("\'%s\' has been deprecated in favor of \'%s\', please remove \'%s\' from %s"),
*NAME_bCookBlueprintComponentTemplateData.ToString(),
*NAME_BlueprintComponentDataCookingMethod.ToString(),
*NAME_bCookBlueprintComponentTemplateData.ToString(),
*GetDefaultConfigFilename());
if (const FBoolProperty* OldProperty = FindFieldChecked<FBoolProperty>(GetClass(), NAME_bCookBlueprintComponentTemplateData))
{
OldProperty->SetPropertyValue_InContainer(this, false);
UpdateSinglePropertyInConfigFile(OldProperty, GetDefaultConfigFilename());
}
}
else
{
ExportValuesToConsoleVariables(PropertyChangedEvent.Property);
}
}
}
#endif