using UnityEngine; using System.Collections; public class FireballProjectile : MonoBehaviour { private Vector3 targetPosition; private float speed; private GameObject explosionPrefab; private Collider ownerCollider; private bool canExplode = false; void Start() { Destroy(gameObject, 5f); } void Update() { transform.position = Vector3.MoveTowards(transform.position, targetPosition, speed * Time.deltaTime); } public void Setup(Vector3 target, float speed, GameObject explosionPrefab) { this.targetPosition = target; this.speed = speed; this.explosionPrefab = explosionPrefab; // Empêcher collision immédiate avec le joueur GameObject player = GameObject.FindWithTag("Player"); if (player != null) { ownerCollider = player.GetComponent(); if (ownerCollider != null && GetComponent() != null) Physics.IgnoreCollision(ownerCollider, GetComponent()); } // Attendre un peu avant de pouvoir exploser StartCoroutine(EnableExplosionAfterDelay(0.1f)); } private IEnumerator EnableExplosionAfterDelay(float delay) { yield return new WaitForSeconds(delay); canExplode = true; } private void OnTriggerEnter(Collider other) { if (!canExplode) return; // Ignore si pas prêt ! Debug.Log("[FireballSetup] " + other.name); if (other.CompareTag("Monster")) { Debug.Log("[Fireball] Monstre touché !"); MonsterController monster = other.GetComponent(); if (monster != null) { Debug.Log("Damage to monster"); monster.TakeDamage(30); // dégâts } Explode(); } else if (!other.isTrigger) // Ignore triggers comme les zones { Debug.Log("[Fireball] " + other.name); Explode(); } } void Explode() { if (explosionPrefab != null) Instantiate(explosionPrefab, transform.position, Quaternion.identity); Destroy(gameObject); } }