Files
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

121 lines
3.2 KiB
C#

// Copyright Epic Games, Inc. All Rights Reserved.
using System;
using System.Collections.Generic;
using UnrealBuildTool;
namespace Gauntlet
{
internal interface ICookedContentProvider
{
ContentFolder GetCookedContent();
}
internal class ContentProviderConfig
{
public UnrealTargetPlatform TargetPlatform { get; set; }
public string TargetPlatformName { get; set; }
public string ProjectName { get; set; }
public bool IsZenStoreUsed { get; set; }
}
internal class BaseCookedContentProvider(ContentProviderConfig Config) : ICookedContentProvider
{
protected ContentProviderConfig Config = Config;
public virtual ContentFolder GetCookedContent()
{
ContentFolder CookedContent = new ContentFolder(Config.TargetPlatformName)
{
SubFolders =
[
new ContentFolder("Engine")
{
SubFolders = new List<ContentFolder>
{
new("Content")
}
},
new ContentFolder(Config.ProjectName)
{
SubFolders = new List<ContentFolder>
{
new("Content"),
new("Metadata")
},
Files = new List<string> { "AssetRegistry.bin" }
}
]
};
if (Config.IsZenStoreUsed)
{
CookedContent.Files.Add("ue.projectstore");
}
else
{
foreach (ContentFolder Folder in CookedContent.SubFolders)
{
Folder.SubFolders.Add(new("Plugins"));
}
}
return CookedContent;
}
}
internal class WindowsCookedContentProvider(ContentProviderConfig Config) : BaseCookedContentProvider(Config)
{
public override ContentFolder GetCookedContent()
{
ContentFolder CookedContent = base.GetCookedContent();
CookedContent.SubFolders[0].Files = ["GlobalShaderCache-PCD3D_SM5.bin", "GlobalShaderCache-VULKAN_SM6.bin", "GlobalShaderCache-PCD3D_SM6.bin"];
return CookedContent;
}
}
internal class LinuxCookedContentProvider(ContentProviderConfig Config) : BaseCookedContentProvider(Config)
{
public override ContentFolder GetCookedContent()
{
ContentFolder CookedContent = base.GetCookedContent();
CookedContent.SubFolders[0].Files = ["GlobalShaderCache-VULKAN_SM6.bin"];
return CookedContent;
}
}
internal class MacCookedContentProvider(ContentProviderConfig Config) : BaseCookedContentProvider(Config)
{
public override ContentFolder GetCookedContent()
{
ContentFolder CookedContent = base.GetCookedContent();
CookedContent.SubFolders[0].Files = ["GlobalShaderCache-METAL_SM5.bin"];
return CookedContent;
}
}
internal class CookedContentProviderFactory(ContentProviderConfig Config)
{
private readonly UnrealTargetPlatform TargetPlatform = Config.TargetPlatform;
private readonly Dictionary<UnrealTargetPlatform, ICookedContentProvider> ProvidersByPlatform = new()
{
{ UnrealTargetPlatform.Win64, new WindowsCookedContentProvider(Config) },
{ UnrealTargetPlatform.Linux, new LinuxCookedContentProvider(Config) },
{ UnrealTargetPlatform.Mac, new MacCookedContentProvider(Config) }
};
public ICookedContentProvider GetProvider()
{
if (!ProvidersByPlatform.TryGetValue(TargetPlatform, out ICookedContentProvider Provider))
{
throw new NotSupportedException($"Unsupported platform: {TargetPlatform}");
}
return Provider;
}
}
}