Support for Path of Exile 3.6 and Synthesis League (#131)

* Add new block types

* Add new base types
This commit is contained in:
azakhi 2019-03-18 20:27:21 +03:00 committed by Ben Wallis
parent dea0378a16
commit 1f9a1c5196
16 changed files with 199 additions and 3 deletions

View File

@ -0,0 +1,23 @@
using System.Windows.Media;
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel.BlockItemTypes
{
public sealed class AnyEnchantmentBlockItem : BooleanBlockItem
{
public AnyEnchantmentBlockItem()
{
}
public AnyEnchantmentBlockItem(bool booleanValue) : base(booleanValue)
{
}
public override string PrefixText => "AnyEnchantment";
public override string DisplayHeading => "Any Enchantment";
public override Color SummaryBackgroundColor => Colors.YellowGreen;
public override Color SummaryTextColor => Colors.Black;
public override BlockItemOrdering SortOrder => BlockItemOrdering.AnyEnchantment;
}
}

View File

@ -0,0 +1,23 @@
using System.Windows.Media;
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel.BlockItemTypes
{
public sealed class FracturedItemBlockItem : BooleanBlockItem
{
public FracturedItemBlockItem()
{
}
public FracturedItemBlockItem(bool booleanValue) : base(booleanValue)
{
}
public override string PrefixText => "FracturedItem";
public override string DisplayHeading => "Fractured Item";
public override Color SummaryBackgroundColor => Colors.Salmon;
public override Color SummaryTextColor => Colors.Black;
public override BlockItemOrdering SortOrder => BlockItemOrdering.FracturedItem;
}
}

View File

@ -0,0 +1,39 @@
using System.Linq;
using System.Windows.Media;
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel.BlockItemTypes
{
public class HasEnchantmentBlockItem : StringListBlockItem
{
public override string PrefixText => "HasEnchantment";
public override int MaximumAllowed => 1;
public override string DisplayHeading => "Has Enchantment";
public override string SummaryText
{
get
{
if (Items.Count > 0 && Items.Count < 4)
{
return "Enchantments: " +
Items.Aggregate(string.Empty, (current, i) => current + i + ", ").TrimEnd(' ').TrimEnd(',');
}
if (Items.Count >= 4)
{
var remaining = Items.Count - 3;
return "Enchantments: " + Items.Take(3)
.Aggregate(string.Empty, (current, i) => current + i + ", ")
.TrimEnd(' ')
.TrimEnd(',') + " (+" + remaining + " more)";
}
return "Enchantments: (none)";
}
}
public override Color SummaryBackgroundColor => Colors.PaleGreen;
public override Color SummaryTextColor => Colors.Black;
public override BlockItemOrdering SortOrder => BlockItemOrdering.HasEnchantment;
}
}

View File

@ -0,0 +1,23 @@
using System.Windows.Media;
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel.BlockItemTypes
{
public sealed class SynthesisedItemBlockItem : BooleanBlockItem
{
public SynthesisedItemBlockItem()
{
}
public SynthesisedItemBlockItem(bool booleanValue) : base(booleanValue)
{
}
public override string PrefixText => "SynthesisedItem";
public override string DisplayHeading => "Synthesised Item";
public override Color SummaryBackgroundColor => Colors.Salmon;
public override Color SummaryTextColor => Colors.Black;
public override BlockItemOrdering SortOrder => BlockItemOrdering.SynthesisedItem;
}
}

View File

@ -12,6 +12,9 @@ namespace Filtration.ObjectModel.Enums
Corrupted, Corrupted,
ElderItem, ElderItem,
ShaperItem, ShaperItem,
SynthesisedItem,
FracturedItem,
AnyEnchantment,
MapTier, MapTier,
ShapedMap, ShapedMap,
ElderMap, ElderMap,
@ -27,6 +30,7 @@ namespace Filtration.ObjectModel.Enums
BaseType, BaseType,
Prophecy, Prophecy,
HasExplicitMod, HasExplicitMod,
HasEnchantment,
SetTextColor, SetTextColor,
SetBackgroundColor, SetBackgroundColor,
SetBorderColor, SetBorderColor,

View File

@ -81,8 +81,11 @@
<Compile Include="BlockItemBaseTypes\IntegerBlockItem.cs" /> <Compile Include="BlockItemBaseTypes\IntegerBlockItem.cs" />
<Compile Include="BlockItemBaseTypes\NumericFilterPredicateBlockItem.cs" /> <Compile Include="BlockItemBaseTypes\NumericFilterPredicateBlockItem.cs" />
<Compile Include="BlockItemBaseTypes\StringListBlockItem.cs" /> <Compile Include="BlockItemBaseTypes\StringListBlockItem.cs" />
<Compile Include="BlockItemTypes\AnyEnchantmentBlockItem.cs" />
<Compile Include="BlockItemTypes\BackgroundColorBlockItem.cs" /> <Compile Include="BlockItemTypes\BackgroundColorBlockItem.cs" />
<Compile Include="BlockItemTypes\BaseTypeBlockItem.cs" /> <Compile Include="BlockItemTypes\BaseTypeBlockItem.cs" />
<Compile Include="BlockItemTypes\FracturedItemBlockItem.cs" />
<Compile Include="BlockItemTypes\HasEnchantmentBlockItem.cs" />
<Compile Include="BlockItemTypes\MapTierBlockItem.cs" /> <Compile Include="BlockItemTypes\MapTierBlockItem.cs" />
<Compile Include="BlockItemTypes\PlayEffectBlockItem.cs" /> <Compile Include="BlockItemTypes\PlayEffectBlockItem.cs" />
<Compile Include="BlockItemTypes\BorderColorBlockItem.cs" /> <Compile Include="BlockItemTypes\BorderColorBlockItem.cs" />
@ -95,6 +98,7 @@
<Compile Include="BlockItemTypes\MapIconBlockItem.cs" /> <Compile Include="BlockItemTypes\MapIconBlockItem.cs" />
<Compile Include="BlockItemTypes\ProphecyBlockItem.cs" /> <Compile Include="BlockItemTypes\ProphecyBlockItem.cs" />
<Compile Include="BlockItemTypes\ShapedMapBlockItem.cs" /> <Compile Include="BlockItemTypes\ShapedMapBlockItem.cs" />
<Compile Include="BlockItemTypes\SynthesisedItemBlockItem.cs" />
<Compile Include="BlockItemTypes\ShaperItemBlockItem.cs" /> <Compile Include="BlockItemTypes\ShaperItemBlockItem.cs" />
<Compile Include="BlockItemTypes\ElderItemBlockItem.cs" /> <Compile Include="BlockItemTypes\ElderItemBlockItem.cs" />
<Compile Include="BlockItemTypes\CorruptedBlockItem.cs" /> <Compile Include="BlockItemTypes\CorruptedBlockItem.cs" />

View File

@ -184,6 +184,21 @@ namespace Filtration.Parser.Services
AddBooleanItemToBlockItems<ShaperItemBlockItem>(block, trimmedLine); AddBooleanItemToBlockItems<ShaperItemBlockItem>(block, trimmedLine);
break; break;
} }
case "SynthesisedItem":
{
AddBooleanItemToBlockItems<SynthesisedItemBlockItem>(block, trimmedLine);
break;
}
case "FracturedItem":
{
AddBooleanItemToBlockItems<FracturedItemBlockItem>(block, trimmedLine);
break;
}
case "AnyEnchantment":
{
AddBooleanItemToBlockItems<AnyEnchantmentBlockItem>(block, trimmedLine);
break;
}
case "ShapedMap": case "ShapedMap":
{ {
AddBooleanItemToBlockItems<ShapedMapBlockItem>(block, trimmedLine); AddBooleanItemToBlockItems<ShapedMapBlockItem>(block, trimmedLine);
@ -317,6 +332,11 @@ namespace Filtration.Parser.Services
AddStringListItemToBlockItems<HasExplicitModBlockItem>(block, trimmedLine); AddStringListItemToBlockItems<HasExplicitModBlockItem>(block, trimmedLine);
break; break;
} }
case "HasEnchantment":
{
AddStringListItemToBlockItems<HasEnchantmentBlockItem>(block, trimmedLine);
break;
}
case "ElderMap": case "ElderMap":
{ {
AddBooleanItemToBlockItems<ElderMapBlockItem>(block, trimmedLine); AddBooleanItemToBlockItems<ElderMapBlockItem>(block, trimmedLine);

View File

@ -463,6 +463,7 @@
<DependentUpon>Settings.settings</DependentUpon> <DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput> <DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile> </Compile>
<EmbeddedResource Include="Resources\Enchantments.txt" />
<Resource Include="Resources\Icons\no_sound_dds_light.png" /> <Resource Include="Resources\Icons\no_sound_dds_light.png" />
<Resource Include="Resources\Icons\no_sound_dds.png" /> <Resource Include="Resources\Icons\no_sound_dds.png" />
<Resource Include="Resources\Icons\speaker_icon.png" /> <Resource Include="Resources\Icons\speaker_icon.png" />

View File

@ -388,7 +388,18 @@ namespace Filtration.Properties {
return ResourceManager.GetString("Prophecies", resourceCulture); return ResourceManager.GetString("Prophecies", resourceCulture);
} }
} }
/// <summary>
/// Looks up a localized string similar to Enchantment Decree of Force.
/// </summary>
internal static string Enchantments
{
get
{
return ResourceManager.GetString("Enchantments", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized resource of type System.IO.UnmanagedMemoryStream similar to System.IO.MemoryStream. /// Looks up a localized resource of type System.IO.UnmanagedMemoryStream similar to System.IO.MemoryStream.
/// </summary> /// </summary>

View File

@ -214,4 +214,7 @@
<data name="Prophecies" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="Prophecies" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Prophecies.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value> <value>..\Resources\Prophecies.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data> </data>
<data name="Enchantments" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Enchantments.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data>
</root> </root>

View File

@ -0,0 +1 @@
Enchantment Decree of Force

View File

@ -22,6 +22,7 @@ Alira's Amulet
Alleyways Map Alleyways Map
Allflame Allflame
Alloyed Spiked Shield Alloyed Spiked Shield
Alone in the Darkness
Alteration Shard Alteration Shard
Amber Amulet Amber Amulet
Ambush Boots Ambush Boots
@ -76,6 +77,7 @@ Armageddon Brand
Arming Axe Arming Axe
Armourer's Scrap Armourer's Scrap
Armoury Map Armoury Map
Arrogance of the Vaal
Arsenal Map Arsenal Map
Ashen Wood Map Ashen Wood Map
Ashscale Talisman Ashscale Talisman
@ -96,6 +98,7 @@ Avian Twins Talisman
Awl Awl
Baleful Gem Baleful Gem
Ball Lightning Ball Lightning
Bane
Bane of the Loyal Bane of the Loyal
Barbed Club Barbed Club
Barbute Helmet Barbute Helmet
@ -172,6 +175,7 @@ Bone Offering
Bone Spirit Shield Bone Spirit Shield
Bonechill Support Bonechill Support
Bonespire Talisman Bonespire Talisman
Boon of Justice
Boon of the First Ones Boon of the First Ones
Boot Blade Boot Blade
Boot Knife Boot Knife
@ -389,6 +393,7 @@ Dagger Axe
Damage on Full Life Support Damage on Full Life Support
Dark Forest Map Dark Forest Map
Dark Pact Dark Pact
Dark Temptation
Darkwood Sceptre Darkwood Sceptre
Deadhand Talisman Deadhand Talisman
Deadly Ailments Support Deadly Ailments Support
@ -450,6 +455,7 @@ Diamond Ring
Dig Map Dig Map
Discharge Discharge
Discipline Discipline
Divine Ire
Divine Life Flask Divine Life Flask
Divine Mana Flask Divine Mana Flask
Divine Orb Divine Orb
@ -510,6 +516,7 @@ Enchanted Fossil
Encrusted Fossil Encrusted Fossil
Endurance Charge on Melee Stun Support Endurance Charge on Melee Stun Support
Enduring Cry Enduring Cry
Energy Leech Support
Enfeeble Enfeeble
Engineer's Orb Engineer's Orb
Engineer's Shard Engineer's Shard
@ -820,7 +827,9 @@ Infernal Axe
Infernal Blow Infernal Blow
Infernal Sword Infernal Sword
Infested Valley Map Infested Valley Map
Infused Channelling Support
Innervate Support Innervate Support
Intensify Support
Invasion Leaguestone Invasion Leaguestone
Inya's Key Inya's Key
Iron Circlet Iron Circlet
@ -949,6 +958,7 @@ Majestic Plate
Malachai's Entrails Malachai's Entrails
Malachai's Heart Malachai's Heart
Malachai's Lungs Malachai's Lungs
Malevolence
Malformation Map Malformation Map
Maligaro's Map Maligaro's Map
Maligaro's Spike Maligaro's Spike
@ -1009,6 +1019,7 @@ Molten Shell
Molten Strike Molten Strike
Monkey Paw Talisman Monkey Paw Talisman
Monkey Twins Talisman Monkey Twins Talisman
Monochrome
Moon Orb Moon Orb
Moon Staff Moon Staff
Moon Temple Map Moon Temple Map
@ -1183,6 +1194,7 @@ Prophet Crown
Prosperity Prosperity
Puncture Puncture
Punishment Punishment
Purifying Flame
Purity of Elements Purity of Elements
Purity of Fire Purity of Fire
Purity of Ice Purity of Ice
@ -1295,6 +1307,7 @@ Saint's Hauberk
Saintly Chainmail Saintly Chainmail
Sallet Sallet
Sambar Sceptre Sambar Sceptre
Sambodhi's Vow
Samite Gloves Samite Gloves
Samite Helmet Samite Helmet
Samite Slippers Samite Slippers
@ -1357,6 +1370,7 @@ Serpentscale Gauntlets
Serrated Arrow Quiver Serrated Arrow Quiver
Serrated Foil Serrated Foil
Serrated Fossil Serrated Fossil
Seven Years Bad Luck
Shabby Jerkin Shabby Jerkin
Shackled Boots Shackled Boots
Shadow Axe Shadow Axe
@ -1457,6 +1471,7 @@ Soldier Helmet
Soldier's Brigandine Soldier's Brigandine
Sorcerer Boots Sorcerer Boots
Sorcerer Gloves Sorcerer Gloves
Soulrend
Sovereign Spiked Shield Sovereign Spiked Shield
Spark Spark
Sparkling Claw Sparkling Claw
@ -1628,6 +1643,7 @@ The Garish Power
The Gemcutter The Gemcutter
The Gentleman The Gentleman
The Gladiator The Gladiator
The Golden Era
The Hale Heart The Hale Heart
The Harvester The Harvester
The Hermit The Hermit
@ -1642,19 +1658,24 @@ The Inventor
The Iron Bard The Iron Bard
The Jester The Jester
The Jeweller's Boon The Jeweller's Boon
The Journey
The King's Blade The King's Blade
The King's Heart The King's Heart
The Landing
The Last One Standing The Last One Standing
The Lich The Lich
The Life Thief The Life Thief
The Lion The Lion
The Lord in Black The Lord in Black
The Lord of Celebration
The Lover The Lover
The Lunaris Priestess The Lunaris Priestess
The Mad King
The Master The Master
The Master Artisan The Master Artisan
The Mayor The Mayor
The Mercenary The Mercenary
The Messenger
The Metalsmith's Gift The Metalsmith's Gift
The Nurse The Nurse
The Oath The Oath
@ -1684,6 +1705,7 @@ The Samurai's Eye
The Scarred Meadow The Scarred Meadow
The Scavenger The Scavenger
The Scholar The Scholar
The Seeker
The Sephirot The Sephirot
The Shaper's Key The Shaper's Key
The Shaper's Realm The Shaper's Realm
@ -1800,6 +1822,7 @@ Underground River Map
Underground Sea Map Underground Sea Map
Undying Flesh Talisman Undying Flesh Talisman
Unearth Unearth
Unleash Support
Unset Ring Unset Ring
Unshaping Orb Unshaping Orb
Ursine Pelt Ursine Pelt
@ -1924,6 +1947,7 @@ Warlord's Mark
Waste Pool Map Waste Pool Map
Wasteland Map Wasteland Map
Waterways Map Waterways Map
Wave of Conviction
Waxed Garb Waxed Garb
Wealth and Power Wealth and Power
Weeping Essence Weeping Essence
@ -1978,4 +2002,5 @@ Yriel's Key
Zealot Boots Zealot Boots
Zealot Gloves Zealot Gloves
Zealot Helmet Zealot Helmet
Zealotry
Zodiac Leather Zodiac Leather

View File

@ -12,6 +12,7 @@ namespace Filtration.Services
IEnumerable<string> ItemClasses { get; } IEnumerable<string> ItemClasses { get; }
IEnumerable<string> ItemMods { get; } IEnumerable<string> ItemMods { get; }
IEnumerable<string> Prophecies { get; } IEnumerable<string> Prophecies { get; }
IEnumerable<string> Enchantments { get; }
} }
internal class StaticDataService : IStaticDataService internal class StaticDataService : IStaticDataService
@ -29,12 +30,15 @@ namespace Filtration.Services
public IEnumerable<string> Prophecies { get; private set; } public IEnumerable<string> Prophecies { get; private set; }
public IEnumerable<string> Enchantments { get; private set; }
private void PopulateStaticData() private void PopulateStaticData()
{ {
ItemBaseTypes = new LineReader(() => new StringReader(Resources.ItemBaseTypes)).ToList(); ItemBaseTypes = new LineReader(() => new StringReader(Resources.ItemBaseTypes)).ToList();
ItemClasses = new LineReader(() => new StringReader(Resources.ItemClasses)).ToList(); ItemClasses = new LineReader(() => new StringReader(Resources.ItemClasses)).ToList();
ItemMods = new LineReader(() => new StringReader(Resources.ItemMods)).ToList(); ItemMods = new LineReader(() => new StringReader(Resources.ItemMods)).ToList();
Prophecies = new LineReader(() => new StringReader(Resources.Prophecies)).ToList(); Prophecies = new LineReader(() => new StringReader(Resources.Prophecies)).ToList();
Enchantments = new LineReader(() => new StringReader(Resources.Enchantments)).ToList();
} }
} }
} }

View File

@ -87,6 +87,11 @@
<userControls:EditableListBoxControl Margin="5,5,5,5" ItemsSource="{Binding Items}" AutoCompleteItemsSource="{Binding ElementName=TopLevelGrid, Path=DataContext.AutocompleteItemMods}" /> <userControls:EditableListBoxControl Margin="5,5,5,5" ItemsSource="{Binding Items}" AutoCompleteItemsSource="{Binding ElementName=TopLevelGrid, Path=DataContext.AutocompleteItemMods}" />
</DataTemplate> </DataTemplate>
<!-- Enchantments Template -->
<DataTemplate DataType="{x:Type blockItemTypes:HasEnchantmentBlockItem}">
<userControls:EditableListBoxControl Margin="5,5,5,5" ItemsSource="{Binding Items}" AutoCompleteItemsSource="{Binding ElementName=TopLevelGrid, Path=DataContext.AutocompleteEnchantments}" />
</DataTemplate>
<!-- Socket Groups Template --> <!-- Socket Groups Template -->
<DataTemplate DataType="{x:Type blockItemTypes:SocketGroupBlockItem}"> <DataTemplate DataType="{x:Type blockItemTypes:SocketGroupBlockItem}">
<userControls:EditableListBoxControl Margin="5,5,5,5" ItemsSource="{Binding Items}" /> <userControls:EditableListBoxControl Margin="5,5,5,5" ItemsSource="{Binding Items}" />

View File

@ -131,12 +131,16 @@ namespace Filtration.ViewModels.DesignTime
typeof (CorruptedBlockItem), typeof (CorruptedBlockItem),
typeof (ElderItemBlockItem), typeof (ElderItemBlockItem),
typeof (ShaperItemBlockItem), typeof (ShaperItemBlockItem),
typeof (SynthesisedItemBlockItem),
typeof (FracturedItemBlockItem),
typeof (AnyEnchantmentBlockItem),
typeof (MapTierBlockItem), typeof (MapTierBlockItem),
typeof (ShapedMapBlockItem), typeof (ShapedMapBlockItem),
typeof (ElderMapBlockItem), typeof (ElderMapBlockItem),
typeof (GemLevelBlockItem), typeof (GemLevelBlockItem),
typeof (StackSizeBlockItem), typeof (StackSizeBlockItem),
typeof (HasExplicitModBlockItem) typeof (HasExplicitModBlockItem),
typeof (HasEnchantmentBlockItem)
}; };
public List<Type> AudioVisualBlockItemTypesAvailable { get; } public List<Type> AudioVisualBlockItemTypesAvailable { get; }
public Color DisplayTextColor => Colors.Red; public Color DisplayTextColor => Colors.Red;

View File

@ -208,6 +208,8 @@ namespace Filtration.ViewModels
public IEnumerable<string> AutocompleteItemMods => _staticDataService.ItemMods; public IEnumerable<string> AutocompleteItemMods => _staticDataService.ItemMods;
public IEnumerable<string> AutocompleteEnchantments => _staticDataService.Enchantments;
public List<Type> BlockItemTypesAvailable => new List<Type> public List<Type> BlockItemTypesAvailable => new List<Type>
{ {
typeof (ItemLevelBlockItem), typeof (ItemLevelBlockItem),
@ -226,12 +228,16 @@ namespace Filtration.ViewModels
typeof (CorruptedBlockItem), typeof (CorruptedBlockItem),
typeof (ElderItemBlockItem), typeof (ElderItemBlockItem),
typeof (ShaperItemBlockItem), typeof (ShaperItemBlockItem),
typeof (SynthesisedItemBlockItem),
typeof (FracturedItemBlockItem),
typeof (AnyEnchantmentBlockItem),
typeof (MapTierBlockItem), typeof (MapTierBlockItem),
typeof (ShapedMapBlockItem), typeof (ShapedMapBlockItem),
typeof (ElderMapBlockItem), typeof (ElderMapBlockItem),
typeof (GemLevelBlockItem), typeof (GemLevelBlockItem),
typeof (StackSizeBlockItem), typeof (StackSizeBlockItem),
typeof (HasExplicitModBlockItem) typeof (HasExplicitModBlockItem),
typeof (HasEnchantmentBlockItem)
}; };
public List<Type> AudioVisualBlockItemTypesAvailable => new List<Type> public List<Type> AudioVisualBlockItemTypesAvailable => new List<Type>