|
|
|
|
using UnityEngine;
|
|
|
|
|
using System.Collections;
|
|
|
|
|
|
|
|
|
|
namespace MoreMountains.Tools
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Use this class to offset an animation by a random range
|
|
|
|
|
/// </summary>
|
|
|
|
|
[RequireComponent(typeof(Animator))]
|
|
|
|
|
[AddComponentMenu("More Mountains/Tools/Animation/MMOffsetAnimation")]
|
|
|
|
|
public class MMOffsetAnimation : MonoBehaviour
|
|
|
|
|
{
|
|
|
|
|
/// the minimum amount (in seconds) by which to offset the animation
|
|
|
|
|
public float MinimumRandomRange = 0f;
|
|
|
|
|
/// the maximum amount (in seconds) by which to offset the animation
|
|
|
|
|
public float MaximumRandomRange = 1f;
|
|
|
|
|
/// the layer to affect
|
|
|
|
|
public int AnimationLayerID = 0;
|
|
|
|
|
/// whether or not to apply that offset on Start
|
|
|
|
|
public bool OffsetOnStart = true;
|
|
|
|
|
/// whether or not to offset animation on enable
|
|
|
|
|
public bool OffsetOnEnable = false;
|
|
|
|
|
/// whether or not to self disable after offsetting
|
|
|
|
|
public bool DisableAfterOffset = true;
|
|
|
|
|
|
|
|
|
|
protected Animator _animator;
|
|
|
|
|
protected AnimatorStateInfo _stateInfo;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// On awake we store our animator
|
|
|
|
|
/// </summary>
|
|
|
|
|
protected virtual void Awake()
|
|
|
|
|
{
|
|
|
|
|
_animator = this.gameObject.GetComponent<Animator>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// On Start we offset our animation
|
|
|
|
|
/// </summary>
|
|
|
|
|
protected virtual void Start()
|
|
|
|
|
{
|
|
|
|
|
if (!OffsetOnStart)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
OffsetCurrentAnimation();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// On Enable we offset our animation if needed
|
|
|
|
|
/// </summary>
|
|
|
|
|
protected virtual void OnEnable()
|
|
|
|
|
{
|
|
|
|
|
if (!OffsetOnEnable)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
OffsetCurrentAnimation();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// offsets the target animation
|
|
|
|
|
/// </summary>
|
|
|
|
|
public virtual void OffsetCurrentAnimation()
|
|
|
|
|
{
|
|
|
|
|
_stateInfo = _animator.GetCurrentAnimatorStateInfo(AnimationLayerID);
|
|
|
|
|
_animator.Play(_stateInfo.fullPathHash, -1, Random.Range(MinimumRandomRange, MaximumRandomRange));
|
|
|
|
|
if (DisableAfterOffset)
|
|
|
|
|
{
|
|
|
|
|
this.enabled = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|