diff --git a/Assets/Character Stats/Examples/Items & Inventory/Scripts/EquipmentPanel.cs b/Assets/Character Stats/Examples/Items & Inventory/Scripts/EquipmentPanel.cs index 0e78dd34..e80d2106 100644 --- a/Assets/Character Stats/Examples/Items & Inventory/Scripts/EquipmentPanel.cs +++ b/Assets/Character Stats/Examples/Items & Inventory/Scripts/EquipmentPanel.cs @@ -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(equipmentData.equippedItems[i].IconPath); + equipmentSlots[i].Item = equipmentData.equippedItems[i]; } } diff --git a/Assets/Character Stats/Examples/Items & Inventory/Scripts/EquippedItemTooltip.cs b/Assets/Character Stats/Examples/Items & Inventory/Scripts/EquippedItemTooltip.cs index 24a33086..445974f7 100644 --- a/Assets/Character Stats/Examples/Items & Inventory/Scripts/EquippedItemTooltip.cs +++ b/Assets/Character Stats/Examples/Items & Inventory/Scripts/EquippedItemTooltip.cs @@ -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)) { diff --git a/Assets/Character Stats/Examples/Items & Inventory/Scripts/ItemTooltip.cs b/Assets/Character Stats/Examples/Items & Inventory/Scripts/ItemTooltip.cs index 5e916983..9db9f68e 100644 --- a/Assets/Character Stats/Examples/Items & Inventory/Scripts/ItemTooltip.cs +++ b/Assets/Character Stats/Examples/Items & Inventory/Scripts/ItemTooltip.cs @@ -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)) { diff --git a/Assets/Developer/Prefabs/Persistent Objects.prefab b/Assets/Developer/Prefabs/Persistent Objects.prefab index f6644917..8a4d422c 100644 --- a/Assets/Developer/Prefabs/Persistent Objects.prefab +++ b/Assets/Developer/Prefabs/Persistent Objects.prefab @@ -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: diff --git a/Assets/Fantasy Skybox FREE/Panoramics/FS002/FS002_Night.mat b/Assets/Fantasy Skybox FREE/Panoramics/FS002/FS002_Night.mat index 4e0d8a84..85cb93fb 100644 --- a/Assets/Fantasy Skybox FREE/Panoramics/FS002/FS002_Night.mat +++ b/Assets/Fantasy Skybox FREE/Panoramics/FS002/FS002_Night.mat @@ -78,7 +78,7 @@ Material: - _Mode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - - _Rotation: 89.72914 + - _Rotation: 0.019999992 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 diff --git a/Assets/Scripts/Items/Generator/EquippableItemGenerator.cs b/Assets/Scripts/Items/Generator/EquippableItemGenerator.cs index 2ca68772..fab449d2 100644 --- a/Assets/Scripts/Items/Generator/EquippableItemGenerator.cs +++ b/Assets/Scripts/Items/Generator/EquippableItemGenerator.cs @@ -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 spritePathMap = new Dictionary(); + [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(); + spritePathMap.Clear(); + // Armor pieces HelmetIcons.Clear(); - foreach (Sprite sprite in Resources.LoadAll("Armor/Helmets")) + Sprite[] helmetSprites = Resources.LoadAll("Armor/Helmets"); + foreach (Sprite sprite in helmetSprites) { HelmetIcons.Add(sprite); + spritePathMap[sprite] = $"Armor/Helmets/{sprite.name}"; } ShoulderIcons.Clear(); - foreach (Sprite sprite in Resources.LoadAll("Armor/Shoulders")) + Sprite[] shoulderSprites = Resources.LoadAll("Armor/Shoulders"); + foreach (Sprite sprite in shoulderSprites) { ShoulderIcons.Add(sprite); + spritePathMap[sprite] = $"Armor/Shoulders/{sprite.name}"; } ChestIcons.Clear(); - foreach (Sprite sprite in Resources.LoadAll("Armor/Chests")) + Sprite[] chestSprites = Resources.LoadAll("Armor/Chests"); + foreach (Sprite sprite in chestSprites) { ChestIcons.Add(sprite); + spritePathMap[sprite] = $"Armor/Chests/{sprite.name}"; } BeltIcons.Clear(); - foreach (Sprite sprite in Resources.LoadAll("Armor/Belts")) + Sprite[] beltSprites = Resources.LoadAll("Armor/Belts"); + foreach (Sprite sprite in beltSprites) { BeltIcons.Add(sprite); + spritePathMap[sprite] = $"Armor/Belts/{sprite.name}"; } LegsIcons.Clear(); - foreach (Sprite sprite in Resources.LoadAll("Armor/Legs")) + Sprite[] legsSprites = Resources.LoadAll("Armor/Legs"); + foreach (Sprite sprite in legsSprites) { LegsIcons.Add(sprite); + spritePathMap[sprite] = $"Armor/Legs/{sprite.name}"; } BracersIcons.Clear(); - foreach (Sprite sprite in Resources.LoadAll("Armor/Bracers")) + Sprite[] bracersSprites = Resources.LoadAll("Armor/Bracers"); + foreach (Sprite sprite in bracersSprites) { BracersIcons.Add(sprite); + spritePathMap[sprite] = $"Armor/Bracers/{sprite.name}"; } GlovesIcons.Clear(); - foreach (Sprite sprite in Resources.LoadAll("Armor/Gloves")) + Sprite[] glovesSprites = Resources.LoadAll("Armor/Gloves"); + foreach (Sprite sprite in glovesSprites) { GlovesIcons.Add(sprite); + spritePathMap[sprite] = $"Armor/Gloves/{sprite.name}"; } BootsIcons.Clear(); - foreach (Sprite sprite in Resources.LoadAll("Armor/Boots")) + Sprite[] bootsSprites = Resources.LoadAll("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("Weapons/Staffs")) + Sprite[] staffSprites = Resources.LoadAll("Weapons/Staffs"); + foreach (Sprite sprite in staffSprites) { StaffIcons.Add(sprite); + spritePathMap[sprite] = $"Weapons/Staffs/{sprite.name}"; } SpearIcons.Clear(); - foreach (Sprite sprite in Resources.LoadAll("Weapons/Spears")) + Sprite[] spearSprites = Resources.LoadAll("Weapons/Spears"); + foreach (Sprite sprite in spearSprites) { SpearIcons.Add(sprite); + spritePathMap[sprite] = $"Weapons/Spears/{sprite.name}"; } ScytheIcons.Clear(); - foreach (Sprite sprite in Resources.LoadAll("Weapons/Scythes")) + Sprite[] scytheSprites = Resources.LoadAll("Weapons/Scythes"); + foreach (Sprite sprite in scytheSprites) { ScytheIcons.Add(sprite); + spritePathMap[sprite] = $"Weapons/Scythes/{sprite.name}"; } HammerIcons.Clear(); - foreach (Sprite sprite in Resources.LoadAll("Weapons/Hammers")) + Sprite[] hammerSprites = Resources.LoadAll("Weapons/Hammers"); + foreach (Sprite sprite in hammerSprites) { HammerIcons.Add(sprite); + spritePathMap[sprite] = $"Weapons/Hammers/{sprite.name}"; } BowIcons.Clear(); - foreach (Sprite sprite in Resources.LoadAll("Weapons/Bows")) + Sprite[] bowSprites = Resources.LoadAll("Weapons/Bows"); + foreach (Sprite sprite in bowSprites) { BowIcons.Add(sprite); + spritePathMap[sprite] = $"Weapons/Bows/{sprite.name}"; } CrossbowIcons.Clear(); - foreach (Sprite sprite in Resources.LoadAll("Weapons/Crossbows")) + Sprite[] crossbowSprites = Resources.LoadAll("Weapons/Crossbows"); + foreach (Sprite sprite in crossbowSprites) { CrossbowIcons.Add(sprite); + spritePathMap[sprite] = $"Weapons/Crossbows/{sprite.name}"; } AxeIcons.Clear(); - foreach (Sprite sprite in Resources.LoadAll("Weapons/Axes")) + Sprite[] axeSprites = Resources.LoadAll("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("Weapons/Swords")) + Sprite[] swordSprites = Resources.LoadAll("Weapons/Swords"); + foreach (Sprite sprite in swordSprites) { SwordIcons.Add(sprite); + spritePathMap[sprite] = $"Weapons/Swords/{sprite.name}"; } ShieldIcons.Clear(); - foreach (Sprite sprite in Resources.LoadAll("Weapons/Shields")) + Sprite[] shieldSprites = Resources.LoadAll("Weapons/Shields"); + foreach (Sprite sprite in shieldSprites) { ShieldIcons.Add(sprite); + spritePathMap[sprite] = $"Weapons/Shields/{sprite.name}"; } DaggerIcons.Clear(); - foreach (Sprite sprite in Resources.LoadAll("Weapons/Daggers")) + Sprite[] daggerSprites = Resources.LoadAll("Weapons/Daggers"); + foreach (Sprite sprite in daggerSprites) { DaggerIcons.Add(sprite); + spritePathMap[sprite] = $"Weapons/Daggers/{sprite.name}"; } BookIcons.Clear(); - foreach (Sprite sprite in Resources.LoadAll("Weapons/Books")) + Sprite[] bookSprites = Resources.LoadAll("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 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 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; }