Advertisement
evelynshilosky

InventorySystem - Part 29

Jan 5th, 2024
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.09 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.UI;
  6.  
  7. public class InventorySystem : MonoBehaviour
  8. {
  9.  
  10.     public GameObject ItemInfoUI;
  11.  
  12.     public static InventorySystem Instance { get; set; }
  13.  
  14.     public GameObject inventoryScreenUI;
  15.  
  16.     public List<GameObject> slotList = new List<GameObject>();
  17.  
  18.     public List<string> itemList = new List<string>();
  19.  
  20.     private GameObject itemToAdd;
  21.  
  22.     private GameObject whatSlotToEquip;
  23.  
  24.     public bool isOpen;
  25.  
  26.     //public bool isFull;
  27.  
  28.  
  29.     //PickUpPopUP
  30.     public GameObject pickupAlert;
  31.     public Text pickupName;
  32.     public Image pickupImage;
  33.  
  34.     public List<string> itemsPickedup;
  35.  
  36.     private void Awake()
  37.     {
  38.         if (Instance != null && Instance != this)
  39.         {
  40.             Destroy(gameObject);
  41.         }
  42.         else
  43.         {
  44.             Instance = this;
  45.         }
  46.     }
  47.  
  48.  
  49.     void Start()
  50.     {
  51.         isOpen = false;
  52.         PopulateSlotList();
  53.  
  54.         Cursor.visible = false;
  55.     }
  56.  
  57.     private void PopulateSlotList()
  58.     {
  59.         foreach (Transform child in inventoryScreenUI.transform)
  60.         {
  61.             if (child.CompareTag("Slot"))
  62.             {
  63.                 slotList.Add(child.gameObject);
  64.             }
  65.         }
  66.  
  67.  
  68.  
  69.     }
  70.  
  71.  
  72.     void Update()
  73.     {
  74.  
  75.         if (Input.GetKeyDown(KeyCode.I) && !isOpen && !ConstructionManager.Instance.inConstructionMode && !QuestManager.Instance.isQuestMenuOpen)
  76.         {
  77.  
  78.             inventoryScreenUI.SetActive(true);
  79.  
  80.             inventoryScreenUI.GetComponentInParent<Canvas>().sortingOrder = MenuManager.Instance.SetAsFront();
  81.              
  82.             Cursor.lockState = CursorLockMode.None;
  83.             Cursor.visible = true;
  84.  
  85.             SelectionManager.Instance.DisableSelection();
  86.             SelectionManager.Instance.GetComponent<SelectionManager>().enabled = false;
  87.  
  88.             isOpen = true;            
  89.         }
  90.         else if (Input.GetKeyDown(KeyCode.I) && isOpen)
  91.         {
  92.             inventoryScreenUI.SetActive(false);
  93.             if (!CraftingSystem.Instance.isOpen) {
  94.                 Cursor.lockState = CursorLockMode.Locked;
  95.                 Cursor.visible = false;
  96.  
  97.                
  98.                
  99.                
  100.                 SelectionManager.Instance.EnableSelection();
  101.                 SelectionManager.Instance.GetComponent<SelectionManager>().enabled = true;
  102.             }
  103.  
  104.             isOpen = false;
  105.         }
  106.     }
  107.  
  108.  
  109.     public void AddToInventory(string itemName)
  110.     {
  111.         if (SaveManager.Instance.isLoading == false)
  112.         {
  113.             SoundManager.Instance.PlaySound(SoundManager.Instance.pickupItemSound);
  114.         }
  115.  
  116.         whatSlotToEquip = FindNextEmptySlot();
  117.  
  118.         itemToAdd = Instantiate(Resources.Load<GameObject>(itemName), whatSlotToEquip.transform.position, whatSlotToEquip.transform.rotation);
  119.         itemToAdd.transform.SetParent(whatSlotToEquip.transform);
  120.  
  121.  
  122.         itemList.Add(itemName);
  123.  
  124.  
  125.         TriggerPickupPopUp(itemName, itemToAdd.GetComponent<Image>().sprite);
  126.  
  127.         // -- For debugging we don't want to use the Save Manager -- \\
  128.  
  129.         //if (SaveManager.Instance.isLoading == false)
  130.         //{
  131.         //  SoundManager.Instance.PlaySound(SoundManager.Instance.pickupItemSound);
  132.         //  TriggerPickupPopUp(itemName, itemToAdd.GetComponent<Image>().sprite);
  133.         //}
  134.  
  135.         ReCalculateList();
  136.         CraftingSystem.Instance.RefreshNeededItems();
  137.  
  138.         QuestManager.Instance.RefreshTrackerList();
  139.     }
  140.  
  141.  
  142.  
  143.  
  144.     void TriggerPickupPopUp(string itemName, Sprite itemSprite)
  145.     {
  146.  
  147.         pickupAlert.SetActive(true);
  148.  
  149.  
  150.         pickupName.text = itemName;
  151.         pickupImage.sprite = itemSprite;
  152.  
  153.         StartCoroutine(Calculate());
  154.     }
  155.    
  156.     IEnumerator Calculate()
  157.     {
  158.  
  159.         yield return new WaitForSeconds(2f);
  160.         pickupAlert.SetActive(false);
  161.  
  162.     }
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.         private GameObject FindNextEmptySlot()
  171.     {
  172.         foreach(GameObject slot in slotList)
  173.         {
  174.  
  175.             if (slot.transform.childCount == 0)
  176.             {
  177.               //  Debug.Log(slotList);
  178.                 return slot;
  179.  
  180.             }
  181.         }
  182.  
  183.         return new GameObject();
  184.     }
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.     public bool CheckSlotsAvailable(int emptyNeeded)
  192.     {
  193.  
  194.         int emptySlot = 0;
  195.  
  196.         foreach (GameObject slot in slotList)
  197.         {
  198.             if (slot.transform.childCount <= 0)
  199.             {
  200.                 emptySlot ++;
  201.             }
  202.         }
  203.  
  204.         if (emptySlot >= emptyNeeded)
  205.         {
  206.             return true;
  207.         }
  208.         else
  209.         {
  210.             return false;
  211.         }
  212.     }
  213.  
  214.  
  215.  
  216.     public void RemoveItem(string nameToRemove, int amountToRemove)
  217.     {
  218.  
  219.  
  220.         int counter = amountToRemove;
  221.  
  222.         for (var i = slotList.Count - 1; i>=0; i--)
  223.         {
  224.  
  225.             if (slotList[i].transform.childCount>0)
  226.             {
  227.  
  228.                 if (slotList[i].transform.GetChild(0).name == nameToRemove+"(Clone)" && counter!=0)
  229.                 {
  230.  
  231.                     Destroy(slotList[i].transform.GetChild(0).gameObject);
  232.  
  233.                     counter--;
  234.  
  235.                 }
  236.             }
  237.         }
  238.  
  239.         ReCalculateList();
  240.         CraftingSystem.Instance.RefreshNeededItems();
  241.         QuestManager.Instance.RefreshTrackerList();
  242.     }
  243.  
  244.     public void ReCalculateList()
  245.     {
  246.         itemList.Clear();
  247.  
  248.         foreach (GameObject slot in slotList)
  249.         {
  250.             if (slot.transform.childCount>0)
  251.             {
  252.  
  253.                 string name = slot.transform.GetChild(0).name; //Stone (Clone)
  254.                 string str2 = "(Clone)";
  255.                 string result = name.Replace(str2, "");
  256.  
  257.                 itemList.Add(result); //Stone
  258.             }
  259.         }
  260.  
  261.  
  262.     }
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.     public int CheckItemAmount(string name)
  271.     {
  272.         int itemCounter = 0;
  273.  
  274.         foreach (string item in itemList)
  275.         {
  276.             if (item == name)
  277.             {
  278.                 itemCounter++;
  279.             }
  280.         }
  281.         return itemCounter;
  282.     }
  283.  
  284.  
  285.  
  286. }
  287.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement