Files
UnrealEngineUWP/Engine/Source/Runtime/Landscape/Private/LandscapeUtils.cpp
jonathan bard 400e9290b5 Sanitized suggested landscape layer info package name when creating a landscape layer info file associated with a layer name (which doesn't have the same restrictions that package names have)
#rb luc.eygasier
#jira UE-154106
#preflight 629516933f058e13b5ef0f4f

#ROBOMERGE-AUTHOR: jonathan.bard
#ROBOMERGE-SOURCE: CL 20432616 via CL 20432663 via CL 20432668
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v949-20362246)

[CL 20434170 by jonathan bard in ue5-main branch]
2022-05-31 01:21:48 -04:00

68 lines
1.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "LandscapeUtils.h"
#include "Engine/Level.h"
#if WITH_EDITOR
#include "EditorDirectories.h"
#include "ObjectTools.h"
#endif
namespace UE::Landscape
{
bool DoesPlatformSupportEditLayers(EShaderPlatform InShaderPlatform)
{
// Edit layers work on the GPU and are only available on SM5+ and in the editor :
return IsFeatureLevelSupported(InShaderPlatform, ERHIFeatureLevel::SM5)
&& !IsConsolePlatform(InShaderPlatform)
&& !IsMobilePlatform(InShaderPlatform);
}
#if WITH_EDITOR
FString GetSharedAssetsPath(const FString& InPath)
{
FString Path = InPath + TEXT("_sharedassets/");
if (Path.StartsWith("/Temp/"))
{
Path = FEditorDirectories::Get().GetLastDirectory(ELastDirectory::LEVEL) / Path.RightChop(FString("/Temp/").Len());
}
return Path;
}
FString GetSharedAssetsPath(const ULevel* InLevel)
{
return GetSharedAssetsPath(InLevel->GetOutermost()->GetName());
}
FString GetLayerInfoObjectPackageName(const ULevel* InLevel, const FName& InLayerName, FName& OutLayerObjectName)
{
FString PackageName;
FString PackageFilename;
FString SharedAssetsPath = GetSharedAssetsPath(InLevel);
int32 Suffix = 1;
OutLayerObjectName = FName(*FString::Printf(TEXT("%s_LayerInfo"), *ObjectTools::SanitizeInvalidChars(*InLayerName.ToString(), INVALID_LONGPACKAGE_CHARACTERS)));
FPackageName::TryConvertFilenameToLongPackageName(SharedAssetsPath / OutLayerObjectName.ToString(), PackageName);
while (FPackageName::DoesPackageExist(PackageName, &PackageFilename))
{
OutLayerObjectName = FName(*FString::Printf(TEXT("%s_LayerInfo_%d"), *ObjectTools::SanitizeInvalidChars(*InLayerName.ToString(), INVALID_LONGPACKAGE_CHARACTERS), Suffix));
if (!FPackageName::TryConvertFilenameToLongPackageName(SharedAssetsPath / OutLayerObjectName.ToString(), PackageName))
{
break;
}
Suffix++;
}
return PackageName;
}
#endif //!WITH_EDITOR
} // end namespace UE::Landscape