using Data; using Managers; using System; using System.Collections.Generic; using UnityEngine; namespace Item { /// /// 表示游戏中的一个物品资源,包含了物品的各项基本属性和数据。 /// 这是一个只读的数据结构,用于存储物品的定义信息。 /// public class ItemResource { /// /// 物品的定义名称,通常作为其唯一标识符。 /// public string DefName { get; protected set; } /// /// 物品的显示名称(例如,在UI中显示的名称)。 /// public string Name { get; protected set; } /// /// 物品的描述文本。 /// public string Description { get; protected set; } /// /// 物品的图标精灵集合。提供只读访问以保持数据结构不变性。 /// // 逻辑修改:Icon 属性更改为 IReadOnlyList public IReadOnlyList Icon { get; protected set; } /// /// 物品的稀有度。 /// public ItemRarity Rarity { get; protected set; } /// /// 物品的最大堆叠数量。 /// public int MaxStack { get; protected set; } /// /// 指示物品是否可以被装备。 /// public bool IsEquippable { get; protected set; } /// /// 物品的帧率(如果适用)。 /// public float FPS { get; protected set; } public static ItemResource GetDefault() { ItemDef defaultDef = new() { defName = "default", label = "错误物品", description = "你看到这个物品表示加载出错了", rarity = ItemRarity.Uncommon, maxStack = 1, ssEquippable = false }; return new ItemResource(defaultDef); } /// /// 构造函数:通过 ItemDef 对象初始化 ItemResource。 /// /// 物品的定义对象。 /// 如果传入的 ItemDef 为 null,则抛出此异常。 public ItemResource(ItemDef def) { // 参数校验:在构造函数中进行参数非空检查至关重要,避免空引用异常。 if (def == null) throw new ArgumentNullException(nameof(def), "创建 ItemResource 时,ItemDef 不能为 null。"); // 从 ItemDef 对象中直接赋值 ItemResource 的所有属性。 // 这将创建 ItemResource 的逻辑完全封装在类内部,外部调用方无需关心具体属性的提取过程。 DefName = def.defName; Name = def.label; Description = def.description; Rarity = def.rarity; MaxStack = def.maxStack; IsEquippable = def.ssEquippable; FPS = MathF.Max(0.0001f,def.FPS); Icon = PackagesImageManager.Instance.GetSprites(def.textures); } } }