/**
* 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.Unmanaged;
using Live2D.Cubism.Framework;
using UnityEngine;
namespace Live2D.Cubism.Core
{
///
/// Single parameter.
///
[CubismDontMoveOnReimport]
public sealed class CubismParameter : MonoBehaviour
{
#region Factory Methods
///
/// Creates drawables for a .
///
/// Handle to unmanaged model.
/// Drawables root.
internal static GameObject CreateParameters(CubismUnmanagedModel unmanagedModel)
{
var root = new GameObject("Parameters");
// Create parameters.
var unmanagedParameters = unmanagedModel.Parameters;
var buffer = new CubismParameter[unmanagedParameters.Count];
for (var i = 0; i < buffer.Length; ++i)
{
var proxy = new GameObject();
buffer[i] = proxy.AddComponent();
buffer[i].transform.SetParent(root.transform);
buffer[i].Reset(unmanagedModel, i);
}
return root;
}
#endregion
///
/// Unmanaged parameters from unmanaged model.
///
private CubismUnmanagedParameters UnmanagedParameters { get; set; }
///
/// backing field.
///
[SerializeField, HideInInspector]
private int _unmanagedIndex = -1;
///
/// Position in unmanaged arrays.
///
internal int UnmanagedIndex
{
get { return _unmanagedIndex; }
private set { _unmanagedIndex = value; }
}
///
/// Copy of Id.
///
public string Id
{
get
{
// Pull data.
return UnmanagedParameters.Ids[UnmanagedIndex];
}
}
///
/// Minimum value.
///
public float MinimumValue
{
get
{
// Pull data.
return UnmanagedParameters.MinimumValues[UnmanagedIndex];
}
}
///
/// Maximum value.
///
public float MaximumValue
{
get
{
// Pull data.
return UnmanagedParameters.MaximumValues[UnmanagedIndex];
}
}
///
/// Default value.
///
public float DefaultValue
{
get
{
// Pull data.
return UnmanagedParameters.DefaultValues[UnmanagedIndex];
}
}
///
/// Current value.
///
[SerializeField, HideInInspector]
public float Value;
///
/// Revives the instance.
///
/// Handle to unmanaged model.
internal void Revive(CubismUnmanagedModel unmanagedModel)
{
UnmanagedParameters = unmanagedModel.Parameters;
}
///
/// Restores instance to initial state.
///
/// Handle to unmanaged model.
/// Position in unmanaged arrays.
private void Reset(CubismUnmanagedModel unmanagedModel, int unmanagedIndex)
{
Revive(unmanagedModel);
UnmanagedIndex = unmanagedIndex;
name = Id;
Value = DefaultValue;
}
}
}