Advertisement
evelynshilosky

InventorySystem - Part 19

Oct 20th, 2023 (edited)
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.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.  
  8. public class InventorySystem : MonoBehaviour
  9. {
  10.     public static InventorySystem Instance { get; set; }
  11.  
  12.     public GameObject inventoryScreenUI;
  13.  
  14.     public List<GameObject> slotList = new List<GameObject>();
  15.  
  16.     public List<string> itemList = new List<string>();
  17.  
  18.     private GameObject itemToAdd;
  19.  
  20.     private GameObject whatSlotToEquip;
  21.  
  22.     public bool isOpen;
  23.  
  24.     //public bool isFull;
  25.  
  26.  
  27.     //PickUpPopUP
  28.     public GameObject pickupAlert;
  29.     public Text pickupName;
  30.     public Image pickupImage;
  31.  
  32.     // ItemInfoUI
  33.     public GameObject ItemInfoUI;
  34.  
  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.                 SelectionManager.Instance.EnableSelection();
  96.                 SelectionManager.Instance.GetComponent<SelectionManager>().enabled = true;
  97.             }
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.             isOpen = false;
  113.         }
  114.     }
  115.  
  116.  
  117.  
  118.  
  119.  
  120.     public void AddToInventory(string itemName)
  121.     {
  122.  
  123.         SoundManager.Instance.PlaySound(SoundManager.Instance.pickupItemSound);
  124.  
  125.         whatSlotToEquip = FindNextEmptySlot();
  126.  
  127.         itemToAdd = Instantiate(Resources.Load<GameObject>(itemName), whatSlotToEquip.transform.position, whatSlotToEquip.transform.rotation);
  128.         itemToAdd.transform.SetParent(whatSlotToEquip.transform);
  129.  
  130.  
  131.         itemList.Add(itemName);
  132.  
  133.  
  134.         TriggerPickupPopUp(itemName, itemToAdd.GetComponent<Image>().sprite);
  135.  
  136.  
  137.  
  138.         ReCalculateList();
  139.         CraftingSystem.Instance.RefreshNeededItems();
  140.     }
  141.  
  142.  
  143.  
  144.  
  145.     void TriggerPickupPopUp(string itemName, Sprite itemSprite)
  146.     {
  147.  
  148.         pickupAlert.SetActive(true);
  149.  
  150.  
  151.         pickupName.text = itemName;
  152.         pickupImage.sprite = itemSprite;
  153.  
  154.         StartCoroutine(Calculate());
  155.     }
  156.    
  157.     IEnumerator Calculate()
  158.     {
  159.  
  160.         yield return new WaitForSeconds(2f);
  161.         pickupAlert.SetActive(false);
  162.  
  163.     }
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.         private GameObject FindNextEmptySlot()
  172.     {
  173.         foreach(GameObject slot in slotList)
  174.         {
  175.  
  176.             if (slot.transform.childCount == 0)
  177.             {
  178.               //  Debug.Log(slotList);
  179.                 return slot;
  180.  
  181.             }
  182.         }
  183.  
  184.         return new GameObject();
  185.     }
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.     public bool CheckSlotsAvailable(int emptyNeeded)
  193.     {
  194.  
  195.         int emptySlot = 0;
  196.  
  197.         foreach (GameObject slot in slotList)
  198.         {
  199.             if (slot.transform.childCount <= 0)
  200.             {
  201.                 emptySlot ++;
  202.             }
  203.         }
  204.  
  205.         if (emptySlot >= emptyNeeded)
  206.         {
  207.             return true;
  208.         }
  209.         else
  210.         {
  211.             return false;
  212.         }
  213.     }
  214.  
  215.  
  216.  
  217.     public void RemoveItem(string nameToRemove, int amountToRemove)
  218.     {
  219.  
  220.  
  221.         int counter = amountToRemove;
  222.  
  223.         for (var i = slotList.Count - 1; i>=0; i--)
  224.         {
  225.  
  226.             if (slotList[i].transform.childCount>0)
  227.             {
  228.  
  229.                 if (slotList[i].transform.GetChild(0).name == nameToRemove+"(Clone)" && counter!=0)
  230.                 {
  231.  
  232.                     Destroy(slotList[i].transform.GetChild(0).gameObject);
  233.  
  234.                     counter--;
  235.  
  236.                 }
  237.             }
  238.         }
  239.  
  240.         ReCalculateList();
  241.         CraftingSystem.Instance.RefreshNeededItems();
  242.  
  243.     }
  244.  
  245.     public void ReCalculateList()
  246.     {
  247.         itemList.Clear();
  248.  
  249.         foreach (GameObject slot in slotList)
  250.         {
  251.             if (slot.transform.childCount>0)
  252.             {
  253.  
  254.                 string name = slot.transform.GetChild(0).name; //Stone (Clone)
  255.                 string str2 = "(Clone)";
  256.                 string result = name.Replace(str2, "");
  257.  
  258.                 itemList.Add(result); //Stone
  259.             }
  260.         }
  261.     }
  262.  
  263. }
  264.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement