Система инвентаря единства: Стек предметов - PullRequest
0 голосов
/ 20 сентября 2019

Привет, ребята, мне просто интересно, в чем проблема моего кода.он может добавить первый элемент со стопками, но останавливается при добавлении второго элемента со стопками.Пожалуйста, помогите

void AddItems ()
{
    Item itemToAdd = itemDatabase.items[0];

    if (IsInInventory(itemToAdd))
    {
        for (int i = 0; i < inventoryItems.Count; i++)
        {
            if (inventoryItems[i].item == itemToAdd )
            {
                if (inventoryItems[i].item.isStackable)
                {
                    if (inventoryItems[i].stackSize != inventoryItems[i].item.stackSize)
                    {
                        inventoryItems[i].stackSize++;
                        break;
                    }

                }
            }
            else if (inventoryItems[i].item == itemToAdd && inventoryItems[i].stackSize > itemToAdd.stackSize)
            {
                AddItem(itemToAdd);
            }
        }
    }
    else
    {
        AddItem(itemToAdd);
    }
}

Ответы [ 2 ]

0 голосов
/ 21 сентября 2019

много ошибок.Проверено до конца.Дополнение к стопке предметов только одно.

if (inventoryItems[i].item == itemToAdd ) {}
else if (inventoryItems[i].item == itemToAdd && inventoryItems[i].stackSize > itemToAdd.stackSize) {}

иначе никогда не случится

void AddItems () {
    Item itemToAdd = itemDatabase.items[0];
    if (inventoryItems[i].item.isStackable && IsInInventory(itemToAdd)) {
        for (int i = 0; i < inventoryItems.Count; i++) {
            if (inventoryItems[i].item == itemToAdd ) {
                if (inventoryItems[i].stackSize+itemToAdd.stackSize <= inventoryItems[i].item.stackSize) {
                    inventoryItems[i].stackSize += itemToAdd.stackSize;
                } else {
                    itemToAdd.stackSize -= inventoryItems[i].item.stackSize-inventoryItems[i].stackSize;
                    inventoryItems[i].stackSize = inventoryItems[i].item.stackSize;
                    AddItem(itemToAdd);
                }
                break;
            }
        }
    } else {
        AddItem(itemToAdd);
    }
}
0 голосов
/ 20 сентября 2019

Если я правильно понял вашу проблему, то, что вы не можете добавить Предмет в существующий стек, вероятно, из-за этого, если условие:

    if (inventoryItems[i].item == itemToAdd )

Если это сработает, вам нужно переопределить «Равные»Метод "и" GetHashCode "в вашем классе Item, так как по умолчанию оператор" == "просто проверяет, равны ли ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...