2022-04-19 13:19:03 -04:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
|
|
|
|
|
|
#include "LandscapeUtils.h"
|
|
|
|
|
|
2022-05-27 16:50:43 -04:00
|
|
|
#include "Engine/Level.h"
|
|
|
|
|
|
|
|
|
|
#if WITH_EDITOR
|
2022-05-31 01:21:48 -04:00
|
|
|
#include "EditorDirectories.h"
|
|
|
|
|
#include "ObjectTools.h"
|
2022-05-27 16:50:43 -04:00
|
|
|
#endif
|
|
|
|
|
|
2022-04-19 13:19:03 -04:00
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
2022-05-27 16:50:43 -04:00
|
|
|
#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;
|
|
|
|
|
|
2022-05-31 01:21:48 -04:00
|
|
|
OutLayerObjectName = FName(*FString::Printf(TEXT("%s_LayerInfo"), *ObjectTools::SanitizeInvalidChars(*InLayerName.ToString(), INVALID_LONGPACKAGE_CHARACTERS)));
|
2022-05-27 16:50:43 -04:00
|
|
|
FPackageName::TryConvertFilenameToLongPackageName(SharedAssetsPath / OutLayerObjectName.ToString(), PackageName);
|
|
|
|
|
|
|
|
|
|
while (FPackageName::DoesPackageExist(PackageName, &PackageFilename))
|
|
|
|
|
{
|
2022-05-31 01:21:48 -04:00
|
|
|
OutLayerObjectName = FName(*FString::Printf(TEXT("%s_LayerInfo_%d"), *ObjectTools::SanitizeInvalidChars(*InLayerName.ToString(), INVALID_LONGPACKAGE_CHARACTERS), Suffix));
|
2022-05-27 16:50:43 -04:00
|
|
|
if (!FPackageName::TryConvertFilenameToLongPackageName(SharedAssetsPath / OutLayerObjectName.ToString(), PackageName))
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Suffix++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return PackageName;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif //!WITH_EDITOR
|
|
|
|
|
|
2022-05-31 01:21:48 -04:00
|
|
|
} // end namespace UE::Landscape
|