| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- using UnityEngine;
- [System.Serializable]
- public abstract class Item : ScriptableObject
- {
- [Header("Item Basic Info")]
- public string itemName;
- public string description;
- public Sprite icon;
- public GameObject model3D; // For 3D representation in-game
- public ItemType itemType;
- public ItemRarity rarity = ItemRarity.Common;
- [Header("Cost")]
- public int goldCost;
- public int silverCost;
- public int copperCost;
- [Header("Tags")]
- public string[] searchTags; // For search functionality
- public virtual bool CanAfford(Bank bank)
- {
- int totalCopperCost = goldCost * 100 + silverCost * 10 + copperCost;
- int totalCopperAvailable = bank.gold * 100 + bank.silver * 10 + bank.copper;
- return totalCopperAvailable >= totalCopperCost;
- }
- public virtual void Purchase(Bank bank)
- {
- if (!CanAfford(bank))
- {
- Debug.LogWarning($"Cannot afford {itemName}");
- return;
- }
- // Convert everything to copper for easier calculation
- int totalCopperCost = goldCost * 100 + silverCost * 10 + copperCost;
- int totalCopperAvailable = bank.gold * 100 + bank.silver * 10 + bank.copper;
- int remainingCopper = totalCopperAvailable - totalCopperCost;
- // Convert back to gold, silver, copper
- bank.gold = remainingCopper / 100;
- remainingCopper %= 100;
- bank.silver = remainingCopper / 10;
- bank.copper = remainingCopper % 10;
- Debug.Log($"Purchased {itemName} for {goldCost}g {silverCost}s {copperCost}c");
- }
- public virtual string GetCostString()
- {
- string cost = "";
- if (goldCost > 0) cost += $"{goldCost}g ";
- if (silverCost > 0) cost += $"{silverCost}s ";
- if (copperCost > 0) cost += $"{copperCost}c";
- return cost.Trim();
- }
- public virtual bool MatchesSearch(string searchTerm)
- {
- if (string.IsNullOrEmpty(searchTerm)) return true;
- searchTerm = searchTerm.ToLower();
- // Check name
- if (itemName.ToLower().Contains(searchTerm)) return true;
- // Check description
- if (description.ToLower().Contains(searchTerm)) return true;
- // Check tags
- if (searchTags != null)
- {
- foreach (string tag in searchTags)
- {
- if (tag.ToLower().Contains(searchTerm)) return true;
- }
- }
- return false;
- }
- }
- [System.Serializable]
- public enum ItemType
- {
- Weapon,
- Armor,
- Miscellaneous,
- Consumable,
- Tool,
- Accessory
- }
- [System.Serializable]
- public enum ItemRarity
- {
- Common,
- Uncommon,
- Rare,
- Epic,
- Legendary
- }
|