Filtration/Filtration.ObjectModel/BlockItemTypes/SocketGroupBlockItem.cs

119 lines
3.5 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.Linq;
2015-06-04 13:15:54 -04:00
using System.Windows.Media;
2015-06-24 14:57:16 -04:00
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.Enums;
using Filtration.ObjectModel.LootExplosionStudio;
2015-06-04 13:15:54 -04:00
2015-06-24 14:57:16 -04:00
namespace Filtration.ObjectModel.BlockItemTypes
2015-06-04 13:15:54 -04:00
{
2015-06-24 14:57:16 -04:00
public class SocketGroupBlockItem : StringListBlockItem
2015-06-04 13:15:54 -04:00
{
public override string PrefixText
{
get { return "SocketGroup"; }
}
public override int MaximumAllowed
{
get { return 1; }
}
public override string DisplayHeading
{
get
{
return "Socket Group";
}
}
public override string SummaryText
{
get
{
var summaryItemText = " " + Items.Aggregate(string.Empty, (current, i) => current + " " + i);
return "Socket Group " + summaryItemText.TrimStart(' ');
}
}
public override Color SummaryBackgroundColor
{
get { return Colors.GhostWhite; }
}
public override Color SummaryTextColor
{
get { return Colors.Black; }
}
public override int SortOrder
{
get { return 9; }
}
public override string GetLootItemProperty(LootItem lootItem)
{
return lootItem.SocketGroups.ToString();
}
public override bool MatchesLootItem(LootItem lootItem)
{
foreach (var socketGroupString in Items)
{
var socketColorList = SocketGroupStringToSocketColors(socketGroupString);
if (
lootItem.SocketGroups.Any(
g =>
g.Sockets.Count(s => s == SocketColor.Red) >=
socketColorList.Count(l => l == SocketColor.Red) &&
g.Sockets.Count(s => s == SocketColor.Green) >=
socketColorList.Count(l => l == SocketColor.Green) &&
g.Sockets.Count(s => s == SocketColor.Blue) >=
socketColorList.Count(l => l == SocketColor.Blue) &&
g.Sockets.Count(s => s == SocketColor.White) >=
socketColorList.Count(l => l == SocketColor.White)))
{
return true;
}
}
return false;
}
private List<SocketColor> SocketGroupStringToSocketColors(string socketGroupString)
{
var socketColorList = new List<SocketColor>();
foreach (var c in socketGroupString.ToCharArray())
{
switch (c)
{
case 'R':
{
socketColorList.Add(SocketColor.Red);
break;
}
case 'G':
{
socketColorList.Add(SocketColor.Green);
break;
}
case 'B':
{
socketColorList.Add(SocketColor.Blue);
break;
}
case 'W':
{
socketColorList.Add(SocketColor.White);
break;
}
}
}
return socketColorList;
}
2015-06-04 13:15:54 -04:00
}
}