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)));
            }
        }
    }
    public static void SetAttack(ItemData weapon, GameObject obj)
    {
        if (weapon == null)
        {
            return;
        }

        AttackPattern script = (AttackPattern)obj.AddComponent(Type.GetType(weapon.attackPattern.name));

        script.SetData(weapon);
    }