| | |
| | | using Assets.Scripts.Enums; |
| | | using Assets.Scripts.Helpers; |
| | | using System; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | |
| | | public GameObject inventoryPanel; |
| | | public GameObject itemContent; |
| | | public GameObject itemUIPrefab; |
| | | public GameObject itemNameDescription; |
| | | public GameObject itemDescription; |
| | | public GameObject itemDeleteButton; |
| | | public GameObject inventoryMaxAmount; |
| | | |
| | | public List<GameObject> itemUIs = new List<GameObject>(); |
| | | |
| | |
| | | //} |
| | | if (context.started) |
| | | { |
| | | inventoryPanel.SetActive(!inventoryPanel.activeSelf); |
| | | if (inventoryPanel.activeSelf) |
| | | { |
| | | GenerateItemContentList(); |
| | | } |
| | | else |
| | | { |
| | | ClearItemContentList(); |
| | | } |
| | | ToggleInventoryPanel(); |
| | | } |
| | | } |
| | | |
| | | public void ToggleInventoryPanel() |
| | | { |
| | | inventoryPanel.SetActive(!inventoryPanel.activeSelf); |
| | | if (inventoryPanel.activeSelf) |
| | | { |
| | | UpdateItemContentList(); |
| | | } |
| | | else |
| | | { |
| | | //ClearItemContentList(); |
| | | } |
| | | } |
| | | |
| | |
| | | // GenerateItemContentList(); |
| | | //} |
| | | |
| | | private void GenerateItemContentList() |
| | | //TODO: Delete this |
| | | //private void GenerateItemContentList() |
| | | //{ |
| | | // inventory.items?.ForEach(slot => |
| | | // { |
| | | // GameObject itemUI = Instantiate(itemUIPrefab, itemContent.transform); |
| | | // itemUI.transform.Find("ItemName").GetComponent<TextMeshProUGUI>().text = slot.item.itemName; |
| | | // itemUI.transform.Find("ItemQuantity").GetComponent<TextMeshProUGUI>().text = slot.quantity.ToString() + "x"; |
| | | // itemUI.transform.Find("ItemIcon").GetComponent<Image>().sprite = slot.item.itemIcon; |
| | | // itemUIs.Add(itemUI); |
| | | // }); |
| | | //} |
| | | |
| | | public void OnItemClick(InventorySlot inventorySlot) |
| | | { |
| | | inventory.items?.ForEach(slot => |
| | | //// If itemNameDescription doesn't exist or doesn't have required component, create it |
| | | //if (itemNameDescription == null || itemNameDescription.GetComponent<ItemUIScript>() == null) |
| | | //{ |
| | | // Debug.LogError("ItemNameDescription is not properly set up with ItemUIScript component"); |
| | | // return; |
| | | //} |
| | | |
| | | //// Toggle the description panel |
| | | //itemNameDescription.SetActive(!itemNameDescription.activeSelf); |
| | | |
| | | //if (itemNameDescription.activeSelf) |
| | | //{ |
| | | // var itemUIScript = itemNameDescription.GetComponent<ItemUIScript>(); |
| | | // if (itemUIScript != null) |
| | | // { |
| | | // itemUIScript.InventorySlot = item.InventorySlot; |
| | | // } |
| | | // else |
| | | // { |
| | | // Debug.LogError("ItemUIScript component not found on itemNameDescription"); |
| | | // } |
| | | //} |
| | | |
| | | //// Toggle the description panel |
| | | //itemNameDescription.SetActive(!itemNameDescription.activeSelf); |
| | | |
| | | //if (itemNameDescription.activeSelf) |
| | | //{ |
| | | // // Update description panel content |
| | | // var nameText = itemNameDescription.transform.Find("ItemName")?.GetComponent<TextMeshProUGUI>(); |
| | | // //var descriptionText = itemNameDescription.transform.Find("Description")?.GetComponent<TextMeshProUGUI>(); |
| | | // itemNameDescription.GetComponent<ItemUIScript>().InventorySlot = item.InventorySlot; |
| | | // //if (nameText != null) nameText.text = item.InventorySlot.item.itemName; |
| | | // //if (descriptionText != null) descriptionText.text = item.InventorySlot.item.itemDescription; |
| | | //} |
| | | if (itemNameDescription.GetComponent<ItemUIScript>()?.InventorySlot?.item?.itemName == inventorySlot.item.itemName) |
| | | { |
| | | GameObject itemUI = Instantiate(itemUIPrefab, itemContent.transform); |
| | | itemUI.transform.Find("ItemName").GetComponent<TextMeshProUGUI>().text = slot.item.itemName; |
| | | itemUI.transform.Find("ItemQuantity").GetComponent<TextMeshProUGUI>().text = slot.quantity.ToString() + "x"; |
| | | itemUI.transform.Find("ItemIcon").GetComponent<Image>().sprite = slot.item.itemIcon; |
| | | itemUIs.Add(itemUI); |
| | | }); |
| | | itemDescription.transform.parent.parent.parent.gameObject.SetActive(!itemNameDescription.activeSelf); |
| | | itemDeleteButton.SetActive(!itemNameDescription.activeSelf); |
| | | itemNameDescription.SetActive(!itemNameDescription.activeSelf); |
| | | } |
| | | else |
| | | { |
| | | itemDescription.transform.parent.parent.parent.gameObject.SetActive(true); |
| | | itemDeleteButton.SetActive(true); |
| | | itemNameDescription.SetActive(true); |
| | | } |
| | | itemNameDescription.GetComponent<ItemUIScript>().InventorySlot = inventorySlot; |
| | | itemDescription.GetComponent<ItemUIScript>().InventorySlot = inventorySlot; |
| | | ResetScrollbarForDescription(); |
| | | } |
| | | public void OnItemDeleteClick() |
| | | { |
| | | InventorySlot inventorySlot = itemNameDescription.GetComponent<ItemUIScript>()?.InventorySlot; |
| | | if (inventorySlot?.item?.itemName != null) |
| | | { |
| | | inventory.RemoveItem(inventorySlot.item, inventorySlot.quantity); |
| | | itemNameDescription.SetActive(false); |
| | | itemDeleteButton.SetActive(false); |
| | | ResetScrollbarForDescription(); |
| | | itemDescription.transform.parent.parent.parent.gameObject.SetActive(false); |
| | | } |
| | | } |
| | | |
| | | private void ResetScrollbarForDescription() |
| | | { |
| | | //var scrollRect = itemDescription.transform.parent.parent.GetComponent<ScrollRect>(); |
| | | //if (scrollRect != null) |
| | | //{ |
| | | // // Reset the scroll position |
| | | // scrollRect.normalizedPosition = Vector2.one; // (1,1) = top, (0,0) = bottom |
| | | |
| | | // // Force the scroll view to refresh its layout |
| | | // LayoutRebuilder.ForceRebuildLayoutImmediate(scrollRect.content); |
| | | |
| | | // // Reset the content's position |
| | | // var content = itemDescription.transform.Find("ItemTextDescription"); |
| | | // if (content != null) |
| | | // { |
| | | // RectTransform rectTransform = content.GetComponent<RectTransform>(); |
| | | // if (rectTransform != null) |
| | | // { |
| | | // rectTransform.anchoredPosition = Vector2.zero; |
| | | // } |
| | | // } |
| | | //} |
| | | // Reset the scroll position |
| | | var scrollrect = itemDescription.transform.parent.parent.GetComponent<ScrollRect>(); |
| | | if (scrollrect != null) |
| | | { |
| | | //Debug.Log("Resetting scroll position"); |
| | | scrollrect.verticalNormalizedPosition = 1; // 0 = top, 1 = bottom |
| | | } |
| | | // Reset the content's position |
| | | // transform.Find("ItemTextDescription") |
| | | //var content = itemDescription.transform.Find("ItemTextDescription"); |
| | | //if (content != null) |
| | | //{ |
| | | // RectTransform rectTransform = content.GetComponent<RectTransform>(); |
| | | // if (rectTransform != null) |
| | | // { |
| | | // rectTransform.anchoredPosition = Vector2.zero; |
| | | // } |
| | | //} |
| | | } |
| | | |
| | | private void UpdateItemContentList() |
| | | { |
| | | TextMeshProHelper.UpdateItemMaxCountText(inventoryMaxAmount.GetComponent<TextMeshProUGUI>(), inventory.items.Count, inventory.maxInventorySize); |
| | | |
| | | // First, deactivate all existing itemUIs |
| | | itemUIs.ForEach(itemUI => itemUI.SetActive(false)); |
| | | |
| | |
| | | inventory.items.ForEach(slot => |
| | | { |
| | | GameObject itemUI; |
| | | |
| | | bool isCreated = false; |
| | | // Reuse existing UI element if available |
| | | if (currentIndex < itemUIs.Count) |
| | | { |
| | | itemUI = itemUIs[currentIndex]; |
| | | //itemUI.GetComponent<ItemUIScript>().InventorySlot = slot; |
| | | itemUI.SetActive(true); |
| | | } |
| | | else |
| | | { |
| | | // Create new UI element if needed |
| | | itemUI = Instantiate(itemUIPrefab, itemContent.transform); |
| | | //itemUI.GetComponent<ItemUIScript>().InventorySlot = slot; |
| | | itemUIs.Add(itemUI); |
| | | isCreated = true; |
| | | } |
| | | ItemUIScript itemUIScript = itemUI.GetComponent<ItemUIScript>(); |
| | | itemUIScript.InventorySlot = slot; |
| | | |
| | | // Add click event listener only if the itemUI was just created |
| | | if (isCreated) |
| | | { |
| | | itemUI.GetComponent<Button>().onClick.AddListener(() => OnItemClick(itemUIScript.InventorySlot)); |
| | | } |
| | | else |
| | | { |
| | | // Update the itemUIScript of the itemNameDescription panel if the item is already selected |
| | | if (itemNameDescription.GetComponent<ItemUIScript>()?.InventorySlot?.item?.itemName == slot.item.itemName) |
| | | itemNameDescription.GetComponent<ItemUIScript>().InventorySlot = slot; |
| | | } |
| | | |
| | | // Update the UI elements |
| | | itemUI.transform.Find("ItemName").GetComponent<TextMeshProUGUI>().text = slot.item.itemName; |
| | | itemUI.transform.Find("ItemQuantity").GetComponent<TextMeshProUGUI>().text = slot.quantity.ToString() + "x"; |
| | | itemUI.transform.Find("ItemIcon").GetComponent<Image>().sprite = slot.item.itemIcon; |
| | | //itemUI.transform.Find("ItemName").GetComponent<TextMeshProUGUI>().text = slot.item.itemName; |
| | | //itemUI.transform.Find("ItemQuantity").GetComponent<TextMeshProUGUI>().text = slot.quantity.ToString() + "x"; |
| | | //itemUI.transform.Find("ItemIcon").GetComponent<Image>().sprite = slot.item.itemIcon; |
| | | |
| | | currentIndex++; |
| | | }); |