Example #1
0
        public AttackInfo(Unit sUnit, Unit tUnit, bool useAOE = true)
        {
            srcUnit = sUnit;  tgtUnit = tUnit;

            damageMin      = srcUnit.GetDamageMin();
            damageMax      = srcUnit.GetDamageMax();
            aoeRange       = useAOE ? srcUnit.GetAOERange() : 0;
            critChance     = srcUnit.GetCritChance();
            critMultiplier = tUnit.GetImmunedToCrit() ? 0 : srcUnit.GetCritMultiplier();

            //~ useEffect=srcUnit.UseEffectOnHit();
            //~ if(useEffect) effect=srcUnit.GetEffectOnHit().Clone();
            if (Random.value < srcUnit.GetEffectOnHitChance())
            {
                effect = srcUnit.GetEffectOnHit();
            }

            critical = Random.value < critChance;
            damage   = Mathf.Round(Random.Range(damageMin, damageMax)) * (critical ? critMultiplier : 1);

            //Debug.Log(damageMin+"  "+damageMax+"   "+damage);

            damage *= DamageTable.GetModifier(tgtUnit.GetArmorType(), srcUnit.GetDamageType());
            damage *= (1 - tUnit.GetDmgReduction());

            if (Random.value < srcUnit.GetHit() - tgtUnit.GetDodge())
            {
                hit = true;
            }
        }