如何从库存插槽中获取所有数据



所以,我在C#中制作了一个游戏,并试图从我的库存插槽中获取所有数据。

public bool AddItems(Item item){
if(item == null || item.quantity <= 0)
return false;
List<Slot> listSlots = GetSlots(panel_Backpack.grid);
if(listSlots.Count <= 0)
return false;
Slot slotFound = listSlots.FirstOrDefault(p => p.currentItem != null && p.currentItem.stackable && p.currentItem.quantity + item.quantity <= item.quantityMax);

if(slotFound != null && slotFound.currentItem.itemId == item.itemId){
slotFound.currentItem.quantity += item.quantity;
slotFound.Refresh();
} else {
slotFound = listSlots.FirstOrDefault(p => p.currentItem == null);
if(slotFound == null){
print("Inventory full!");
return false;
}
slotFound.ChangeItem(item);
}
return true;
}

我编写了这段代码,但我使用了函数FirstOrDefault((,我只能获得值​​第一个插槽的。我需要检查所有的插槽,因为当我从地面上拿起一个物品时,如果该物品是不同的,它会将其发送到新的插槽

但是,如果第一个插槽中的项目没有满(每个插槽占用两个项目(,而我拾取项目,它总是会创建新的插槽,因为它看到第一个插槽不是它的完整

我捡起一块石头,又捡起一块,然后又捡起两块方块。

我捡起一块石头,一个正方形,然后又捡起一个正方形。

我想把方块放到同一个位置。

如果有人能帮忙,我将不胜感激。

您可能希望在检查FirstOrDefault而不是之后检查Item类型是否与插槽的Item类型匹配。如果你这样做之后,它不会影响列表搜索

Slot-slotFound=listSlots.FirstOrDefault;

稍后在方法中使用slotFound.currentItem.itemId == item.itemId进行比较,因此如果我们将其移动到FirstOrDefault搜索中,它应该可以工作。为了便于阅读,我还将把这份声明分成多行。

Slot slotFound = listSlots.FirstOrDefault(p => 
p.currentItem != null && 
p.currentItem.itemId == item.itemId && 
p.currentItem.stackable && 
p.currentItem.quantity + item.quantity <= item.quantityMax);

通过检查插槽项目与您在FirstOrDefault((中检查的项目具有相同的ID,您将只获得相同"的插槽;类型";。这应该返回存储相同项目且未满的第一个插槽,如果找不到,则返回默认项目。

最新更新