Net.Like.Xue.Tokyo/Assets/BITKit/NetSupport/MathematicsSupport.cs

81 lines
2.8 KiB
C#
Raw Normal View History

2024-12-28 23:19:55 +08:00
using System;
using Newtonsoft.Json;
using Unity.Mathematics;
#if NET5_0_OR_GREATER
namespace BITKit
{
public class Float2JsonConvertJsonConverter:JsonConverter<float2>
{
public override void WriteJson(JsonWriter writer, float2 value, JsonSerializer serializer)
{
writer.WriteStartObject();
writer.WritePropertyName(nameof(value.x));
writer.WriteValue((double)value.x);
writer.WritePropertyName(nameof(value.y));
writer.WriteValue((double)value.y);
writer.WriteEndObject();
}
public override float2 ReadJson(JsonReader reader, Type objectType, float2 existingValue, bool hasExistingValue,
JsonSerializer serializer)
{
var result = float2.zero;
while (reader.TokenType != JsonToken.EndObject) {
reader.Read();
if (reader.TokenType != JsonToken.PropertyName) continue;
var property = reader.Value;
if (property is nameof(float2.x)) result.x = (float)reader.ReadAsDouble()!;
if (property is nameof(float2.y)) result.y = (float)reader.ReadAsDouble()!;
}
return result;
}
}
public class Float4JsonConvertJsonConverter:JsonConverter<float4>
{
public override void WriteJson(JsonWriter writer, float4 value, JsonSerializer serializer)
{
writer.WriteStartObject();
writer.WritePropertyName(nameof(value.x));
writer.WriteValue((double)value.x);
writer.WritePropertyName(nameof(value.y));
writer.WriteValue((double)value.y);
writer.WritePropertyName(nameof(value.z));
writer.WriteValue((double)value.z);
writer.WritePropertyName(nameof(value.w));
writer.WriteValue((double)value.w);
writer.WriteEndObject();
}
public override float4 ReadJson(JsonReader reader, Type objectType, float4 existingValue, bool hasExistingValue,
JsonSerializer serializer)
{
var result = float4.zero;
while (reader.TokenType != JsonToken.EndObject) {
reader.Read();
if (reader.TokenType != JsonToken.PropertyName) continue;
var property = reader.Value;
if (property is nameof(float4.x)) result.x = (float)reader.ReadAsDouble()!;
if (property is nameof(float4.y)) result.y = (float)reader.ReadAsDouble()!;
if (property is nameof(float4.z)) result.z = (float)reader.ReadAsDouble()!;
if (property is nameof(float4.w)) result.w = (float)reader.ReadAsDouble()!;
}
return result;
}
}
}
#endif