public void AddItem(IInGrid Item) { if (QueuedRemovals.Contains(Item)) { QueuedRemovals.Remove(Item); QueuedRemovalAreas.Remove(Item); } else { List <IInGrid> Items; foreach (Vector3 Area in CalculateAreas(Item.Translation)) { Dict.TryGetValue(Area, out Items); if (Items == null) { Items = new List <IInGrid>() { Item }; } else if (!Items.Contains(Item)) { Items.Add(Item); } Dict[Area] = Items; } } }
//Items cannot be removed from the grid while updating //as we cannot modify the List while foreaching it public void QueueRemoveItem(IInGrid Item) { QueuedRemovals.Add(Item); QueuedRemovalAreas[Item] = CalculateAreas(Item.Translation); }