/**
* 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.LookAt
{
///
/// Look at parameter.
///
public sealed class CubismLookParameter : MonoBehaviour
{
///
/// Look axis.
///
[SerializeField]
public CubismLookAxis Axis;
///
/// Factor.
///
[SerializeField]
public float Factor;
#region Unity Event Handling
///
/// Called by Unity. Guesses best settings.
///
private void Reset()
{
var parameter = GetComponent();
// Fail silently.
if (parameter == null)
{
return;
}
// Guess axis.
if (parameter.name.EndsWith("Y"))
{
Axis = CubismLookAxis.Y;
}
else if (parameter.name.EndsWith("Z"))
{
Axis = CubismLookAxis.Z;
}
else
{
Axis = CubismLookAxis.X;
}
// Guess factor.
Factor = parameter.MaximumValue;
}
#endregion
#region Interface for Controller
///
/// Updates and evaluates the instance.
///
/// Delta to target.
/// Evaluation result.
internal float TickAndEvaluate(Vector3 targetOffset)
{
var result = (Axis == CubismLookAxis.X)
? targetOffset.x
: targetOffset.y;
if (Axis == CubismLookAxis.Z)
{
result = targetOffset.z;
}
return result * Factor;
}
#endregion
}
}