48 lines
1.9 KiB
Go
48 lines
1.9 KiB
Go
package game
|
|
|
|
import "github.com/kercylan98/minotaur/utils/huge"
|
|
|
|
// ItemContainer 物品容器
|
|
type ItemContainer[ItemID comparable, I Item[ItemID]] interface {
|
|
// GetSize 获取容器物品非堆叠数量
|
|
GetSize() int
|
|
// GetSizeLimit 获取容器物品非堆叠数量上限
|
|
GetSizeLimit() int
|
|
// SetExpandSize 设置拓展非堆叠数量上限
|
|
SetExpandSize(size int)
|
|
// GetItem 获取物品
|
|
GetItem(guid int64) (ItemContainerMember[ItemID, I], error)
|
|
// GetItems 获取所有非空物品
|
|
// - 物品顺序为容器内顺序
|
|
// - 空的容器空间将被忽略
|
|
GetItems() []ItemContainerMember[ItemID, I]
|
|
// GetItemsFull 获取所有物品
|
|
// - 物品顺序为容器内顺序
|
|
// - 空的容器空间将被设置为nil
|
|
// - 当容器非堆叠物品上限为0时,最后一个非空物品之后的所有空物品都将被忽略
|
|
// - 当容器非堆叠物品未达到上限时,其余空间将使用nil填充
|
|
GetItemsFull() []ItemContainerMember[ItemID, I]
|
|
// GetItemsMap 获取所有物品
|
|
GetItemsMap() map[int64]ItemContainerMember[ItemID, I]
|
|
// ExistItem 物品是否存在
|
|
ExistItem(guid int64) bool
|
|
// ExistItemWithID 是否存在特定ID的物品
|
|
ExistItemWithID(id ItemID) bool
|
|
// AddItem 添加物品
|
|
AddItem(item I, count *huge.Int) (guid int64, err error)
|
|
// DeductItem 扣除特定物品数量,当数量为0将被移除,数量不足时将不进行任何改变
|
|
DeductItem(guid int64, count *huge.Int) error
|
|
// TransferTo 转移特定物品到另一个容器中
|
|
TransferTo(guid int64, count *huge.Int, target ItemContainer[ItemID, I]) error
|
|
// CheckAllowAdd 检查是否允许添加特定物品
|
|
CheckAllowAdd(item I, count *huge.Int) error
|
|
// CheckDeductItem 检查是否允许扣除特定物品
|
|
CheckDeductItem(guid int64, count *huge.Int) error
|
|
// Remove 移除特定guid的物品
|
|
Remove(guid int64)
|
|
// RemoveWithID 移除所有物品ID匹配的物品
|
|
RemoveWithID(id ItemID)
|
|
// Clear 清空物品容器
|
|
Clear()
|
|
}
|