|
using System; |
|
using System.Collections; |
|
using System.Collections.Generic; |
|
using UnityEngine; |
|
using UnityEngine.UI; |
|
|
|
public class InventorySystem : MonoBehaviour |
|
{ |
|
public GameObject ItemInfoUI; |
|
|
|
public static InventorySystem Instance { get; set; } |
|
|
|
public GameObject inventoryScreenUI; |
|
public bool isOpen; |
|
public bool isFull; |
|
|
|
public List<GameObject> slotList = new List<GameObject>(); |
|
|
|
public List<string> itemList = new List<string>(); |
|
|
|
private GameObject itemToAdd; |
|
|
|
private GameObject whatSlotToEquip; |
|
|
|
public GameObject pickupAlert; |
|
public Text pickupName; |
|
public Image pickupImage; |
|
|
|
|
|
private void Awake() |
|
{ |
|
if (Instance != null && Instance != this) |
|
{ |
|
Destroy(gameObject); |
|
} |
|
else |
|
{ |
|
Instance = this; |
|
} |
|
} |
|
|
|
|
|
void Start() |
|
{ |
|
isOpen = false; |
|
isFull = false; |
|
PopulateSlotList(); |
|
|
|
Cursor.visible = false; |
|
} |
|
|
|
|
|
private void PopulateSlotList() |
|
{ |
|
foreach (Transform child in inventoryScreenUI.transform) |
|
{ |
|
if (child.CompareTag("Slot")) |
|
{ |
|
|
|
slotList.Add(child.gameObject); |
|
} |
|
|
|
} |
|
} |
|
|
|
|
|
void Update() |
|
{ |
|
|
|
if (Input.GetKeyDown(KeyCode.I) && !isOpen) |
|
{ |
|
inventoryScreenUI.SetActive(true); |
|
Cursor.lockState = CursorLockMode.None; |
|
Cursor.visible = true; |
|
|
|
SelectionManager.Instance.DisableSelection(); |
|
SelectionManager.Instance.GetComponent<SelectionManager>().enabled = false; |
|
|
|
isOpen = true; |
|
|
|
} |
|
else if (Input.GetKeyDown(KeyCode.I) && isOpen) |
|
{ |
|
inventoryScreenUI.SetActive(false); |
|
isOpen = false; |
|
if (!CraftingSystem.Instance.isOpen) |
|
{ |
|
Cursor.lockState = CursorLockMode.Locked; |
|
Cursor.visible = false; |
|
Cursor.visible = false; |
|
SelectionManager.Instance.EnableSelection(); |
|
SelectionManager.Instance.GetComponent<SelectionManager>().enabled = true; |
|
|
|
} |
|
|
|
} |
|
} |
|
public void AddToInventory(string itemName) |
|
{ |
|
SoundManager.Instance.PlaySound(SoundManager.Instance.dropItemSound); |
|
|
|
whatSlotToEquip = FindNextEmptySlot(); |
|
itemToAdd = Instantiate(Resources.Load<GameObject>(itemName), whatSlotToEquip.transform.position, whatSlotToEquip.transform.rotation); |
|
itemToAdd.transform.SetParent(whatSlotToEquip.transform); |
|
itemList.Add(itemName); |
|
|
|
TriggerPickupPopup(itemName, itemToAdd.GetComponent<Image>().sprite); |
|
|
|
ReCalculateList(); |
|
CraftingSystem.Instance.RefreshNeededItems(); |
|
} |
|
|
|
void TriggerPickupPopup(string itemName, Sprite itemSprite) |
|
{ |
|
|
|
pickupAlert.SetActive(true); |
|
pickupName.text = itemName; |
|
pickupImage.sprite = itemSprite; |
|
StartCoroutine(closePopup()); |
|
} |
|
|
|
IEnumerator closePopup() |
|
{ |
|
|
|
yield return new WaitForSeconds(5); |
|
pickupAlert.SetActive(false); |
|
} |
|
|
|
private GameObject FindNextEmptySlot() |
|
{ |
|
foreach (GameObject slot in slotList) |
|
{ |
|
if (slot.transform.childCount == 0) |
|
{ |
|
return slot; |
|
} |
|
} |
|
return new GameObject(); |
|
} |
|
|
|
public bool CheckSlotsAvailable(int emptyNeeded) |
|
{ |
|
int fullSlots = 0; |
|
foreach (GameObject slot in slotList) |
|
{ |
|
if (slot.transform.childCount > 0) |
|
{ |
|
fullSlots++; |
|
} |
|
|
|
|
|
} |
|
return fullSlots < slotList.Count - emptyNeeded; |
|
} |
|
|
|
public void RemoveItem(string nameToRemove, int amountToRemove) |
|
{ |
|
int counter = amountToRemove; |
|
for (var i = slotList.Count - 1; i >= 0; i--) |
|
|
|
{ |
|
if (slotList[i].transform.childCount > 0) |
|
{ |
|
if (slotList[i].transform.GetChild(0).name == nameToRemove + "(Clone)" && counter != 0) |
|
{ |
|
DestroyImmediate(slotList[i].transform.GetChild(0).gameObject); |
|
counter--; |
|
|
|
} |
|
} |
|
|
|
} |
|
|
|
ReCalculateList(); |
|
CraftingSystem.Instance.RefreshNeededItems(); |
|
} |
|
|
|
public void ReCalculateList() |
|
{ |
|
itemList.Clear(); |
|
foreach (GameObject slot in slotList) |
|
{ |
|
if (slot.transform.childCount > 0) |
|
{ |
|
string name = slot.transform.GetChild(0).name; |
|
itemList.Add(name.Replace("(Clone)", "")); |
|
} |
|
} |
|
|
|
} |
|
|
|
|
|
} |
|
|