예제 #1
0
 /// <summary>
 /// 将字典中的物品加入背包,传过来的字典应该是没有相同项的
 /// 进行两次遍历,第一次先查找里面有没有同类的东西,第二次再查找空的背包槽
 /// 当然这里的背包存储的物品的个数没有上限
 /// </summary>
 /// <param name="items"></param>
 public void AddItem(Dictionary <int, GameObject> items)
 {
     // 第一次遍历,找出背包槽中和字典中ID一样的物体合并
     for (int i = 0; i < slotList.Count; i++)
     {
         Transform  tempTransform = slotList[i].transform.Find("InventoryItem");
         GameObject tempGameObject;
         if (tempTransform != null)
         {
             InventoryItemController tempInventory = tempTransform.GetComponent <InventoryItemController>();
             if (items.TryGetValue(tempInventory.ItemID, out tempGameObject))
             {
                 tempInventory.ChangeNum(tempGameObject.GetComponent <InventoryItemController>().Number);
                 items.Remove(tempInventory.ItemID);
                 GameObject.Destroy(tempGameObject);
             }
         }
     }
     // 如果一次遍历无法达到目标
     if (items.Count > 0)
     {
         // 寻找背包槽中的空槽放入字典中的第一个物品就可以
         for (int i = 0; i < slotList.Count; i++)
         {
             Transform tempTransform = slotList[i].transform.Find("InventoryItem");
             if (tempTransform == null && items.Count > 0)
             {
                 // 遍历中没法改变其中的值,但是直接 break 是可以的
                 foreach (var k in items)
                 {
                     k.Value.transform.SetParent(slotList[i].transform);
                     k.Value.GetComponent <InventoryItemController>().IsInventory = true;
                     items.Remove(k.Key);
                     break;
                 }
             }
             if (items.Count <= 0)
             {
                 break;
             }
         }
     }
 }
예제 #2
0
    /// <summary>
    ///  根据 ID 值进行添加材料
    ///  name 用来确定图标
    /// </summary>
    public void AddItemWithID(int id, string name, int number = 1)
    {
        Show();
        /// 第一次寻找字典中的相应 ID 的值并合并
        for (int i = 0; i < slotList.Count; i++)
        {
            Transform tempTransform = slotList[i].transform.Find("InventoryItem");
            if (tempTransform != null)
            {
                InventoryItemController tempInventory = tempTransform.GetComponent <InventoryItemController>();
                if (tempInventory.ItemID == id)
                {
                    tempInventory.ChangeNum(number);
                    Hide();
                    return;
                }
            }
        }


        /// 没找到的时候添加一个
        for (int i = 0; i < slotList.Count; i++)
        {
            Transform tempTransform = slotList[i].transform.Find("InventoryItem");
            if (tempTransform == null)
            {
                GameObject temp = GameObject.Instantiate(m_View.Prefab_Item, slotList[i].transform);
                temp.name = "InventoryItem";
                Sprite tempSprite = m_View.GetInventorySpriteByName(name);

                temp.GetComponent <InventoryItemController>().InitSingleItem(id, tempSprite,
                                                                             number, 0);
                Hide();
                return;
            }
        }
        Hide();
    }