private void RemoveItemsFromTracker(StorageContainer sc, TechType item, int amountToRemove = 1) { if (IsBeingDeleted == true) { return; } if (TrackedResources.ContainsKey(item)) { TrackedResource trackedResource = TrackedResources[item]; int newAmount = trackedResource.Amount - amountToRemove; trackedResource.Amount = newAmount; if (newAmount <= 0) { TrackedResources.Remove(item); } else { int amountLeftInContainer = sc.container.GetCount(item); if (amountLeftInContainer <= 0) { trackedResource.Containers.Remove(sc); } } rmd?.ItemModified(item, newAmount); } }
private void AddItemsToTracker(StorageContainer sc, TechType item, int amountToAdd = 1) { if (IsBeingDeleted == true) { return; } if (DONT_TRACK_GAMEOBJECTS.Contains(item.AsString().ToLower())) { return; } if (TrackedResources.ContainsKey(item)) { TrackedResources[item].Amount = TrackedResources[item].Amount + amountToAdd; TrackedResources[item].Containers.Add(sc); } else { TrackedResources.Add(item, new TrackedResource() { TechType = item, Amount = amountToAdd, Containers = new HashSet <StorageContainer>() { sc } }); } rmd?.ItemModified(item, TrackedResources[item].Amount); }
public void AttemptToTakeItem(TechType item) { if (IsBeingDeleted == true) { return; } if (timerTillNextPickup > 0f) { return; } if (TrackedResources.ContainsKey(item)) { TrackedResource trackedResource = TrackedResources[item]; int beforeRemoveAmount = trackedResource.Amount; if (trackedResource.Containers.Count >= 1) { StorageContainer sc = trackedResource.Containers.ElementAt(0); if (sc.container.Contains(item)) { Pickupable pickup = sc.container.RemoveItem(item); if (pickup != null) { if (Inventory.main.Pickup(pickup)) { CrafterLogic.NotifyCraftEnd(Player.main.gameObject, item); if (beforeRemoveAmount == 1) { timerTillNextPickup = COOLDOWN_TIME_BETWEEN_PICKING_UP_LAST_ITEM_TYPE; } } else { // If it fails to get added to the inventory lets add it back into the storage container. sc.container.AddItem(pickup); } } } } } }