Pedro Gomes 078fda69ac Continued Stat revamp scaling
- updated all abilities to scale with new stat system
- updated difficulty settings using new stat system
- added S+ difficulty as the end game
- updated items using new stat system
- small re-balance to make things a bit more fun to test
2024-08-18 14:45:57 +01:00

192 lines
6.8 KiB
C#

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