public async Task AsyncPlayAndWait(CharacterBattlerAnimation characterBattlerAnimation,
                                           float speedModifier = 1f)
        {
            var state = "";
            await CharacterBattler.QueueActionAndAwait(() =>
                                                       state = GetStateNameFromAnimation(characterBattlerAnimation));

            await CharacterBattler.QueueActionAndAwait(() =>
            {
                Animator.speed = speedModifier;
                Animator.Play(state);
            });

            await Task.Delay(5);

            bool condition = false;

            void EvaluteCondition()
            {
                condition = Animator.GetCurrentAnimatorStateInfo(0).IsName(state);
                if (!condition)
                {
                    Animator.speed = 1f;
                }
            }

            await CharacterBattler.QueueActionAndAwait(EvaluteCondition);

            while (condition)
            {
                await CharacterBattler.QueueActionAndAwait(EvaluteCondition);
            }
        }
        public void Play(CharacterBattlerAnimation characterBattlerAnimation, bool lockTransition = false)
        {
            var state = GetStateNameFromAnimation(characterBattlerAnimation);

            if (lockTransition)
            {
                Animator.SetBool("CanTransition", false);
            }

            Animator.Play(state);
        }
        public IEnumerator PlayAndWait(CharacterBattlerAnimation characterBattlerAnimation, float speedModifier = 1f)
        {
            Animator.speed = speedModifier;
            var state = GetStateNameFromAnimation(characterBattlerAnimation);

            Animator.Play(state);

            yield return(new WaitForEndOfFrame());

            yield return(new WaitWhile(() => Animator.GetCurrentAnimatorStateInfo(0).IsName(state)));

            Animator.speed = 1f;
        }