Files
vRp.CD2g_test/game/item_container.go
T
2023-05-10 17:39:48 +08:00

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()
}