Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Attempts to fill given target to the given amount of the given item by transferring it
- // from the list of sources
- private void LoadItem(
- List<IMyTerminalBlock> sources,
- IMyTerminalBlock target,
- string id,
- string subid,
- VRage.MyFixedPoint amount)
- {
- if (target == null)
- return;
- var todo = amount - CountItems(target, id, subid);
- if (todo <= 0)
- return;
- var targetInventory = target.GetInventory(0);
- foreach (IMyTerminalBlock source in sources)
- {
- for (int i = 0; i < source.GetInventoryCount(); i++)
- {
- var inventory = source.GetInventory(i);
- var items = inventory.GetItems();
- for (int j = 0; j < items.Count; j++)
- {
- var item = items[j];
- if (!item.Content.TypeId.ToString().Equals(id))
- continue;
- if (!item.Content.SubtypeName.Equals(subid))
- continue;
- var transfer = VRage.MyFixedPoint.Min(todo, item.Amount);
- if (!inventory.IsConnectedTo(targetInventory))
- continue;
- inventory.TransferItemTo(targetInventory, j, null, true, transfer);
- todo -= transfer;
- if (todo <= 0)
- return;
- }
- }
- }
- }
- // Counts the number of items of a given type in the given block
- private VRage.MyFixedPoint CountItems(IMyTerminalBlock block, string id, string subid)
- {
- if (block == null)
- return 0;
- VRage.MyFixedPoint result = 0;
- for (int i = 0; i < block.GetInventoryCount(); i++)
- {
- var inventory = block.GetInventory(i);
- foreach (var item in inventory.GetItems())
- if (item.Content.TypeId.ToString() == id && item.Content.SubtypeName == subid)
- result += item.Amount;
- }
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement