Files
UnrealEngine/Engine/Source/Editor/UnrealEd/Private/Cooker/CookSandbox.h
2025-05-18 13:04:45 +08:00

83 lines
2.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Containers/ArrayView.h"
#include "Containers/StringView.h"
#include "Containers/UnrealString.h"
#include "IPlatformFileSandboxWrapper.h"
#include "Templates/SharedPointer.h"
#include "Templates/UniquePtr.h"
class IPlugin;
namespace UE::Cook
{
struct FCookSandboxConvertCookedPathToPackageNameContext;
/**
* A wrapper around FSandboxPlatformFile that provides a similar interface but also handles cook-specific
* functionality like REMAPPED_PLUGINS
*/
class FCookSandbox
{
public:
FCookSandbox(FStringView OutputDirectory, TArray<TSharedRef<IPlugin>>& InPluginsToRemap);
// ISandboxPlatformFile
const FString& GetSandboxDirectory() const;
const FString& GetGameSandboxDirectoryName() const;
FString ConvertToAbsolutePathForExternalAppForWrite(const TCHAR* Filename) const;
FString ConvertFromSandboxPath(const TCHAR* Filename) const;
// Cooker API functions that handle the Platform mapping on top of ISandboxPlatformFile
FString GetSandboxDirectory(const FString& PlatformName) const;
FString ConvertToAbsolutePathForExternalAppForWrite(const TCHAR* Filename, const FString& PlatformName) const;
FString ConvertFromSandboxPathInPlatformRoot(const TCHAR* Filename, FStringView PlatformSandboxRootDir) const;
// Cooker API functions on top of ISandboxPlatformFile
FSandboxPlatformFile& GetSandboxPlatformFile();
FString ConvertToFullSandboxPath(const FString& FileName, bool bForWrite) const;
FString ConvertToFullPlatformSandboxPath(const FString& FileName, bool bForWrite,
const FString& PlatformName) const;
FString ConvertToFullSandboxPathInPlatformRoot(const FString& FileName, bool bForWrite,
FStringView PlatformSandboxRootdir) const;
bool TryConvertUncookedFilenameToCookedRemappedPluginFilename(FStringView FileName, FString& OutCookedFileName,
FStringView PlatformSandboxRootdir = FStringView()) const;
void FillContext(FCookSandboxConvertCookedPathToPackageNameContext& Context) const;
FString& ConvertCookedPathToUncookedPath(FStringView CookedPath,
FCookSandboxConvertCookedPathToPackageNameContext& Context) const;
FName ConvertCookedPathToPackageName(FStringView CookedPath,
FCookSandboxConvertCookedPathToPackageNameContext& Context) const;
FString ConvertPackageNameToCookedPath(FStringView PackageName,
FCookSandboxConvertCookedPathToPackageNameContext& Context) const;
private:
struct FPluginData
{
TSharedPtr<IPlugin> Plugin;
FString NormalizedRootDir;
};
TUniquePtr<FSandboxPlatformFile> SandboxFile;
TArray<FPluginData> PluginsToRemap;
};
struct FCookSandboxConvertCookedPathToPackageNameContext
{
FStringView SandboxRootDir;
FStringView UncookedRelativeRootDir;
FStringView SandboxProjectDir;
FStringView UncookedRelativeProjectDir;
FString ScratchSandboxProjectDir;
FString ScratchUncookedRelativeProjectDir;
FString ScratchFileName;
FString ScratchPackageName;
};
} // namespace UE::Cook