using System.Collections; using System.Collections.Generic; using UnityEngine; public class EnemyAttack : MonoBehaviour { public int attackDamage = 10; // Damage dealt by the enemy public Transform attackPoint; // The point from which the attack originates public float attackRange = 1f; // Range of the attack public LayerMask playerLayer; // Layer to detect the player public float attackCooldown = 2f; // Time between attacks Animator animator; private Enemy enemy; // Reference to the enemy's state private bool canAttack = true; // Cooldown flag for attacks private void Awake() { animator = GetComponent<Animator>(); // Reference to the Enemy script on the same GameObject enemy = GetComponent<Enemy>(); } public void PerformAttack() { // Ensure the enemy is alive and can attack if (!enemy.isAlive || !canAttack) return; // Check for player within attack range Collider2D playerCollider = Physics2D.OverlapCircle(attackPoint.position, attackRange, playerLayer); if (playerCollider != null) { // Damage the player if detected HealthSystem playerHealth = playerCollider.GetComponent<HealthSystem>(); if (playerHealth != null) { playerHealth.TakeDamage(attackDamage); Debug.Log("Enemy hit the player: " + playerCollider.name); } } // Trigger attack animation if (animator != null) { animator.SetTrigger("attack"); } // Start cooldown StartCoroutine(AttackCooldown()); } private IEnumerator AttackCooldown() { canAttack = false; // Prevent further attacks yield return new WaitForSeconds(attackCooldown); // Wait for cooldown duration canAttack = true; // Allow attacking again } // Debugging: Visualize the attack range in the editor private void OnDrawGizmosSelected() { if (attackPoint == null) return; Gizmos.color = Color.red; Gizmos.DrawWireSphere(attackPoint.position, attackRange); } }