/** * 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; } } }