Files
PrinceOfGlory/Packages/jillejr.newtonsoft.json-for-unity.converters/UnityConverters/Random/RandomStateConverter.cs
2026-03-03 03:15:46 +08:00

48 lines
2.1 KiB
C#

using System;
using System.Reflection;
using RandomState = UnityEngine.Random.State;
using Newtonsoft.Json.UnityConverters.Helpers;
namespace Newtonsoft.Json.UnityConverters.Random
{
public class RandomStateConverter : PartialConverter<RandomState>
{
// If field does not exist it should invalidate the converter for
// the entirety of the programs lifetime. Which is fine in this case.
private static readonly FieldInfo _s0Field = typeof(RandomState).GetFieldInfoOrThrow("s0");
private static readonly FieldInfo _s1Field = typeof(RandomState).GetFieldInfoOrThrow("s1");
private static readonly FieldInfo _s2Field = typeof(RandomState).GetFieldInfoOrThrow("s2");
private static readonly FieldInfo _s3Field = typeof(RandomState).GetFieldInfoOrThrow("s3");
protected override void ReadValue(ref RandomState value, string name, JsonReader reader, JsonSerializer serializer)
{
switch (name) {
case "s0":
_s0Field.SetValueDirectRef(ref value, reader.ReadAsInt32() ?? 0);
break;
case "s1":
_s1Field.SetValueDirectRef(ref value, reader.ReadAsInt32() ?? 0);
break;
case "s2":
_s2Field.SetValueDirectRef(ref value, reader.ReadAsInt32() ?? 0);
break;
case "s3":
_s3Field.SetValueDirectRef(ref value, reader.ReadAsInt32() ?? 0);
break;
}
}
protected override void WriteJsonProperties(JsonWriter writer, RandomState value, JsonSerializer serializer)
{
writer.WritePropertyName("s0");
writer.WriteValue(_s0Field.GetValue(value));
writer.WritePropertyName("s1");
writer.WriteValue(_s1Field.GetValue(value));
writer.WritePropertyName("s2");
writer.WriteValue(_s2Field.GetValue(value));
writer.WritePropertyName("s3");
writer.WriteValue(_s3Field.GetValue(value));
}
}
}