120 lines
2.7 KiB
C#
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();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|