Add predicate filter to enqueue
To effectively make a search or filter
This commit is contained in:
@@ -155,9 +155,11 @@ local _
|
||||
|
||||
---@param item Barotrauma.Item
|
||||
---@param queue Barotrauma.Item[]
|
||||
---@param predicate? fun(item: Barotrauma.Item): boolean
|
||||
---@return Barotrauma.Item[], string
|
||||
enqueueItem = function(item, queue)
|
||||
enqueueItem = function(item, queue, predicate)
|
||||
queue = queue or {}
|
||||
predicate = predicate or function() return true end
|
||||
-- debugPrint(string.format("Enqueuing item: %s", item.Prefab.Identifier.Value))
|
||||
-- local err
|
||||
if item.OwnInventory then
|
||||
@@ -170,23 +172,26 @@ enqueueItem = function(item, queue)
|
||||
-- debugPrint(string.format("Error enqueuing inventory: %s", err))
|
||||
-- end
|
||||
end
|
||||
queue[#queue + 1] = item
|
||||
if predicate(item) then queue[#queue + 1] = item end
|
||||
-- debugPrint(string.format("Item enqueued. Current queue size: %d", #queue))
|
||||
return queue, nil
|
||||
end
|
||||
|
||||
---@param slot Barotrauma.ItemInventory.Slot
|
||||
---@param queue Barotrauma.Item[]
|
||||
---@param predicate? fun(item: Barotrauma.Item): boolean
|
||||
---@return Barotrauma.Item[], string
|
||||
enqueueSlot = function(slot, queue)
|
||||
enqueueSlot = function(slot, queue, predicate)
|
||||
queue = queue or {}
|
||||
predicate = predicate or function() return true end
|
||||
-- debugPrint(string.format("Enqueuing slot with %d items.", #slot.items))
|
||||
-- We don't want to shadow queue
|
||||
-- local err
|
||||
-- If the slot is empty there's nothing to iterate
|
||||
-- And we will naturally return queue as is
|
||||
for _, item in ipairs(slot.items) do
|
||||
queue, _ = enqueueItem(item, queue)
|
||||
-- Only the final leaf nodes decide upon the predicate
|
||||
queue, _ = enqueueItem(item, queue, predicate)
|
||||
-- if err then
|
||||
-- debugPrint(string.format("Error enqueuing item: %s", err))
|
||||
-- end
|
||||
@@ -197,13 +202,16 @@ end
|
||||
|
||||
---@param inventory Barotrauma.ItemInventory
|
||||
---@param queue Barotrauma.Item[]
|
||||
---@param predicate? fun(item: Barotrauma.Item): boolean
|
||||
---@return Barotrauma.Item[]
|
||||
enqueueInventory = function(inventory, queue)
|
||||
enqueueInventory = function(inventory, queue, predicate)
|
||||
queue = queue or {}
|
||||
predicate = predicate or function() return true end
|
||||
-- debugPrint(string.format("Enqueuing inventory with %d slots.", #inventory.slots))
|
||||
-- local err
|
||||
for _, slot in ipairs(inventory.slots) do
|
||||
queue, _ = enqueueSlot(slot, queue)
|
||||
-- Only the final leaf nodes decide upon the predicate
|
||||
queue, _ = enqueueSlot(slot, queue, predicate)
|
||||
-- if err then
|
||||
-- debugPrint(string.format("Error enqueuing slot: %s", err))
|
||||
-- end
|
||||
|
||||
Reference in New Issue
Block a user