using System;
using System.Collections.Generic;
using Cielonos.MainGame.Inventory;
using UnityEngine;
namespace Cielonos.MainGame
{
///
/// 玩家背包与装备数据配置包。
/// 用于记录玩家在基地(Fortress)中配置的全部装备和背包物品,并同步至战斗关卡(CityArena)中。
///
[Serializable]
public class PlayerInventorySaveData : SaveDataBase
{
public List mainWeapons = new List();
public List preparedMainWeapons = new List();
public ItemSaveData currentMainWeapon;
public List supportEquipments = new List() {};
public List currentSupportEquipments = new List();
public List passiveEquipments = new List();
public List consumables = new List();
}
[Serializable]
public class ItemSaveData
{
// 装备的类型名称(对应 Prefab 的名称,如 "Polychrome")
public string itemClass;
// 装备当前的等级(Passive Attribute Submodule 的 Level)
public int level = 0;
// 消耗品的堆叠数量(默认为1,表示单件物品;大于1表示多件同类物品)
public int stackAmount = 1;
public ItemSaveData()
{
}
public ItemSaveData(string itemClass)
{
this.itemClass = itemClass;
}
public ItemBase RestoreItem()
{
Type type = Type.GetType($"Cielonos.MainGame.Inventory.Collections.{itemClass}");
if (type == null)
{
Debug.LogError($"无法找到类型 {itemClass},请确保该类存在并且命名空间正确。");
return null;
}
ItemBase item = MainGameManager.Player.inventorySc.backpackSm.ObtainItem(type); // 调用我们前文扩展的非泛型方法
if (item != null)
{
// B. 注入保存的状态
// 还原等级
if (item.passiveAttributeSm != null)
{
item.passiveAttributeSm.level = level;
}
// 还原堆叠数量(仅对消耗品有效)
if (item is ConsumableBase consumable)
{
consumable.stackAmount = stackAmount;
}
}
return item;
}
}
}