diff --git a/QuickStackToBag/Lua/Autorun/init.lua b/QuickStackToBag/Lua/Autorun/init.lua index 8b54bd8..4eed027 100644 --- a/QuickStackToBag/Lua/Autorun/init.lua +++ b/QuickStackToBag/Lua/Autorun/init.lua @@ -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