public virtual IEnumerator TakeTurn(BoardCreator board)
    {
        if (!CanMove())
        {
            ResetMove();
        }
        else
        {
            if (nonNullAttackTarget != null)
            {
                AttackPattern pattern = GetComponent <AttackPattern>();
                yield return(StartCoroutine(pattern.Attack(nonNullAttackTarget)));

                pattern.SetData(GetComponent <UnitStats>().unitInfo.WeaponMain);
                yield return(StartCoroutine(pattern.HitUnits(board, attackTarget, moveTarget)));

                attackTarget        = null;
                nonNullAttackTarget = null;
            }
            else
            {
                SetNextMove(board);

                Movement m = GetComponent <Movement>();
                yield return(StartCoroutine(m.Traverse(moveTarget)));
            }
        }
    }