diff --git a/SabreTools.Core/Filter/FilterRunner.cs b/SabreTools.Core/Filter/FilterRunner.cs index b730d77b..1aec568f 100644 --- a/SabreTools.Core/Filter/FilterRunner.cs +++ b/SabreTools.Core/Filter/FilterRunner.cs @@ -49,17 +49,36 @@ namespace SabreTools.Core.Filter _ => null, }; - // Loop through and run each filter in order + // Group filters by key + var filterDictionary = new Dictionary>(); foreach (var filter in Filters) { - // If the filter isn't for this object type, skip + // Skip filters not applicable to the item if (filter.Key.ItemName == "item" && Array.IndexOf(TypeHelper.GetDatItemTypeNames(), itemName) == -1) continue; else if (filter.Key.ItemName != "item" && filter.Key.ItemName != itemName) continue; + // Ensure the key exists + string key = filter.Key.ToString(); + if (!filterDictionary.ContainsKey(filter.Key.ToString())) + filterDictionary[key] = []; + + // Add the filter to the set + filterDictionary[key].Add(filter); + } + + // Loop through and run each filter in order + foreach (var filterKey in filterDictionary.Keys) + { + bool matchOne = false; + foreach (var filter in filterDictionary[filterKey]) + { + matchOne |= filter.Matches(dictionaryBase); + } + // If we don't get a match, it's a failure - if (!filter.Matches(dictionaryBase)) + if (!matchOne) return false; } diff --git a/SabreTools.DatFiles.Test/DatFileTests.FromMetadata.cs b/SabreTools.DatFiles.Test/DatFileTests.FromMetadata.cs index 3f5f2b01..e457d28e 100644 --- a/SabreTools.DatFiles.Test/DatFileTests.FromMetadata.cs +++ b/SabreTools.DatFiles.Test/DatFileTests.FromMetadata.cs @@ -66,8 +66,9 @@ namespace SabreTools.DatFiles.Test DatFile datFile = new Formats.Logiqx(null, useGame: false); datFile.ConvertFromMetadata(item, "filename", indexId: 0, keep: true, statsOnly: false); - DatItems.Machine actualMachine = Assert.Single(datFile.ItemsDB.GetMachines()).Value; - ValidateMachine(actualMachine); + // TODO: Reenable when ItemsDB is used again + // DatItems.Machine actualMachine = Assert.Single(datFile.ItemsDB.GetMachines()).Value; + // ValidateMachine(actualMachine); // Aggregate for easier validation DatItems.DatItem[] datItems = datFile.Items.SortedKeys