コード例 #1
0
        private void CheckAutoload()
        {
            if (!autoload || !LoadingInProgressOrReadyToLaunch || !parent.Spawned)
            {
                return;
            }
            tmpRequiredItems.Clear();
            tmpRequiredItems.AddRange(requiredItems);
            tmpRequiredPawns.Clear();
            tmpRequiredPawns.AddRange(requiredPawns);
            ThingOwner innerContainer = Transporter.innerContainer;

            for (int i = 0; i < innerContainer.Count; i++)
            {
                Pawn pawn = innerContainer[i] as Pawn;
                if (pawn != null)
                {
                    tmpRequiredPawns.Remove(pawn);
                    continue;
                }
                int num = innerContainer[i].stackCount;
                for (int j = 0; j < tmpRequiredItems.Count; j++)
                {
                    if (tmpRequiredItems[j].ThingDef == innerContainer[i].def)
                    {
                        int num2 = Mathf.Min(tmpRequiredItems[j].Count, num);
                        if (num2 > 0)
                        {
                            tmpRequiredItems[j] = tmpRequiredItems[j].WithCount(tmpRequiredItems[j].Count - num2);
                            num -= num2;
                        }
                    }
                }
            }
            for (int num3 = tmpRequiredItems.Count - 1; num3 >= 0; num3--)
            {
                if (tmpRequiredItems[num3].Count <= 0)
                {
                    tmpRequiredItems.RemoveAt(num3);
                }
            }
            if (tmpRequiredItems.Any() || tmpRequiredPawns.Any())
            {
                if (Transporter.leftToLoad != null)
                {
                    Transporter.leftToLoad.Clear();
                }
                tmpAllSendablePawns.Clear();
                tmpAllSendablePawns.AddRange(TransporterUtility.AllSendablePawns(TransportersInGroup, parent.Map));
                tmpAllSendableItems.Clear();
                tmpAllSendableItems.AddRange(TransporterUtility.AllSendableItems(TransportersInGroup, parent.Map));
                tmpAllSendableItems.AddRange(TransporterUtility.ThingsBeingHauledTo(TransportersInGroup, parent.Map));
                tmpRequiredPawnsPossibleToSend.Clear();
                for (int k = 0; k < tmpRequiredPawns.Count; k++)
                {
                    if (tmpAllSendablePawns.Contains(tmpRequiredPawns[k]))
                    {
                        TransferableOneWay transferableOneWay = new TransferableOneWay();
                        transferableOneWay.things.Add(tmpRequiredPawns[k]);
                        Transporter.AddToTheToLoadList(transferableOneWay, 1);
                        tmpRequiredPawnsPossibleToSend.Add(tmpRequiredPawns[k]);
                    }
                }
                for (int l = 0; l < tmpRequiredItems.Count; l++)
                {
                    if (tmpRequiredItems[l].Count <= 0)
                    {
                        continue;
                    }
                    int num4 = 0;
                    for (int m = 0; m < tmpAllSendableItems.Count; m++)
                    {
                        if (tmpAllSendableItems[m].def == tmpRequiredItems[l].ThingDef)
                        {
                            num4 += tmpAllSendableItems[m].stackCount;
                        }
                    }
                    if (num4 <= 0)
                    {
                        continue;
                    }
                    TransferableOneWay transferableOneWay2 = new TransferableOneWay();
                    for (int n = 0; n < tmpAllSendableItems.Count; n++)
                    {
                        if (tmpAllSendableItems[n].def == tmpRequiredItems[l].ThingDef)
                        {
                            transferableOneWay2.things.Add(tmpAllSendableItems[n]);
                        }
                    }
                    int count = Mathf.Min(tmpRequiredItems[l].Count, num4);
                    Transporter.AddToTheToLoadList(transferableOneWay2, count);
                }
                TransporterUtility.MakeLordsAsAppropriate(tmpRequiredPawnsPossibleToSend, TransportersInGroup, parent.Map);
                tmpAllSendablePawns.Clear();
                tmpAllSendableItems.Clear();
                tmpRequiredItems.Clear();
                tmpRequiredPawns.Clear();
                tmpRequiredPawnsPossibleToSend.Clear();
            }
            else
            {
                if (Transporter.leftToLoad != null)
                {
                    Transporter.leftToLoad.Clear();
                }
                TransporterUtility.MakeLordsAsAppropriate(tmpRequiredPawnsPossibleToSend, TransportersInGroup, parent.Map);
            }
        }