chip-gameV3/Assets/Scripts/AnimationDistributor.cs

56 lines
1.5 KiB
C#

using System.Collections.Generic;
using UnityEngine;
public class AnimationDistributor : StateMachineBehaviour
{
[SerializeField] private float _minSwitchTime = 7;
[SerializeField] private float _maxSwitchTime = 15;
[SerializeField] List<string> _triggers;
private List<string> _shuffledTriggers;
private int _currentIndex = 0;
private float _nextSwitchTime = 0;
public override void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
if (Time.time < _nextSwitchTime) return;
animator.SetTrigger(GetNextTrigger());
_nextSwitchTime = Time.time + Random.Range(_minSwitchTime, _maxSwitchTime);
}
private string GetNextTrigger()
{
var shuffled = GetShuffledList();
string trigger = shuffled[_currentIndex];
_currentIndex++;
if (_currentIndex >= shuffled.Count)
{
_shuffledTriggers = null;
_currentIndex = 0;
}
return trigger;
}
private List<string> GetShuffledList()
{
if (_shuffledTriggers == null || _shuffledTriggers.Count == 0)
{
System.Random rng = new System.Random();
_shuffledTriggers = new List<string>(_triggers);
int n = _shuffledTriggers.Count;
while (n > 1)
{
n--;
int k = rng.Next(n + 1);
(_shuffledTriggers[k], _shuffledTriggers[n]) = (_shuffledTriggers[n], _shuffledTriggers[k]);
}
}
return _shuffledTriggers;
}
}