- Crafting UI fully functional - Crafting Stat stones and modular equippable items fully functional Notes: - Urgent need for exclusive(auto sorted) inventory for stones only - Something to do with the "trash" modular items instead of just selling - Add new uses for gold besides equipment, preset items will probably be worthless with modular crafting
241 lines
8.8 KiB
C#
241 lines
8.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(ItemInstance 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(ItemInstance itemToShow)
|
|
{
|
|
if (itemToShow is CraftingStatStone)
|
|
{
|
|
ShowtooltipCraftingStone(itemToShow);
|
|
return;
|
|
}
|
|
if (!(itemToShow is EquippableItemInstance))
|
|
{
|
|
ShowNonEquippableItemTooltip(itemToShow);
|
|
return;
|
|
}
|
|
|
|
EquippableItemInstance item = (EquippableItemInstance)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(ItemInstance itemFromVendor)
|
|
{
|
|
if (itemFromVendor is CraftingStatStone)
|
|
{
|
|
ShowtooltipCraftingStone(itemFromVendor);
|
|
return;
|
|
}
|
|
if (!(itemFromVendor is EquippableItemInstance))
|
|
{
|
|
ShowNonEquippableItemTooltip(itemFromVendor, true);
|
|
return;
|
|
}
|
|
|
|
EquippableItemInstance item = (EquippableItemInstance)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 ShowtooltipCraftingStone(ItemInstance itemToShow)
|
|
{
|
|
CraftingStatStone item = (CraftingStatStone)itemToShow;
|
|
|
|
gameObject.SetActive(true);
|
|
|
|
nameText.text = item.ItemName;
|
|
sellPriceText.text = sellText + item.sellPricePlayer.ToString();
|
|
|
|
sb.Length = 0;
|
|
|
|
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 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);
|
|
}
|
|
}
|
|
}
|
|
}
|