using System; using TMPro; using UnityEngine; using UnityEngine.UI; public class UIManager : MonoBehaviour { [Header("Stats")] [SerializeField] private PlayerStats stats; [Header("Bars")] [SerializeField] private Image healthBar; [SerializeField] private Image manaBar; [SerializeField] private Image expBar; [Header("Text")] [SerializeField] private TextMeshProUGUI levelTMP; [SerializeField] private TextMeshProUGUI healthTMP; [SerializeField] private TextMeshProUGUI manaTMP; [SerializeField] private TextMeshProUGUI expTMP; [SerializeField] private TextMeshProUGUI coinsTMP; [Header("Stats Panel")] [SerializeField] private GameObject statsPanel; [SerializeField] private TextMeshProUGUI statLevelTMP; [SerializeField] private TextMeshProUGUI statDamageTMP; [SerializeField] private TextMeshProUGUI statCChanceTMP; [SerializeField] private TextMeshProUGUI statCDamageTMP; [SerializeField] private TextMeshProUGUI statTotalExpTMP; [SerializeField] private TextMeshProUGUI statCurrentExpTMP; [SerializeField] private TextMeshProUGUI statRequiredExpTMP; [SerializeField] private TextMeshProUGUI attributePointsTMP; [SerializeField] private TextMeshProUGUI strengthTMP; [SerializeField] private TextMeshProUGUI dexterityTMP; [SerializeField] private TextMeshProUGUI intelligenceTMP; [Header("Extra Panels")] [SerializeField] private GameObject npcQuestPanel; [SerializeField] private GameObject playerQuestPanel; [SerializeField] private GameObject shopPanel; [SerializeField] private GameObject craftingPanel; private void Update() { UpdatePlayerUI(); } public void OpenCloseStatsPanel() { statsPanel.SetActive(!statsPanel.activeSelf); if (statsPanel.activeSelf) { UpdateStatsPanel(); } } public void OpenCloseNPCQuestPanel(bool value) { npcQuestPanel.SetActive(value); } public void OpenClosePlayerQuestPanel(bool value) { playerQuestPanel.SetActive(value); } public void OpenCloseShopPanel(bool value) { shopPanel.SetActive(value); } public void OpenCloseCraftPanel(bool value) { craftingPanel.SetActive(value); } private void UpdatePlayerUI() { healthBar.fillAmount = Mathf.Lerp(healthBar.fillAmount, stats.Health / stats.MaxHealth, 10f * Time.deltaTime); manaBar.fillAmount = Mathf.Lerp(manaBar.fillAmount, stats.Mana / stats.MaxMana, 10f * Time.deltaTime); expBar.fillAmount = Mathf.Lerp(expBar.fillAmount, stats.CurrentExp / stats.NextLevelExp, 10f * Time.deltaTime); levelTMP.text = $"Level {stats.Level}"; healthTMP.text = $"{stats.Health} / {stats.MaxHealth}"; manaTMP.text = $"{stats.Mana} / {stats.MaxMana}"; expTMP.text = $"{stats.CurrentExp} / {stats.NextLevelExp}"; coinsTMP.text = CoinManager.Instance.Coins.ToString(); } private void UpdateStatsPanel() { statLevelTMP.text = stats.Level.ToString(); statDamageTMP.text = stats.TotalDamage.ToString(); statCChanceTMP.text = stats.CriticalChance.ToString(); statCDamageTMP.text = stats.CriticalDamage.ToString(); statTotalExpTMP.text = stats.TotalExp.ToString(); statCurrentExpTMP.text = stats.CurrentExp.ToString(); statRequiredExpTMP.text = stats.NextLevelExp.ToString(); attributePointsTMP.text = $"Points: {stats.AttributePoints}"; strengthTMP.text = stats.Strength.ToString(); dexterityTMP.text = stats.Dexterity.ToString(); intelligenceTMP.text = stats.Intelligence.ToString(); } private void UpgradeCallback() { UpdateStatsPanel(); } private void ExtraInteractionCallback(InteractionType type) { switch (type) { case InteractionType.Quest: OpenCloseNPCQuestPanel(true); break; case InteractionType.Shop: OpenCloseShopPanel(true); break; case InteractionType.Crafting: OpenCloseCraftPanel(true); break; } } private void OnEnable() { PlayerUpgrade.OnPlayerUpgradeEvent += UpgradeCallback; DialogueManager.OnExtraInteractionEvent += ExtraInteractionCallback; } private void OnDisable() { PlayerUpgrade.OnPlayerUpgradeEvent -= UpgradeCallback; DialogueManager.OnExtraInteractionEvent -= ExtraInteractionCallback; } }