using System.Collections.Generic; using UnityEngine; using BaseGames.Localization; namespace BaseGames.Inventory { /// /// 道具数据 SO(背包系统)。 /// 资产路径建议: Assets/_Game/Data/Inventory/Items/Item_{Name}.asset /// 命名/本地化约定与 保持一致(Items 表)。 /// [CreateAssetMenu(menuName = "BaseGames/Inventory/Item")] public class ItemSO : ScriptableObject, ILocalizableAsset { [Header("Identity")] [Tooltip("全局唯一 ID,如 \"Item_AncientKey\"。与拾取广播的 itemId 对应。")] public string itemId; [Tooltip("本地化 Key(Items 表)。")] public string displayNameKey; [TextArea(2, 4)] public string descriptionKey; [Header("Classification")] public ItemCategory category; [Header("Visual")] public Sprite icon; [Header("Stacking")] [Tooltip("可叠加(消耗品等)。false 时同 ID 只记 1 份。")] public bool stackable; [Tooltip("叠加上限(stackable=true 时生效,<=0 表示不限)。")] public int maxStack = 99; [Header("Map Reveal")] [Tooltip("category=MapShard 时,拾取后揭示的区域 ID(对应 MapManager 区域)。")] public string revealRegionId; [Header("Lore")] [Tooltip("是否唯一(剧情关键 / 一次性)。")] public bool isUnique; public IEnumerable GetLocalizationKeys() { if (!string.IsNullOrEmpty(displayNameKey)) yield return new LocalizationKeyRef(displayNameKey, LocalizationTable.Items, nameof(displayNameKey)); if (!string.IsNullOrEmpty(descriptionKey)) yield return new LocalizationKeyRef(descriptionKey, LocalizationTable.Items, nameof(descriptionKey)); } } }