增加物品删除和清空容器函数

This commit is contained in:
kercylan98 2023-05-10 17:39:48 +08:00
parent ad7b710a21
commit 434e3fff6b
2 changed files with 54 additions and 0 deletions

View File

@ -71,6 +71,10 @@ func (slf *ItemContainer[ItemID, Item]) GetItemsFull() []game.ItemContainerMembe
result[i] = slf.items[*guid]
}
}
sizeLimit := slf.GetSizeLimit()
for sizeLimit > 0 && len(result) > sizeLimit {
result = append(result, nil)
}
return result
}
@ -263,3 +267,47 @@ func (slf *ItemContainer[ItemID, Item]) CheckDeductItem(guid int64, count *huge.
return nil
}
}
func (slf *ItemContainer[ItemID, Item]) Remove(guid int64) {
member, exist := slf.items[guid]
if !exist {
return
}
delete(slf.items, guid)
delete(slf.itemIdGuidRef[member.GetID()], guid)
slf.sort[member.sort] = nil
slf.vacancy = append(slf.vacancy, member.sort)
sizeLimit := slf.GetSizeLimit()
for slf.sort[slf.maxSort] == nil && slf.maxSort > sizeLimit {
slf.sort = append(slf.sort[0:slf.maxSort], slf.sort[slf.maxSort+1:]...)
slf.maxSort--
}
}
func (slf *ItemContainer[ItemID, Item]) RemoveWithID(id ItemID) {
for guid := range slf.itemIdGuidRef[id] {
member, exist := slf.items[guid]
if !exist {
continue
}
delete(slf.items, guid)
slf.sort[member.sort] = nil
slf.vacancy = append(slf.vacancy, member.sort)
}
delete(slf.itemIdGuidRef, id)
sizeLimit := slf.GetSizeLimit()
for slf.sort[slf.maxSort] == nil && slf.maxSort > sizeLimit {
slf.sort = append(slf.sort[0:slf.maxSort], slf.sort[slf.maxSort+1:]...)
slf.maxSort--
}
}
func (slf *ItemContainer[ItemID, Item]) Clear() {
slf.items = map[int64]*ItemContainerMember[ItemID, Item]{}
slf.itemIdGuidRef = map[ItemID]map[int64]bool{}
slf.sort = nil
slf.maxSort = 0
slf.vacancy = nil
}

View File

@ -38,4 +38,10 @@ type ItemContainer[ItemID comparable, I Item[ItemID]] interface {
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()
}