Skip to content

Commit

Permalink
Update API usage
Browse files Browse the repository at this point in the history
  • Loading branch information
NoahStolk committed Jan 22, 2024
1 parent 851f61c commit bcbe9a6
Show file tree
Hide file tree
Showing 8 changed files with 52 additions and 47 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ public ModTypes ModTypes()
ModTypes modTypes = Entities.Enums.ModTypes.None;
if (Binaries.Exists(b => b.ModBinaryType == ModBinaryType.Audio))
modTypes |= Entities.Enums.ModTypes.Audio;
if (ddBinary?.Chunks.Exists(c => c.AssetType == AssetType.Shader) == true)
if (ddBinary?.Entries.Exists(c => c.AssetType == AssetType.Shader) == true)
modTypes |= Entities.Enums.ModTypes.Shader;
if (ddBinary?.Chunks.Exists(c => c.AssetType == AssetType.ObjectBinding || c.AssetType == AssetType.Mesh) == true)
if (ddBinary?.Entries.Exists(c => c.AssetType == AssetType.ObjectBinding || c.AssetType == AssetType.Mesh) == true)
modTypes |= Entities.Enums.ModTypes.Mesh;
if (ddBinary?.Chunks.Exists(c => c.AssetType == AssetType.Texture) == true)
if (ddBinary?.Entries.Exists(c => c.AssetType == AssetType.Texture) == true)
modTypes |= Entities.Enums.ModTypes.Texture;

return modTypes;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,19 @@ namespace DevilDaggersInfo.Web.Server.Domain.Models.ModArchives;

public class ModBinaryCacheData
{
public ModBinaryCacheData(string name, long size, ModBinaryType modBinaryType, List<ModChunkCacheData> chunks, List<ModifiedLoudnessAssetCacheData>? modifiedLoudnessAssets)
public ModBinaryCacheData(string name, long size, ModBinaryType modBinaryType, List<ModTocEntryCacheData> entries, List<ModifiedLoudnessAssetCacheData>? modifiedLoudnessAssets)
{
Name = name;
Size = size;
ModBinaryType = modBinaryType;
Chunks = chunks;
Entries = entries;
ModifiedLoudnessAssets = modifiedLoudnessAssets;
}

public string Name { get; }
public long Size { get; }
public ModBinaryType ModBinaryType { get; }
public List<ModChunkCacheData> Chunks { get; }
public List<ModTocEntryCacheData> Entries { get; }
public List<ModifiedLoudnessAssetCacheData>? ModifiedLoudnessAssets { get; }

public static ModBinaryCacheData CreateFromFile(string fileName, byte[] fileContents)
Expand All @@ -31,30 +31,30 @@ public static ModBinaryCacheData CreateFromFile(string fileName, byte[] fileCont
if (modBinary.Toc.Type != binaryTypeFromFileName)
throw new InvalidModBinaryException($"Binary '{fileName}' has type mismatch; file name claims '{binaryTypeFromFileName}' but file contents claim '{modBinary.Toc.Type}'.");

List<ModChunkCacheData> chunks = modBinary.Toc.Chunks.Select(c => new ModChunkCacheData
List<ModTocEntryCacheData> tocEntries = modBinary.Toc.Entries.Select(c => new ModTocEntryCacheData
{
Name = c.Name,
Size = c.Size,
AssetType = c.AssetType,
IsProhibited = AssetContainer.IsProhibited(c.AssetType, c.Name),
}).ToList();

ModBinaryChunk? loudnessChunk = modBinary.Toc.Chunks.FirstOrDefault(c => c.IsLoudness());
ModBinaryTocEntry? loudnessTocEntry = modBinary.Toc.Entries.FirstOrDefault(c => c.IsLoudness());
List<ModifiedLoudnessAssetCacheData>? modifiedLoudnessAssets = null;
if (loudnessChunk != null)
if (loudnessTocEntry != null)
{
byte[] loudnessBytes = new byte[loudnessChunk.Size];
Buffer.BlockCopy(fileContents, loudnessChunk.Offset, loudnessBytes, 0, loudnessChunk.Size);
byte[] loudnessBytes = new byte[loudnessTocEntry.Size];
Buffer.BlockCopy(fileContents, loudnessTocEntry.Offset, loudnessBytes, 0, loudnessTocEntry.Size);
string loudnessString = Encoding.UTF8.GetString(loudnessBytes);
modifiedLoudnessAssets = ReadModifiedLoudnessValues(loudnessString);
}

return new(fileName, fileContents.Length, modBinary.Toc.Type, chunks, modifiedLoudnessAssets);
return new(fileName, fileContents.Length, modBinary.Toc.Type, tocEntries, modifiedLoudnessAssets);
}

private static List<ModifiedLoudnessAssetCacheData> ReadModifiedLoudnessValues(string loudnessString)
{
List<ModifiedLoudnessAssetCacheData> loudnessAssets = new();
List<ModifiedLoudnessAssetCacheData> loudnessAssets = [];

foreach (string line in loudnessString.Split('\n'))
{
Expand Down Expand Up @@ -100,5 +100,7 @@ private static bool TryReadLoudnessLine(string line, out string? assetName, out
}

public bool ContainsProhibitedAssets()
=> Chunks.Any(c => c.IsProhibited);
{
return Entries.Exists(c => c.IsProhibited);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace DevilDaggersInfo.Web.Server.Domain.Models.ModArchives;

public record ModChunkCacheData
public record ModTocEntryCacheData
{
public required string Name { get; init; }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public async Task ProcessModBinaryUploadAsync(string modName, Dictionary<BinaryN

foreach (ModBinaryCacheData binary in addedBinaries)
{
if (binary.Chunks.Count == 0)
if (binary.Entries.Count == 0)
throw new InvalidModBinaryException($"Mod binary '{binary.Name}' does not contain any assets.");

BinaryName expectedName = BinaryName.Parse(binary.Name, modName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public static MainApi.GetMod ToMainApi(this ModEntity mod, ModFileSystemData mod
ModBinaryType = b.ModBinaryType.ToMainApi(),
Name = b.Name,
Size = b.Size,
Assets = b.Chunks.ConvertAll(c => new MainApi.GetModAsset
Assets = b.Entries.ConvertAll(c => new MainApi.GetModAsset
{
Name = c.Name, Size = c.Size, Type = c.AssetType.ToMainApi(), IsProhibited = c.IsProhibited,
}),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using DevilDaggersInfo.Core.Asset;
using DevilDaggersInfo.Core.Mod;
using DevilDaggersInfo.Core.Mod.Builders;
using DevilDaggersInfo.Web.Server.Domain.Models.ModArchives;
using System.IO.Compression;

Expand All @@ -16,7 +17,7 @@ public async Task ProcessNewMod_1Binary_1Asset()
BinaryName binaryName = new(ModBinaryType.Dd, "main");
const string assetName = "binding";

ModBinaryBuilder binary = CreateWithBinding(assetName);
DdModBinaryBuilder binary = CreateWithBinding(assetName);
await Processor.ProcessModBinaryUploadAsync(modName, new() { [binaryName] = binary.Compile() });

string zipFilePath = Accessor.GetModArchivePath(modName);
Expand All @@ -26,9 +27,9 @@ public async Task ProcessNewMod_1Binary_1Asset()
ModBinaryCacheData processedBinary = GetProcessedBinaryFromArchiveEntry(archive.Entries[0]);
Assert.AreEqual(ModBinaryType.Dd, processedBinary.ModBinaryType);
AssertBinaryName(binaryName, processedBinary.Name, modName);
Assert.AreEqual(1, processedBinary.Chunks.Count);
Assert.AreEqual(assetName, processedBinary.Chunks[0].Name);
Assert.AreEqual(AssetType.ObjectBinding, processedBinary.Chunks[0].AssetType);
Assert.AreEqual(1, processedBinary.Entries.Count);
Assert.AreEqual(assetName, processedBinary.Entries[0].Name);
Assert.AreEqual(AssetType.ObjectBinding, processedBinary.Entries[0].AssetType);
}

[TestMethod]
Expand All @@ -49,11 +50,11 @@ public async Task ProcessNewMod_1Binary_2Assets()
ModBinaryCacheData processedBinary = GetProcessedBinaryFromArchiveEntry(archive.Entries[0]);
Assert.AreEqual(ModBinaryType.Dd, processedBinary.ModBinaryType);
AssertBinaryName(binaryName, processedBinary.Name, modName);
Assert.AreEqual(2, processedBinary.Chunks.Count);
Assert.AreEqual(assetName1, processedBinary.Chunks[0].Name);
Assert.AreEqual(AssetType.ObjectBinding, processedBinary.Chunks[0].AssetType);
Assert.AreEqual(assetName2, processedBinary.Chunks[1].Name);
Assert.AreEqual(AssetType.Texture, processedBinary.Chunks[1].AssetType);
Assert.AreEqual(2, processedBinary.Entries.Count);
Assert.AreEqual(assetName1, processedBinary.Entries[0].Name);
Assert.AreEqual(AssetType.ObjectBinding, processedBinary.Entries[0].AssetType);
Assert.AreEqual(assetName2, processedBinary.Entries[1].Name);
Assert.AreEqual(AssetType.Texture, processedBinary.Entries[1].AssetType);
}

[TestMethod]
Expand Down Expand Up @@ -81,19 +82,19 @@ public async Task ProcessNewMod_2Binaries_2Assets()
ModBinaryCacheData processedBinary1 = GetProcessedBinaryFromArchiveEntry(archive.Entries[0]);
Assert.AreEqual(ModBinaryType.Dd, processedBinary1.ModBinaryType);
AssertBinaryName(binaryName1, processedBinary1.Name, modName);
Assert.AreEqual(2, processedBinary1.Chunks.Count);
Assert.AreEqual(assetName1, processedBinary1.Chunks[0].Name);
Assert.AreEqual(AssetType.ObjectBinding, processedBinary1.Chunks[0].AssetType);
Assert.AreEqual(assetName2, processedBinary1.Chunks[1].Name);
Assert.AreEqual(AssetType.Texture, processedBinary1.Chunks[1].AssetType);
Assert.AreEqual(2, processedBinary1.Entries.Count);
Assert.AreEqual(assetName1, processedBinary1.Entries[0].Name);
Assert.AreEqual(AssetType.ObjectBinding, processedBinary1.Entries[0].AssetType);
Assert.AreEqual(assetName2, processedBinary1.Entries[1].Name);
Assert.AreEqual(AssetType.Texture, processedBinary1.Entries[1].AssetType);

ModBinaryCacheData processedBinary2 = GetProcessedBinaryFromArchiveEntry(archive.Entries[1]);
Assert.AreEqual(ModBinaryType.Dd, processedBinary2.ModBinaryType);
AssertBinaryName(binaryName2, processedBinary2.Name, modName);
Assert.AreEqual(2, processedBinary2.Chunks.Count);
Assert.AreEqual(assetName1, processedBinary2.Chunks[0].Name);
Assert.AreEqual(AssetType.ObjectBinding, processedBinary2.Chunks[0].AssetType);
Assert.AreEqual(assetName2, processedBinary2.Chunks[1].Name);
Assert.AreEqual(AssetType.Texture, processedBinary2.Chunks[1].AssetType);
Assert.AreEqual(2, processedBinary2.Entries.Count);
Assert.AreEqual(assetName1, processedBinary2.Entries[0].Name);
Assert.AreEqual(AssetType.ObjectBinding, processedBinary2.Entries[0].AssetType);
Assert.AreEqual(assetName2, processedBinary2.Entries[1].Name);
Assert.AreEqual(AssetType.Texture, processedBinary2.Entries[1].AssetType);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using DevilDaggersInfo.Core.Asset;
using DevilDaggersInfo.Core.Mod;
using DevilDaggersInfo.Core.Mod.Builders;
using DevilDaggersInfo.Web.Server.Domain.Models.FileSystem;
using DevilDaggersInfo.Web.Server.Domain.Models.ModArchives;
using DevilDaggersInfo.Web.Server.Domain.Services;
Expand Down Expand Up @@ -62,18 +63,18 @@ protected static ModBinaryCacheData GetProcessedBinaryFromArchiveEntry(ZipArchiv
return ModBinaryCacheData.CreateFromFile(entry.Name, extractedContents);
}

protected static ModBinaryBuilder CreateWithBinding(string assetName)
protected static DdModBinaryBuilder CreateWithBinding(string assetName)
{
ModBinaryBuilder binary = new(ModBinaryType.Dd);
binary.AddAsset(assetName, AssetType.ObjectBinding, "shader = \"boid\""u8.ToArray());
DdModBinaryBuilder binary = new();
binary.AddObjectBinding(assetName, "shader = \"boid\""u8.ToArray());
return binary;
}

protected static ModBinaryBuilder CreateWithBindingAndTexture(string shaderName, string textureName)
protected static DdModBinaryBuilder CreateWithBindingAndTexture(string shaderName, string textureName)
{
ModBinaryBuilder binary = new(ModBinaryType.Dd);
binary.AddAsset(shaderName, AssetType.ObjectBinding, "shader = \"boid\""u8.ToArray());
binary.AddAsset(textureName, AssetType.Texture, File.ReadAllBytes(Path.Combine("Resources", "Textures", "green.png")));
DdModBinaryBuilder binary = new();
binary.AddObjectBinding(shaderName, "shader = \"boid\""u8.ToArray());
binary.AddTexture(textureName, File.ReadAllBytes(Path.Combine("Resources", "Textures", "green.png")));
return binary;
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using DevilDaggersInfo.Core.Mod;
using DevilDaggersInfo.Core.Mod.Builders;
using DevilDaggersInfo.Web.Server.Domain.Exceptions;
using DevilDaggersInfo.Web.Server.Domain.Models.ModArchives;
using System.IO.Compression;
Expand All @@ -21,8 +22,8 @@ public async Task Transform_Rename(string modName, string newModName)
BinaryName binaryName2 = new(ModBinaryType.Dd, "main2");
const string assetName = "binding";

ModBinaryBuilder binary1 = CreateWithBinding(assetName);
ModBinaryBuilder binary2 = CreateWithBinding(assetName);
DdModBinaryBuilder binary1 = CreateWithBinding(assetName);
DdModBinaryBuilder binary2 = CreateWithBinding(assetName);
Dictionary<BinaryName, byte[]> binaries = new()
{
[binaryName1] = binary1.Compile(),
Expand Down Expand Up @@ -170,7 +171,7 @@ public async Task Transform_Replace1(string modName, string newModName)

// Test if the asset name is actually updated.
ModBinaryCacheData modBinaryCacheData = GetProcessedBinaryFromArchiveEntry(archive.Entries[0]);
Assert.AreEqual(1, modBinaryCacheData.Chunks.Count);
Assert.AreEqual(assetName2, modBinaryCacheData.Chunks[0].Name);
Assert.AreEqual(1, modBinaryCacheData.Entries.Count);
Assert.AreEqual(assetName2, modBinaryCacheData.Entries[0].Name);
}
}

0 comments on commit bcbe9a6

Please sign in to comment.