/**
* 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 Live2D.Cubism.Core;
using UnityEngine;
namespace Live2D.Cubism.Framework.Expression
{
///
/// The cubism expression data.
///
[System.Serializable]
public class CubismPlayingExpression
{
#region variable
///
/// Expression type.
///
[SerializeField]
public string Type;
///
/// Expression fade in time.
///
[SerializeField]
public float FadeInTime;
///
/// Expression fade out time.
///
[SerializeField]
public float FadeOutTime;
///
/// Expression Weight.
///
[SerializeField, Range(0.0f, 1.0f)]
public float Weight;
///
/// Expression user time.
///
[SerializeField]
public float ExpressionUserTime;
///
/// Expression end time.
///
[SerializeField]
public float ExpressionEndTime;
///
/// Expression parameters cache.
///
[SerializeField]
public CubismParameter[] Destinations;
///
/// Expression parameter value.
///
[SerializeField]
public float[] Value;
///
/// Expression parameter blend mode.
///
[SerializeField]
public CubismParameterBlendMode[] Blend;
#endregion
///
/// Initialize expression data from .
///
/// model.
/// Source.
public static CubismPlayingExpression Create(CubismModel model, CubismExpressionData expressionData)
{
// Fail silently...
if(model == null || expressionData == null)
{
return null;
}
var ret = new CubismPlayingExpression();
ret.Type = expressionData.Type;
ret.FadeInTime = (expressionData.FadeInTime < 0.0f)
? 1.0f
: expressionData.FadeInTime;
ret.FadeOutTime = (expressionData.FadeOutTime < 0.0f)
? 1.0f
: expressionData.FadeOutTime;
ret.Weight = 0.0f;
ret.ExpressionUserTime = 0.0f;
ret.ExpressionEndTime = 0.0f;
var parameterCount = expressionData.Parameters.Length;
ret.Destinations = new CubismParameter[parameterCount];
ret.Value = new float[parameterCount];
ret.Blend = new CubismParameterBlendMode[parameterCount];
for(var i = 0; i < parameterCount; ++i)
{
ret.Destinations[i] = model.Parameters.FindById(expressionData.Parameters[i].Id);
ret.Value[i] = expressionData.Parameters[i].Value;
ret.Blend[i] = expressionData.Parameters[i].Blend;
}
return ret;
}
}
}