public bool checkingDefaultAttackRange(Monster attacker, Monster target, IVector3 targetPosition, float offset = 0.0f)
 {
     if (attacker.isPlayerSide == false)
     {
         if (isShortType)
         {
             return(VectorUtil.DistanceXZ(targetPosition, attacker.cTransformPosition) <= (IFloat)(attacker.stat.atkRange + target.damageRange + offset + attacker.damageRange));                                // hitrange
         }
         else
         {
             return(Xfloat.lessEqualThan(attacker.cTransformPosition.x - attacker.stat.atkRange - offset - attacker.damageRange, targetPosition.x + target.hitObject.lineRight));
         }
     }
     else
     {
         if (isShortType)
         {
             return(Xfloat.lessEqualThan(VectorUtil.DistanceXZ(targetPosition, attacker.cTransformPosition), attacker.stat.atkRange + target.damageRange + offset + attacker.damageRange));                                 // hitrange
         }
         else
         {
             return(Xfloat.greatEqualThan(attacker.cTransformPosition.x + attacker.stat.atkRange + offset + attacker.damageRange, target.hitObject.lineLeft + targetPosition.x));
         }
     }
 }
    public static int getDamage(float inputAtk, float def, float inputMagicAtk = 0.0f, float magicDef = 0.0f, float damagePer = 1.0f, float minimumDamagePer = 1.0f, float damagePer2 = 1.0f, float inputTempDiscountDamageValue = 1.0f)
    // damagePer2는 공격동작중 한번에 여러번 타격판정이 들어가는 경우에 사용한다.
    {
        //#if UNITY_EDITOR
        //		Log.log("atk:",atk,"def:",def,"magicAtk:",magicAtk,"magicDef:",magicDef,"damagePer:",damagePer,"minimumDamagePer:",minimumDamagePer,"damagePer2:",damagePer2);
        //#endif
        IFloat atk      = inputAtk;
        IFloat magicAtk = inputMagicAtk;
        IFloat tempDiscountDamageValue = inputTempDiscountDamageValue;

        damagePer = (Mathf.Round(damagePer * 100.0f)) / 100.0f;

        //데미지 = 물리공격력 * (1/SQRT(물리방어력)) * A + 마법공격력 * (1/SQRT(마법방어력)) * B
        //* SQRT : 제곱근, A : 데미지보정계수 (5), B : 데미지보정계수 (5)

        if (Xfloat.lessEqualThan(def, 0))
        {
            def = 1;
        }

        if (Xfloat.lessEqualThan(magicDef, 0))
        {
            magicDef = 1;
        }

        atk = (atk * (1.0f / Mathf.Sqrt(def))) * 5.0f + (magicAtk * (1.0f / Mathf.Sqrt(magicDef)) * 5.0f);

        // damagePer // 기본 데미지의 몇 %.
        // minimumDamagePer // 데미지의 최소 비율.
        if (Xfloat.lessThan(damagePer, 1.0f))
        {
            atk = atk * minimumDamagePer + ((atk - (atk * minimumDamagePer)) * damagePer);
        }

        // 얘는 한공격 동작에 데미지가 여러번 들어가는 경우 그 횟수로 나누어줘서 밸런스를 맞춰주기 위함이다.
        atk *= damagePer2;


        // 이런 코드를 만들고 싶지 않았으나... 공격타입 5번과 15번은 단계마다 특정비율로 데미지를 깍는다.
        // 거치는 곳이 많기 때문에 어쩔 수 없이 예외를 만들어 데미지를 깍아준다.
        atk *= tempDiscountDamageValue;

        int gValue = Mathf.RoundToInt(atk * 100.0f);

        if (GameManager.inGameRandom.Range(0, 100) < gValue % 100)
        {
            return(gValue / 100 + 1);
        }
        else
        {
            return(gValue / 100);
        }
    }