Skip to content

Commit

Permalink
поддержка патчинга незапакованных файлов
Browse files Browse the repository at this point in the history
  • Loading branch information
miegir committed Aug 18, 2023
1 parent 9932db6 commit 189fd2a
Show file tree
Hide file tree
Showing 8 changed files with 55 additions and 12 deletions.
2 changes: 2 additions & 0 deletions AI2Tools.Core.Shared/AI2Tools.Core.Shared.projitems
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@
</PropertyGroup>
<ItemGroup>
<Compile Include="$(MSBuildThisFileDirectory)BundleCompressionType.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FileTargetCollector.cs" />
<Compile Include="$(MSBuildThisFileDirectory)GameVersion.cs" />
<Compile Include="$(MSBuildThisFileDirectory)GameVersionInfo.cs" />
<Compile Include="$(MSBuildThisFileDirectory)GameVersionStatics.cs" />
<Compile Include="$(MSBuildThisFileDirectory)IFileTargetCollector.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ObjectContainerExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ObjectSource.cs" />
<Compile Include="$(MSBuildThisFileDirectory)EnumerableExtensions.cs" />
Expand Down
22 changes: 22 additions & 0 deletions AI2Tools.Core.Shared/FileTargetCollector.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
namespace AI2Tools;

public class FileTargetCollector : IFileTargetCollector
{
private readonly List<FileTarget> targets = new();

public void AddTarget(FileTarget target)
{
targets.Add(target);
}

public void Commit()
{
foreach (var target in targets)
{
target.Commit();
target.Dispose();
}

targets.Clear();
}
}
6 changes: 6 additions & 0 deletions AI2Tools.Core.Shared/IFileTargetCollector.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace AI2Tools;

public interface IFileTargetCollector
{
void AddTarget(FileTarget target);
}
8 changes: 6 additions & 2 deletions AI2Tools.Resources.Bundles.Shared/BundleFile.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System.IO;
using AssetsTools.NET;
using AssetsTools.NET;
using AssetsTools.NET.Extra;
using Microsoft.Extensions.Logging;

Expand All @@ -10,6 +9,7 @@ internal partial class BundleFile : IDisposable
private readonly Dictionary<long, string> paths = new();
private readonly Dictionary<long, GameObject> gameObjectMap = new();
private readonly GameObjectCollection gameObjects = new();
private readonly FileTargetCollector fileTargetCollector = new();
private readonly ILogger logger;
private readonly AssetsManager assetsManager;
private readonly BundleFileInstance bundleFileInstance;
Expand All @@ -26,6 +26,8 @@ public BundleFile(ILogger logger, FileStream stream)
Initialize();
}

public IFileTargetCollector FileTargetCollector => fileTargetCollector;

public void Dispose()
{
Dispose(true);
Expand All @@ -38,6 +40,8 @@ protected virtual void Dispose(bool disposing)
{
assetsManager.UnloadAll();
}

fileTargetCollector.Commit();
}

public BundleResourceCollector CreateResourceCollector()
Expand Down
2 changes: 1 addition & 1 deletion AI2Tools.Resources.Bundles.Shared/BundleManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public void Unpack(UnpackArguments arguments, ObjectPath root)
_ => AssetBundleCompressionType.NONE,
};

resourceCollector.Write(source, compression);
resourceCollector.Write(source, bundleFile.FileTargetCollector, compression);

IEnumerable<Action> Enumerate()
{
Expand Down
7 changes: 3 additions & 4 deletions AI2Tools.Resources.Bundles.Shared/BundleResourceCollector.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System.Xml.Linq;
using AssetsTools.NET;
using AssetsTools.NET;
using AssetsTools.NET.Extra;
using Microsoft.Extensions.Logging;

Expand Down Expand Up @@ -103,7 +102,7 @@ public void AddResourceReplacer(
}));
}

public void Write(FileSource source, AssetBundleCompressionType compression)
public void Write(FileSource source, IFileTargetCollector fileTargetCollector, AssetBundleCompressionType compression)
{
if (assetReplacers.Count == 0)
{
Expand All @@ -117,7 +116,7 @@ public void Write(FileSource source, AssetBundleCompressionType compression)
return;
}

var writer = new BundleWriter(logger, bundleFileInstance.file, source);
var writer = new BundleWriter(logger, fileTargetCollector, bundleFileInstance.file, source);

writer.Replacers.Add(new BundleReplacerFromAssets(
oldName: assetsFileInstance.name,
Expand Down
18 changes: 14 additions & 4 deletions AI2Tools.Resources.Bundles.Shared/BundleWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@ namespace AI2Tools;
internal class BundleWriter
{
private readonly ILogger logger;
private readonly IFileTargetCollector fileTargetCollector;
private readonly AssetBundleFile bundleFile;
private readonly FileSource source;

public BundleWriter(ILogger logger, AssetBundleFile bundleFile, FileSource source)
public BundleWriter(ILogger logger, IFileTargetCollector fileTargetCollector, AssetBundleFile bundleFile, FileSource source)
{
this.logger = logger;
this.fileTargetCollector = fileTargetCollector;
this.bundleFile = bundleFile;
this.source = source;
}
Expand All @@ -22,10 +24,18 @@ public void Write(AssetBundleCompressionType compressionType)
{
if (compressionType == AssetBundleCompressionType.NONE)
{
using var target = source.CreateTarget();
if (WriteUncompressed(target.Stream))
var target = source.CreateTarget();
try
{
target.Commit();
if (WriteUncompressed(target.Stream))
{
fileTargetCollector.AddTarget(target);
target = null;
}
}
finally
{
target?.Dispose();
}
}
else
Expand Down
2 changes: 1 addition & 1 deletion AI2Tools.Resources.Bundles/BundleManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,7 @@ public bool Import(
.Scoped(logger, "asset")
.Run();

resourceCollector.Write(source, compression);
resourceCollector.Write(source, bundleFile.FileTargetCollector, compression);

return true;

Expand Down

0 comments on commit 189fd2a

Please sign in to comment.