using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; public class AllyUpgrade : MonoBehaviour, IPointerClickHandler { [SerializeField] private GameObject _upgradeUI; [SerializeField] private List _upgradeList = new List(); private GameObject _instance = null; public void OnPointerClick(PointerEventData eventData) { if (eventData.button == 0) //Left click { if (!_instance) { GameObject sceneCanvas = GameObject.Find("Canvas"); if (sceneCanvas != null) { Canvas canvas = sceneCanvas.GetComponent(); if (canvas == null) { Debug.Log("Canvas introuvable..."); } else { _instance = Instantiate(_upgradeUI, Camera.main.WorldToScreenPoint(transform.position), Quaternion.identity, canvas.transform); AssignUpgrades(canvas); DeselectManager.Instance.SetAllyUpgrade(_instance); } } } else { Destroy(_instance); _instance = null; } } } private void AssignUpgrades(Canvas canvas) { // Assign upgrade Prefabs for (int i = 0; i < _instance.transform.childCount - 1; i++) { if (_upgradeList.Count > i && _upgradeList[i] != null) { Transform upgradeEnfant = _instance.transform.Find("Upgrade" + (i + 1)); if (upgradeEnfant && upgradeEnfant.TryGetComponent(out UpgradePlacementButton button)) { button.Initialize(_upgradeList[i], gameObject.gameObject, canvas); } } } } private void OnDestroy() { if (_instance != null) { Destroy(_instance); _instance = null; } } }