public static float CapacityLeftAfterTransfer(List <TransferableOneWay> transferables, StringBuilder explanation = null)
        {
            CollectionsMassCalculator.tmpThingCounts.Clear();
            for (int i = 0; i < transferables.Count; i++)
            {
                if (transferables[i].HasAnyThing)
                {
                    if (transferables[i].AnyThing is Pawn)
                    {
                        CollectionsMassCalculator.thingsInReverse.Clear();
                        CollectionsMassCalculator.thingsInReverse.AddRange(transferables[i].things);
                        CollectionsMassCalculator.thingsInReverse.Reverse();
                        TransferableUtility.TransferNoSplit(CollectionsMassCalculator.thingsInReverse, transferables[i].MaxCount - transferables[i].CountToTransfer, delegate(Thing originalThing, int toTake)
                        {
                            CollectionsMassCalculator.tmpThingCounts.Add(new ThingCount(originalThing, toTake));
                        }, false, false);
                    }
                }
            }
            CollectionsMassCalculator.thingsInReverse.Clear();
            float result = CollectionsMassCalculator.Capacity(CollectionsMassCalculator.tmpThingCounts, explanation);

            CollectionsMassCalculator.tmpThingCounts.Clear();
            return(result);
        }
        public static float CapacityLeftAfterTradeableTransfer(List <Thing> allCurrentThings, List <Tradeable> tradeables)
        {
            TransferableUtility.SimulateTradeableTransfer(allCurrentThings, tradeables, CollectionsMassCalculator.tmpThingStackParts);
            float result = CollectionsMassCalculator.Capacity(CollectionsMassCalculator.tmpThingStackParts);

            CollectionsMassCalculator.tmpThingStackParts.Clear();
            return(result);
        }
        public static float CapacityLeftAfterTradeableTransfer(List <Thing> allCurrentThings, List <Tradeable> tradeables, StringBuilder explanation = null)
        {
            CollectionsMassCalculator.tmpThingCounts.Clear();
            TransferableUtility.SimulateTradeableTransfer(allCurrentThings, tradeables, CollectionsMassCalculator.tmpThingCounts);
            float result = CollectionsMassCalculator.Capacity(CollectionsMassCalculator.tmpThingCounts, explanation);

            CollectionsMassCalculator.tmpThingCounts.Clear();
            return(result);
        }
        public static float Capacity <T>(List <T> things, StringBuilder explanation = null) where T : Thing
        {
            CollectionsMassCalculator.tmpThingCounts.Clear();
            for (int i = 0; i < things.Count; i++)
            {
                CollectionsMassCalculator.tmpThingCounts.Add(new ThingCount(things[i], things[i].stackCount));
            }
            float result = CollectionsMassCalculator.Capacity(CollectionsMassCalculator.tmpThingCounts, explanation);

            CollectionsMassCalculator.tmpThingCounts.Clear();
            return(result);
        }
        public static float Capacity <T>(List <T> things) where T : Thing
        {
            CollectionsMassCalculator.tmpThingStackParts.Clear();
            for (int i = 0; i < things.Count; i++)
            {
                CollectionsMassCalculator.tmpThingStackParts.Add(new ThingStackPart((Thing)(object)things[i], ((Thing)(object)things[i]).stackCount));
            }
            float result = CollectionsMassCalculator.Capacity(CollectionsMassCalculator.tmpThingStackParts);

            CollectionsMassCalculator.tmpThingStackParts.Clear();
            return(result);
        }
        public static float CapacityTransferables(List <TransferableOneWay> transferables)
        {
            CollectionsMassCalculator.tmpThingStackParts.Clear();
            for (int i = 0; i < transferables.Count; i++)
            {
                if (transferables[i].HasAnyThing && transferables[i].AnyThing is Pawn)
                {
                    TransferableUtility.TransferNoSplit(transferables[i].things, transferables[i].CountToTransfer, delegate(Thing originalThing, int toTake)
                    {
                        CollectionsMassCalculator.tmpThingStackParts.Add(new ThingStackPart(originalThing, toTake));
                    }, false, false);
                }
            }
            float result = CollectionsMassCalculator.Capacity(CollectionsMassCalculator.tmpThingStackParts);

            CollectionsMassCalculator.tmpThingStackParts.Clear();
            return(result);
        }