/**
 * Copyright(c) Live2D Inc. All rights reserved.
 *
 * Use of this source code is governed by the Live2D Open Software license
 * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html.
 */
using System;
using UnityEngine;
namespace Live2D.Cubism.Framework.Json
{
    /// 
    /// Cubism exp3.json data.
    /// 
    [Serializable]
    public sealed class CubismExp3Json
    {
        #region Load Methods
        /// 
        /// Loads a exp3.json asset.
        /// 
        /// exp3.json to deserialize.
        /// Deserialized exp3.json on success;  otherwise.
        public static CubismExp3Json LoadFrom(string exp3Json)
        {
            return (string.IsNullOrEmpty(exp3Json))
                ? null
                : JsonUtility.FromJson(exp3Json);
        }
        /// 
        /// Loads a exp3.json asset.
        /// 
        /// exp3.json to deserialize.
        /// Deserialized exp3.json on success;  otherwise.
        public static CubismExp3Json LoadFrom(TextAsset exp3JsonAsset)
        {
            return (exp3JsonAsset == null)
                ? null
                : LoadFrom(exp3JsonAsset.text);
        }
        #endregion
        #region Json Data
        /// 
        /// Expression Type
        /// 
        [SerializeField]
        public string Type;
        /// 
        /// Expression FadeInTime
        /// 
        [SerializeField]
        public float FadeInTime = 1.0f;
        /// 
        /// Expression FadeOutTime
        /// 
        [SerializeField]
        public float FadeOutTime = 1.0f;
        /// 
        /// Expression Parameters
        /// 
        [SerializeField]
        public SerializableExpressionParameter[] Parameters;
        #endregion
        #region Json Helpers
        /// 
        /// Expression Parameter
        /// 
        [Serializable]
        public struct SerializableExpressionParameter
        {
            /// 
            /// Expression Parameter Id
            /// 
            [SerializeField]
            public string Id;
            /// 
            /// Expression Parameter Value
            /// 
            [SerializeField]
            public float Value;
            /// 
            /// Expression Parameter Blend Mode
            /// 
            [SerializeField]
            public string Blend;
        }
        #endregion
    }
}