resource stuff
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
using System.Diagnostics;
|
||||
using System.Text.Json;
|
||||
using Nerfed.Builder.Meta;
|
||||
|
||||
namespace Nerfed.Builder;
|
||||
|
||||
@@ -57,15 +59,45 @@ public class Builder : IDisposable
|
||||
string outFile = $"{args.ResourceOutPath}/{relativeFile}{PathUtil.ImportedFileExtension}";
|
||||
|
||||
FileInfo inFileInfo = new FileInfo(inFile);
|
||||
FileInfo outFileInfo = new FileInfo(outFile);
|
||||
|
||||
if (!FileUtil.IsNewer(inFileInfo, outFileInfo))
|
||||
// =========================================================================
|
||||
// STEP 1: GUID META FILE SYNC
|
||||
// Ensure the source file has a backing .meta file generating its Guid
|
||||
// =========================================================================
|
||||
string metaFile = inFile + ".meta";
|
||||
AssetMeta metaData;
|
||||
|
||||
if (!File.Exists(metaFile))
|
||||
{
|
||||
// Generate a brand new meta file to track this asset permanently
|
||||
metaData = new AssetMeta(Guid.NewGuid());
|
||||
string json = JsonSerializer.Serialize(metaData, new JsonSerializerOptions { WriteIndented = true });
|
||||
File.WriteAllText(metaFile, json);
|
||||
Console.WriteLine($"[Meta] Generated new tracking ID '{metaData.Id}' for {relativeFile}");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Load the existing guid
|
||||
metaData = JsonSerializer.Deserialize<AssetMeta>(File.ReadAllText(metaFile))!;
|
||||
}
|
||||
|
||||
// Change output file from Name.ext.bin -> /GUID.bin to completely anonymize the actual game package!
|
||||
string cacheOutFile = $"{args.ResourceOutPath}/{metaData.Id}.bin";
|
||||
FileInfo outFileInfo = new FileInfo(cacheOutFile);
|
||||
|
||||
// Rebuild if the source file changed, or if the meta file changed!
|
||||
FileInfo metaFileInfo = new FileInfo(metaFile);
|
||||
bool requiresCompile = !outFileInfo.Exists ||
|
||||
FileUtil.IsNewer(inFileInfo, outFileInfo) ||
|
||||
FileUtil.IsNewer(metaFileInfo, outFileInfo);
|
||||
|
||||
if (!requiresCompile)
|
||||
{
|
||||
// File has not changed since last build, no need to build this one.
|
||||
return;
|
||||
}
|
||||
|
||||
string outDir = Path.GetDirectoryName(outFile);
|
||||
string outDir = Path.GetDirectoryName(cacheOutFile)!;
|
||||
if (!Directory.Exists(outDir))
|
||||
{
|
||||
Directory.CreateDirectory(outDir);
|
||||
@@ -74,14 +106,14 @@ public class Builder : IDisposable
|
||||
string ext = Path.GetExtension(inFile).ToLower();
|
||||
if (importers.TryGetValue(ext, out IImporter importer))
|
||||
{
|
||||
importer.Import(inFile, outFile);
|
||||
importer.Import(inFile, cacheOutFile); // Compile source directly to hash.bin
|
||||
}
|
||||
else
|
||||
{
|
||||
rawFileImporter.Import(inFile, outFile);
|
||||
rawFileImporter.Import(inFile, cacheOutFile);
|
||||
}
|
||||
|
||||
Console.WriteLine(relativeFile);
|
||||
Console.WriteLine($"Compiled {relativeFile} -> {metaData.Id}.bin");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user