//Register new item to our list, this method is purely used to avoid duplicates in our list public void RegisterNewItem(Handlable item) { lock (RegisteredItems) { if (RegisteredItems.Contains <Handlable>(item)) { throw new Exception("Item with the same name and type already registered."); } AssingHandle(item); RegisteredItems.Add(item); item.Init(this); } }
//Double checks internal handles to reduce Steam work private void AssingHandle(Handlable item) { Random rnd = new Random(); do { item.Handle = (ulong)rnd.Next(); lock (RegisteredItems) { foreach (Handlable hd in RegisteredItems) { if (hd.Handle == item.Handle) { item.Handle = 0; break; } } } } while (item.Handle == 0); }