增加物品删除和清空容器函数
This commit is contained in:
parent
ad7b710a21
commit
434e3fff6b
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue