using UnityEngine; using UnityEngine.UI; public class ShapeRecipe : MonoBehaviour { [SerializeField] private GameObject ShapeContainer; [Tooltip("Le bouton Next du panneau : bloqué tant que le container est vide.")] [SerializeField] private Button nextButton; // Le CanvasGroup éventuellement posé sur ce bouton, retrouvé au premier appel. private CanvasGroup _nextGroup; // Vrai dès qu'une forme est affichée dans le container. C'est l'état visible // à l'écran, indépendant de _G.SHAPE_SELECTIONS. public bool HasSelection { get { if (ShapeContainer == null) return false; foreach (Transform child in ShapeContainer.transform) { if (child.gameObject.activeSelf) return true; } return false; } } // À l'ouverture du panneau, le Next suit l'état du container. void OnEnable() { RefreshNext(); } // Vide la sélection : les formes disparaissent et le Next se rebloque. public void ClearSelection() { if (ShapeContainer != null) { foreach (Transform child in ShapeContainer.transform) { child.gameObject.SetActive(false); } } _G.SHAPE_SELECTIONS.Clear(); RefreshNext(); } private void RefreshNext() { if (nextButton == null) { Debug.LogError("ShapeRecipe : le champ Next Button est vide sur " + name + ".", this); return; } bool ready = HasSelection; nextButton.interactable = ready; // Un CanvasGroup posé sur le bouton l'emporte sur Button.interactable : // laissé à false, le bouton reste inerte et ne reçoit même pas les clics. if (_nextGroup == null) _nextGroup = nextButton.GetComponent(); if (_nextGroup != null) { _nextGroup.interactable = ready; _nextGroup.blocksRaycasts = ready; } } public void AddnewShape(string name) { print("Name of shape is ===="+name); Transform shape = ShapeContainer.transform.Find(name); if (shape == null) { Debug.LogWarning("ShapeRecipe : aucune forme nommée " + name + " sous " + ShapeContainer.name + ".", this); return; } shape.gameObject.SetActive(true); // Une forme peut être rechoisie maintenant qu'elle reste cliquable : Add // lèverait une exception sur une clé déjà présente. _G.SHAPE_SELECTIONS[name] = ""; // Toutes les formes affichées restent cliquables. foreach (Transform child in ShapeContainer.transform) { if (!child.gameObject.activeSelf) continue; Button button = child.GetComponent