public void UpdateUI()
    {
        foreach (InventorySlot ins in slots)
        {
            if (ins.GetQuantity() > 0)
            {
                if (ins.Equals(main_slot.item_reference))
                {
                    ins.DecreaseQuantity();
                    if (ins.GetQuantity() == 0)
                    {
                        ins.Clear();
                    }
                    break;
                }
            }
        }

        if (main_slot.GetQuantity() == 0 || main_slot.IsEmpty())
        {
            main_slot.Clear();
            int i;
            for (i = 0; i < 3; i++)
            {
                if (slots[i].GetQuantity() == 0)
                {
                    if (slots[i + 1].GetQuantity() > 0)
                    {
                        slots[i].Fill(slots[i + 1].item_reference);
                        slots[i + 1].Clear();
                        slots[i].SetSelected(true);
                    }
                    else if (i != 0 && slots[i - 1].GetQuantity() > 0)
                    {
                        slots[i - 1].SetSelected(true);
                        slots[i - 1].Fill(slots[i].item_reference);
                        slots[i].Clear();
                        slots[i].SetSelected(false);
                    }
                }
            }

            main_slot.Fill(System.Array.Find(slots, slot => slot.isSelected()).item_reference);
        }

        if (slots[0].GetQuantity() <= 0)
        {
            slots[0].SetSelected(false);
            main_slot.Clear();
        }

        foreach (InventorySlot s in slots)
        {
            if (s.GetQuantity() == 0 || s.IsEmpty())
            {
                s.Clear();
                s.SetSelected(false);
            }
        }
    }