diff --git a/OpenRA.Game/Primitives/TypeDictionary.cs b/OpenRA.Game/Primitives/TypeDictionary.cs index bc41195ac4..e4bbf0c656 100644 --- a/OpenRA.Game/Primitives/TypeDictionary.cs +++ b/OpenRA.Game/Primitives/TypeDictionary.cs @@ -91,6 +91,27 @@ namespace OpenRA.Primitives return new T[0]; } + public void Remove(T val) + { + var t = val.GetType(); + + foreach (var i in t.GetInterfaces()) + InnerRemove(i, val); + foreach (var tt in t.BaseTypes()) + InnerRemove(tt, val); + } + + void InnerRemove(Type t, object val) + { + List objs; + object obj; + + if (dataMultiple.TryGetValue(t, out objs)) + objs.Remove(val); + else if (dataSingular.TryGetValue(t, out obj)) + dataSingular.Remove(t); + } + public IEnumerator GetEnumerator() { return WithInterface().GetEnumerator();