com.unity.uiextensions/Runtime/Scripts/Controls/Accordion/Tweening/FloatTween.cs

120 lines
2.7 KiB
C#

///Credit ChoMPHi
///Sourced from - http://forum.unity3d.com/threads/accordion-type-layout.271818/
using UnityEngine.Events;
namespace UnityEngine.UI.Extensions.Tweens
{
public struct FloatTween : ITweenValue
{
public class FloatTweenCallback : UnityEvent<float> {}
public class FloatFinishCallback : UnityEvent {}
private float m_StartFloat;
private float m_TargetFloat;
private float m_Duration;
private bool m_IgnoreTimeScale;
private FloatTweenCallback m_Target;
private FloatFinishCallback m_Finish;
/// <summary>
/// Gets or sets the starting float.
/// </summary>
/// <value>The start float.</value>
public float startFloat
{
get { return m_StartFloat; }
set { m_StartFloat = value; }
}
/// <summary>
/// Gets or sets the target float.
/// </summary>
/// <value>The target float.</value>
public float targetFloat
{
get { return m_TargetFloat; }
set { m_TargetFloat = value; }
}
/// <summary>
/// Gets or sets the duration of the tween.
/// </summary>
/// <value>The duration.</value>
public float duration
{
get { return m_Duration; }
set { m_Duration = value; }
}
/// <summary>
/// Gets or sets a value indicating whether this <see cref="UnityEngine.UI.Tweens.ColorTween"/> should ignore time scale.
/// </summary>
/// <value><c>true</c> if ignore time scale; otherwise, <c>false</c>.</value>
public bool ignoreTimeScale
{
get { return m_IgnoreTimeScale; }
set { m_IgnoreTimeScale = value; }
}
/// <summary>
/// Tweens the float based on percentage.
/// </summary>
/// <param name="floatPercentage">Float percentage.</param>
public void TweenValue(float floatPercentage)
{
if (!ValidTarget())
return;
m_Target.Invoke( Mathf.Lerp (m_StartFloat, m_TargetFloat, floatPercentage) );
}
/// <summary>
/// Adds a on changed callback.
/// </summary>
/// <param name="callback">Callback.</param>
public void AddOnChangedCallback(UnityAction<float> callback)
{
if (m_Target == null)
m_Target = new FloatTweenCallback();
m_Target.AddListener(callback);
}
/// <summary>
/// Adds a on finish callback.
/// </summary>
/// <param name="callback">Callback.</param>
public void AddOnFinishCallback(UnityAction callback)
{
if (m_Finish == null)
m_Finish = new FloatFinishCallback();
m_Finish.AddListener(callback);
}
public bool GetIgnoreTimescale()
{
return m_IgnoreTimeScale;
}
public float GetDuration()
{
return m_Duration;
}
public bool ValidTarget()
{
return m_Target != null;
}
/// <summary>
/// Invokes the on finish callback.
/// </summary>
public void Finished()
{
if (m_Finish != null)
m_Finish.Invoke();
}
}
}