using UnityEngine; using UnityEngine.UI; public class DELETE : MonoBehaviour { // La corbeille n'est plus un bouton du panneau OBSTACLES : elle est posee en haut a droite // de la vignette de l'objet lui-meme. Seul l'objet selectionne l'affiche, et il se distingue // par un contour vert (l'image "Circle" deja presente sur chaque vignette). public const string BTN = "BTN_Delete"; const float Size = 42f; static readonly Color Green = new(0f, 0.85f, 0.2f, 1f); static readonly Color Hidden = new(1f, 0f, 0f, 0f); static readonly Color Red = new(0.85f, 0.15f, 0.15f, 1f); public static void Delete() { Delete(_G.SELECTED); } public static void Delete(string Oname) { if (string.IsNullOrEmpty(Oname)) return; string Ostring = Oname.Replace("clone", "_"); string[] parts = Ostring.Split('_'); if (parts.Length > 1 && int.TryParse(parts[1], out int nO) && _G.OBJs[nO] != null) _G.OBJs[nO][0] = "null"; GameObject O = GameObject.Find(Oname); if (O != null) DestroyImmediate(O); if (_G.SELECTED == Oname) _G.SELECTED = ""; Refresh(); } // Remet a jour toutes les vignettes de OBSTACLELIST : contour vert et corbeille sur l'objet // selectionne uniquement. Hors du panneau OBSTACLES on masque les corbeilles sans toucher aux // contours : ils y servent d'indicateur de configuration (rouge = a positionner, vert = fait). public static void Refresh() { GameObject list = Get.o2("Canvas", "OBSTACLELIST"); if (list == null) return; bool onObstacles = _G.PNL == "OBSTACLES"; foreach (Transform O in list.transform) { bool selected = onObstacles && O.name == _G.SELECTED; Transform btn = O.Find(BTN); if (btn == null && selected) btn = Build(O).transform; if (btn != null) btn.gameObject.SetActive(selected); if (!onObstacles) continue; Transform circle = O.Find("Circle"); if (circle != null) circle.GetComponent().color = selected ? Green : Hidden; } } // Pendant un deplacement la corbeille generait le drag : on la retire de toutes les vignettes. public static void HideButtons() { GameObject list = Get.o2("Canvas", "OBSTACLELIST"); if (list == null) return; foreach (Transform O in list.transform) { Transform btn = O.Find(BTN); if (btn != null) btn.gameObject.SetActive(false); } } static GameObject Build(Transform O) { GameObject B = new(BTN, typeof(RectTransform), typeof(CanvasRenderer), typeof(Image), typeof(Button)); B.layer = O.gameObject.layer; B.transform.SetParent(O, false); RectTransform rt = B.GetComponent(); rt.anchorMin = rt.anchorMax = Vector2.one;// coin haut/droit de la vignette rt.pivot = new Vector2(0.5f, 0.5f); rt.anchoredPosition = Vector2.zero; rt.sizeDelta = new Vector2(Size, Size); rt.localScale = Vector3.one; Image bg = B.GetComponent(); bg.sprite = Resources.Load("Images/Empty round"); bg.color = Red; GameObject icon = new("Icon", typeof(RectTransform), typeof(CanvasRenderer), typeof(Image)); icon.layer = B.layer; icon.transform.SetParent(B.transform, false); RectTransform ir = icon.GetComponent(); ir.anchorMin = ir.anchorMax = ir.pivot = new Vector2(0.5f, 0.5f); ir.anchoredPosition = Vector2.zero; ir.sizeDelta = new Vector2(Size * 0.42f, Size * 0.52f); Image im = icon.GetComponent(); im.sprite = Resources.Load("Images/Icons/Buttons/IBasket"); im.raycastTarget = false;// le clic doit atteindre le bouton, pas l'icone string Oname = O.name; B.GetComponent