Filtration/Filtration.LootExplosionStudio/Services/ItemFilterBlockFinderServic...

38 lines
1.2 KiB
C#
Raw Normal View History

2015-07-10 12:21:35 -04:00
using System.Linq;
using Filtration.ObjectModel;
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.LootExplosionStudio;
namespace Filtration.LootExplosionStudio.Services
{
internal interface IItemFilterBlockFinderService
{
ItemFilterBlock FindBlockForLootItem(LootItem lootItem, ItemFilterScript script);
}
internal class ItemFilterBlockFinderService : IItemFilterBlockFinderService
{
public ItemFilterBlock FindBlockForLootItem(LootItem lootItem, ItemFilterScript script)
{
return script.ItemFilterBlocks.FirstOrDefault(block => BlockMatchesLootItem(lootItem, block));
}
private static bool BlockMatchesLootItem(LootItem lootItem, ItemFilterBlock block)
{
if (!block.BlockItems.OfType<StringListBlockItem>().All(blockItem => blockItem.MatchesLootItem(lootItem)))
{
return false;
}
if (
!block.BlockItems.OfType<NumericFilterPredicateBlockItem>()
.All(blockItem => blockItem.MatchesLootItem(lootItem)))
{
return false;
}
return true;
}
}
}