using System; using System.Collections.Generic; using ColdMint.scripts.item; using ColdMint.scripts.item.itemStacks; using Godot; namespace ColdMint.scripts.inventory; /// /// item container /// 物品容器 /// /// ///Item containers can store items. Things like backpacks and Hotbars are containers with visual pages. ///物品容器可以储存物品。像背包和hotbar是具有可视化页面的容器。 /// public interface IItemContainer : IEnumerable { /// /// Can the specified item be added to the container? /// 指定的物品是否可添加到容器内? /// /// /// bool CanAddItem(IItem item); /// /// Implement methods for adding items /// 实现添加物品的方法 /// /// /// bool AddItem(IItem item); /// /// Add an stack of items to this container /// 向当前容器中存入一堆物品 /// /// /// /// If the source item stack is empty after the operation is completed /// 操作完成后,源物品堆是否被取空 /// bool AddItemStack(IItemStack itemStack); /// /// Gets the selected location /// 获取选中的位置 /// /// int GetSelectIndex(); /// /// Gets the currently selected node /// 获取当前选中的节点 /// /// ItemSlotNode? GetSelectItemSlotNode(); /// /// If present, remove an item from the slot at the currently selected location and return it. /// 如果存在,移除当前选中位置的槽位中的一个物品并将其返回 /// /// IItem? PickItemFromItemSlotBySelectIndex(); /// /// Remove the specified number of items from the item slot at the currently selected location, and return them as a new item stack /// 取出当前选中位置的物品槽中指定数量的物品,并作为新的物品堆返回 /// /// /// Quantity to be taken out, inputs below zero represent all items /// 要取出的数量,小于0的输入代表全部物品 /// /// IItemStack? PickItemsFromItemSlotBySelectIndex(int value); /// /// Removes an item from the inventory at the currently selected location /// 移除当前选中位置物品栏内的物品 /// /// /// Quantity to be removed, inputs below zero represent all items /// 要删除的数量,小于0的输入代表全部物品 /// /// /// The remaining number, if the number of items in the current item stack is less than the specified number. Otherwise,0 /// 若物品槽内物品少于指定的数量,返回相差的数量。否则返回0 /// /// /// Will remove the removed items from the game, if that is not the intent, consider using the /// 会将移除的物品从游戏中删除,如果目的并非如此,请考虑使用 /// int RemoveItemFromItemSlotBySelectIndex(int number); /// /// Gets the number of item slots /// 获取物品槽的数量 /// /// int GetItemSlotCount(); /// /// Gets the item slot for the specified location /// 获取指定位置的物品槽 /// /// /// ItemSlotNode? GetItemSlotNode(int index); /// /// Gets the item slot for the specified location, equals to /// 获取指定位置的物品槽,等同于 /// /// /// ItemSlotNode? this[int index] => GetItemSlotNode(index); /// /// If present, remove an item from the slot in the specified location and return it. /// 如果存在,移除指定位置的槽位中的一个物品并将其返回 /// /// IItem? PickItemFromItemSlot(int itemSlotIndex); /// /// Remove the specified number of items from the item slot in the specified location, and return them as a new item stack /// 取出指定位置的物品槽中指定数量的物品,并作为新的物品堆返回 /// /// /// /// Quantity to be taken out, inputs below zero represent all items /// 要取出的数量,小于0的输入代表全部物品 /// /// IItemStack? PickItemsFromItemSlot(int itemSlotIndex, int value); /// /// Removes an item from the item slot in the specified location /// 在指定位置的物品槽内移除物品 /// /// /// /// Quantity to be removed, inputs below zero represent all items /// 要删除的数量,小于0的输入代表全部物品 /// /// /// The remaining number, if the number of items in the current item stack is less than the specified number. Otherwise,0 /// 若物品槽内物品少于指定的数量,返回相差的数量。否则返回0 /// /// /// Will remove the removed items from the game, if that is not the intent, consider using the /// 会将移除的物品从游戏中删除,如果目的并非如此,请考虑使用 /// int RemoveItemFromItemSlot(int itemSlotIndex, int number); /// /// Based on the given item, match the item slots where it can be added to /// 根据给定的物品,匹配可放置它的物品槽 /// /// /// /// Return null if there is no slot to place the item in /// 若没有槽可放置此物品,则返回null /// ItemSlotNode? Match(IItem item); /// /// Based on the given item stack, match the item slots where it can be added to /// 根据给定的物品堆,匹配可放置它的物品槽 /// /// /// /// Return null if there is no slot to add the item slot in /// 若没有槽可放置此物品堆,则返回null /// ItemSlotNode? Match(IItemStack stack); /// /// Match the first item slot that has item stack that satisfies the predicate /// 匹配首个拥有满足指定条件的物品堆的物品槽 /// /// /// /// Return null if there is no slot satisfies the predicate /// 若没有满足条件的槽位,返回null /// /// ItemSlotNode? Match(Func predicate); /// /// Match all item slots that has item stack that satisfies the predicate /// 匹配所有拥有满足指定条件的物品堆的物品槽 /// /// /// /// IEnumerable for the item slot matched to, will be empty if there's no slot satisfies the predicate /// 包含匹配到的槽位的IEnumerable,当没有满足条件的槽位时为空 /// /// IEnumerable MatchAll(Func predicate); /// /// AddItemSlot /// 添加物品槽 /// /// /// void AddItemSlot(Node rootNode, int index); /// /// SelectTheNextItemSlot /// 选择下一个物品槽 /// void SelectTheNextItemSlot(); /// /// SelectThePreviousItemSlot /// 选择上一个物品槽 /// void SelectThePreviousItemSlot(); /// /// 选择物品槽 /// SelectItemSlot /// /// void SelectItemSlot(int newSelectIndex); }