Beispiel #1
0
 public bool InsertItem(Item item, ItemSlot slot, InventoryCellsGroup group, bool can_stack, bool can_auto_select_group, Storage storage = null)
 {
     if (item.m_Info.m_FakeItem)
     {
         return(true);
     }
     if (slot)
     {
         if (slot.CanInsertItem(item))
         {
             if (slot.IsStack() && slot.m_ItemParent && slot.m_ItemParent.m_Info.m_InventoryRotated != item.m_Info.m_InventoryRotated)
             {
                 Inventory3DManager.Get().RotateItem(item, true);
             }
             slot.InsertItem(item);
             return(true);
         }
         if (!slot.IsOccupied())
         {
             return(false);
         }
     }
     if (group == null)
     {
         if (can_stack)
         {
             List <Item> list = storage ? storage.m_Items : InventoryBackpack.Get().m_Items;
             for (int i = 0; i < list.Count; i++)
             {
                 Item item2 = list[i];
                 if (item2.m_InventorySlot && !item2.m_CurrentSlot && item2.m_InventorySlot.CanInsertItem(item))
                 {
                     if (item2.m_Info.m_InventoryRotated != item.m_Info.m_InventoryRotated)
                     {
                         Inventory3DManager.Get().RotateItem(item, true);
                     }
                     item2.m_InventorySlot.InsertItem(item);
                     return(true);
                 }
             }
         }
         if (can_auto_select_group)
         {
             group = this.FindFreeGroup(item);
             if (group != null && group.IsFree())
             {
                 group.Insert(item, this.m_Grid);
                 return(true);
             }
         }
         return(false);
     }
     if (group.IsFree())
     {
         group.Insert(item, this.m_Grid);
         return(true);
     }
     return(false);
 }
Beispiel #2
0
 private InsertResult InsertItemRight(Item item, ItemSlot slot)
 {
     if (!slot)
     {
         slot = this.FindFreeSlot(item);
     }
     if (slot && slot.CanInsertItem(item))
     {
         slot.InsertItem(item);
         return(InsertResult.Ok);
     }
     return(InsertResult.NoSpace);
 }
Beispiel #3
0
    public ItemSlot FindFreeSlot(Item item)
    {
        if (item.m_Info.m_BackpackPocket == BackpackPocket.Left)
        {
            if (this.m_EquippedItemSlot && !this.m_EquippedItem)
            {
                return(this.m_EquippedItemSlot);
            }
            using (List <ItemSlot> .Enumerator enumerator = this.m_LeftSlots.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    ItemSlot itemSlot = enumerator.Current;
                    if ((!this.m_EquippedItem || !(this.m_EquippedItemSlot == itemSlot)) && itemSlot.CanInsertItem(item))
                    {
                        return(itemSlot);
                    }
                }
                goto IL_123;
            }
        }
        if (item.m_Info.m_BackpackPocket == BackpackPocket.Right)
        {
            using (List <ItemSlot> .Enumerator enumerator = this.m_RightSlots.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    ItemSlot itemSlot2 = enumerator.Current;
                    if (itemSlot2.CanInsertItem(item))
                    {
                        return(itemSlot2);
                    }
                }
                goto IL_123;
            }
        }
        if (item.m_Info.m_BackpackPocket == BackpackPocket.Top)
        {
            foreach (ItemSlot itemSlot3 in this.m_TopSlots)
            {
                if (itemSlot3.CanInsertItem(item))
                {
                    return(itemSlot3);
                }
            }
        }
IL_123:
        return(null);
    }
Beispiel #4
0
 public bool InsertItem(Item item, ItemSlot slot, InventoryCellsGroup group, bool can_stack, bool can_auto_select_group)
 {
     if (slot)
     {
         if (slot.CanInsertItem(item))
         {
             slot.InsertItem(item);
             return(true);
         }
         return(false);
     }
     else
     {
         if (group == null)
         {
             if (can_stack)
             {
                 for (int i = 0; i < InventoryBackpack.Get().m_Items.Count; i++)
                 {
                     Item item2 = InventoryBackpack.Get().m_Items[i];
                     if (item2.m_InventorySlot && !item2.m_CurrentSlot && item2.m_InventorySlot.CanInsertItem(item))
                     {
                         item2.m_InventorySlot.InsertItem(item);
                         return(true);
                     }
                 }
             }
             if (can_auto_select_group)
             {
                 group = this.FindFreeGroup(item);
                 if (group != null && group.IsFree())
                 {
                     group.Insert(item, this.m_Grid);
                     return(true);
                 }
             }
             return(false);
         }
         if (group.IsFree())
         {
             group.Insert(item, this.m_Grid);
             return(true);
         }
         return(false);
     }
 }