using System;
using Data;
using Managers;
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; }
///
/// 物品的图标精灵。
///
public Sprite Icon { get; protected set; }
///
/// 物品的稀有度。
///
public ItemRarity Rarity { get; protected set; }
///
/// 物品的最大堆叠数量。
///
public int MaxStack { get; protected set; }
///
/// 指示物品是否可以被装备。
///
public bool IsEquippable { get; protected set; }
///
/// 构造函数:通过 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;
Icon = PackagesImageManager.Instance.GetSprite(def.texture);
Rarity = def.rarity;
MaxStack = def.maxStack;
IsEquippable = def.ssEquippable;
if (!Icon && def.texture == null)
{
Debug.LogWarning($"ItemResource: Failed to load sprite for texture '{def.texture}' for item '{def.defName}'. Icon will be null.");
}
}
}
}