示例#1
0
 public void UpdateItem(string uniqueUUID, ICoreData item, bool updateUI)
 {
     for (int i = 0; i < InternalItems.Count; i++)
     {
         if (InternalItems[i].BaseData.UniqueUUID == uniqueUUID)
         {
             IStackableData iStackDataInterface = InternalItems[i].BaseData as IStackableData;
             if (iStackDataInterface != null)
             {
                 if (iStackDataInterface.DestroyOnUse && iStackDataInterface.Quantity <= 0)
                 {
                     RemoveItem(InternalItems[i].BaseData.UniqueUUID, updateUI);
                 }
                 else
                 {
                     InternalItems[i] = item;
                     EventSystem.EventMessenger.Instance.Raise(new Events.EventItemWasUpdatedOnInventory(InventoryUUID, item, updateUI));
                 }
             }
             else
             {
                 InternalItems[i] = item;
                 EventSystem.EventMessenger.Instance.Raise(new Events.EventItemWasUpdatedOnInventory(InventoryUUID, item, updateUI));
             }
         }
     }
 }
示例#2
0
        public StackResult Stack(BaseItem itemToStack)
        {
            // NOTE:
            // By returning null in this method
            // a switch will happen on UISlot class
            itemToStack = itemToStack as ResourceItem;
            if (itemToStack == null)
            {
                return(null);
            }

            IStackableData iStackDataInterface = itemToStack.BaseData as IStackableData;

            if (iStackDataInterface == null)
            {
                return(null);
            }


            StackResult result = null;

            if (BaseData.Type == itemToStack.BaseData.Type)
            {
                if (IsStackable && iStackDataInterface.IsStackable)
                {
                    // check if the item in the left has available space to stack
                    if (StackableMax > Quantity)
                    {
                        result = new StackResult();

                        // how much can I stack
                        int canStackThisMuch = StackableMax - Quantity;

                        // now check if the item that was stacked on top
                        // of the left item still have quantity
                        if (iStackDataInterface.Quantity > canStackThisMuch)
                        {
                            // the item has more than I can stack
                            Quantity += canStackThisMuch;
                            iStackDataInterface.Quantity -= canStackThisMuch;

                            //result.leftItem = left;
                            result.item = itemToStack;
                        }
                        else
                        {
                            // The item should be deleted will stack all its quantity
                            Quantity += iStackDataInterface.Quantity;
                            iStackDataInterface.Quantity = -1;
                            //result.leftItem = left;
                            result.item = itemToStack;
                        }
                        //Debug.Log("The items where stacked.");
                        return(result);
                    }
                    else
                    {
                        //Debug.Log("The item in the left is full");
                        return(null);
                    }
                }
                else
                {
                    //Debug.Log("one of the items is not stackable.");
                    return(null);
                }
            }
            else
            {
                //Debug.Log("The item type is not the same");
                return(null);
            }
        }