Files
2026-09-21 12:15:57 +03:00

78 lines
3.6 KiB
C#

#if ALCHEMY_SUPPORT_SERIALIZATION
using Unity.Serialization.Json;
using UnityEngine;
namespace Alchemy.Serialization.Internal
{
partial class AlchemyJsonAdapter : IJsonAdapter<AnimationCurve>, IJsonAdapter<Keyframe>
{
public AnimationCurve Deserialize(in JsonDeserializationContext<AnimationCurve> context)
{
if (context.SerializedValue.IsNull())
{
return null;
}
var view = context.SerializedValue.AsObjectView();
var animationCurve = new AnimationCurve();
if (view.TryGetMember("keys", out var keys)) animationCurve.keys = context.DeserializeValue<Keyframe[]>(keys.Value());
if (view.TryGetMember("postWrapMode", out var postWrapMode)) animationCurve.postWrapMode = context.DeserializeValue<WrapMode>(postWrapMode.Value());
if (view.TryGetMember("preWrapMode", out var preWrapMode)) animationCurve.preWrapMode = context.DeserializeValue<WrapMode>(preWrapMode.Value());
return animationCurve;
}
public Keyframe Deserialize(in JsonDeserializationContext<Keyframe> context)
{
var view = context.SerializedValue.AsObjectView();
var keyframe = default(Keyframe);
if (view.TryGetMember("time", out var time)) keyframe.time = time.Value().AsFloat();
if (view.TryGetMember("value", out var value)) keyframe.value = value.Value().AsFloat();
if (view.TryGetMember("inTangent", out var inTangent)) keyframe.inTangent = inTangent.Value().AsFloat();
if (view.TryGetMember("outTangent", out var outTangent)) keyframe.outTangent = outTangent.Value().AsFloat();
if (view.TryGetMember("inWeight", out var inWeight)) keyframe.inWeight = inWeight.Value().AsFloat();
if (view.TryGetMember("outWeight", out var outWeight)) keyframe.outWeight = outWeight.Value().AsFloat();
if (view.TryGetMember("weightedMode", out var weightedMode)) keyframe.weightedMode = context.DeserializeValue<WeightedMode>(weightedMode.Value());
#pragma warning disable 618
if (view.TryGetMember("tangentMode", out var tangentMode)) keyframe.tangentMode = context.DeserializeValue<int>(tangentMode.Value());
#pragma warning restore 618
return keyframe;
}
public void Serialize(in JsonSerializationContext<AnimationCurve> context, AnimationCurve value)
{
if (value == null)
{
context.Writer.WriteNull();
return;
}
context.Writer.WriteBeginObject();
context.SerializeValue("keys", value.keys);
context.SerializeValue("postWrapMode", value.postWrapMode);
context.SerializeValue("preWrapMode", value.preWrapMode);
context.Writer.WriteEndObject();
}
public void Serialize(in JsonSerializationContext<Keyframe> context, Keyframe value)
{
context.Writer.WriteBeginObject();
context.SerializeValue("time", value.time);
context.SerializeValue("value", value.value);
context.SerializeValue("inTangent", value.inTangent);
context.SerializeValue("outTangent", value.outTangent);
context.SerializeValue("inWeight", value.inWeight);
context.SerializeValue("outWeight", value.outWeight);
context.SerializeValue("weightedMode", value.weightedMode);
#pragma warning disable 618
context.SerializeValue("tangentMode", value.tangentMode);
#pragma warning restore 618
context.Writer.WriteEndObject();
}
}
}
#endif