public void TryAddRangeOrTransfer(IEnumerable <T> things, bool canMergeWithExistingStacks = true, bool destroyLeftover = false)
        {
            if (things == this)
            {
                return;
            }
            ThingOwner thingOwner = things as ThingOwner;

            if (thingOwner != null)
            {
                thingOwner.TryTransferAllToContainer(this, canMergeWithExistingStacks);
                if (destroyLeftover)
                {
                    thingOwner.ClearAndDestroyContents(DestroyMode.Vanish);
                }
            }
            else
            {
                IList <T> list = things as IList <T>;
                if (list != null)
                {
                    for (int i = 0; i < list.Count; i++)
                    {
                        if (!base.TryAddOrTransfer(list[i], canMergeWithExistingStacks) && destroyLeftover)
                        {
                            T t = list[i];
                            t.Destroy(DestroyMode.Vanish);
                        }
                    }
                }
                else
                {
                    foreach (T t2 in things)
                    {
                        if (!base.TryAddOrTransfer(t2, canMergeWithExistingStacks) && destroyLeftover)
                        {
                            t2.Destroy(DestroyMode.Vanish);
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
 public void TryAddRangeOrTransfer(IEnumerable <T> things, bool canMergeWithExistingStacks = true, bool destroyLeftover = false)
 {
     if (things != this)
     {
         ThingOwner thingOwner = things as ThingOwner;
         if (thingOwner != null)
         {
             thingOwner.TryTransferAllToContainer(this, canMergeWithExistingStacks);
             if (destroyLeftover)
             {
                 thingOwner.ClearAndDestroyContents();
             }
         }
         else
         {
             IList <T> list = things as IList <T>;
             if (list != null)
             {
                 for (int i = 0; i < list.Count; i++)
                 {
                     if (!TryAddOrTransfer(list[i], canMergeWithExistingStacks) && destroyLeftover)
                     {
                         T val = list[i];
                         val.Destroy();
                     }
                 }
             }
             else
             {
                 foreach (T thing in things)
                 {
                     T current = thing;
                     if (!TryAddOrTransfer(current, canMergeWithExistingStacks) && destroyLeftover)
                     {
                         current.Destroy();
                     }
                 }
             }
         }
     }
 }
Exemplo n.º 3
0
        public void TryAddRangeOrTransfer(IEnumerable <T> things, bool canMergeWithExistingStacks = true, bool destroyLeftover = false)
        {
            if (things == this)
            {
                return;
            }
            ThingOwner thingOwner = things as ThingOwner;

            if (thingOwner != null)
            {
                thingOwner.TryTransferAllToContainer(this, canMergeWithExistingStacks);
                if (destroyLeftover)
                {
                    thingOwner.ClearAndDestroyContents();
                }
                return;
            }
            IList <T> list = things as IList <T>;

            if (list != null)
            {
                for (int i = 0; i < list.Count; i++)
                {
                    if (!TryAddOrTransfer(list[i], canMergeWithExistingStacks) && destroyLeftover)
                    {
                        list[i].Destroy();
                    }
                }
                return;
            }
            foreach (T thing in things)
            {
                if (!TryAddOrTransfer(thing, canMergeWithExistingStacks) && destroyLeftover)
                {
                    thing.Destroy();
                }
            }
        }