public void AddButton <T>(string buttonName, T item, UI_Screen_ItemContextMenu contextMenu, Action <T, UI_Screen_ItemContextMenu> action)
        where T : Item
    {
        Button button = Instantiate(buttonPrefab.gameObject, buttonGroup, false).GetComponent <Button>();

        button.name = buttonName;
        button.GetComponentInChildren <Text>().text = buttonName;
        button.onClick.AddListener(() => { action?.Invoke(item, contextMenu); });
    }
    protected virtual void ShowContextMenu(Item item)
    {
        // Spawn Context Menu
        openedContextMenu = Instantiate(itemContextMenuPrefab, itemContextMenuParent, false);
        openedContextMenu.Open();

        // Set Title
        openedContextMenu.SetTitle(item.Info.ItemName);

        // Spawn Context Menu Buttons
        SetContextMenuButtons(item, openedContextMenu);
    }
    protected virtual void SetContextMenuButtons(Item item, UI_Screen_ItemContextMenu contextMenu)
    {
        if (item is ConsumableItem)
        {
            contextMenu.AddButton("Consume", item as ConsumableItem, contextMenu, (i, contenxtmMenu) =>
            {
                if (i == null)
                {
                    return;
                }

                if (i.Consume())
                {
                    i.Inventory.RemoveItem(i);
                }
                contextMenu.Close();
            });
        }

        contextMenu.AddButton("Drop", item, contextMenu, (i, contenxtmMenu) =>
        {
            if (i == null)
            {
                return;
            }

            i.Inventory.DropItem(i.Inventory.GetIndex_Item(i));
            contextMenu.Close();
        });

        contextMenu.AddButton("Remove", item, contextMenu, (i, contenxtmMenu) =>
        {
            if (i == null)
            {
                return;
            }

            i.Inventory.RemoveItem(i.Inventory.GetIndex_Item(i), i.Info.Count);
            contextMenu.Close();
        });
    }