//----------------------------------------------------------------------- // // Copyright (c) 2018 Sirenix IVS // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // //----------------------------------------------------------------------- using VRC.Udon.Serialization.OdinSerializer; [assembly: RegisterFormatter(typeof(AnimationCurveFormatter))] namespace VRC.Udon.Serialization.OdinSerializer { using UnityEngine; /// /// Custom formatter for the type. /// /// public class AnimationCurveFormatter : MinimalBaseFormatter { private static readonly Serializer KeyframeSerializer = Serializer.Get(); private static readonly Serializer WrapModeSerializer = Serializer.Get(); /// /// Returns null. /// /// /// A null value. /// protected override AnimationCurve GetUninitializedObject() { return null; } /// /// Reads into the specified value using the specified reader. /// /// The value to read into. /// The reader to use. protected override void Read(ref AnimationCurve value, IDataReader reader) { var keys = KeyframeSerializer.ReadValue(reader); value = new AnimationCurve(keys); value.preWrapMode = WrapModeSerializer.ReadValue(reader); value.postWrapMode = WrapModeSerializer.ReadValue(reader); } /// /// Writes from the specified value using the specified writer. /// /// The value to write from. /// The writer to use. protected override void Write(ref AnimationCurve value, IDataWriter writer) { KeyframeSerializer.WriteValue(value.keys, writer); WrapModeSerializer.WriteValue(value.preWrapMode, writer); WrapModeSerializer.WriteValue(value.postWrapMode, writer); } } }