// Helper Coroutines
    IEnumerator HeroMoveSelection()
    {
        FightingEntity hero = this._field.GetHeroPlayer();

        if (!hero.HasModifier(ModifierAilment.MODIFIER_CANNOT_USE_ACTION))
        {
            this._heroMenuActions.Push(new HeroMenuAction(MenuState.MOVE));
            InitializeCommandCardActionUI(GetHeroActionChoices(ActionType.BASIC));
        }
        else
        {
            this.HeroActionConfirmed();
            this._heroMenuActions.Push(new HeroMenuAction(MenuState.WAITING));
        }

        while (true)
        {
            HeroMenuAction menuAction = this.GetHeroMenuAction();
            MenuState      menuState  = menuAction.menuState;
            switch (menuState)
            {
            case MenuState.MOVE:
                if (Input.GetKeyDown(KeyCode.Z))
                {
                    SetHeroAction();
                }
                break;

            case MenuState.TARGET:
                if (Input.GetKeyDown(KeyCode.Z))
                {
                    SetHeroTarget();
                }
                break;

            case MenuState.MAGIC:
                if (Input.GetKeyDown(KeyCode.Z))
                {
                    SetHeroAction();
                }
                break;

            default:
                break;
            }

            if (_heroMenuActions.Count > 1)
            {
                // Go back a menu
                if (Input.GetKeyDown(KeyCode.X))
                {
                    GoBackToLastHeroAction();
                }
            }

            if (Input.GetKeyDown(KeyCode.L))
            {
                _playerActionCounter = this.maxTimeBeforeAction;
            }

            if (hero.HasSetCommand())
            {
                _playerActionCounter += Time.deltaTime;
            }

            if (this.CheckExecuteTurn())
            {
                break;
            }
            yield return(null);
        }
    }