mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-24 20:19:49 +02:00
feat: canon interface
This commit is contained in:
1 parent
90c5c16b00
commit
63d27aec64
8 files changed
+74
-263
No files matched your search
@@ -1,18 +1,26 @@
|
|||||||
|
using System.Data;
|
||||||
|
using AssetRipper.TextureDecoder.Rgb.Channels;
|
||||||
using Blitzkit;
|
using Blitzkit;
|
||||||
using BlitzKit.CLI.Models;
|
using BlitzKit.CLI.Models;
|
||||||
using BlitzKit.CLI.Utils;
|
using BlitzKit.CLI.Utils;
|
||||||
using CommunityToolkit.HighPerformance;
|
using CommunityToolkit.HighPerformance;
|
||||||
using CommunityToolkit.HighPerformance.Helpers;
|
using CommunityToolkit.HighPerformance.Helpers;
|
||||||
|
using CUE4Parse;
|
||||||
using CUE4Parse_Conversion;
|
using CUE4Parse_Conversion;
|
||||||
using CUE4Parse_Conversion.Animations;
|
using CUE4Parse_Conversion.Animations;
|
||||||
using CUE4Parse_Conversion.Meshes;
|
using CUE4Parse_Conversion.Meshes;
|
||||||
using CUE4Parse_Conversion.Meshes.glTF;
|
using CUE4Parse_Conversion.Meshes.glTF;
|
||||||
using CUE4Parse_Conversion.Textures;
|
using CUE4Parse_Conversion.Textures;
|
||||||
using CUE4Parse_Conversion.UEFormat.Enums;
|
using CUE4Parse_Conversion.UEFormat.Enums;
|
||||||
|
using CUE4Parse.FileProvider.Objects;
|
||||||
|
using CUE4Parse.UE4.Assets.Exports;
|
||||||
using CUE4Parse.UE4.Assets.Exports.Engine;
|
using CUE4Parse.UE4.Assets.Exports.Engine;
|
||||||
using CUE4Parse.UE4.Assets.Exports.Material;
|
using CUE4Parse.UE4.Assets.Exports.Material;
|
||||||
using CUE4Parse.UE4.Assets.Exports.StaticMesh;
|
using CUE4Parse.UE4.Assets.Exports.StaticMesh;
|
||||||
using CUE4Parse.UE4.Assets.Exports.Texture;
|
using CUE4Parse.UE4.Assets.Exports.Texture;
|
||||||
|
using CUE4Parse.UE4.Assets.Objects;
|
||||||
|
using CUE4Parse.UE4.Assets.Objects.Properties;
|
||||||
|
using CUE4Parse.UE4.Assets.Utils;
|
||||||
using CUE4Parse.UE4.Objects.UObject;
|
using CUE4Parse.UE4.Objects.UObject;
|
||||||
using CUE4Parse.UE4.Readers;
|
using CUE4Parse.UE4.Readers;
|
||||||
using CUE4Parse.UE4.Writers;
|
using CUE4Parse.UE4.Writers;
|
||||||
@@ -40,7 +48,7 @@ namespace BlitzKit.CLI.Functions
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MangleNation(VfsDirectory nation)
|
void MangleNation(VFS nation)
|
||||||
{
|
{
|
||||||
foreach (var tankDir in nation.Directories)
|
foreach (var tankDir in nation.Directories)
|
||||||
{
|
{
|
||||||
@@ -56,61 +64,17 @@ namespace BlitzKit.CLI.Functions
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Tank? MangleTank(VfsDirectory tankDir)
|
Tank? MangleTank(VFS tankDir)
|
||||||
{
|
{
|
||||||
var pdaName = $"PDA_{tankDir.Name}";
|
var pdaName = $"PDA_{tankDir.Name}";
|
||||||
var pda = tankDir.GetUasset($"{pdaName}.uasset").Get(pdaName);
|
var pda = provider.LoadObject($"{tankDir.Path}/{pdaName}.{pdaName}");
|
||||||
var tankId = pda.GetName("TankId");
|
var hulls = PropertyUtil.Get<UDataTable>(pda, "DT_Hulls");
|
||||||
var isDev = pda.TryGetBool("bInDevelopment") ?? true;
|
UDataTableUtility.TryGetDataTableRow(hulls, "hull", StringComparison.Ordinal, out var hull);
|
||||||
|
var hullVisualData = PropertyUtil.Get<UObject>(hull, "VisualData");
|
||||||
|
var hullMeshSettings = PropertyUtil.Get<FStructFallback>(hullVisualData, "MeshSettings");
|
||||||
|
var hullCollision = PropertyUtil.Get<UStaticMesh>(hullMeshSettings, "CollisionMesh");
|
||||||
|
|
||||||
if (isDev)
|
return new() { Id = "" };
|
||||||
{
|
|
||||||
PrettyLog.Warn($"Skipping dev tank: {tankId}");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
PrettyLog.Success($"Mangling tank: {tankId}");
|
|
||||||
}
|
|
||||||
|
|
||||||
var hulls = pda.GetObjectDataTable("DT_Hulls");
|
|
||||||
var hull = hulls.GetRow("hull");
|
|
||||||
var hullVisual = hull.GetObject("VisualData");
|
|
||||||
var hullMeshSettings = hullVisual.GetStruct("MeshSettings");
|
|
||||||
var hullMesh = hullMeshSettings.GetSoftObject<UStaticMesh>("Mesh");
|
|
||||||
|
|
||||||
MonoGltf hullGltf = new(hullMesh);
|
|
||||||
|
|
||||||
// Gltf gltf = new(hullMesh.Name, hullLod0, null, new() { });
|
|
||||||
// FArchiveWriter archiveWriter = new();
|
|
||||||
|
|
||||||
// gltf.Save(EMeshFormat.Gltf2, archiveWriter);
|
|
||||||
|
|
||||||
// MeshExporter hullMeshExporter = new(
|
|
||||||
// hullMesh,
|
|
||||||
// new()
|
|
||||||
// {
|
|
||||||
// MeshFormat = EMeshFormat.Gltf2,
|
|
||||||
// ExportMaterials = true,
|
|
||||||
// ExportMorphTargets = false,
|
|
||||||
// LodFormat = ELodFormat.FirstLod,
|
|
||||||
// TextureFormat = ETextureFormat.Jpeg,
|
|
||||||
// SocketFormat = ESocketFormat.None,
|
|
||||||
// Platform = ETexturePlatform.DesktopMobile,
|
|
||||||
// }
|
|
||||||
// );
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// var hullLod0 = hullMeshExporter.MeshLods[0];
|
|
||||||
// var hullMeshData = hullLod0.FileData;
|
|
||||||
|
|
||||||
// File.WriteAllBytes($"../../temp/{tankId}.glb", hullMeshData);
|
|
||||||
|
|
||||||
// hullMeshExporter.TryWriteToDir(new("../../temp"), out _, out _);
|
|
||||||
|
|
||||||
return new() { Id = tankId };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Dictionary<string, CrewType> CrewTypes = new()
|
Dictionary<string, CrewType> CrewTypes = new()
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ namespace BlitzKit.CLI.Models
|
|||||||
private static readonly string LOCAL_MAPPINGS_PATH =
|
private static readonly string LOCAL_MAPPINGS_PATH =
|
||||||
"../../submodules/blitzkit-closed/blitz.usmap";
|
"../../submodules/blitzkit-closed/blitz.usmap";
|
||||||
|
|
||||||
public readonly VfsDirectory RootDirectory;
|
public readonly VFS RootDirectory;
|
||||||
|
|
||||||
public BlitzProvider()
|
public BlitzProvider()
|
||||||
: base(
|
: base(
|
||||||
@@ -25,7 +25,13 @@ namespace BlitzKit.CLI.Models
|
|||||||
versions: new(EGame.GAME_UE5_3)
|
versions: new(EGame.GAME_UE5_3)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
RootDirectory = new() { Name = "", provider = this };
|
RootDirectory = new()
|
||||||
|
{
|
||||||
|
ParentPath = "",
|
||||||
|
Path = "",
|
||||||
|
Name = "",
|
||||||
|
provider = this,
|
||||||
|
};
|
||||||
MappingsContainer = new FileUsmapTypeMappingsProvider(LOCAL_MAPPINGS_PATH);
|
MappingsContainer = new FileUsmapTypeMappingsProvider(LOCAL_MAPPINGS_PATH);
|
||||||
|
|
||||||
Initialize();
|
Initialize();
|
||||||
@@ -37,6 +43,7 @@ namespace BlitzKit.CLI.Models
|
|||||||
var path = gameFile.Path.Split('/');
|
var path = gameFile.Path.Split('/');
|
||||||
var lastPathSegment = path.Last();
|
var lastPathSegment = path.Last();
|
||||||
var directory = RootDirectory;
|
var directory = RootDirectory;
|
||||||
|
var parentPath = "";
|
||||||
|
|
||||||
foreach (var segment in path)
|
foreach (var segment in path)
|
||||||
{
|
{
|
||||||
@@ -52,10 +59,18 @@ namespace BlitzKit.CLI.Models
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
VfsDirectory newDirectory = new() { Name = segment, provider = this };
|
VFS newDirectory = new()
|
||||||
|
{
|
||||||
|
ParentPath = parentPath,
|
||||||
|
Path = parentPath == "" ? "" : $"{parentPath}{segment}",
|
||||||
|
Name = segment,
|
||||||
|
provider = this,
|
||||||
|
};
|
||||||
directory.AddDirectory(segment, newDirectory);
|
directory.AddDirectory(segment, newDirectory);
|
||||||
directory = newDirectory;
|
directory = newDirectory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
parentPath += $"{segment}/";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
using CUE4Parse.UE4.Assets.Exports.Engine;
|
|
||||||
using CUE4Parse.UE4.Assets.Objects;
|
|
||||||
|
|
||||||
namespace BlitzKit.CLI.Models
|
|
||||||
{
|
|
||||||
public class MappedUDataTable : MappedUObject
|
|
||||||
{
|
|
||||||
readonly Dictionary<string, FStructFallback> StructFallbacks = [];
|
|
||||||
|
|
||||||
public MappedUDataTable(UDataTable table)
|
|
||||||
: base(table.Properties)
|
|
||||||
{
|
|
||||||
foreach (var row in table.RowMap)
|
|
||||||
{
|
|
||||||
StructFallbacks.Add(row.Key.Text, row.Value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public MappedUObject GetRow(string name) => new(StructFallbacks[name].Properties);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,145 +0,0 @@
|
|||||||
using System.Collections;
|
|
||||||
using System.Collections.Frozen;
|
|
||||||
using System.Dynamic;
|
|
||||||
using CUE4Parse.FileProvider;
|
|
||||||
using CUE4Parse.FileProvider.Objects;
|
|
||||||
using CUE4Parse.UE4.Assets.Exports;
|
|
||||||
using CUE4Parse.UE4.Assets.Exports.Engine;
|
|
||||||
using CUE4Parse.UE4.Assets.Objects;
|
|
||||||
using CUE4Parse.UE4.Assets.Objects.Properties;
|
|
||||||
using CUE4Parse.UE4.Objects.UObject;
|
|
||||||
|
|
||||||
namespace BlitzKit.CLI.Models
|
|
||||||
{
|
|
||||||
public class MappedUObject : UObject
|
|
||||||
{
|
|
||||||
readonly Dictionary<string, NameProperty> Names = [];
|
|
||||||
readonly Dictionary<string, SoftObjectProperty> SoftObjects = [];
|
|
||||||
readonly Dictionary<string, ObjectProperty> Objects = [];
|
|
||||||
readonly Dictionary<string, StructProperty> Structs = [];
|
|
||||||
readonly Dictionary<string, BoolProperty> Booleans = [];
|
|
||||||
readonly Dictionary<string, FloatProperty> Floats = [];
|
|
||||||
readonly Dictionary<string, ArrayProperty> Arrays = [];
|
|
||||||
readonly Dictionary<string, TextProperty> Texts = [];
|
|
||||||
readonly Dictionary<string, IntProperty> Ints = [];
|
|
||||||
readonly Dictionary<string, MapProperty> Maps = [];
|
|
||||||
|
|
||||||
public MappedUObject(List<FPropertyTag> properties)
|
|
||||||
: base(properties)
|
|
||||||
{
|
|
||||||
foreach (var property in properties)
|
|
||||||
{
|
|
||||||
switch (property.Tag)
|
|
||||||
{
|
|
||||||
case NameProperty name:
|
|
||||||
{
|
|
||||||
Names.Add(property.Name.Text, name);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case SoftObjectProperty softObject:
|
|
||||||
{
|
|
||||||
SoftObjects.Add(property.Name.Text, softObject);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case ObjectProperty obj:
|
|
||||||
{
|
|
||||||
Objects.Add(property.Name.Text, obj);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case StructProperty structure:
|
|
||||||
{
|
|
||||||
Structs.Add(property.Name.Text, structure);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case BoolProperty boolean:
|
|
||||||
{
|
|
||||||
Booleans.Add(property.Name.Text, boolean);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case FloatProperty number:
|
|
||||||
{
|
|
||||||
Floats.Add(property.Name.Text, number);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case ArrayProperty array:
|
|
||||||
{
|
|
||||||
Arrays.Add(property.Name.Text, array);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case TextProperty text:
|
|
||||||
{
|
|
||||||
Texts.Add(property.Name.Text, text);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case IntProperty integer:
|
|
||||||
{
|
|
||||||
Ints.Add(property.Name.Text, integer);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case MapProperty map:
|
|
||||||
{
|
|
||||||
Maps.Add(property.Name.Text, map);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
throw new Exception($"Unhandled property type: {property}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public FPropertyTag GetAny(string name) =>
|
|
||||||
Properties.First(property => property.Name.Text == name);
|
|
||||||
|
|
||||||
public string GetName(string name) => Names[name].Value.Text;
|
|
||||||
|
|
||||||
public string? TryGetName(string name) =>
|
|
||||||
Names.TryGetValue(name, out var entry) ? entry.Value.Text : null;
|
|
||||||
|
|
||||||
public bool GetBool(string name) => Booleans[name].Value;
|
|
||||||
|
|
||||||
public bool? TryGetBool(string name) =>
|
|
||||||
Booleans.TryGetValue(name, out var entry) ? entry.Value : null;
|
|
||||||
|
|
||||||
public T GetSoftObject<T>(string name)
|
|
||||||
where T : UObject => SoftObjects[name].Value.Load<T>();
|
|
||||||
|
|
||||||
public MappedUObject GetMappedSoftObject(string name) =>
|
|
||||||
new(GetMappedSoftObject(name).Properties);
|
|
||||||
|
|
||||||
public MappedUObject? TryGetSoftObject(string name) =>
|
|
||||||
SoftObjects.TryGetValue(name, out var entry)
|
|
||||||
? new MappedUObject(entry.Value.Load().Properties)
|
|
||||||
: null;
|
|
||||||
|
|
||||||
public MappedUObject GetObject(string name) => new(Objects[name].Value!.Load()!.Properties);
|
|
||||||
|
|
||||||
public MappedUDataTable GetObjectDataTable(string name) =>
|
|
||||||
new(Objects[name].Value!.Load<UDataTable>()!);
|
|
||||||
|
|
||||||
public MappedUObject GetStruct(string name) =>
|
|
||||||
new(Structs[name].GetValue<FStructFallback>()!.Properties);
|
|
||||||
|
|
||||||
public MappedUObject[] GetArray(string name)
|
|
||||||
{
|
|
||||||
return
|
|
||||||
[
|
|
||||||
.. Arrays[name]
|
|
||||||
.Value!.Properties.Select(property => new MappedUObject(
|
|
||||||
property.GetValue<FStructFallback>()!.Properties
|
|
||||||
)),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -18,6 +18,7 @@ using SharpGLTF.Geometry.VertexTypes;
|
|||||||
using SharpGLTF.Materials;
|
using SharpGLTF.Materials;
|
||||||
using SharpGLTF.Scenes;
|
using SharpGLTF.Scenes;
|
||||||
using SharpGLTF.Schema2;
|
using SharpGLTF.Schema2;
|
||||||
|
using SkiaSharp;
|
||||||
|
|
||||||
namespace BlitzKit.CLI.Models
|
namespace BlitzKit.CLI.Models
|
||||||
{
|
{
|
||||||
@@ -76,21 +77,38 @@ namespace BlitzKit.CLI.Models
|
|||||||
)
|
)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var encodedBitmap = bitmap.Encode(options.TextureFormat, 100);
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var textureBytes = encodedBitmap.ToArray();
|
|
||||||
|
|
||||||
switch (parameterTexture.Key)
|
switch (parameterTexture.Key)
|
||||||
{
|
{
|
||||||
case "BaseColor":
|
case "BaseColor":
|
||||||
materialBuilder.WithBaseColor(textureBytes);
|
{
|
||||||
|
var encoded = bitmap.Encode(options.TextureFormat, 100);
|
||||||
|
var bytes = encoded.ToArray();
|
||||||
|
materialBuilder.WithBaseColor(bytes);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case "RM":
|
case "RM":
|
||||||
materialBuilder.WithMetallicRoughness(textureBytes);
|
{
|
||||||
|
var encoded = bitmap.Encode(options.TextureFormat, 100);
|
||||||
|
|
||||||
|
for (int y = 0; y < bitmap.Height; y++)
|
||||||
|
{
|
||||||
|
for (int x = 0; x < bitmap.Width; x++)
|
||||||
|
{
|
||||||
|
var index = y * bitmap.Width + x;
|
||||||
|
var color = bitmap.Pixels[index];
|
||||||
|
bitmap.Pixels[index] = new(color.Blue, color.Red, color.Green, color.Alpha);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var bytes = encoded.ToArray();
|
||||||
|
materialBuilder.WithBaseColor(bytes);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case "PM_SpecularMasks":
|
case "PM_SpecularMasks":
|
||||||
// materialBuilder.WithSpecularGlossiness(textureBytes);
|
// materialBuilder.WithSpecularGlossiness(textureBytes);
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
using CUE4Parse.FileProvider;
|
|
||||||
using CUE4Parse.FileProvider.Objects;
|
|
||||||
using CUE4Parse.UE4.Assets.Exports;
|
|
||||||
|
|
||||||
namespace BlitzKit.CLI.Models
|
|
||||||
{
|
|
||||||
public class Uasset
|
|
||||||
{
|
|
||||||
readonly GameFile file;
|
|
||||||
readonly Dictionary<string, MappedUObject> objects = [];
|
|
||||||
|
|
||||||
public Uasset(GameFile file, AbstractFileProvider provider)
|
|
||||||
{
|
|
||||||
this.file = file;
|
|
||||||
var objects = provider.LoadAllObjects(file.Path);
|
|
||||||
|
|
||||||
foreach (var obj in objects)
|
|
||||||
{
|
|
||||||
this.objects.Add(obj.Name, new(obj.Properties));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public MappedUObject Get(string name) => objects[name];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,25 +1,31 @@
|
|||||||
using CUE4Parse.FileProvider;
|
using CUE4Parse.FileProvider;
|
||||||
using CUE4Parse.FileProvider.Objects;
|
using CUE4Parse.FileProvider.Objects;
|
||||||
|
using CUE4Parse.UE4.Assets.Exports;
|
||||||
|
using CUE4Parse.UE4.Assets.Exports.Engine;
|
||||||
|
using CUE4Parse.UE4.Assets.Objects;
|
||||||
|
using CUE4Parse.UE4.Assets.Objects.Properties;
|
||||||
|
|
||||||
namespace BlitzKit.CLI.Models
|
namespace BlitzKit.CLI.Models
|
||||||
{
|
{
|
||||||
public class VfsDirectory
|
public class VFS
|
||||||
{
|
{
|
||||||
public Dictionary<string, VfsDirectory> Directories = [];
|
public Dictionary<string, VFS> Directories = [];
|
||||||
public Dictionary<string, GameFile> Files = [];
|
public Dictionary<string, GameFile> Files = [];
|
||||||
|
|
||||||
|
public required string ParentPath;
|
||||||
|
public required string Path;
|
||||||
public required string Name;
|
public required string Name;
|
||||||
|
|
||||||
public required AbstractFileProvider provider;
|
public required AbstractFileProvider provider;
|
||||||
|
|
||||||
public void AddFile(string name, GameFile file) => Files.TryAdd(name, file);
|
public void AddFile(string name, GameFile file) => Files.TryAdd(name, file);
|
||||||
|
|
||||||
public bool HasFile(string name) => Files.ContainsKey(name);
|
public bool HasFile(string name) => Files.ContainsKey(name);
|
||||||
|
|
||||||
public Uasset GetUasset(string name) => new(GetFile(name), provider);
|
|
||||||
|
|
||||||
public GameFile GetFile(string name)
|
public GameFile GetFile(string name)
|
||||||
{
|
{
|
||||||
var directoryPath = Path.GetDirectoryName(name);
|
var directoryPath = System.IO.Path.GetDirectoryName(name);
|
||||||
var fileName = Path.GetFileName(name);
|
var fileName = System.IO.Path.GetFileName(name);
|
||||||
var directory =
|
var directory =
|
||||||
directoryPath == null || directoryPath.Length == 0 ? this : GetDirectory(directoryPath);
|
directoryPath == null || directoryPath.Length == 0 ? this : GetDirectory(directoryPath);
|
||||||
|
|
||||||
@@ -28,7 +34,7 @@ namespace BlitzKit.CLI.Models
|
|||||||
|
|
||||||
public bool HasDirectory(string name) => Directories.ContainsKey(name);
|
public bool HasDirectory(string name) => Directories.ContainsKey(name);
|
||||||
|
|
||||||
public VfsDirectory GetDirectory(string name)
|
public VFS GetDirectory(string name)
|
||||||
{
|
{
|
||||||
var segments = name.Split('/');
|
var segments = name.Split('/');
|
||||||
var directory = this;
|
var directory = this;
|
||||||
@@ -41,7 +47,6 @@ namespace BlitzKit.CLI.Models
|
|||||||
return directory;
|
return directory;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddDirectory(string name, VfsDirectory directory) =>
|
public void AddDirectory(string name, VFS directory) => Directories.Add(name, directory);
|
||||||
Directories.Add(name, directory);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+1
-1
Submodule submodules/CUE4Parse updated: e45f854722...624e07c8c3.
Reference in new issue
Block a user