icon load fix, tooltip fix

This commit is contained in:
Pedro Gomes 2025-09-23 18:11:24 +01:00
parent e3dc37e3fd
commit 70a7a4774a
6 changed files with 140 additions and 35 deletions

View File

@ -274,7 +274,11 @@ namespace Kryz.CharacterStats.Examples
}
else
{
equipmentData.equippedItems[i].Icon = ItemIndexer.Instance.Items[equipmentData.equippedItems[i].templateIndex].Icon;
if (equipmentData.equippedItems[i].templateIndex >= 0)
equipmentData.equippedItems[i].Icon = ItemIndexer.Instance.Items[equipmentData.equippedItems[i].templateIndex].Icon;
else
equipmentData.equippedItems[i].Icon = Resources.Load<Sprite>(equipmentData.equippedItems[i].IconPath);
equipmentSlots[i].Item = equipmentData.equippedItems[i];
}
}

View File

@ -125,13 +125,14 @@ public class EquippedItemTooltip : MonoBehaviour
sb.Length = 0;
//TODO: Add new stats
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.HealthRegenBonus, " Health Regen");
AddStatText(item.MaxManaBonus, " Max Mana");
AddStatText(item.ManaRegenBonus, " Mana Regen");
AddStatText(item.ArmorBonus, " Armor");
AddStatText(item.MagicResistanceBonus, " Magic Resistance");
@ -139,11 +140,23 @@ public class EquippedItemTooltip : MonoBehaviour
AddStatText(item.AttackDamagePercentBonus * 100, " % Attack Damage");
AddStatText(item.SpellDamagePercentBonus * 100, " % Spell Damage");
AddStatText(item.AttackSpeedPercentBonus * 100, " % Attack Speed");
AddStatText(item.CritChancePercentBonus * 100, "% Increased Crit Chance");
AddStatText(item.CritDamagePercentBonus * 100, "% Increased Crit Damage");
AddStatText(item.MaxHealthPercentBonus * 100, " % Max Health");
AddStatText(item.HealthRegenPercentBonus * 100, " % Health Regen");
AddStatText(item.MaxManaPercentBonus * 100, " % Max Mana");
AddStatText(item.ManaRegenPercentBonus * 100, " % ManaRegen");
AddStatText(item.ArmorPercentBonus * 100, " % Armor");
AddStatText(item.MagicResistancePercentBonus * 100, " % Magic Resistance");
AddStatText(item.DodgeChancePercentBonus * 100, " % Dodge Chance");
AddStatText(item.BlockChancePercentBonus * 100, " % Block Chance");
AddStatText(item.BlockEffectivenessPercentBonus * 100, " % Block Effectiveness");
AddStatText(item.AreaEffectivenessPercentBonus * 100, " % Area Effectiveness");
AddStatText(item.CooldownReductionPercentBonus * 100, " % Cooldown Reduction");
AddStatText(item.MovementSpeedPercentBonus * 100, " % Movement Speed");
AddStatText(item.ReputationGainIncreasePercentBonus * 100, " % Reputation Gain Increase");
AddStatText(item.GoldCostReductionPercentBonus * 100, " % Gold Cost Reduction");
if (!string.IsNullOrEmpty(itemFromVendor.description))
{

View File

@ -67,13 +67,14 @@ namespace Kryz.CharacterStats.Examples
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.HealthRegenBonus, " Health Regen");
AddStatText(item.MaxManaBonus, " Max Mana");
AddStatText(item.ManaRegenBonus, " Mana Regen");
AddStatText(item.ArmorBonus, " Armor");
AddStatText(item.MagicResistanceBonus, " Magic Resistance");
@ -81,11 +82,23 @@ namespace Kryz.CharacterStats.Examples
AddStatText(item.AttackDamagePercentBonus * 100, " % Attack Damage");
AddStatText(item.SpellDamagePercentBonus * 100, " % Spell Damage");
AddStatText(item.AttackSpeedPercentBonus * 100, " % Attack Speed");
AddStatText(item.CritChancePercentBonus * 100, "% Increased Crit Chance");
AddStatText(item.CritDamagePercentBonus * 100, "% Increased Crit Damage");
AddStatText(item.MaxHealthPercentBonus * 100, " % Max Health");
AddStatText(item.HealthRegenPercentBonus * 100, " % Health Regen");
AddStatText(item.MaxManaPercentBonus * 100, " % Max Mana");
AddStatText(item.ManaRegenPercentBonus * 100, " % ManaRegen");
AddStatText(item.ArmorPercentBonus * 100, " % Armor");
AddStatText(item.MagicResistancePercentBonus * 100, " % Magic Resistance");
AddStatText(item.DodgeChancePercentBonus * 100, " % Dodge Chance");
AddStatText(item.BlockChancePercentBonus * 100, " % Block Chance");
AddStatText(item.BlockEffectivenessPercentBonus * 100, " % Block Effectiveness");
AddStatText(item.AreaEffectivenessPercentBonus * 100, " % Area Effectiveness");
AddStatText(item.CooldownReductionPercentBonus * 100, " % Cooldown Reduction");
AddStatText(item.MovementSpeedPercentBonus * 100, " % Movement Speed");
AddStatText(item.ReputationGainIncreasePercentBonus * 100, " % Reputation Gain Increase");
AddStatText(item.GoldCostReductionPercentBonus * 100, " % Gold Cost Reduction");
if (!string.IsNullOrEmpty(itemToShow.description))
{

View File

@ -3748,9 +3748,9 @@ MonoBehaviour:
m_EditorClassIdentifier: Assembly-CSharp::EquippableItemGenerator
minStatRolls: 2
maxStatRolls: 6
baseStatValue: 10
baseStatValue: 1
statVariance: 0.3
percentStatBaseValue: 0.05
percentStatBaseValue: 0.01
armorWeights:
attackDamage: 1
spellDamage: 1
@ -8737,6 +8737,7 @@ MonoBehaviour:
currentlySelectedCraftingItem:
ItemName:
Icon: {fileID: 0}
IconPath:
sellPricePlayer: 0
sellPriceVendor: 0
description:
@ -8779,6 +8780,7 @@ MonoBehaviour:
currentlySelectedCraftingStatStone:
ItemName:
Icon: {fileID: 0}
IconPath:
sellPricePlayer: 0
sellPriceVendor: 0
description:

View File

@ -78,7 +78,7 @@ Material:
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _Rotation: 89.72914
- _Rotation: 0.019999992
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

View File

@ -11,6 +11,10 @@ public class EquippableItemGenerator : MonoBehaviour
public float statVariance = 0.3f; // 30% variance
public float percentStatBaseValue = 0.05f; // 5% base for percent stats
// Add this field to your EquippableItemGenerator class
[Header("Path Mapping")]
private Dictionary<Sprite, string> spritePathMap = new Dictionary<Sprite, string>();
[Header("Stat Roll Weights by Equipment Type")]
[SerializeField] private StatWeights armorWeights = new StatWeights();
[SerializeField] private StatWeights weaponWeights = new StatWeights();
@ -75,127 +79,175 @@ public class EquippableItemGenerator : MonoBehaviour
Legendary
}
private void Awake()
{
UpdateListsFromResources();
}
[ContextMenu("Update Lists From Resources")]
private void UpdateListsFromResources()
{
// Clear existing mappings
if (spritePathMap == null)
spritePathMap = new Dictionary<Sprite, string>();
spritePathMap.Clear();
// Armor pieces
HelmetIcons.Clear();
foreach (Sprite sprite in Resources.LoadAll<Sprite>("Armor/Helmets"))
Sprite[] helmetSprites = Resources.LoadAll<Sprite>("Armor/Helmets");
foreach (Sprite sprite in helmetSprites)
{
HelmetIcons.Add(sprite);
spritePathMap[sprite] = $"Armor/Helmets/{sprite.name}";
}
ShoulderIcons.Clear();
foreach (Sprite sprite in Resources.LoadAll<Sprite>("Armor/Shoulders"))
Sprite[] shoulderSprites = Resources.LoadAll<Sprite>("Armor/Shoulders");
foreach (Sprite sprite in shoulderSprites)
{
ShoulderIcons.Add(sprite);
spritePathMap[sprite] = $"Armor/Shoulders/{sprite.name}";
}
ChestIcons.Clear();
foreach (Sprite sprite in Resources.LoadAll<Sprite>("Armor/Chests"))
Sprite[] chestSprites = Resources.LoadAll<Sprite>("Armor/Chests");
foreach (Sprite sprite in chestSprites)
{
ChestIcons.Add(sprite);
spritePathMap[sprite] = $"Armor/Chests/{sprite.name}";
}
BeltIcons.Clear();
foreach (Sprite sprite in Resources.LoadAll<Sprite>("Armor/Belts"))
Sprite[] beltSprites = Resources.LoadAll<Sprite>("Armor/Belts");
foreach (Sprite sprite in beltSprites)
{
BeltIcons.Add(sprite);
spritePathMap[sprite] = $"Armor/Belts/{sprite.name}";
}
LegsIcons.Clear();
foreach (Sprite sprite in Resources.LoadAll<Sprite>("Armor/Legs"))
Sprite[] legsSprites = Resources.LoadAll<Sprite>("Armor/Legs");
foreach (Sprite sprite in legsSprites)
{
LegsIcons.Add(sprite);
spritePathMap[sprite] = $"Armor/Legs/{sprite.name}";
}
BracersIcons.Clear();
foreach (Sprite sprite in Resources.LoadAll<Sprite>("Armor/Bracers"))
Sprite[] bracersSprites = Resources.LoadAll<Sprite>("Armor/Bracers");
foreach (Sprite sprite in bracersSprites)
{
BracersIcons.Add(sprite);
spritePathMap[sprite] = $"Armor/Bracers/{sprite.name}";
}
GlovesIcons.Clear();
foreach (Sprite sprite in Resources.LoadAll<Sprite>("Armor/Gloves"))
Sprite[] glovesSprites = Resources.LoadAll<Sprite>("Armor/Gloves");
foreach (Sprite sprite in glovesSprites)
{
GlovesIcons.Add(sprite);
spritePathMap[sprite] = $"Armor/Gloves/{sprite.name}";
}
BootsIcons.Clear();
foreach (Sprite sprite in Resources.LoadAll<Sprite>("Armor/Boots"))
Sprite[] bootsSprites = Resources.LoadAll<Sprite>("Armor/Boots");
foreach (Sprite sprite in bootsSprites)
{
BootsIcons.Add(sprite);
spritePathMap[sprite] = $"Armor/Boots/{sprite.name}";
}
// Two-handed weapons
StaffIcons.Clear();
foreach (Sprite sprite in Resources.LoadAll<Sprite>("Weapons/Staffs"))
Sprite[] staffSprites = Resources.LoadAll<Sprite>("Weapons/Staffs");
foreach (Sprite sprite in staffSprites)
{
StaffIcons.Add(sprite);
spritePathMap[sprite] = $"Weapons/Staffs/{sprite.name}";
}
SpearIcons.Clear();
foreach (Sprite sprite in Resources.LoadAll<Sprite>("Weapons/Spears"))
Sprite[] spearSprites = Resources.LoadAll<Sprite>("Weapons/Spears");
foreach (Sprite sprite in spearSprites)
{
SpearIcons.Add(sprite);
spritePathMap[sprite] = $"Weapons/Spears/{sprite.name}";
}
ScytheIcons.Clear();
foreach (Sprite sprite in Resources.LoadAll<Sprite>("Weapons/Scythes"))
Sprite[] scytheSprites = Resources.LoadAll<Sprite>("Weapons/Scythes");
foreach (Sprite sprite in scytheSprites)
{
ScytheIcons.Add(sprite);
spritePathMap[sprite] = $"Weapons/Scythes/{sprite.name}";
}
HammerIcons.Clear();
foreach (Sprite sprite in Resources.LoadAll<Sprite>("Weapons/Hammers"))
Sprite[] hammerSprites = Resources.LoadAll<Sprite>("Weapons/Hammers");
foreach (Sprite sprite in hammerSprites)
{
HammerIcons.Add(sprite);
spritePathMap[sprite] = $"Weapons/Hammers/{sprite.name}";
}
BowIcons.Clear();
foreach (Sprite sprite in Resources.LoadAll<Sprite>("Weapons/Bows"))
Sprite[] bowSprites = Resources.LoadAll<Sprite>("Weapons/Bows");
foreach (Sprite sprite in bowSprites)
{
BowIcons.Add(sprite);
spritePathMap[sprite] = $"Weapons/Bows/{sprite.name}";
}
CrossbowIcons.Clear();
foreach (Sprite sprite in Resources.LoadAll<Sprite>("Weapons/Crossbows"))
Sprite[] crossbowSprites = Resources.LoadAll<Sprite>("Weapons/Crossbows");
foreach (Sprite sprite in crossbowSprites)
{
CrossbowIcons.Add(sprite);
spritePathMap[sprite] = $"Weapons/Crossbows/{sprite.name}";
}
AxeIcons.Clear();
foreach (Sprite sprite in Resources.LoadAll<Sprite>("Weapons/Axes"))
Sprite[] axeSprites = Resources.LoadAll<Sprite>("Weapons/Axes");
foreach (Sprite sprite in axeSprites)
{
AxeIcons.Add(sprite);
spritePathMap[sprite] = $"Weapons/Axes/{sprite.name}";
}
// One-handed weapons
SwordIcons.Clear();
foreach (Sprite sprite in Resources.LoadAll<Sprite>("Weapons/Swords"))
Sprite[] swordSprites = Resources.LoadAll<Sprite>("Weapons/Swords");
foreach (Sprite sprite in swordSprites)
{
SwordIcons.Add(sprite);
spritePathMap[sprite] = $"Weapons/Swords/{sprite.name}";
}
ShieldIcons.Clear();
foreach (Sprite sprite in Resources.LoadAll<Sprite>("Weapons/Shields"))
Sprite[] shieldSprites = Resources.LoadAll<Sprite>("Weapons/Shields");
foreach (Sprite sprite in shieldSprites)
{
ShieldIcons.Add(sprite);
spritePathMap[sprite] = $"Weapons/Shields/{sprite.name}";
}
DaggerIcons.Clear();
foreach (Sprite sprite in Resources.LoadAll<Sprite>("Weapons/Daggers"))
Sprite[] daggerSprites = Resources.LoadAll<Sprite>("Weapons/Daggers");
foreach (Sprite sprite in daggerSprites)
{
DaggerIcons.Add(sprite);
spritePathMap[sprite] = $"Weapons/Daggers/{sprite.name}";
}
BookIcons.Clear();
foreach (Sprite sprite in Resources.LoadAll<Sprite>("Weapons/Books"))
Sprite[] bookSprites = Resources.LoadAll<Sprite>("Weapons/Books");
foreach (Sprite sprite in bookSprites)
{
BookIcons.Add(sprite);
spritePathMap[sprite] = $"Weapons/Books/{sprite.name}";
}
Debug.Log("Updated all icon lists from Resources folders");
Debug.Log($"Updated all icon lists from Resources folders. Loaded {spritePathMap.Count} sprites with paths.");
}
public EquippableItemInstance GenerateEquippableItemInstance()
@ -229,7 +281,7 @@ public class EquippableItemGenerator : MonoBehaviour
// Set basic properties
item.EquipmentType = equipmentType;
item.ItemName = GenerateItemName(equipmentType, tier);
item.Icon = GetRandomIcon(equipmentType);
item.Icon = GetRandomIcon(equipmentType, item);
Debug.Log("Generated: " + item.ItemName + " icon " + item.Icon.name);
// Set weapon type if it's a weapon
@ -253,7 +305,7 @@ public class EquippableItemGenerator : MonoBehaviour
item.EquipmentType = EquipmentType.Weapon1;
item.WeaponType = weaponType;
item.ItemName = GenerateWeaponName(weaponType, tier);
item.Icon = GetWeaponIcon(weaponType);
item.Icon = GetWeaponIcon(weaponType, item);
Debug.Log("Generated: " + item.ItemName + " icon " + item.Icon.name);
GenerateStatsForItem(item, tier, playerLevel);
@ -274,7 +326,7 @@ public class EquippableItemGenerator : MonoBehaviour
item.EquipmentType = weaponSlot;
item.WeaponType = weaponType;
item.ItemName = GenerateWeaponName(weaponType, tier);
item.Icon = GetWeaponIcon(weaponType);
item.Icon = GetWeaponIcon(weaponType, item);
GenerateStatsForItem(item, tier, playerLevel);
@ -572,7 +624,8 @@ public class EquippableItemGenerator : MonoBehaviour
return string.IsNullOrEmpty(prefix) ? baseName : $"{prefix} {baseName}";
}
private Sprite GetRandomIcon(EquipmentType equipmentType)
// Update your icon selection methods to store the path
private Sprite GetRandomIcon(EquipmentType equipmentType, EquippableItemInstance item)
{
List<Sprite> iconList = equipmentType switch
{
@ -590,12 +643,22 @@ public class EquippableItemGenerator : MonoBehaviour
};
if (iconList != null && iconList.Count > 0)
return iconList[Random.Range(0, iconList.Count)];
{
Sprite selectedSprite = iconList[Random.Range(0, iconList.Count)];
// Store the path in the item
if (spritePathMap.TryGetValue(selectedSprite, out string path))
{
item.IconPath = path;
}
return selectedSprite;
}
return null;
}
private Sprite GetWeaponIcon(WeaponType weaponType)
private Sprite GetWeaponIcon(WeaponType weaponType, EquippableItemInstance item)
{
List<Sprite> iconList = weaponType switch
{
@ -614,7 +677,17 @@ public class EquippableItemGenerator : MonoBehaviour
};
if (iconList != null && iconList.Count > 0)
return iconList[Random.Range(0, iconList.Count)];
{
Sprite selectedSprite = iconList[Random.Range(0, iconList.Count)];
// Store the path in the item
if (spritePathMap.TryGetValue(selectedSprite, out string path))
{
item.IconPath = path;
}
return selectedSprite;
}
return null;
}