Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using System;
- using UnityEngine.UI;
- using LitJson;
- using System.IO;
- public class Inventory : MonoBehaviour
- {
- public static Inventory current;
- //public List<InventoryData> iData = new List<InventoryData>();
- [HideInInspector] public InventoryData[] iData = new InventoryData[slotAmount];
- string inventoryJSON;
- public delegate void itemChanged();
- public itemChanged itemChangedCallBack;
- GameObject inventoryPanel;
- public ItemDatabase itemDB;
- public GameObject slotPanel;
- public GameObject inventorySlot;
- public GameObject inventoryItem;
- const int slotAmount = 120;
- [HideInInspector] public int[] itemIDs = new int[slotAmount];
- [HideInInspector] public int[] slotIDs = new int[slotAmount];
- [HideInInspector] public int[] itemAmounts = new int[slotAmount];
- public List<Item> items = new List<Item>();
- public List<GameObject> slots = new List<GameObject>();
- void Awake()
- {
- if (!current)
- current = this;
- else
- Destroy(this);
- }
- public void SaveDatav2()
- {
- for (int i = 0; i < slotAmount; i++)
- {
- int tempID = (items[i] != null) ? items[i].ID : 1;
- itemIDs[i] = tempID;
- /*if (tempID == 1)
- {
- //break;
- itemIDs[i] = tempID;
- }
- else
- {
- itemIDs[i] = tempID;
- }*/
- }
- for (int i = 0; i < items.Count; i++)
- {
- int tempID = -1;
- if (items[i].ID != tempID)
- {
- ItemData data = slots[i].transform.GetChild(0).GetComponent<ItemData>();
- itemAmounts[i] = data.amount;
- }
- else
- continue;
- }
- for (int i = 0; i < slotAmount; i++)
- {
- int tempID = -1;
- if (slots[i].transform.childCount == 1)
- slotIDs[i] = i;
- else
- continue;
- }
- for (int i = 0; i < itemIDs.Length; i++)
- {
- iData[i] = new InventoryData();
- iData[i].itemID = itemIDs[i];
- iData[i].slotID = slotIDs[i];
- iData[i].itemAmount = itemAmounts[i];
- }
- inventoryJSON = JsonHelper.ToJson(iData, true);
- File.WriteAllText(Application.persistentDataPath + "/IData.json", inventoryJSON);
- }
- public void LoadSavedData()
- {
- string path = Application.persistentDataPath + "/IData.json";
- if (!File.Exists(path))
- {
- Debug.Log("No available saves");
- }
- else
- {
- string contents = File.ReadAllText(path);
- InventoryData[] jsonData = JsonHelper.FromJson<InventoryData>(contents);
- for (int i = 0; i < jsonData.Length; i++)
- {
- int itemToAddID = jsonData[i].itemID;
- int itemAmount = jsonData[i].itemAmount;
- int slotID = jsonData[i].slotID;
- if (jsonData[i].itemID == -1)
- break;
- else
- AddItem(itemToAddID, slotID);
- if (items[i].ID == itemToAddID)
- {
- ItemData data = slots[i].transform.GetChild(0).GetComponent<ItemData>();
- data.amount = itemAmount;
- data.transform.GetChild(0).GetComponent<Text>().text = data.amount.ToString();
- }
- }
- }
- }
- void Start()
- {
- /*Debug.Log(inventoryJSON);
- File.WriteAllText(Application.dataPath + "/Sample.json", inventoryJSON.ToString());
- Debug.LogFormat("Write to File({0}) -- data:\n{1}", Application.dataPath + "/Sample.json", inventoryJSON);*/
- inventoryPanel = GameObject.Find("Inventory Panel");
- for (int i = 0; i < slotAmount; i++)
- {
- items.Add(new Item());
- slots.Add(Instantiate(inventorySlot));
- slots[i].transform.SetParent(slotPanel.transform);
- }
- //Application.RegisterLogCallback(HandleLog);
- LoadSavedData();
- }
- void HandleLog(string logString, string stackTrace, LogType type)
- {
- if (logString.Length>1000) logString=logString.Substring(0,1000);
- //log.text= logString;
- }
- public void AddItem(int itemID, int slotID)
- {
- Item itemToAdd = itemDB.FetchItemByID(itemID);
- if (itemToAdd.Stackable && IfItemIsInInventory(itemToAdd))
- {
- for (int i = 1; i <= items.Count; i++)
- {
- if (items[slotID].ID == itemID)
- {
- ItemData data = slots[slotID].transform.GetChild(0).GetComponent<ItemData>();
- data.amount++;
- data.transform.GetChild(0).GetComponent<Text>().text = data.amount.ToString();
- break;
- }
- }
- }
- else
- {
- for (int i = 0; i < items.Count; i++)
- {
- if (items[slotID].ID == -1)
- {
- items[slotID] = itemToAdd;
- GameObject itemObj = Instantiate(inventoryItem);
- itemObj.transform.SetParent(slots[slotID].transform);
- itemObj.transform.position = Vector2.zero;
- itemObj.GetComponent<Image>().sprite = itemToAdd.Sprite;
- itemObj.name = itemToAdd.Title;
- if (itemChangedCallBack != null)
- itemChangedCallBack.Invoke();
- break;
- }
- }
- }
- }
- public void GetItem(int id)
- {
- Item itemToAdd = itemDB.FetchItemByID(id);
- if (itemToAdd.Stackable && IfItemIsInInventory(itemToAdd))
- {
- for (int i = 0; i < items.Count; i++)
- {
- if (items[i].ID == id)
- {
- ItemData data = slots[i].transform.GetChild(0).GetComponent<ItemData>();
- data.amount++;
- data.transform.GetChild(0).GetComponent<Text>().text = data.amount.ToString();
- break;
- }
- }
- }
- else
- {
- for (int i = 0; i < items.Count; i++)
- {
- if (items[i].ID == -1)
- {
- items[i] = itemToAdd;
- GameObject itemObj = Instantiate(inventoryItem);
- itemObj.transform.SetParent(slots[i].transform);
- itemObj.transform.position = Vector2.zero;
- itemObj.GetComponent<Image>().sprite = itemToAdd.Sprite;
- itemObj.name = itemToAdd.Title;
- if (itemChangedCallBack != null)
- itemChangedCallBack.Invoke();
- break;
- }
- }
- }
- }
- bool IfItemIsInInventory(Item item)
- {
- for (int i = 0; i < items.Count; i++)
- {
- if (items[i].ID == item.ID)
- {
- return true;
- }
- }
- return false;
- }
- }//class
- [Serializable]
- public class InventoryData
- {
- public int slotID;
- public int itemID;
- public int itemAmount;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement