MIF_E31221263/Assets/Scripts/Managers/UIManager.cs

142 lines
4.6 KiB
C#

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;
}
}