public void AddItem(string label, object data) { if (!_initialized) { Initialize(); } if (Items.Any((item => item.Data == data))) { Debug.LogError("Items list already contains " + data); return; } var newItemData = new SelectableItemData(label, data); var newObj = Instantiate(_itemTemplate, transform, true).gameObject; newObj.gameObject.SetActive(true); newObj.gameObject.name = label; var button = newObj.GetComponent <Button>(); if (button == null) { button = newObj.GetComponentInChildren <Button>(); } button.transform.GetChild(0).GetComponent <Text>().text = label; Items.Add(new SelectableItem(newItemData, button)); var index = Items.Count - 1; button.onClick.AddListener(() => HandleSelected(index)); }
public void DeselectAll() { if (!_initialized) { Initialize(); } foreach (var item in Items) { item.Button.interactable = true; } CurrentSelection = null; }
private void HandleSelected(int index) { if (!_initialized) { Initialize(); } if (index < 0 || index >= Items.Count) { Debug.LogError($"Index of {index} doesn't fit in buttons list with count {Items.Count}!"); return; } DeselectAll(); Items[index].Button.interactable = false; CurrentSelection = Items[index].Data; OnItemSelected?.Invoke(Items[index].Button, Items[index].Data); }
public SelectableItem(SelectableItemData data, Button button) { Data = data; Button = button; }