Does a standard function exist to check if an Item satisfies a Filter?
Given for example an item:
{name = "automation-science-pack", quality = "normal"}
and a filter:
{name = "automation-science-pack", quality = "uncommon", comparator = "<"}
I want to check if the item satisfies the filter and don't want to write my own function if it's not needed.
https://lua-api.factorio.com/stable/con ... ilter.html
https://lua-api.factorio.com/stable/con ... Count.html
Function to evaluate ItemWithQualityCount with ItemFilter
Re: Function to evaluate ItemWithQualityCount with ItemFilter
A possible solution if no default function is available below.
Performance-wise a native function would still be preferred.
Performance-wise a native function would still be preferred.
Code: Select all
local quality_levels = {
["normal"] = 1,
["uncommon"] = 2,
["rare"] = 3,
["epic"] = 4,
["legendary"] = 5
}
function item_matches_filter(item, filter)
-- Check name match
if filter.name and item.name ~= filter.name then
return false
end
-- Check quality with comparator
if filter.quality then
local item_quality_level = quality_levels[item.quality or "normal"]
local filter_quality_level = quality_levels[filter.quality]
local comparator = filter.comparator or "="
if comparator == "=" then
return item_quality_level == filter_quality_level
elseif comparator == "<" then
return item_quality_level < filter_quality_level
elseif comparator == ">" then
return item_quality_level > filter_quality_level
elseif comparator == "≤" or comparator == "<=" then
return item_quality_level <= filter_quality_level
elseif comparator == "≥" or comparator == ">=" then
return item_quality_level >= filter_quality_level
elseif comparator == "≠" or comparator == "!=" then
return item_quality_level ~= filter_quality_level
end
end
return true
end