miepzerino
2025-03-31 60a3a6a7012906a86546200dd038d752e163dc07
#14 added item select in inventory
4 files modified
4 files added
19481 ■■■■ changed files
Assets/Prefabs/Managers/UI.prefab 5341 ●●●●● patch | view | raw | blame | history
Assets/Prefabs/Managers/UI.prefab.meta 7 ●●●●● patch | view | raw | blame | history
Assets/Prefabs/UI/ItemUI.prefab 58 ●●●●● patch | view | raw | blame | history
Assets/Scenes/GameplayScene.unity 13922 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Inventory/InventoryDisplay.cs 97 ●●●● patch | view | raw | blame | history
Assets/Scripts/Inventory/ItemUIScript.cs 43 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Inventory/ItemUIScript.cs.meta 11 ●●●●● patch | view | raw | blame | history
ProjectSettings/ProjectSettings.asset 2 ●●● patch | view | raw | blame | history
Assets/Prefabs/Managers/UI.prefab
New file
Diff too large
Assets/Prefabs/Managers/UI.prefab.meta
New file
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 02acdd1a77bc039499d062956646f4f8
PrefabImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Prefabs/UI/ItemUI.prefab
@@ -12,6 +12,8 @@
  - component: {fileID: 7567492242401966963}
  - component: {fileID: 3595669150549702758}
  - component: {fileID: 4539871696051037875}
  - component: {fileID: 6097422381394106856}
  - component: {fileID: 5755656717305505260}
  m_Layer: 5
  m_Name: ItemUI
  m_TagString: Untagged
@@ -96,6 +98,62 @@
  m_ChildScaleWidth: 0
  m_ChildScaleHeight: 0
  m_ReverseArrangement: 0
--- !u!114 &6097422381394106856
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1536595002982607090}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
  m_Name:
  m_EditorClassIdentifier:
  m_Navigation:
    m_Mode: 3
    m_WrapAround: 0
    m_SelectOnUp: {fileID: 0}
    m_SelectOnDown: {fileID: 0}
    m_SelectOnLeft: {fileID: 0}
    m_SelectOnRight: {fileID: 0}
  m_Transition: 1
  m_Colors:
    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
    m_ColorMultiplier: 1
    m_FadeDuration: 0.1
  m_SpriteState:
    m_HighlightedSprite: {fileID: 0}
    m_PressedSprite: {fileID: 0}
    m_SelectedSprite: {fileID: 0}
    m_DisabledSprite: {fileID: 0}
  m_AnimationTriggers:
    m_NormalTrigger: Normal
    m_HighlightedTrigger: Highlighted
    m_PressedTrigger: Pressed
    m_SelectedTrigger: Selected
    m_DisabledTrigger: Disabled
  m_Interactable: 1
  m_TargetGraphic: {fileID: 0}
  m_OnClick:
    m_PersistentCalls:
      m_Calls: []
--- !u!114 &5755656717305505260
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1536595002982607090}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 519c952913e3ff344a7b23eb0020d6ca, type: 3}
  m_Name:
  m_EditorClassIdentifier:
--- !u!1 &4844031224436336669
GameObject:
  m_ObjectHideFlags: 0
Assets/Scenes/GameplayScene.unity
Diff too large
Assets/Scripts/Inventory/InventoryDisplay.cs
@@ -1,3 +1,4 @@
using Assets.Scripts.Enums;
using System;
using System.Collections;
using System.Collections.Generic;
@@ -13,6 +14,8 @@
    public GameObject inventoryPanel;
    public GameObject itemContent;
    public GameObject itemUIPrefab;
    public GameObject itemNameDescription;
    public GameObject itemDescription;
    public List<GameObject> itemUIs = new List<GameObject>();
@@ -57,11 +60,11 @@
            inventoryPanel.SetActive(!inventoryPanel.activeSelf);
            if (inventoryPanel.activeSelf)
            {
                GenerateItemContentList();
                UpdateItemContentList();
            }
            else
            {
                ClearItemContentList();
                //ClearItemContentList();
            }
        }
    }
@@ -96,16 +99,67 @@
    //    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.SetActive(!itemNameDescription.activeSelf);
            itemNameDescription.SetActive(!itemNameDescription.activeSelf);
        }
        else {
            itemDescription.SetActive(true);
            itemNameDescription.SetActive(true);
        }
        itemNameDescription.GetComponent<ItemUIScript>().InventorySlot = inventorySlot;
        itemDescription.GetComponent<ItemUIScript>().InventorySlot = inventorySlot;
    }
    private void UpdateItemContentList()
@@ -119,24 +173,39 @@
        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++;
        });
Assets/Scripts/Inventory/ItemUIScript.cs
New file
@@ -0,0 +1,43 @@
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using static UnityEditor.Progress;
public enum ItemUIType
{
    ItemNameDescription,
    ItemDescription
}
public class ItemUIScript : MonoBehaviour
{
    private InventorySlot inventorySlot;
    public ItemUIType itemUIType;
    public InventorySlot InventorySlot
    {
        get => inventorySlot;
        set
        {
            inventorySlot = value;
            switch (itemUIType)
            {
                case ItemUIType.ItemNameDescription:
                    gameObject.transform.Find("ItemName").GetComponent<TextMeshProUGUI>().text = inventorySlot.item.itemName;
                    gameObject.transform.Find("ItemQuantity").GetComponent<TextMeshProUGUI>().text = inventorySlot.quantity.ToString() + "x";
                    gameObject.transform.Find("ItemIcon").GetComponent<Image>().sprite = inventorySlot.item.itemIcon;
                    break;
                case ItemUIType.ItemDescription:
                    gameObject.transform.Find("ItemDescriptionText").GetComponent<TextMeshProUGUI>().text = inventorySlot.item.itemDescription;
                    break;
            }
        }
    }
    private void OnDestroy()
    {
        gameObject.GetComponent<Button>()?.onClick?.RemoveAllListeners();
    }
}
Assets/Scripts/Inventory/ItemUIScript.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 519c952913e3ff344a7b23eb0020d6ca
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
ProjectSettings/ProjectSettings.asset
@@ -78,7 +78,7 @@
  androidFullscreenMode: 1
  defaultIsNativeResolution: 1
  macRetinaSupport: 1
  runInBackground: 0
  runInBackground: 1
  captureSingleScreen: 0
  muteOtherAudioSources: 0
  Prepare IOS For Recording: 0