Advertisement
Guest User

Untitled

a guest
Dec 19th, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.42 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System;
  5. using UnityEngine.UI;
  6. using LitJson;
  7. using System.IO;
  8.  
  9. public class Inventory : MonoBehaviour
  10. {
  11.  
  12.     public static Inventory current;
  13.  
  14.     //public List<InventoryData> iData = new List<InventoryData>();
  15.     [HideInInspector] public InventoryData[] iData = new InventoryData[slotAmount];
  16.     string inventoryJSON;
  17.  
  18.     public delegate void itemChanged();
  19.     public itemChanged itemChangedCallBack;
  20.  
  21.     GameObject inventoryPanel;
  22.     public ItemDatabase itemDB;
  23.     public GameObject slotPanel;
  24.     public GameObject inventorySlot;
  25.     public GameObject inventoryItem;
  26.  
  27.     const int slotAmount = 120;
  28.  
  29.     [HideInInspector] public int[] itemIDs = new int[slotAmount];
  30.     [HideInInspector] public int[] slotIDs = new int[slotAmount];
  31.     [HideInInspector] public int[] itemAmounts = new int[slotAmount];
  32.     public List<Item> items = new List<Item>();
  33.     public List<GameObject> slots = new List<GameObject>();
  34.  
  35.     void Awake()
  36.     {
  37.         if (!current)
  38.             current = this;
  39.         else
  40.             Destroy(this);
  41.     }
  42.  
  43.     public void SaveDatav2()
  44.     {
  45.         for (int i = 0; i < slotAmount; i++)
  46.         {
  47.             int tempID = (items[i] != null) ? items[i].ID : 1;
  48.             itemIDs[i] = tempID;
  49.  
  50.             /*if (tempID == 1)
  51.             {
  52.                 //break;
  53.                 itemIDs[i] = tempID;
  54.             }
  55.             else
  56.             {
  57.                 itemIDs[i] = tempID;
  58.             }*/
  59.         }
  60.  
  61.         for (int i = 0; i < items.Count; i++)
  62.         {
  63.             int tempID = -1;
  64.  
  65.             if (items[i].ID != tempID)
  66.             {  
  67.                 ItemData data = slots[i].transform.GetChild(0).GetComponent<ItemData>();
  68.                 itemAmounts[i] = data.amount;
  69.             }
  70.             else
  71.                 continue;
  72.         }
  73.  
  74.         for (int i = 0; i < slotAmount; i++)
  75.         {
  76.             int tempID = -1;
  77.             if (slots[i].transform.childCount == 1)
  78.                 slotIDs[i] = i;
  79.             else
  80.                 continue;
  81.         }
  82.  
  83.         for (int i = 0; i < itemIDs.Length; i++)
  84.         {
  85.             iData[i] = new InventoryData();
  86.             iData[i].itemID = itemIDs[i];
  87.             iData[i].slotID = slotIDs[i];
  88.             iData[i].itemAmount = itemAmounts[i];
  89.         }
  90.        
  91.         inventoryJSON = JsonHelper.ToJson(iData, true);
  92.         File.WriteAllText(Application.persistentDataPath + "/IData.json", inventoryJSON);
  93.     }
  94.  
  95.     public void LoadSavedData()
  96.     {
  97.         string path = Application.persistentDataPath + "/IData.json";
  98.         if (!File.Exists(path))
  99.         {
  100.             Debug.Log("No available saves");
  101.         }
  102.         else
  103.         {
  104.             string contents = File.ReadAllText(path);
  105.             InventoryData[] jsonData = JsonHelper.FromJson<InventoryData>(contents);
  106.             for (int i = 0; i < jsonData.Length; i++)
  107.             {
  108.                 int itemToAddID = jsonData[i].itemID;
  109.                 int itemAmount = jsonData[i].itemAmount;
  110.                 int slotID = jsonData[i].slotID;
  111.  
  112.                 if (jsonData[i].itemID == -1)
  113.                     break;
  114.                 else
  115.                     AddItem(itemToAddID, slotID);
  116.                
  117.                 if (items[i].ID == itemToAddID)
  118.                 {
  119.                     ItemData data = slots[i].transform.GetChild(0).GetComponent<ItemData>();
  120.                     data.amount = itemAmount;
  121.                     data.transform.GetChild(0).GetComponent<Text>().text = data.amount.ToString();
  122.                 }
  123.             }
  124.         }
  125.     }
  126.  
  127.     void Start()
  128.     {
  129.         /*Debug.Log(inventoryJSON);
  130.         File.WriteAllText(Application.dataPath + "/Sample.json", inventoryJSON.ToString());
  131.         Debug.LogFormat("Write to File({0}) -- data:\n{1}", Application.dataPath + "/Sample.json", inventoryJSON);*/
  132.  
  133.         inventoryPanel = GameObject.Find("Inventory Panel");
  134.  
  135.         for (int i = 0; i < slotAmount; i++)
  136.         {
  137.             items.Add(new Item());
  138.             slots.Add(Instantiate(inventorySlot));
  139.             slots[i].transform.SetParent(slotPanel.transform);
  140.         }
  141.  
  142.  
  143.         //Application.RegisterLogCallback(HandleLog);
  144.         LoadSavedData();
  145.     }
  146.  
  147.     void HandleLog(string logString, string stackTrace, LogType type)
  148.     {
  149.         if (logString.Length>1000) logString=logString.Substring(0,1000);
  150.         //log.text= logString;
  151.     }
  152.  
  153.     public void AddItem(int itemID, int slotID)
  154.     {
  155.         Item itemToAdd = itemDB.FetchItemByID(itemID);
  156.  
  157.         if (itemToAdd.Stackable && IfItemIsInInventory(itemToAdd))
  158.         {
  159.             for (int i = 1; i <= items.Count; i++)
  160.             {
  161.                 if (items[slotID].ID == itemID)
  162.                 {  
  163.                     ItemData data = slots[slotID].transform.GetChild(0).GetComponent<ItemData>();
  164.                     data.amount++;
  165.                     data.transform.GetChild(0).GetComponent<Text>().text = data.amount.ToString();
  166.                     break;
  167.                 }
  168.             }
  169.         }
  170.         else
  171.         {
  172.             for (int i = 0; i < items.Count; i++)
  173.             {
  174.                 if (items[slotID].ID == -1)
  175.                 {
  176.                     items[slotID] = itemToAdd;
  177.                     GameObject itemObj = Instantiate(inventoryItem);
  178.                     itemObj.transform.SetParent(slots[slotID].transform);
  179.                     itemObj.transform.position = Vector2.zero;
  180.                     itemObj.GetComponent<Image>().sprite = itemToAdd.Sprite;
  181.                     itemObj.name = itemToAdd.Title;
  182.  
  183.                     if (itemChangedCallBack != null)
  184.                         itemChangedCallBack.Invoke();
  185.  
  186.                     break;
  187.                 }
  188.  
  189.             }
  190.         }
  191.     }
  192.  
  193.     public void GetItem(int id)
  194.     {
  195.         Item itemToAdd = itemDB.FetchItemByID(id);
  196.  
  197.         if (itemToAdd.Stackable && IfItemIsInInventory(itemToAdd))
  198.         {
  199.             for (int i = 0; i < items.Count; i++)
  200.             {
  201.                 if (items[i].ID == id)
  202.                 {  
  203.                     ItemData data = slots[i].transform.GetChild(0).GetComponent<ItemData>();
  204.                     data.amount++;
  205.                     data.transform.GetChild(0).GetComponent<Text>().text = data.amount.ToString();
  206.                     break;
  207.                 }
  208.             }
  209.         }
  210.         else
  211.         {
  212.             for (int i = 0; i < items.Count; i++)
  213.             {
  214.                 if (items[i].ID == -1)
  215.                 {
  216.                     items[i] = itemToAdd;
  217.                     GameObject itemObj = Instantiate(inventoryItem);
  218.                     itemObj.transform.SetParent(slots[i].transform);
  219.                     itemObj.transform.position = Vector2.zero;
  220.                     itemObj.GetComponent<Image>().sprite = itemToAdd.Sprite;
  221.                     itemObj.name = itemToAdd.Title;
  222.  
  223.                     if (itemChangedCallBack != null)
  224.                         itemChangedCallBack.Invoke();
  225.  
  226.                     break;
  227.                 }
  228.             }  
  229.         }
  230.     }
  231.  
  232.     bool IfItemIsInInventory(Item item)
  233.     {
  234.         for (int i = 0; i < items.Count; i++)
  235.         {
  236.             if (items[i].ID == item.ID)
  237.             {
  238.                 return true;
  239.             }
  240.         }
  241.         return false;
  242.     }
  243.  
  244. }//class
  245.    
  246. [Serializable]
  247. public class InventoryData
  248. {
  249.     public int slotID;
  250.     public int itemID;
  251.     public int itemAmount;
  252. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement