using System; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; public class AbilityUIObject : MonoBehaviour { [Header("Ability Identification")] [SerializeField] private Image abilityIcon; [SerializeField] private TextMeshProUGUI abilityName; [Header("Ability Stats")] [SerializeField] private TextMeshProUGUI damage; [SerializeField] private TextMeshProUGUI fireRate; [SerializeField] private TextMeshProUGUI piercing; [SerializeField] private TextMeshProUGUI projectileCount; [Header("Upgrades")] [SerializeField] private int upgradeSlotAmount; [SerializeField] private UpgradeBoxUI templateUpgradeBox; [SerializeField] private Transform upgradeGrid; [SerializeField] private List upgradeBoxes = new(); public PlayerAbility thisAbility; public void UpdateUI() { abilityIcon.sprite = thisAbility.abilityIcon; abilityName.text = thisAbility.abilityName; damage.text = $"Damage: {thisAbility.power}"; fireRate.text = $"Fire rate: {thisAbility.cooldown}s"; if (thisAbility.TryGetComponent(out FireBullet isBullet)) { piercing.text = $"Piercing: {isBullet.pierceAmount}"; projectileCount.text = $"Projectiles: {isBullet.projectileCount}"; } foreach (AbilityUpgrade upgrade in AbilityManager.instance.allUpgrades) { if (thisAbility.GetUpgradeCount(upgrade) > 0) { AddUpgradeBox(upgrade); } } int upgradeBoxesToAdd = Math.Abs(upgradeSlotAmount - upgradeBoxes.Count); for (int i = 0; i < upgradeBoxesToAdd; i++) { AddUpgradeBox(null); } } public void AddUpgradeBox(AbilityUpgrade upgrade) { UpgradeBoxUI newBox = Instantiate(templateUpgradeBox, upgradeGrid); newBox.gameObject.SetActive(true); upgradeBoxes.Add(newBox); newBox.UpdateCounter(); newBox.thisPlayerAbility = thisAbility; if (upgrade) { newBox.upgradeImage.sprite = upgrade.upgradeIcon; newBox.thisAbilityUpgrade = upgrade; } } public void UpdateUpgradeBoxes() { foreach (UpgradeBoxUI box in upgradeBoxes) { box.UpdateCounter(); } } }