public static bool removeItem(this ItemsContainer container, TechType techType, Predicate <Pickupable> predicate) { if (!container._items.TryGetValue(techType, out ItemsContainer.ItemGroup itemGroup)) { return(false); } var items = itemGroup.items; for (int i = items.Count - 1; i >= 0; i--) { InventoryItem inventoryItem = items[i]; Pickupable item = inventoryItem.item; if (!(container as IItemsContainer).AllowedToRemove(item, true)) { return(false); } if (!predicate(item)) { continue; } items.RemoveAt(i); if (items.Count == 0) { container._items.Remove(techType); } inventoryItem.container = null; eventTechTypeChanged.remove <OnTechTypeChanged>(item, container.UpdateItemTechType); container.count--; container.unsorted = true; container.NotifyRemoveItem(inventoryItem); Object.Destroy(item.gameObject); return(true); } return(false); }
void OnDestroy() => onBindingsChanged.remove <Action>(clearCachedActions);