Example #1
0
        public void MoveItemToCell(int sourceCellId, int destCellId)
        {
            _currentSort = SortType.Unsorted;

            InventoryCell source = _cells[sourceCellId];
            InventoryCell dest   = _cells[destCellId];

            if (dest.ItemsCount > 0)
            {
                if (source.ItemId == dest.ItemId) // If we have same items in this cells - we exchange numbers until stack is full
                {
                    InventoryItem item = DummySettings.GetItemById(source.ItemId);
                    int           free = item.MaxStackSize - dest.ItemsCount;
                    dest.ItemsCount  += free;
                    source.ItemsCount = source.ItemsCount > free ? source.ItemsCount - free : 0;
                }
                else
                {
                    int itemId     = dest.ItemId;
                    int itemsCount = dest.ItemsCount;
                    dest.ItemId       = source.ItemId;
                    dest.ItemsCount   = source.ItemsCount;
                    source.ItemId     = itemId;
                    source.ItemsCount = itemsCount;
                }
            }
            else
            {
                dest.ItemId       = source.ItemId;
                dest.ItemsCount   = source.ItemsCount;
                source.ItemId     = -1;
                source.ItemsCount = 0;
            }
        }
Example #2
0
        public Dictionary <InventoryItemActions, string> GetContextMenuActions(int cellId)
        {
            InventoryCell cell = _cells[cellId];

            if (cell.ItemsCount > 0)
            {
                InventoryItem item = DummySettings.GetItemById(cell.ItemId);
                List <InventoryItemActions> actions = item.GetItemActions();
                Dictionary <InventoryItemActions, string> actionDescs = new Dictionary <InventoryItemActions, string>();

                foreach (InventoryItemActions action in actions)
                {
                    switch (action)
                    {
                    case InventoryItemActions.Use:
                        actionDescs[action] = "Use " + item.Name;
                        break;

                    case InventoryItemActions.Sell:
                        int    price      = item.Price * cell.ItemsCount;
                        string amountInfo = cell.ItemsCount > 1 ? "(" + cell.ItemsCount.ToString() + ")" : "";
                        actionDescs[action] = "Sell " + item.Name + amountInfo + " for " + price.ToString();
                        break;

                    case InventoryItemActions.Drop:
                        actionDescs[action] = "Drop " + item.Name;
                        break;
                    }
                }

                return(actionDescs);
            }

            return(null);
        }
Example #3
0
        public void ApplyActionToItemInCell(InventoryItemActions action, int cellId)
        {
            InventoryItem item = DummySettings.GetItemById(_cells[cellId].ItemId);

            if (item.GetItemActions().Exists(a => a == action))
            {
                switch (action)
                {
                case InventoryItemActions.Use:
                    UseItemFromCell(cellId);
                    break;

                case InventoryItemActions.Sell:
                    // Some sell item event call
                    //..
                    RemoveItemsByCell(cellId, 1);
                    break;

                case InventoryItemActions.Drop:
                    // Some drop item event call
                    //..
                    RemoveItemsByCell(cellId, 1);
                    break;
                }
            }
        }
Example #4
0
        public void AddItem(int itemId, int amount)
        {
            InventoryItem item = DummySettings.GetItemById(itemId);

            if (item.Quest && item.MaxStackSize == 1 && Array.FindIndex(_cells, c => c.ItemId == itemId) > -1)
            {
                Console.WriteLine("Cannot add quest item " + item.Name + ": non-stackable");
                return;
            }

            InventoryCell[] cells = Array.FindAll(_cells, c => c.ItemId == itemId && c.ItemsCount < item.MaxStackSize);
            if (cells.Length > 0)
            {
                SortByCondition(cells, CompareCount);

                for (int i = 0; i < cells.Length; i++)
                {
                    InventoryCell cell = cells[i];
                    int           free = item.MaxStackSize - cell.ItemsCount;
                    cell.ItemsCount += amount <= free ? amount : free;
                    amount          -= free;
                    if (amount <= 0)
                    {
                        break;
                    }
                }
            }
            else
            {
                for (int i = 0; i < _cells.Length; i++)
                {
                    InventoryCell cell = _cells[i];
                    if (cell.ItemsCount > 0)
                    {
                        continue;
                    }
                    else
                    {
                        cell.ItemId = itemId;
                    }

                    int free = item.MaxStackSize - cell.ItemsCount;
                    cell.ItemsCount += amount <= free ? amount : free;
                    amount          -= free;
                    if (amount <= 0)
                    {
                        break;
                    }
                }
            }
        }
Example #5
0
        bool CompareType(InventoryCell a, InventoryCell b)
        {
            if (a.ItemsCount < 1 && b.ItemsCount > 0)
            {
                return(true);
            }
            else if (a.ItemsCount > 0 && b.ItemsCount < 1 || a.ItemsCount < 1 && b.ItemsCount < 1)
            {
                return(false);
            }

            InventoryItem itemA = DummySettings.GetItemById(a.ItemId);
            InventoryItem itemB = DummySettings.GetItemById(b.ItemId);

            return(itemA.Type > itemB.Type);
        }
Example #6
0
 // Debug function
 public void PrintInventory()
 {
     Console.WriteLine("--Print Inventory Content--");
     for (int i = 0; i < _cells.Length; i++)
     {
         if (_cells[i].ItemsCount > 0)
         {
             InventoryItem item = DummySettings.GetItemById(_cells[i].ItemId);
             Console.WriteLine("Cell " + i.ToString() + " contains " + item.Name);
         }
         else
         {
             Console.WriteLine("Cell " + i.ToString() + " is empty");
         }
     }
 }
Example #7
0
        void UpdateEquipmentSlot()
        {
            InventoryItem item = DummySettings.GetItemById(_inventory.EquippedItemId);

            if (item != null)
            {
                EquipmentIconBox.Image   = item.Icon;
                EquipmentIconBox.Visible = true;
                EquipmentItemName.Text   = item.Name;
            }
            else
            {
                EquipmentIconBox.Visible = false;
                EquipmentItemName.Text   = "";
            }
        }
Example #8
0
        void UseItemFromCell(int cellId)
        {
            InventoryCell cell = _cells[cellId];
            InventoryItem item = DummySettings.GetItemById(cell.ItemId);

            switch (item.Type)
            {
            case InventoryItemType.Consumable:
                // Todo: invoke event to inform the system about used consumable
                //..
                RemoveItemsByCell(cellId, 1);
                break;

            case InventoryItemType.Euipment:
                _equippedItemId = item.Id;
                // Todo: invoke event to inform the system about equipped item
                break;
            }
        }
Example #9
0
        void UpdateInventoryGrid()
        {
            InventoryCell[] cells = _inventory.GetCellsContent();
            for (int i = 0; i < cells.Length; i++)
            {
                InventoryCell cell = cells[i];
                InventoryItem item = DummySettings.GetItemById(cell.ItemId);
                CellView      cw   = _cellViews[i];
                cw.slot.ContextMenu.MenuItems.Clear();

                if (item != null)
                {
                    cw.name.Text    = item.Name;
                    cw.icon.Image   = item.Icon;
                    cw.icon.Visible = true;
                    cw.count.Text   = cell.ItemsCount.ToString();

                    Dictionary <InventoryItemActions, string> actions = _inventory.GetContextMenuActions(i);
                    if (actions != null)
                    {
                        foreach (KeyValuePair <InventoryItemActions, string> action in actions)
                        {
                            MenuItem menuItem = new MenuItem(action.Value);
                            menuItem.Click += (s, e) =>
                            {
                                _inventory.ApplyActionToItemInCell(action.Key, cw.id);
                                UpdateInventoryGrid();
                                UpdateEquipmentSlot();
                            };
                            cw.slot.ContextMenu.MenuItems.Add(menuItem);
                        }
                    }
                }
                else
                {
                    cw.name.Text    = "";
                    cw.icon.Visible = false;
                    cw.count.Text   = "";
                }
            }
        }