public DamageInstance(Knockback knockback, float damage, DamageTypes type, Being creator, AbilityTypes ability, bool isRanged = true) { IsRanged = isRanged; Knockback = knockback; Damage = damage * (1 + GameplayConstants.DamageFactorPerLevel * Level.CurrentLevel); DamageType = type; Creator = creator; var variance = (float)Globals.Random.NextDouble() * GameplayConstants.DamageVariance + 1.0f - GameplayConstants.DamageVariance / 2; Damage *= variance; if (Creator.IsCritical(DamageType, ability)) { IsCritical = true; Damage *= GameplayConstants.CriticalDamageBonus; if (Knockback != null) { Knockback.Duration = TimeSpan.FromMilliseconds((float)Knockback.Duration.TotalMilliseconds * GameplayConstants.CriticalDamageKnockbackDurationBonus); Knockback.Speed *= GameplayConstants.CriticalDamageKnockbackSpeedBonus; } } }