using UnityEngine; using UnityEngine.UI; using System.Text; namespace Kryz.CharacterStats.Examples { public class ItemTooltip : MonoBehaviour { public static ItemTooltip Instance; [SerializeField] Text nameText; [SerializeField] Text slotTypeText; [SerializeField] Text sellPriceText; [SerializeField] Text statsText; private StringBuilder sb = new StringBuilder(); private string sellText = "Sell: "; private void Awake() { if (Instance == null) { Instance = this; } else { Destroy(this); } gameObject.SetActive(false); } private void ShowNonEquippableItemTooltip(Item itemToShow, bool fromVendor = false) { if (itemToShow == null) return; gameObject.SetActive(true); nameText.text = itemToShow.ItemName; slotTypeText.text = ""; if (fromVendor) sellPriceText.text = sellText + itemToShow.sellPriceVendor.ToString(); else sellPriceText.text = sellText + itemToShow.sellPricePlayer.ToString(); statsText.text = itemToShow.description; } public void ShowTooltip(Item itemToShow) { if (!(itemToShow is EquippableItem)) { ShowNonEquippableItemTooltip(itemToShow); return; } EquippableItem item = (EquippableItem)itemToShow; gameObject.SetActive(true); nameText.text = item.ItemName; slotTypeText.text = item.EquipmentType.ToString(); sellPriceText.text = sellText + item.sellPricePlayer.ToString(); sb.Length = 0; AddStatText(item.StrengthBonus, " Strength"); AddStatText(item.AgilityBonus, " Agility"); AddStatText(item.IntelligenceBonus, " Intelligence"); AddStatText(item.SpiritBonus, " Spirit"); AddStatText(item.VitalityBonus, " Vitality"); sb.AppendLine(); AddStatText(item.StrengthPercentBonus * 100, "% Strength"); AddStatText(item.AgilityPercentBonus * 100, "% Agility"); AddStatText(item.IntelligencePercentBonus * 100, "% Intelligence"); AddStatText(item.SpiritPercentBonus * 100, "% Spirit"); AddStatText(item.VitalityPercentBonus * 100, "% Vitality"); sb.AppendLine(); AddStatText(item.AttackDamageBonus, " Attack Damage"); AddStatText(item.SpellDamageBonus, " Spell Damage"); AddStatText(item.CritChanceBonus, "% Base Crit Chance"); AddStatText(item.CritDamageBonus, "% Base Crit Damage"); AddStatText(item.MaxHealthBonus, " Max Health"); AddStatText(item.ArmorBonus, " Armor"); AddStatText(item.MagicResistanceBonus, " Magic Resistance"); sb.AppendLine(); AddStatText(item.AttackDamagePercentBonus * 100, " % Attack Damage"); AddStatText(item.SpellDamagePercentBonus * 100, " % Spell Damage"); AddStatText(item.CritChancePercentBonus * 100, "% Increased Crit Chance"); AddStatText(item.CritDamagePercentBonus * 100, "% Increased Crit Damage"); AddStatText(item.MaxHealthPercentBonus * 100, " % Max Health"); AddStatText(item.ArmorPercentBonus * 100, " % Armor"); AddStatText(item.MagicResistancePercentBonus * 100, " % Magic Resistance"); if (!string.IsNullOrEmpty(itemToShow.description)) { sb.AppendLine(); sb.AppendLine(); sb.Append(itemToShow.description); } statsText.text = sb.ToString(); } public void ShowTooltipVendor(Item itemFromVendor) { if (!(itemFromVendor is EquippableItem)) { ShowNonEquippableItemTooltip(itemFromVendor, true); return; } EquippableItem item = (EquippableItem)itemFromVendor; gameObject.SetActive(true); nameText.text = item.ItemName; slotTypeText.text = item.EquipmentType.ToString(); sellPriceText.text = sellText + item.sellPriceVendor.ToString(); sb.Length = 0; AddStatText(item.StrengthBonus, " Strength"); AddStatText(item.AgilityBonus, " Agility"); AddStatText(item.IntelligenceBonus, " Intelligence"); AddStatText(item.SpiritBonus, " Spirit"); AddStatText(item.VitalityBonus, " Vitality"); sb.AppendLine(); AddStatText(item.StrengthPercentBonus * 100, "% Strength"); AddStatText(item.AgilityPercentBonus * 100, "% Agility"); AddStatText(item.IntelligencePercentBonus * 100, "% Intelligence"); AddStatText(item.SpiritPercentBonus * 100, "% Spirit"); AddStatText(item.VitalityPercentBonus * 100, "% Vitality"); sb.AppendLine(); AddStatText(item.AttackDamageBonus, " Attack Damage"); AddStatText(item.SpellDamageBonus, " Spell Damage"); AddStatText(item.CritChanceBonus, "% Base Crit Chance"); AddStatText(item.CritDamageBonus, "% Base Crit Damage"); AddStatText(item.MaxHealthBonus, " Max Health"); AddStatText(item.ArmorBonus, " Armor"); AddStatText(item.MagicResistanceBonus, " Magic Resistance"); sb.AppendLine(); AddStatText(item.AttackDamagePercentBonus * 100, " % Attack Damage"); AddStatText(item.SpellDamagePercentBonus * 100, " % Spell Damage"); AddStatText(item.CritChancePercentBonus * 100, "% Increased Crit Chance"); AddStatText(item.CritDamagePercentBonus * 100, "% Increased Crit Damage"); AddStatText(item.MaxHealthPercentBonus * 100, " % Max Health"); AddStatText(item.ArmorPercentBonus * 100, " % Armor"); AddStatText(item.MagicResistancePercentBonus * 100, " % Magic Resistance"); if (!string.IsNullOrEmpty(itemFromVendor.description)) { sb.AppendLine(); sb.AppendLine(); sb.Append(itemFromVendor.description); } statsText.text = sb.ToString(); } public void HideTooltip() { gameObject.SetActive(false); } private void AddStatText(float statBonus, string statName) { if (statBonus != 0) { if (sb.Length > 0) sb.AppendLine(); if (statBonus > 0) sb.Append("+"); sb.Append(statBonus); sb.Append(statName); } } } }