Advertisement
evelynshilosky

InventorySystem - Part 26

Nov 17th, 2023 (edited)
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.23 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.  
  73.  
  74.     void Update()
  75.     {
  76.  
  77.         if (Input.GetKeyDown(KeyCode.I) && !isOpen && !ConstructionManager.Instance.inConstructionMode)
  78.         {
  79.             inventoryScreenUI.SetActive(true);
  80.             Cursor.lockState = CursorLockMode.None;
  81.             Cursor.visible = true;
  82.  
  83.             SelectionManager.Instance.DisableSelection();
  84.             SelectionManager.Instance.GetComponent<SelectionManager>().enabled = false;
  85.  
  86.             isOpen = true;            
  87.         }
  88.         else if (Input.GetKeyDown(KeyCode.I) && isOpen)
  89.         {
  90.             inventoryScreenUI.SetActive(false);
  91.             if (!CraftingSystem.Instance.isOpen) {
  92.                 Cursor.lockState = CursorLockMode.Locked;
  93.                 Cursor.visible = false;
  94.  
  95.                
  96.                
  97.                
  98.                 SelectionManager.Instance.EnableSelection();
  99.                 SelectionManager.Instance.GetComponent<SelectionManager>().enabled = true;
  100.             }
  101.  
  102.             isOpen = false;
  103.         }
  104.     }
  105.  
  106.  
  107.     public void AddToInventory(string itemName)
  108.     {
  109.         if (SaveManager.Instance.isLoading == false)
  110.         {
  111.             SoundManager.Instance.PlaySound(SoundManager.Instance.pickupItemSound);
  112.         }        
  113.        
  114.         whatSlotToEquip = FindNextEmptySlot();
  115.  
  116.         itemToAdd = Instantiate(Resources.Load<GameObject>(itemName), whatSlotToEquip.transform.position, whatSlotToEquip.transform.rotation);
  117.         itemToAdd.transform.SetParent(whatSlotToEquip.transform);
  118.  
  119.  
  120.         itemList.Add(itemName);
  121.  
  122.  
  123.         TriggerPickupPopUp(itemName, itemToAdd.GetComponent<Image>().sprite);
  124.  
  125.  
  126.  
  127.         ReCalculateList();
  128.         CraftingSystem.Instance.RefreshNeededItems();
  129.     }
  130.  
  131.  
  132.  
  133.  
  134.     void TriggerPickupPopUp(string itemName, Sprite itemSprite)
  135.     {
  136.  
  137.         pickupAlert.SetActive(true);
  138.  
  139.  
  140.         pickupName.text = itemName;
  141.         pickupImage.sprite = itemSprite;
  142.  
  143.         StartCoroutine(Calculate());
  144.     }
  145.    
  146.     IEnumerator Calculate()
  147.     {
  148.  
  149.         yield return new WaitForSeconds(2f);
  150.         pickupAlert.SetActive(false);
  151.  
  152.     }
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.         private GameObject FindNextEmptySlot()
  161.     {
  162.         foreach(GameObject slot in slotList)
  163.         {
  164.  
  165.             if (slot.transform.childCount == 0)
  166.             {
  167.               //  Debug.Log(slotList);
  168.                 return slot;
  169.  
  170.             }
  171.         }
  172.  
  173.         return new GameObject();
  174.     }
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.     public bool CheckSlotsAvailable(int emptyNeeded)
  182.     {
  183.  
  184.         int emptySlot = 0;
  185.  
  186.         foreach (GameObject slot in slotList)
  187.         {
  188.             if (slot.transform.childCount <= 0)
  189.             {
  190.                 emptySlot ++;
  191.             }
  192.         }
  193.  
  194.         if (emptySlot >= emptyNeeded)
  195.         {
  196.             return true;
  197.         }
  198.         else
  199.         {
  200.             return false;
  201.         }
  202.     }
  203.  
  204.  
  205.  
  206.     public void RemoveItem(string nameToRemove, int amountToRemove)
  207.     {
  208.  
  209.  
  210.         int counter = amountToRemove;
  211.  
  212.         for (var i = slotList.Count - 1; i>=0; i--)
  213.         {
  214.  
  215.             if (slotList[i].transform.childCount>0)
  216.             {
  217.  
  218.                 if (slotList[i].transform.GetChild(0).name == nameToRemove+"(Clone)" && counter!=0)
  219.                 {
  220.  
  221.                     Destroy(slotList[i].transform.GetChild(0).gameObject);
  222.  
  223.                     counter--;
  224.  
  225.                 }
  226.             }
  227.         }
  228.  
  229.         ReCalculateList();
  230.         CraftingSystem.Instance.RefreshNeededItems();
  231.  
  232.     }
  233.  
  234.     public void ReCalculateList()
  235.     {
  236.         itemList.Clear();
  237.  
  238.         foreach (GameObject slot in slotList)
  239.         {
  240.             if (slot.transform.childCount>0)
  241.             {
  242.  
  243.                 string name = slot.transform.GetChild(0).name; //Stone (Clone)
  244.                 string str2 = "(Clone)";
  245.                 string result = name.Replace(str2, "");
  246.  
  247.                 itemList.Add(result); //Stone
  248.             }
  249.         }
  250.     }
  251.  
  252. }
  253.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement