/// <summary> /// Create a Json text from Inventory EquipAreas and ItemManager Items /// </summary> /// <param name="itemManager">Target ItemManaget</param> /// <returns>Json file text</returns> public static string InventoryToJsonText(vItemManager itemManager) { if (!itemManager.inventory) { return(string.Empty); } InventoryData data = new InventoryData(); vEquipArea[] equipAreas = itemManager.inventory.equipAreas; for (int i = 0; i < equipAreas.Length; i++) { EquipAreaData equipAreaData = new EquipAreaData(); equipAreaData.indexOfSelectedSlot = equipAreas[i].indexOfEquippedItem; for (int e = 0; e < equipAreas[i].equipSlots.Count; e++) { SlotData equipAreaSlotData = new SlotData(); equipAreaSlotData.hasItem = equipAreas[i].equipSlots[e].item != null; if (equipAreaSlotData.hasItem) { equipAreaSlotData.indexOfItem = itemManager.items.IndexOf(equipAreas[i].equipSlots[e].item); } equipAreaData.slotsData.Add(equipAreaSlotData); } data.equipAreas.Add(equipAreaData); } for (int i = 0; i < itemManager.items.Count; i++) { data.itemReferences.Add(new ItemReference(itemManager.items[i])); } return(JsonUtility.ToJson(data, true)); }
/// <summary> /// Load inventory items and occupied equipSlots /// </summary> /// <param name="itemManager"></param> public static void LoadInventory(this vItemManager itemManager) { string json = LoadInventoryJasonText(); if (!string.IsNullOrEmpty(json)) { InventoryData data = new InventoryData(); JsonUtility.FromJsonOverwrite(json, data); itemManager.items = data.GetItems(itemManager.itemListData); vEquipArea[] equipAreas = itemManager.inventory.equipAreas; for (int i = 0; i < equipAreas.Length; i++) { if (i < data.equipAreas.Count) { vEquipArea 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]; vEquipSlot 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(); }