using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; using TMPro; using System; using System.Reflection; using Unity.VisualScripting; using UnityEngine.InputSystem; public class CharacterSelection : MonoBehaviour { private int currentSelection = 0; public Button primaryButton; public Button selectCharacterButton; // New button for character selection public Sprite[] buttonImages; public Sprite[] characterImages; public string[] characterNames; public string[] characterDescriptions; public Sprite[] selectButtons; public Sprite[] characterCards; public Sprite[] characterVsCardsLeft; public Sprite[] characterVsCardsRight; public Image backgroundImage; public Image characterImage; public TextMeshProUGUI characterName; public TextMeshProUGUI characterDescription; public Button[] buttons; private int currentIndex = 0; public GameObject modeScreen; // Reference to the ModeScreen object to activate public ModeSelection modeSelection; public HomeSrceen homeScreen; public Button backButton; // Start is called before the first frame update void Start() { primaryButton.Select(); //buttons = selectButtons; SetBackgroundImage(currentIndex); EventSystem.current.SetSelectedGameObject(buttons[0].gameObject); //backButton.onClick.AddListener(ModeBackButton); } // OPTIMIZATION: Cache last selected index to avoid redundant updates private int lastSelectedIndex = -1; private GameObject lastSelectedObject = null; // Update is called once per frame void Update() { // Cache the current selected object GameObject currentSelected = EventSystem.current?.currentSelectedGameObject; // Early exit if nothing changed if (currentSelected == lastSelectedObject) return; lastSelectedObject = currentSelected; if (currentSelected == null) return; // Only GetComponent if the selected object changed Button selectedButton = currentSelected.GetComponent