2024-12-28 23:19:55 +08:00
|
|
|
|
using System;
|
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
using Unity.Mathematics;
|
2025-02-24 23:03:39 +08:00
|
|
|
|
using YamlDotNet.Core;
|
|
|
|
|
using YamlDotNet.Serialization;
|
2024-12-28 23:19:55 +08:00
|
|
|
|
|
|
|
|
|
#if NET5_0_OR_GREATER
|
|
|
|
|
namespace BITKit
|
|
|
|
|
{
|
2025-02-24 23:03:39 +08:00
|
|
|
|
public class Int3JsonConvertJsonConverter : JsonConverter<int3>
|
|
|
|
|
{
|
|
|
|
|
public override void WriteJson(JsonWriter writer, int3 value, JsonSerializer serializer)
|
|
|
|
|
{
|
|
|
|
|
writer.WriteStartObject();
|
|
|
|
|
|
|
|
|
|
writer.WritePropertyName(nameof(value.x));
|
|
|
|
|
writer.WriteValue(value.x);
|
|
|
|
|
|
|
|
|
|
writer.WritePropertyName(nameof(value.y));
|
|
|
|
|
writer.WriteValue(value.y);
|
|
|
|
|
|
|
|
|
|
writer.WritePropertyName(nameof(value.z));
|
|
|
|
|
writer.WriteValue(value.z);
|
|
|
|
|
|
|
|
|
|
writer.WriteEndObject();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override int3 ReadJson(JsonReader reader, Type objectType, int3 existingValue, bool hasExistingValue, JsonSerializer serializer)
|
|
|
|
|
{
|
|
|
|
|
var result = new int3(0, 0, 0); // 默认值为 (0, 0, 0)
|
|
|
|
|
|
|
|
|
|
while (reader.TokenType != JsonToken.EndObject)
|
|
|
|
|
{
|
|
|
|
|
reader.Read();
|
|
|
|
|
if (reader.TokenType != JsonToken.PropertyName) continue;
|
|
|
|
|
|
|
|
|
|
var property = reader.Value.ToString();
|
|
|
|
|
if (property == nameof(int3.x)) result.x = (int)reader.ReadAsInt32()!;
|
|
|
|
|
if (property == nameof(int3.y)) result.y = (int)reader.ReadAsInt32()!;
|
|
|
|
|
if (property == nameof(int3.z)) result.z = (int)reader.ReadAsInt32()!;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public class Int4JsonConvertJsonConverter : JsonConverter<int4>
|
|
|
|
|
{
|
|
|
|
|
public override void WriteJson(JsonWriter writer, int4 value, JsonSerializer serializer)
|
|
|
|
|
{
|
|
|
|
|
writer.WriteStartObject();
|
|
|
|
|
|
|
|
|
|
writer.WritePropertyName(nameof(value.x));
|
|
|
|
|
writer.WriteValue(value.x);
|
|
|
|
|
|
|
|
|
|
writer.WritePropertyName(nameof(value.y));
|
|
|
|
|
writer.WriteValue(value.y);
|
|
|
|
|
|
|
|
|
|
writer.WritePropertyName(nameof(value.z));
|
|
|
|
|
writer.WriteValue(value.z);
|
|
|
|
|
|
|
|
|
|
writer.WritePropertyName(nameof(value.w));
|
|
|
|
|
writer.WriteValue(value.w);
|
|
|
|
|
|
|
|
|
|
writer.WriteEndObject();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override int4 ReadJson(JsonReader reader, Type objectType, int4 existingValue, bool hasExistingValue, JsonSerializer serializer)
|
|
|
|
|
{
|
|
|
|
|
var result = new int4(0, 0, 0, 0); // 默认值为 (0, 0, 0, 0)
|
|
|
|
|
|
|
|
|
|
while (reader.TokenType != JsonToken.EndObject)
|
|
|
|
|
{
|
|
|
|
|
reader.Read();
|
|
|
|
|
if (reader.TokenType != JsonToken.PropertyName) continue;
|
|
|
|
|
|
|
|
|
|
var property = reader.Value.ToString();
|
|
|
|
|
if (property == nameof(int4.x)) result.x = (int)reader.ReadAsInt32()!;
|
|
|
|
|
if (property == nameof(int4.y)) result.y = (int)reader.ReadAsInt32()!;
|
|
|
|
|
if (property == nameof(int4.z)) result.z = (int)reader.ReadAsInt32()!;
|
|
|
|
|
if (property == nameof(int4.w)) result.w = (int)reader.ReadAsInt32()!;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-12-28 23:19:55 +08:00
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-02-24 23:03:39 +08:00
|
|
|
|
public class Float3JsonConvertJsonConverter : JsonConverter<float3>
|
|
|
|
|
{
|
|
|
|
|
public override void WriteJson(JsonWriter writer, float3 value, JsonSerializer serializer)
|
|
|
|
|
{
|
|
|
|
|
writer.WriteStartObject();
|
|
|
|
|
|
|
|
|
|
writer.WritePropertyName(nameof(value.x));
|
|
|
|
|
writer.WriteValue((double)value.x); // 将 float 转为 double,避免精度问题
|
|
|
|
|
|
|
|
|
|
writer.WritePropertyName(nameof(value.y));
|
|
|
|
|
writer.WriteValue((double)value.y); // 将 float 转为 double
|
|
|
|
|
|
|
|
|
|
writer.WritePropertyName(nameof(value.z));
|
|
|
|
|
writer.WriteValue((double)value.z); // 将 float 转为 double
|
|
|
|
|
|
|
|
|
|
writer.WriteEndObject();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override float3 ReadJson(JsonReader reader, Type objectType, float3 existingValue, bool hasExistingValue, JsonSerializer serializer)
|
|
|
|
|
{
|
|
|
|
|
var result = float3.zero; // 默认值为 (0, 0, 0)
|
|
|
|
|
|
|
|
|
|
while (reader.TokenType != JsonToken.EndObject)
|
|
|
|
|
{
|
|
|
|
|
reader.Read();
|
|
|
|
|
if (reader.TokenType != JsonToken.PropertyName) continue;
|
|
|
|
|
|
|
|
|
|
var property = reader.Value.ToString();
|
|
|
|
|
if (property == nameof(float3.x)) result.x = (float)reader.ReadAsDouble()!;
|
|
|
|
|
if (property == nameof(float3.y)) result.y = (float)reader.ReadAsDouble()!;
|
|
|
|
|
if (property == nameof(float3.z)) result.z = (float)reader.ReadAsDouble()!;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-12-28 23:19:55 +08:00
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-02-24 23:03:39 +08:00
|
|
|
|
#endif
|