using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; public class BuildManagerUIController : MonoBehaviour { [SerializeField] private List abilitySlotsDropdowns = new List(); [SerializeField] private GameEventListener_BuildManager onBuildManagerInitialized; BuildManager buildManager; List possibleAbilities = new List(); List abilitiesOptions = new List(); TMP_Dropdown.OptionData optionData = new TMP_Dropdown.OptionData(); int pickedEntry; string pickedEntryName; BaseAbility ability; private void Awake() { onBuildManagerInitialized.Response.AddListener(DependencyInjection); abilitySlotsDropdowns[0].onValueChanged.AddListener((x) => UpdateAbilitySlotOnDropdownValueChanged(0, x)); abilitySlotsDropdowns[1].onValueChanged.AddListener((x) => UpdateAbilitySlotOnDropdownValueChanged(1, x)); abilitySlotsDropdowns[2].onValueChanged.AddListener((x) => UpdateAbilitySlotOnDropdownValueChanged(2, x)); abilitySlotsDropdowns[3].onValueChanged.AddListener((x) => UpdateAbilitySlotOnDropdownValueChanged(3, x)); } private void UpdateAbilitySlotOnDropdownValueChanged(int dropdownIndex, int pickedEntry) { ability = GetAbilityFromDropdown(dropdownIndex); buildManager.UpdateBuildOnAbilitiesChanged(dropdownIndex, ability); } private BaseAbility GetAbilityFromDropdown(int dropdownIndex) { pickedEntry = abilitySlotsDropdowns[dropdownIndex].value; return possibleAbilities[pickedEntry]; } private void DependencyInjection(BuildManager buildManager) { this.buildManager = buildManager; InitializeDropdowns(); } private void InitializeDropdowns() { possibleAbilities = BuildLibrary.Instance.GetBaseAbilities(buildManager.CharacterClass); abilitiesOptions.Clear(); for (int i = 0; i < possibleAbilities.Count; i++) { optionData = new TMP_Dropdown.OptionData(); optionData.text = possibleAbilities[i].displayName; optionData.image = possibleAbilities[i].Icon; abilitiesOptions.Add(optionData); } for (int i = 0; i < abilitySlotsDropdowns.Count; i++) { abilitySlotsDropdowns[i].options.Clear(); abilitySlotsDropdowns[i].AddOptions(abilitiesOptions); abilitySlotsDropdowns[i].RefreshShownValue(); abilitySlotsDropdowns[i].value = possibleAbilities.IndexOf(buildManager.SelectedBuildSlots[i].ability); } } }