3 Commits
Author SHA1 Message Date
ds5678 19fb8b36dd Small name fix 2024-05-31 20:25:09 -07:00
aldelaro5 9479c1aa66 Init the aabb part of the mesh key (#3) 2024-05-31 20:09:41 -07:00
ds5678 5bb396ffda Make the internal serializer context public
* Add tests for Vector3 serialization and deserialization
* Bump AssetRipper.Primitives
2024-05-31 07:55:33 -07:00
11 changed files with 73 additions and 22 deletions

No files matched your search

@@ -110,6 +110,7 @@ internal static class Program
Name = asset.Name(),
VertexCount = asset.ReleaseFields["m_VertexData"].AsStructure["m_VertexCount"].AsInt32,
SubMeshCount = asset.ReleaseFields["m_SubMeshes"].AsAssetArray.Length,
LocalAABB = asset.ReleaseFields["m_LocalAABB"].AsAxisAlignedBoundingBox(),
};
}
break;
@@ -0,0 +1,23 @@
using AssetRipper.Import.Structure.Assembly.Serializable;
using AssetRipper.Mining.PredefinedAssets;
using System.Numerics;
namespace AssetRipper.Mining.EngineFileExtractor;
internal static class SerializableValueExtensions
{
public static Vector3 AsVector3(this SerializableValue value)
{
return new Vector3(
value.AsStructure["x"].AsSingle,
value.AsStructure["y"].AsSingle,
value.AsStructure["z"].AsSingle);
}
public static AxisAlignedBoundingBox AsAxisAlignedBoundingBox(this SerializableValue value)
{
return new AxisAlignedBoundingBox(
value.AsStructure["m_Center"].AsVector3(),
value.AsStructure["m_Extent"].AsVector3());
}
}
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net5.0;net7.0;net8.0</TargetFrameworks>
<TargetFrameworks>net4.8;net7.0;net8.0</TargetFrameworks>
<LangVersion>Latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
@@ -11,14 +11,17 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="NUnit" Version="3.14.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
<PackageReference Include="NUnit" Version="4.1.0" />
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
<PackageReference Include="NUnit.Analyzers" Version="3.9.0">
<PackageReference Include="NUnit.Analyzers" Version="4.2.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="coverlet.collector" Version="6.0.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
@@ -1,3 +1,6 @@
using System.Numerics;
using System.Text.Json;
namespace AssetRipper.Mining.PredefinedAssets.Tests;
public class Tests
@@ -40,4 +43,26 @@ public class Tests
return package.ToJson();
}
}
[Test]
public void Vector3Serialization()
{
string result = """
{
"X": 1,
"Y": 2,
"Z": 3
}
""".Replace("\r", null);
Vector3 vector = new Vector3(1.0f, 2.0f, 3.0f);
Assert.That(JsonSerializer.Serialize(vector, MiningSerializerContext.Default.Vector3).Replace("\r", null), Is.EqualTo(result));
}
[Test]
public void Vector3Deserialization()
{
string json = """{ "X": 1.0, "Y": 2.0, "Z": 3.0 }""";
Vector3 result = new Vector3(1.0f, 2.0f, 3.0f);
Assert.That(JsonSerializer.Deserialize(json, MiningSerializerContext.Default.Vector3), Is.EqualTo(result));
}
}
@@ -9,7 +9,7 @@
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<Authors>ds5678</Authors>
<Company>AssetRipper</Company>
<Version>1.3.1</Version>
<Version>1.3.2</Version>
<AssemblyVersion>$(Version)</AssemblyVersion>
<PackageId>AssetRipper.Mining.PredefinedAssets</PackageId>
<PackageTags>C# Unity</PackageTags>
@@ -26,7 +26,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AssetRipper.Primitives" Version="3.1.1" />
<PackageReference Include="AssetRipper.Primitives" Version="3.1.2" />
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
@@ -2,4 +2,4 @@ using System.Numerics;
namespace AssetRipper.Mining.PredefinedAssets;
public record struct AxisAlignedBoundingBox(Vector3 Center, Vector3 Extents);
public record struct AxisAlignedBoundingBox(Vector3 Center, Vector3 Extent);
@@ -10,11 +10,11 @@ public readonly record struct EngineResourceData(Dictionary<long, Object> Defaul
public readonly string ToJson()
{
return JsonSerializer.Serialize(this, InternalSerializerContext.Default.EngineResourceData);
return JsonSerializer.Serialize(this, MiningSerializerContext.Default.EngineResourceData);
}
public static EngineResourceData FromJson(string text)
{
return JsonSerializer.Deserialize(text, InternalSerializerContext.Default.EngineResourceData);
return JsonSerializer.Deserialize(text, MiningSerializerContext.Default.EngineResourceData);
}
}
@@ -6,6 +6,6 @@ namespace AssetRipper.Mining.PredefinedAssets;
[JsonSerializable(typeof(EngineResourceData))]
[JsonSerializable(typeof(UnityPackageData))]
[JsonSerializable(typeof(ReferenceAssemblyData))]
internal sealed partial class InternalSerializerContext : JsonSerializerContext
public sealed partial class MiningSerializerContext : JsonSerializerContext
{
}
@@ -59,11 +59,11 @@ public abstract record class Object
public string ToJson()
{
return JsonSerializer.Serialize(this, InternalSerializerContext.Default.Object);
return JsonSerializer.Serialize(this, MiningSerializerContext.Default.Object);
}
public static Object? FromJson(string text)
{
return JsonSerializer.Deserialize(text, InternalSerializerContext.Default.Object);
return JsonSerializer.Deserialize(text, MiningSerializerContext.Default.Object);
}
}
@@ -6,11 +6,11 @@ public readonly record struct ReferenceAssemblyData(List<string> Unity, List<str
{
public string ToJson()
{
return JsonSerializer.Serialize(this, InternalSerializerContext.Default.ReferenceAssemblyData);
return JsonSerializer.Serialize(this, MiningSerializerContext.Default.ReferenceAssemblyData);
}
public static ReferenceAssemblyData FromJson(string json)
{
return JsonSerializer.Deserialize<ReferenceAssemblyData>(json, InternalSerializerContext.Default.ReferenceAssemblyData);
return JsonSerializer.Deserialize<ReferenceAssemblyData>(json, MiningSerializerContext.Default.ReferenceAssemblyData);
}
}
@@ -1,9 +1,8 @@
using AssetRipper.Primitives;
using System.Text.Json;
#if NETSTANDARD
using AssemblyDictionary = System.Collections.Generic.Dictionary<string, string>;
#else
using System.Text.Json;
#if NET5_0_OR_GREATER
using AssemblyDictionary = System.Collections.Generic.Dictionary<string, AssetRipper.Primitives.UnityGuid>;
#else
using AssemblyDictionary = System.Collections.Generic.Dictionary<string, string>;
#endif
namespace AssetRipper.Mining.PredefinedAssets;
@@ -36,11 +35,11 @@ public readonly record struct UnityPackageData(
public readonly string ToJson()
{
return JsonSerializer.Serialize(this, InternalSerializerContext.Default.UnityPackageData);
return JsonSerializer.Serialize(this, MiningSerializerContext.Default.UnityPackageData);
}
public static UnityPackageData FromJson(string text)
{
return JsonSerializer.Deserialize(text, InternalSerializerContext.Default.UnityPackageData);
return JsonSerializer.Deserialize(text, MiningSerializerContext.Default.UnityPackageData);
}
}