How to perform an action when a specific string is removed from a list of strings?

Hi, I’m trying to use items through my inventory. I’m attempting to do it in a way that when, say “Health +10” is removed from the list it will add plus 10 to my player’s health. The problem is that I’m using Gui.Button and it will remove but it won’t add the health. I don’t know if this is due to the way I’ve written the “If removed” or if I just am not using buttons properly. Thank you.

Ex.

At Inventory[0] is the string “Health +10”.

if (GUI.Button(new Rect(100, 75, 135, 20), i1))
{
Inventory.Remove(Inventory[0]);
}

Then.

if(Inventory.Remove(“Health +10”)
{
pHealth += 10;
}

You could handle it in the place you remove it.

if (GUI.Button(new Rect(100, 75, 135, 20), i1)) 
{ 
    pHealth += 10;
    Inventory.Remove(Inventory[0]); 
}

If the Inventory is being changed from other places, you need to wrap the List in a class that fire events when you add or remove stuff.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Example : MonoBehaviour
{
    // Instead of using List<string>, we use InventoryList
    InventoryList list = new InventoryList();

    void Start()
    {
        // register event handlers
        list.onValueAdded += (sender, value) => print("Added " + value);
        list.onValueRemoved += (sender, value) => print("Removed " + value);
        list.onValueChanged += (sender, index) => print("Changed list[" + index + "] " + sender[index]);

        // use the list
        list.Add("Pasta");
        list.Add("Dog");
        list.Add("Student");
        list.Remove("Student Loan"); // won't be logged because it doesnt exist.
        list[1] = "Creepy Dog";
        list.Remove("Creepy Dog");

        // Dump some data so we can see what happened
        print("List is now accurate. Let's review its contents");    
        foreach (var item in list)
        {
            print("Item: " + item);
        }
    }
}

Let’s pause and look at the output before we look at InventoryList.

public class InventoryList : IEnumerable<string>
{
    private List<string> list = new List<string>();

    public delegate void ValueEvent(InventoryList list, string value);
    public delegate void ValueChangedEvent(InventoryList list, int index);

    public event ValueEvent onValueAdded;
    public event ValueEvent onValueRemoved;
    public event ValueChangedEvent onValueChanged;

    public InventoryList() { }

    public InventoryList(IEnumerable<string> source)
    {
        list = new List<string>(source);
    }

    public void Add(string value)
    {
        list.Add(value);
        if (onValueAdded != null)
            onValueAdded(this, value);
    }

    public bool Remove(string value)
    {
        bool removed = list.Remove(value);
        if (removed && onValueRemoved != null)
            onValueRemoved(this, value);
        return removed;
    }

    public IEnumerator<string> GetEnumerator()
    {
        return ((IEnumerable<string>)list).GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return ((IEnumerable<string>)list).GetEnumerator();
    }

    public string this[int index]
    {
        get { return list[index]; }
        set
        {
            if (list[index] != value)
            {
                list[index] = value;
                onValueChanged(this, index);
            }
        }
    }
}