//#if USE_INVECTOR_INVENTORY
using Invector.vItemManager;
using System.Collections.Generic;
using PixelCrushers;
using UnityEngine;
namespace Beyond
{
///
/// Save System saver for Invector character's inventory.
///
[AddComponentMenu("Pixel Crushers/Save System/Savers/Invector/Invector Inventory Saver")]
public class InvectorInventorySaver : Saver
{
private bItemManager m_itemManager;
private bItemManager itemManager
{
get
{
if (m_itemManager == null) m_itemManager = GetComponent();
return m_itemManager;
}
}
// Borrowed from vSaveLoadInventory.cs:
[System.Serializable]
class InventoryData
{
///
/// List of
///
public List itemReferences = new List();
///
/// List of
///
public List equipAreas = new List();
///
/// Get from
///
///
///
public List GetItems(bItemListData itemListData)
{
List items = new List();
for (int i = 0; i < itemReferences.Count; i++)
{
bItem item = itemListData.items.Find(a => a.id.Equals(itemReferences[i].id));
item = GameObject.Instantiate(item);
item.amount = itemReferences[i].amount;
item.attributes = itemReferences[i].attributes;
item.name = item.name.Replace("(Clone)", string.Empty);
items.Add(item);
}
return items;
}
}
[System.Serializable]
class EquipAreaData
{
///
/// List of
///
public List slotsData = new List();
public int indexOfSelectedSlot = 0;
}
[System.Serializable]
class SlotData
{
public bool hasItem = false;
public int indexOfItem = 0;
}
[System.Serializable]
class ItemReference
{
[SerializeField] public int amount;
[SerializeField] public int id;
[SerializeField] public List attributes;
public ItemReference(bItem item)
{
amount = item.amount;
id = item.id;
attributes = item.attributes;
}
}
public override string RecordData()
{
if (itemManager == null) return string.Empty;
return bSaveLoadInventory.InventoryToJsonText(itemManager);
}
public override void ApplyData(string s)
{
if (string.IsNullOrEmpty(s) || itemManager == null) return;
InventoryData data = new InventoryData();
JsonUtility.FromJsonOverwrite(s, data);
itemManager.items = data.GetItems(itemManager.itemListData);
bEquipArea[] equipAreas = itemManager.inventory.equipAreas;
for (int i = 0; i < equipAreas.Length; i++)
{
if (i < data.equipAreas.Count)
{
bEquipArea area = equipAreas[i];
EquipAreaData areaData = data.equipAreas[i];
area.indexOfEquippedItem = areaData.indexOfSelectedSlot;
for (int e = 0; e < equipAreas[i].equipSlots.Count; e++)
{
if (e < areaData.slotsData.Count)
{
SlotData slotData = areaData.slotsData[e];
bEquipSlot slot = equipAreas[i].equipSlots[e];
itemManager.temporarilyIgnoreItemAnimation = true;
if (slotData.hasItem)
{
area.AddItemToEquipSlot(e, itemManager.items[slotData.indexOfItem]);
}
else area.RemoveItemOfEquipSlot(e);
}
}
}
}
itemManager.inventory.UpdateInventory();
itemManager.temporarilyIgnoreItemAnimation = false;
itemManager.onLoadItems.Invoke();
}
public override void OnBeforeSceneChange()
{
base.OnBeforeSceneChange();
// We need to start with a clear inventory in the next scene, so destroy this one:
var bInventory = FindObjectOfType();
if (bInventory != null) Destroy(bInventory.gameObject);
}
}
}
//#endif