FireballProjectile.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using UnityEngine;
  2. using System.Collections;
  3. public class FireballProjectile : MonoBehaviour
  4. {
  5. private Vector3 targetPosition;
  6. private float speed;
  7. private GameObject explosionPrefab;
  8. private Collider ownerCollider;
  9. private bool canExplode = false;
  10. void Start()
  11. {
  12. Destroy(gameObject, 5f);
  13. }
  14. void Update()
  15. {
  16. transform.position = Vector3.MoveTowards(transform.position, targetPosition, speed * Time.deltaTime);
  17. }
  18. public void Setup(Vector3 target, float speed, GameObject explosionPrefab)
  19. {
  20. this.targetPosition = target;
  21. this.speed = speed;
  22. this.explosionPrefab = explosionPrefab;
  23. // Empêcher collision immédiate avec le joueur
  24. GameObject player = GameObject.FindWithTag("Player");
  25. if (player != null)
  26. {
  27. ownerCollider = player.GetComponent<Collider>();
  28. if (ownerCollider != null && GetComponent<Collider>() != null)
  29. Physics.IgnoreCollision(ownerCollider, GetComponent<Collider>());
  30. }
  31. // Attendre un peu avant de pouvoir exploser
  32. StartCoroutine(EnableExplosionAfterDelay(0.1f));
  33. }
  34. private IEnumerator EnableExplosionAfterDelay(float delay)
  35. {
  36. yield return new WaitForSeconds(delay);
  37. canExplode = true;
  38. }
  39. private void OnTriggerEnter(Collider other)
  40. {
  41. if (!canExplode) return; // Ignore si pas prêt !
  42. Debug.Log("[FireballSetup] " + other.name);
  43. if (other.CompareTag("Monster"))
  44. {
  45. Debug.Log("[Fireball] Monstre touché !");
  46. MonsterController monster = other.GetComponent<MonsterController>();
  47. if (monster != null)
  48. {
  49. Debug.Log("Damage to monster");
  50. monster.TakeDamage(30); // dégâts
  51. }
  52. Explode();
  53. }
  54. else if (!other.isTrigger) // Ignore triggers comme les zones
  55. {
  56. Debug.Log("[Fireball] " + other.name);
  57. Explode();
  58. }
  59. }
  60. void Explode()
  61. {
  62. if (explosionPrefab != null)
  63. Instantiate(explosionPrefab, transform.position, Quaternion.identity);
  64. Destroy(gameObject);
  65. }
  66. }