// Проводим атаку public void Attack(bool isShell, UnitManager enemy) { if (enemy != null && !enemy.IsDead) { // Проверяем "защитные" перки float final_damage = enemy.CheckDefensivePerks(Damage, isShell, this); // Если атаку не заблокировали if (final_damage > 0) { // Трясём камеру при ударах if (shakeHits) { cam_shake.SmallShake(); } // Если есть "атакующие" перки, проверяем их и наносим урон if (havePerks) { enemy.DoDamage(fight_manager.CheckAttackingPerks(final_damage, isShell, enemy)); } else { enemy.DoDamage(final_damage); // Если "атакующих" перков нет, просто наносим возвращённый урон } // Толкаем противника if (punch_strength != 0 && Random.Range(0, 99) < punch_chance && enemy.CanBePushed) { enemy.rb.AddForce(Vector2.right * Random.Range(punch_strength - 1.2f, punch_strength + 1.2f) * direction, ForceMode2D.Impulse); } // Замедляем время на доли секунд при нанесении урона if (Time.timeScale == 1) { Time.timeScale = slow_strength; StartCoroutine(ResumeTime()); } // Создаём частицы попадания снаряда if (isShell) { particles_manager.SpawnParticles("Shell Hit", enemy.transform.position.x + Random.Range(-0.25f, 0.2f), enemy.transform.position.y + Random.Range(-0.05f, 0.45f)); } } else { //Debug.Log("Hit/shell was blocked/evaded by - " + enemy + ", from enemy - " + name); } } }