diff --git a/Filtration/Extensions/EnumerationExtension.cs b/Filtration.Common/Extensions/EnumerationExtension.cs
similarity index 94%
rename from Filtration/Extensions/EnumerationExtension.cs
rename to Filtration.Common/Extensions/EnumerationExtension.cs
index 3498157..93630bd 100644
--- a/Filtration/Extensions/EnumerationExtension.cs
+++ b/Filtration.Common/Extensions/EnumerationExtension.cs
@@ -3,9 +3,9 @@ using System.ComponentModel;
using System.Linq;
using System.Windows.Markup;
-namespace Filtration.Extensions
+namespace Filtration.Common.Extensions
{
- internal class EnumerationExtension : MarkupExtension
+ public class EnumerationExtension : MarkupExtension
{
private Type _enumType;
diff --git a/Filtration/Extensions/HyperlinkExtensions.cs b/Filtration.Common/Extensions/HyperlinkExtensions.cs
similarity index 97%
rename from Filtration/Extensions/HyperlinkExtensions.cs
rename to Filtration.Common/Extensions/HyperlinkExtensions.cs
index fd46841..140236c 100644
--- a/Filtration/Extensions/HyperlinkExtensions.cs
+++ b/Filtration.Common/Extensions/HyperlinkExtensions.cs
@@ -4,7 +4,7 @@ using System.Windows;
using System.Windows.Documents;
using System.Windows.Navigation;
-namespace Filtration.Extensions
+namespace Filtration.Common.Extensions
{
public static class HyperlinkExtensions
{
diff --git a/Filtration.Common/Filtration.Common.csproj b/Filtration.Common/Filtration.Common.csproj
index 13f3165..38b47e8 100644
--- a/Filtration.Common/Filtration.Common.csproj
+++ b/Filtration.Common/Filtration.Common.csproj
@@ -75,6 +75,8 @@
+
+
diff --git a/Filtration.ObjectModel/BlockItemBaseTypes/EffectColorBlockItem.cs b/Filtration.ObjectModel/BlockItemBaseTypes/EffectColorBlockItem.cs
new file mode 100644
index 0000000..df71499
--- /dev/null
+++ b/Filtration.ObjectModel/BlockItemBaseTypes/EffectColorBlockItem.cs
@@ -0,0 +1,90 @@
+using System;
+using System.Windows.Media;
+using Filtration.ObjectModel.Enums;
+using Filtration.ObjectModel.Extensions;
+using Filtration.ObjectModel.ThemeEditor;
+
+namespace Filtration.ObjectModel.BlockItemBaseTypes
+{
+ public abstract class EffectColorBlockItem : BlockItemBase, IAudioVisualBlockItem, IBlockItemWithTheme
+ {
+ private EffectColor _color;
+ private bool _temporary;
+ private ThemeComponent _themeComponent;
+
+ protected EffectColorBlockItem()
+ {
+ }
+
+ protected EffectColorBlockItem(EffectColor color, bool temporary)
+ {
+ Color = color;
+ Temporary = temporary;
+ }
+
+ public override string OutputText => PrefixText + " " + Color.GetAttributeDescription() +
+ (Temporary ? " " + "Temp" : string.Empty) +
+ (ThemeComponent != null ? " # " + ThemeComponent.ComponentName : string.Empty);
+
+ public override string SummaryText => string.Empty;
+
+ public ThemeComponent ThemeComponent
+ {
+ get { return _themeComponent; }
+ set
+ {
+ if (_themeComponent == value) { return; }
+
+ if (_themeComponent != null)
+ {
+ _themeComponent.ThemeComponentUpdated -= OnThemeComponentUpdated;
+ _themeComponent.ThemeComponentDeleted -= OnThemeComponentDeleted;
+ }
+ if (value != null)
+ {
+ value.ThemeComponentUpdated += OnThemeComponentUpdated;
+ value.ThemeComponentDeleted += OnThemeComponentDeleted;
+ }
+
+ _themeComponent = value;
+ OnPropertyChanged();
+ }
+ }
+
+ public override Color SummaryBackgroundColor => Colors.Transparent;
+ public override Color SummaryTextColor => Colors.Transparent;
+
+ public EffectColor Color
+ {
+ get { return _color; }
+ set
+ {
+ _color = value;
+ IsDirty = true;
+ OnPropertyChanged();
+ }
+ }
+
+ public bool Temporary
+ {
+ get { return _temporary; }
+ set
+ {
+ _temporary = value;
+ IsDirty = true;
+ OnPropertyChanged();
+ }
+ }
+
+ private void OnThemeComponentUpdated(object sender, EventArgs e)
+ {
+ Color = ((EffectColorThemeComponent)sender).EffectColor;
+ Temporary = ((EffectColorThemeComponent)sender).Temporary;
+ }
+
+ private void OnThemeComponentDeleted(object sender, EventArgs e)
+ {
+ ThemeComponent = null;
+ }
+ }
+}
diff --git a/Filtration.ObjectModel/BlockItemBaseTypes/IconBlockItem.cs b/Filtration.ObjectModel/BlockItemBaseTypes/IconBlockItem.cs
new file mode 100644
index 0000000..d6b92d5
--- /dev/null
+++ b/Filtration.ObjectModel/BlockItemBaseTypes/IconBlockItem.cs
@@ -0,0 +1,103 @@
+using System;
+using System.Windows.Media;
+using Filtration.ObjectModel.Enums;
+using Filtration.ObjectModel.Extensions;
+using Filtration.ObjectModel.ThemeEditor;
+
+namespace Filtration.ObjectModel.BlockItemBaseTypes
+{
+ public abstract class IconBlockItem : BlockItemBase, IAudioVisualBlockItem, IBlockItemWithTheme
+ {
+ private IconSize _size;
+ private IconColor _color;
+ private IconShape _shape;
+ private ThemeComponent _themeComponent;
+
+ protected IconBlockItem()
+ {
+ }
+
+ protected IconBlockItem(IconSize size, IconColor color, IconShape shape)
+ {
+ Size = size;
+ Color = color;
+ Shape = shape;
+ }
+
+ public override string OutputText => PrefixText + " " + (int)Size + " " + Color.GetAttributeDescription() + " " + Shape.GetAttributeDescription() +
+ (ThemeComponent != null ? " # " + ThemeComponent.ComponentName : string.Empty);
+
+ public override string SummaryText => string.Empty;
+
+ public ThemeComponent ThemeComponent
+ {
+ get { return _themeComponent; }
+ set
+ {
+ if (_themeComponent == value) { return; }
+
+ if (_themeComponent != null)
+ {
+ _themeComponent.ThemeComponentUpdated -= OnThemeComponentUpdated;
+ _themeComponent.ThemeComponentDeleted -= OnThemeComponentDeleted;
+ }
+ if (value != null)
+ {
+ value.ThemeComponentUpdated += OnThemeComponentUpdated;
+ value.ThemeComponentDeleted += OnThemeComponentDeleted;
+ }
+
+ _themeComponent = value;
+ OnPropertyChanged();
+ }
+ }
+
+ public override Color SummaryBackgroundColor => Colors.Transparent;
+ public override Color SummaryTextColor => Colors.Transparent;
+
+ public IconSize Size
+ {
+ get { return _size; }
+ set
+ {
+ _size = value;
+ IsDirty = true;
+ OnPropertyChanged();
+ }
+ }
+
+ public IconColor Color
+ {
+ get { return _color; }
+ set
+ {
+ _color = value;
+ IsDirty = true;
+ OnPropertyChanged();
+ }
+ }
+
+ public IconShape Shape
+ {
+ get { return _shape; }
+ set
+ {
+ _shape = value;
+ IsDirty = true;
+ OnPropertyChanged();
+ }
+ }
+
+ private void OnThemeComponentUpdated(object sender, EventArgs e)
+ {
+ Size = ((IconThemeComponent)sender).IconSize;
+ Color = ((IconThemeComponent)sender).IconColor;
+ Shape = ((IconThemeComponent)sender).IconShape;
+ }
+
+ private void OnThemeComponentDeleted(object sender, EventArgs e)
+ {
+ ThemeComponent = null;
+ }
+ }
+}
diff --git a/Filtration.ObjectModel/BlockItemTypes/BackgroundColorBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/BackgroundColorBlockItem.cs
index 3f3ea11..21b31cf 100644
--- a/Filtration.ObjectModel/BlockItemTypes/BackgroundColorBlockItem.cs
+++ b/Filtration.ObjectModel/BlockItemTypes/BackgroundColorBlockItem.cs
@@ -16,6 +16,6 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string PrefixText => "SetBackgroundColor";
public override int MaximumAllowed => 1;
public override string DisplayHeading => "Background Color";
- public override int SortOrder => 22;
+ public override int SortOrder => 23;
}
}
diff --git a/Filtration.ObjectModel/BlockItemTypes/BaseTypeBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/BaseTypeBlockItem.cs
index e51188b..1107f6d 100644
--- a/Filtration.ObjectModel/BlockItemTypes/BaseTypeBlockItem.cs
+++ b/Filtration.ObjectModel/BlockItemTypes/BaseTypeBlockItem.cs
@@ -33,6 +33,6 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override Color SummaryBackgroundColor => Colors.MediumTurquoise;
public override Color SummaryTextColor => Colors.Black;
- public override int SortOrder => 19;
+ public override int SortOrder => 20;
}
}
diff --git a/Filtration.ObjectModel/BlockItemTypes/BeamBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/BeamBlockItem.cs
deleted file mode 100644
index ea938cc..0000000
--- a/Filtration.ObjectModel/BlockItemTypes/BeamBlockItem.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System.Windows.Media;
-using Filtration.ObjectModel.BlockItemBaseTypes;
-
-namespace Filtration.ObjectModel.BlockItemTypes
-{
- public class BeamBlockItem : ColorBooleanBlockItem
- {
- public BeamBlockItem()
- {
- }
-
- public BeamBlockItem(Color color, bool booleanValue) : base(color, booleanValue)
- {
- }
-
- public override string PrefixText => "BeamColor";
- public override int MaximumAllowed => 1;
- public override string DisplayHeading => "Beam Color";
- public override int SortOrder => 29;
- }
-}
diff --git a/Filtration.ObjectModel/BlockItemTypes/BorderColorBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/BorderColorBlockItem.cs
index 842e37b..1b79136 100644
--- a/Filtration.ObjectModel/BlockItemTypes/BorderColorBlockItem.cs
+++ b/Filtration.ObjectModel/BlockItemTypes/BorderColorBlockItem.cs
@@ -16,6 +16,6 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string PrefixText => "SetBorderColor";
public override int MaximumAllowed => 1;
public override string DisplayHeading => "Border Color";
- public override int SortOrder => 23;
+ public override int SortOrder => 24;
}
}
diff --git a/Filtration.ObjectModel/BlockItemTypes/ClassBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/ClassBlockItem.cs
index e46882c..450c914 100644
--- a/Filtration.ObjectModel/BlockItemTypes/ClassBlockItem.cs
+++ b/Filtration.ObjectModel/BlockItemTypes/ClassBlockItem.cs
@@ -33,6 +33,6 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override Color SummaryBackgroundColor => Colors.MediumSeaGreen;
public override Color SummaryTextColor => Colors.White;
- public override int SortOrder => 18;
+ public override int SortOrder => 19;
}
}
diff --git a/Filtration.ObjectModel/BlockItemTypes/CustomSoundBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/CustomSoundBlockItem.cs
index 93768a8..7e60eb9 100644
--- a/Filtration.ObjectModel/BlockItemTypes/CustomSoundBlockItem.cs
+++ b/Filtration.ObjectModel/BlockItemTypes/CustomSoundBlockItem.cs
@@ -16,6 +16,6 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string PrefixText => "CustomAlertSound";
public override int MaximumAllowed => 1;
public override string DisplayHeading => "Custom Alert Sound";
- public override int SortOrder => 30;
+ public override int SortOrder => 31;
}
}
diff --git a/Filtration.ObjectModel/BlockItemTypes/DisableDropSoundBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/DisableDropSoundBlockItem.cs
index 73ed861..10a1fb5 100644
--- a/Filtration.ObjectModel/BlockItemTypes/DisableDropSoundBlockItem.cs
+++ b/Filtration.ObjectModel/BlockItemTypes/DisableDropSoundBlockItem.cs
@@ -17,7 +17,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string DisplayHeading => "Disable Drop Sound";
public override Color SummaryBackgroundColor => Colors.Transparent;
public override Color SummaryTextColor => Colors.Transparent;
- public override int SortOrder => 27;
+ public override int SortOrder => 28;
}
}
diff --git a/Filtration.ObjectModel/BlockItemTypes/DropLevelBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/DropLevelBlockItem.cs
index a53108c..6701155 100644
--- a/Filtration.ObjectModel/BlockItemTypes/DropLevelBlockItem.cs
+++ b/Filtration.ObjectModel/BlockItemTypes/DropLevelBlockItem.cs
@@ -21,7 +21,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string SummaryText => "Drop Level " + FilterPredicate;
public override Color SummaryBackgroundColor => Colors.DodgerBlue;
public override Color SummaryTextColor => Colors.White;
- public override int SortOrder => 14;
+ public override int SortOrder => 15;
public override int Minimum => 0;
public override int Maximum => 100;
}
diff --git a/Filtration.ObjectModel/BlockItemTypes/ElderMapBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/ElderMapBlockItem.cs
index a98cf6a..ec27b42 100644
--- a/Filtration.ObjectModel/BlockItemTypes/ElderMapBlockItem.cs
+++ b/Filtration.ObjectModel/BlockItemTypes/ElderMapBlockItem.cs
@@ -17,7 +17,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string DisplayHeading => "Elder Map";
public override Color SummaryBackgroundColor => Colors.DarkGoldenrod;
public override Color SummaryTextColor => Colors.White;
- public override int SortOrder => 9;
+ public override int SortOrder => 10;
}
}
diff --git a/Filtration.ObjectModel/BlockItemTypes/FontSizeBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/FontSizeBlockItem.cs
index 2e3d9e0..cb90776 100644
--- a/Filtration.ObjectModel/BlockItemTypes/FontSizeBlockItem.cs
+++ b/Filtration.ObjectModel/BlockItemTypes/FontSizeBlockItem.cs
@@ -16,7 +16,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string PrefixText => "SetFontSize";
public override int MaximumAllowed => 1;
public override string DisplayHeading => "Font Size";
- public override int SortOrder => 24;
+ public override int SortOrder => 25;
public override int Minimum => 11;
public override int Maximum => 45;
}
diff --git a/Filtration.ObjectModel/BlockItemTypes/GemLevelBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/GemLevelBlockItem.cs
index f12136d..8825fb5 100644
--- a/Filtration.ObjectModel/BlockItemTypes/GemLevelBlockItem.cs
+++ b/Filtration.ObjectModel/BlockItemTypes/GemLevelBlockItem.cs
@@ -21,7 +21,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string SummaryText => "Gem Level " + FilterPredicate;
public override Color SummaryBackgroundColor => Colors.DarkSlateGray;
public override Color SummaryTextColor => Colors.White;
- public override int SortOrder => 15;
+ public override int SortOrder => 16;
public override int Minimum => 0;
public override int Maximum => 21;
}
diff --git a/Filtration.ObjectModel/BlockItemTypes/HasExplicitModBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/HasExplicitModBlockItem.cs
index 9070f73..b47e29b 100644
--- a/Filtration.ObjectModel/BlockItemTypes/HasExplicitModBlockItem.cs
+++ b/Filtration.ObjectModel/BlockItemTypes/HasExplicitModBlockItem.cs
@@ -33,6 +33,6 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override Color SummaryBackgroundColor => Colors.MidnightBlue;
public override Color SummaryTextColor => Colors.White;
- public override int SortOrder => 20;
+ public override int SortOrder => 21;
}
}
diff --git a/Filtration.ObjectModel/BlockItemTypes/HeightBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/HeightBlockItem.cs
index 2f16a13..02c63e0 100644
--- a/Filtration.ObjectModel/BlockItemTypes/HeightBlockItem.cs
+++ b/Filtration.ObjectModel/BlockItemTypes/HeightBlockItem.cs
@@ -21,7 +21,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string SummaryText => "Height " + FilterPredicate;
public override Color SummaryBackgroundColor => Colors.LightBlue;
public override Color SummaryTextColor => Colors.Black;
- public override int SortOrder => 11;
+ public override int SortOrder => 12;
public override int Minimum => 0;
public override int Maximum => 6;
}
diff --git a/Filtration.ObjectModel/BlockItemTypes/IconBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/IconBlockItem.cs
deleted file mode 100644
index 4d84203..0000000
--- a/Filtration.ObjectModel/BlockItemTypes/IconBlockItem.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using Filtration.ObjectModel.BlockItemBaseTypes;
-
-namespace Filtration.ObjectModel.BlockItemTypes
-{
- public class IconBlockItem : StringBlockItem
- {
- public IconBlockItem()
- {
- Value = "Icon1";
- }
-
- public IconBlockItem(string value) : base(value)
- {
- }
-
- public override string PrefixText => "Icon";
- public override int MaximumAllowed => 1;
- public override string DisplayHeading => "Drop Icon";
- public override int SortOrder => 28;
- }
-}
diff --git a/Filtration.ObjectModel/BlockItemTypes/ItemLevelBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/ItemLevelBlockItem.cs
index 638d6d2..c2faccb 100644
--- a/Filtration.ObjectModel/BlockItemTypes/ItemLevelBlockItem.cs
+++ b/Filtration.ObjectModel/BlockItemTypes/ItemLevelBlockItem.cs
@@ -20,7 +20,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string SummaryText => "Item Level " + FilterPredicate;
public override Color SummaryBackgroundColor => Colors.DarkSlateGray;
public override Color SummaryTextColor => Colors.White;
- public override int SortOrder => 13;
+ public override int SortOrder => 14;
public override int Minimum => 0;
public override int Maximum => 100;
}
diff --git a/Filtration.ObjectModel/BlockItemTypes/MapIconBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/MapIconBlockItem.cs
new file mode 100644
index 0000000..a22f644
--- /dev/null
+++ b/Filtration.ObjectModel/BlockItemTypes/MapIconBlockItem.cs
@@ -0,0 +1,24 @@
+using Filtration.ObjectModel.BlockItemBaseTypes;
+using Filtration.ObjectModel.Enums;
+
+namespace Filtration.ObjectModel.BlockItemTypes
+{
+ public class MapIconBlockItem : IconBlockItem
+ {
+ public MapIconBlockItem()
+ {
+ Size = IconSize.Largest;
+ Color = IconColor.Red;
+ Shape = IconShape.Circle;
+ }
+
+ public MapIconBlockItem(IconSize size, IconColor iconColor, IconShape iconShape) : base(size, iconColor, iconShape)
+ {
+ }
+
+ public override string PrefixText => "MinimapIcon";
+ public override int MaximumAllowed => 1;
+ public override string DisplayHeading => "Minimap Icon";
+ public override int SortOrder => 29;
+ }
+}
diff --git a/Filtration.ObjectModel/BlockItemTypes/MapTierBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/MapTierBlockItem.cs
new file mode 100644
index 0000000..34e3837
--- /dev/null
+++ b/Filtration.ObjectModel/BlockItemTypes/MapTierBlockItem.cs
@@ -0,0 +1,18 @@
+using System.Windows.Media;
+using Filtration.ObjectModel.BlockItemBaseTypes;
+
+namespace Filtration.ObjectModel.BlockItemTypes
+{
+ public class MapTierBlockItem : NumericFilterPredicateBlockItem
+ {
+ public override string PrefixText => "MapTier";
+ public override int MaximumAllowed => 2;
+ public override string DisplayHeading => "Map Tier";
+ public override string SummaryText => "Map Tier " + FilterPredicate;
+ public override Color SummaryBackgroundColor => Colors.DarkSlateGray;
+ public override Color SummaryTextColor => Colors.White;
+ public override int SortOrder => 8;
+ public override int Minimum => 1;
+ public override int Maximum => 16;
+ }
+}
diff --git a/Filtration.ObjectModel/BlockItemTypes/PlayEffectBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/PlayEffectBlockItem.cs
new file mode 100644
index 0000000..6d5d00a
--- /dev/null
+++ b/Filtration.ObjectModel/BlockItemTypes/PlayEffectBlockItem.cs
@@ -0,0 +1,23 @@
+using Filtration.ObjectModel.BlockItemBaseTypes;
+using Filtration.ObjectModel.Enums;
+
+namespace Filtration.ObjectModel.BlockItemTypes
+{
+ public class PlayEffectBlockItem : EffectColorBlockItem
+ {
+ public PlayEffectBlockItem()
+ {
+ Color = EffectColor.Red;
+ Temporary = false;
+ }
+
+ public PlayEffectBlockItem(EffectColor effectColor, bool temporary) : base(effectColor, temporary)
+ {
+ }
+
+ public override string PrefixText => "PlayEffect";
+ public override int MaximumAllowed => 1;
+ public override string DisplayHeading => "Play Effect";
+ public override int SortOrder => 30;
+ }
+}
diff --git a/Filtration.ObjectModel/BlockItemTypes/PositionalSoundBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/PositionalSoundBlockItem.cs
index 8c60200..4225f85 100644
--- a/Filtration.ObjectModel/BlockItemTypes/PositionalSoundBlockItem.cs
+++ b/Filtration.ObjectModel/BlockItemTypes/PositionalSoundBlockItem.cs
@@ -17,6 +17,6 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string PrefixText => "PlayAlertSoundPositional";
public override int MaximumAllowed => 1;
public override string DisplayHeading => "Play Positional Alert Sound";
- public override int SortOrder => 26;
+ public override int SortOrder => 27;
}
}
diff --git a/Filtration.ObjectModel/BlockItemTypes/RarityBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/RarityBlockItem.cs
index da72e69..4346739 100644
--- a/Filtration.ObjectModel/BlockItemTypes/RarityBlockItem.cs
+++ b/Filtration.ObjectModel/BlockItemTypes/RarityBlockItem.cs
@@ -30,7 +30,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
((ItemRarity) FilterPredicate.PredicateOperand).GetAttributeDescription();
public override Color SummaryBackgroundColor => Colors.LightCoral;
public override Color SummaryTextColor => Colors.White;
- public override int SortOrder => 17;
+ public override int SortOrder => 18;
public override int Minimum => 0;
public override int Maximum => (int)ItemRarity.Unique;
}
diff --git a/Filtration.ObjectModel/BlockItemTypes/ShapedMapBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/ShapedMapBlockItem.cs
index 550a6da..05a20e8 100644
--- a/Filtration.ObjectModel/BlockItemTypes/ShapedMapBlockItem.cs
+++ b/Filtration.ObjectModel/BlockItemTypes/ShapedMapBlockItem.cs
@@ -17,7 +17,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string DisplayHeading => "Shaped Map";
public override Color SummaryBackgroundColor => Colors.DarkGoldenrod;
public override Color SummaryTextColor => Colors.White;
- public override int SortOrder => 8;
+ public override int SortOrder => 9;
}
}
diff --git a/Filtration.ObjectModel/BlockItemTypes/SocketGroupBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/SocketGroupBlockItem.cs
index d654f34..36a6a5f 100644
--- a/Filtration.ObjectModel/BlockItemTypes/SocketGroupBlockItem.cs
+++ b/Filtration.ObjectModel/BlockItemTypes/SocketGroupBlockItem.cs
@@ -39,7 +39,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override Color SummaryBackgroundColor => Colors.GhostWhite;
public override Color SummaryTextColor => Colors.Black;
- public override int SortOrder => 10;
+ public override int SortOrder => 11;
private SocketColor StringToSocketColor(char socketColorString)
{
diff --git a/Filtration.ObjectModel/BlockItemTypes/SoundBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/SoundBlockItem.cs
index 4642047..a8311f5 100644
--- a/Filtration.ObjectModel/BlockItemTypes/SoundBlockItem.cs
+++ b/Filtration.ObjectModel/BlockItemTypes/SoundBlockItem.cs
@@ -17,6 +17,6 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string PrefixText => "PlayAlertSound";
public override int MaximumAllowed => 1;
public override string DisplayHeading => "Play Alert Sound";
- public override int SortOrder => 25;
+ public override int SortOrder => 26;
}
}
diff --git a/Filtration.ObjectModel/BlockItemTypes/StackSizeBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/StackSizeBlockItem.cs
index 9b15ea1..43b903a 100644
--- a/Filtration.ObjectModel/BlockItemTypes/StackSizeBlockItem.cs
+++ b/Filtration.ObjectModel/BlockItemTypes/StackSizeBlockItem.cs
@@ -21,7 +21,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string SummaryText => "Stack Size " + FilterPredicate;
public override Color SummaryBackgroundColor => Colors.DarkSlateGray;
public override Color SummaryTextColor => Colors.White;
- public override int SortOrder => 16;
+ public override int SortOrder => 17;
public override int Minimum => 0;
public override int Maximum => 1000;
}
diff --git a/Filtration.ObjectModel/BlockItemTypes/TextColorBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/TextColorBlockItem.cs
index 3ac02c5..41161f8 100644
--- a/Filtration.ObjectModel/BlockItemTypes/TextColorBlockItem.cs
+++ b/Filtration.ObjectModel/BlockItemTypes/TextColorBlockItem.cs
@@ -16,6 +16,6 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string PrefixText => "SetTextColor";
public override int MaximumAllowed => 1;
public override string DisplayHeading => "Text Color";
- public override int SortOrder => 21;
+ public override int SortOrder => 22;
}
}
diff --git a/Filtration.ObjectModel/BlockItemTypes/WidthBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/WidthBlockItem.cs
index 0bb960d..10b8a51 100644
--- a/Filtration.ObjectModel/BlockItemTypes/WidthBlockItem.cs
+++ b/Filtration.ObjectModel/BlockItemTypes/WidthBlockItem.cs
@@ -21,7 +21,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string SummaryText => "Width " + FilterPredicate;
public override Color SummaryBackgroundColor => Colors.MediumPurple;
public override Color SummaryTextColor => Colors.White;
- public override int SortOrder => 12;
+ public override int SortOrder => 13;
public override int Minimum => 0;
public override int Maximum => 2;
}
diff --git a/Filtration.ObjectModel/Enums/EffectColor.cs b/Filtration.ObjectModel/Enums/EffectColor.cs
new file mode 100644
index 0000000..8247823
--- /dev/null
+++ b/Filtration.ObjectModel/Enums/EffectColor.cs
@@ -0,0 +1,20 @@
+using System.ComponentModel;
+
+namespace Filtration.ObjectModel.Enums
+{
+ public enum EffectColor
+ {
+ [Description("Red")]
+ Red,
+ [Description("Green")]
+ Green,
+ [Description("Blue")]
+ Blue,
+ [Description("Brown")]
+ Brown,
+ [Description("White")]
+ White,
+ [Description("Yellow")]
+ Yellow
+ }
+}
\ No newline at end of file
diff --git a/Filtration.ObjectModel/Enums/IconColor.cs b/Filtration.ObjectModel/Enums/IconColor.cs
new file mode 100644
index 0000000..7b143ba
--- /dev/null
+++ b/Filtration.ObjectModel/Enums/IconColor.cs
@@ -0,0 +1,20 @@
+using System.ComponentModel;
+
+namespace Filtration.ObjectModel.Enums
+{
+ public enum IconColor
+ {
+ [Description("Red")]
+ Red,
+ [Description("Green")]
+ Green,
+ [Description("Blue")]
+ Blue,
+ [Description("Brown")]
+ Brown,
+ [Description("White")]
+ White,
+ [Description("Yellow")]
+ Yellow
+ }
+}
\ No newline at end of file
diff --git a/Filtration.ObjectModel/Enums/IconShape.cs b/Filtration.ObjectModel/Enums/IconShape.cs
new file mode 100644
index 0000000..9123d27
--- /dev/null
+++ b/Filtration.ObjectModel/Enums/IconShape.cs
@@ -0,0 +1,20 @@
+using System.ComponentModel;
+
+namespace Filtration.ObjectModel.Enums
+{
+ public enum IconShape
+ {
+ [Description("Circle")]
+ Circle,
+ [Description("Diamond")]
+ Diamond,
+ [Description("Hexagon")]
+ Hexagon,
+ [Description("Square")]
+ Square,
+ [Description("Star")]
+ Star,
+ [Description("Triangle")]
+ Triangle
+ }
+}
\ No newline at end of file
diff --git a/Filtration.ObjectModel/Enums/IconSize.cs b/Filtration.ObjectModel/Enums/IconSize.cs
new file mode 100644
index 0000000..5cb086b
--- /dev/null
+++ b/Filtration.ObjectModel/Enums/IconSize.cs
@@ -0,0 +1,14 @@
+using System.ComponentModel;
+
+namespace Filtration.ObjectModel.Enums
+{
+ public enum IconSize
+ {
+ [Description("Largest")]
+ Largest,
+ [Description("Medium")]
+ Medium,
+ [Description("Small")]
+ Small
+ }
+}
diff --git a/Filtration.ObjectModel/Enums/ThemeComponentType.cs b/Filtration.ObjectModel/Enums/ThemeComponentType.cs
index a48299c..74b2498 100644
--- a/Filtration.ObjectModel/Enums/ThemeComponentType.cs
+++ b/Filtration.ObjectModel/Enums/ThemeComponentType.cs
@@ -15,6 +15,10 @@ namespace Filtration.ObjectModel.Enums
[Description("Alert Sound")]
AlertSound,
[Description("Custom Sound")]
- CustomSound
+ CustomSound,
+ [Description("Icon")]
+ Icon,
+ [Description("Effect")]
+ Effect
}
}
diff --git a/Filtration.ObjectModel/Filtration.ObjectModel.csproj b/Filtration.ObjectModel/Filtration.ObjectModel.csproj
index 8022791..22514bc 100644
--- a/Filtration.ObjectModel/Filtration.ObjectModel.csproj
+++ b/Filtration.ObjectModel/Filtration.ObjectModel.csproj
@@ -70,6 +70,8 @@
+
+
@@ -77,7 +79,8 @@
-
+
+
@@ -85,7 +88,7 @@
-
+
@@ -122,8 +125,12 @@
+
+
+
+
@@ -148,6 +155,8 @@
+
+
diff --git a/Filtration.ObjectModel/ItemFilterBlock.cs b/Filtration.ObjectModel/ItemFilterBlock.cs
index 1209677..aa148d9 100644
--- a/Filtration.ObjectModel/ItemFilterBlock.cs
+++ b/Filtration.ObjectModel/ItemFilterBlock.cs
@@ -23,8 +23,10 @@ namespace Filtration.ObjectModel
Color DisplayTextColor { get; }
Color DisplayBorderColor { get; }
double DisplayFontSize { get; }
- string DisplayIcon { get; }
- Color DisplayBeamColor { get; }
+ int DisplayIconSize { get; }
+ int DisplayIconColor { get; }
+ int DisplayIconShape { get; }
+ Color DisplayEffectColor { get; }
bool HasBlockItemOfType();
bool HasBlockGroupInParentHierarchy(ItemFilterBlockGroup targetBlockGroup, ItemFilterBlockGroup startingBlockGroup);
}
@@ -263,21 +265,68 @@ namespace Filtration.ObjectModel
}
}
- public string DisplayIcon
+ public int DisplayIconSize
{
get
{
- var displayIcon = BlockItems.OfType().FirstOrDefault();
- return (displayIcon != null) ? displayIcon.Value : "";
+ var mapIconBlockItem = BlockItems.OfType().FirstOrDefault();
+ if (mapIconBlockItem != null)
+ return (int)mapIconBlockItem.Size;
+
+ return -1;
}
}
- public Color DisplayBeamColor
+ public int DisplayIconColor
{
get
{
- var beamBlockItem = BlockItems.OfType().FirstOrDefault();
- return beamBlockItem?.Color ?? new Color { A = 0, R = 0, G = 0, B = 0 };
+ var mapIconBlockItem = BlockItems.OfType().FirstOrDefault();
+ if (mapIconBlockItem != null)
+ return (int)mapIconBlockItem.Color;
+
+ return -1;
+ }
+ }
+
+ public int DisplayIconShape
+ {
+ get
+ {
+ var mapIconBlockItem = BlockItems.OfType().FirstOrDefault();
+ if (mapIconBlockItem != null)
+ return (int)mapIconBlockItem.Shape;
+
+ return -1;
+ }
+ }
+
+ public Color DisplayEffectColor
+ {
+ get
+ {
+ var beamBlockItem = BlockItems.OfType().FirstOrDefault();
+
+ if (beamBlockItem != null)
+ {
+ switch (beamBlockItem.Color)
+ {
+ case EffectColor.Red:
+ return Colors.Red;
+ case EffectColor.Green:
+ return Colors.Green;
+ case EffectColor.Blue:
+ return Colors.Blue;
+ case EffectColor.Brown:
+ return Colors.Brown;
+ case EffectColor.White:
+ return Colors.White;
+ case EffectColor.Yellow:
+ return Colors.Yellow;
+ }
+ }
+
+ return Colors.Transparent;
}
}
}
diff --git a/Filtration.ObjectModel/ThemeEditor/EffectColorThemeComponent.cs b/Filtration.ObjectModel/ThemeEditor/EffectColorThemeComponent.cs
new file mode 100644
index 0000000..ec99fc6
--- /dev/null
+++ b/Filtration.ObjectModel/ThemeEditor/EffectColorThemeComponent.cs
@@ -0,0 +1,47 @@
+using System;
+using Filtration.ObjectModel.Enums;
+
+namespace Filtration.ObjectModel.ThemeEditor
+{
+ [Serializable]
+ public class EffectColorThemeComponent : ThemeComponent
+ {
+ private EffectColor _effectColor;
+ private bool _temporary;
+
+ public EffectColorThemeComponent(ThemeComponentType componentType, string componentName, EffectColor componentEffectColor, bool componentTemporary)
+ {
+ if (componentName == null)
+ {
+ throw new ArgumentException("Null parameters not allowed in EffectColorThemeComponent constructor");
+ }
+
+ ComponentType = componentType;
+ ComponentName = componentName;
+ EffectColor = componentEffectColor;
+ Temporary = componentTemporary;
+ }
+
+ public EffectColor EffectColor
+ {
+ get { return _effectColor; }
+ set
+ {
+ _effectColor = value;
+ OnPropertyChanged();
+ _themeComponentUpdatedEventHandler?.Invoke(this, EventArgs.Empty);
+ }
+ }
+
+ public bool Temporary
+ {
+ get { return _temporary; }
+ set
+ {
+ _temporary = value;
+ OnPropertyChanged();
+ _themeComponentUpdatedEventHandler?.Invoke(this, EventArgs.Empty);
+ }
+ }
+ }
+}
diff --git a/Filtration.ObjectModel/ThemeEditor/IconThemeComponent.cs b/Filtration.ObjectModel/ThemeEditor/IconThemeComponent.cs
new file mode 100644
index 0000000..fd7f082
--- /dev/null
+++ b/Filtration.ObjectModel/ThemeEditor/IconThemeComponent.cs
@@ -0,0 +1,60 @@
+using System;
+using Filtration.ObjectModel.Enums;
+
+namespace Filtration.ObjectModel.ThemeEditor
+{
+ [Serializable]
+ public class IconThemeComponent : ThemeComponent
+ {
+ private IconSize _iconSize;
+ private IconColor _iconColor;
+ private IconShape _iconShape;
+
+ public IconThemeComponent(ThemeComponentType componentType, string componentName, IconSize componentIconSize, IconColor componentIconColor, IconShape componentIconShape)
+ {
+ if (componentName == null)
+ {
+ throw new ArgumentException("Null parameters not allowed in IconThemeComponent constructor");
+ }
+
+ ComponentType = componentType;
+ ComponentName = componentName;
+ IconSize = componentIconSize;
+ IconColor = componentIconColor;
+ IconShape = componentIconShape;
+ }
+
+ public IconSize IconSize
+ {
+ get { return _iconSize; }
+ set
+ {
+ _iconSize = value;
+ OnPropertyChanged();
+ _themeComponentUpdatedEventHandler?.Invoke(this, EventArgs.Empty);
+ }
+ }
+
+ public IconColor IconColor
+ {
+ get { return _iconColor; }
+ set
+ {
+ _iconColor = value;
+ OnPropertyChanged();
+ _themeComponentUpdatedEventHandler?.Invoke(this, EventArgs.Empty);
+ }
+ }
+
+ public IconShape IconShape
+ {
+ get { return _iconShape; }
+ set
+ {
+ _iconShape = value;
+ OnPropertyChanged();
+ _themeComponentUpdatedEventHandler?.Invoke(this, EventArgs.Empty);
+ }
+ }
+ }
+}
diff --git a/Filtration.ObjectModel/ThemeEditor/ThemeComponentCollection.cs b/Filtration.ObjectModel/ThemeEditor/ThemeComponentCollection.cs
index 1cdbccc..ef41379 100644
--- a/Filtration.ObjectModel/ThemeEditor/ThemeComponentCollection.cs
+++ b/Filtration.ObjectModel/ThemeEditor/ThemeComponentCollection.cs
@@ -61,6 +61,32 @@ namespace Filtration.ObjectModel.ThemeEditor
return component;
}
+ public ThemeComponent AddComponent(ThemeComponentType componentType, string componentName, IconSize componentIconSize, IconColor componentIconColor, IconShape componentIconShape)
+ {
+ if (ComponentExists(componentType, componentName))
+ {
+ return Items.FirstOrDefault(t => t.ComponentName == componentName && t.ComponentType == componentType);
+ }
+
+ var component = new IconThemeComponent(componentType, componentName, componentIconSize, componentIconColor, componentIconShape);
+ Items.Add(component);
+
+ return component;
+ }
+
+ public ThemeComponent AddComponent(ThemeComponentType componentType, string componentName, EffectColor componentEffectColor, bool componentTemporary)
+ {
+ if (ComponentExists(componentType, componentName))
+ {
+ return Items.FirstOrDefault(t => t.ComponentName == componentName && t.ComponentType == componentType);
+ }
+
+ var component = new EffectColorThemeComponent(componentType, componentName, componentEffectColor, componentTemporary);
+ Items.Add(component);
+
+ return component;
+ }
+
private bool ComponentExists(ThemeComponentType componentType, string componentName)
{
var componentCount =
diff --git a/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs b/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs
index cd3a9ae..ca849fe 100644
--- a/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs
+++ b/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs
@@ -890,42 +890,6 @@ namespace Filtration.Parser.Tests.Services
Assert.AreEqual(1, result.BlockItems.Count(b => b is DisableDropSoundBlockItem));
var blockItem = result.BlockItems.OfType().First();
Assert.IsTrue(blockItem.BooleanValue);
- }
-
- [Test]
- public void TranslateStringToItemFilterBlock_DropIcon_ReturnsCorrectObject()
- {
- // Arrange
- var inputString = "Show" + Environment.NewLine +
- " Icon Icon1";
-
- // Act
- var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
-
- // Assert
-
- Assert.AreEqual(1, result.BlockItems.Count(b => b is IconBlockItem));
- var blockItem = result.BlockItems.OfType().First();
- Assert.AreEqual("Icon1", blockItem.Value);
- }
-
- [Test]
- public void TranslateStringToItemFilterBlock_BeamColor_ReturnsCorrectObject()
- {
- // Arrange
- var inputString = "Show" + Environment.NewLine +
- " BeamColor 255 20 100 True";
-
- // Act
- var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
-
- // Assert
- Assert.AreEqual(1, result.BlockItems.Count(b => b is BeamBlockItem));
- var blockItem = result.BlockItems.OfType().First();
- Assert.AreEqual(255, blockItem.Color.R);
- Assert.AreEqual(20, blockItem.Color.G);
- Assert.AreEqual(100, blockItem.Color.B);
- Assert.IsTrue(blockItem.BooleanValue);
}
[Test]
@@ -961,9 +925,7 @@ namespace Filtration.Parser.Tests.Services
" SetBorderColor 0 0 0" + Environment.NewLine +
" SetFontSize 50" + Environment.NewLine +
" PlayAlertSound 3" + Environment.NewLine +
- " DisableDropSound False" + Environment.NewLine +
- " Icon Icon2" + Environment.NewLine +
- " BeamColor 255 100 5 false" + Environment.NewLine;
+ " DisableDropSound False" + Environment.NewLine;
// Act
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
@@ -1068,15 +1030,6 @@ namespace Filtration.Parser.Tests.Services
var disableDropSoundBlockItem = result.BlockItems.OfType().First();
Assert.IsFalse(disableDropSoundBlockItem.BooleanValue);
-
- var iconBlockItem = result.BlockItems.OfType().First();
- Assert.AreEqual("Icon2", iconBlockItem.Value);
-
- var beamBlockItem = result.BlockItems.OfType().First();
- Assert.AreEqual(255, beamBlockItem.Color.R);
- Assert.AreEqual(100, beamBlockItem.Color.G);
- Assert.AreEqual(5, beamBlockItem.Color.B);
- Assert.IsFalse(beamBlockItem.BooleanValue);
}
[Test]
@@ -1903,23 +1856,6 @@ namespace Filtration.Parser.Tests.Services
Assert.AreEqual(expectedResult, result);
}
- [Ignore("Ignore until the new block type is fully implemented")]
- [Test]
- public void TranslateItemFilterBlockToString_DropIcon_ReturnsCorrectString()
- {
- // Arrange
- var expectedResult = "Show" + Environment.NewLine +
- " Icon Icon3";
-
- _testUtility.TestBlock.BlockItems.Add(new IconBlockItem("Icon3"));
-
- // Act
- var result = _testUtility.Translator.TranslateItemFilterBlockToString(_testUtility.TestBlock);
-
- // Assert
- Assert.AreEqual(expectedResult, result);
- }
-
[Test]
public void TranslateItemFilterBlockToString_Everything_ReturnsCorrectString()
{
@@ -1951,9 +1887,7 @@ namespace Filtration.Parser.Tests.Services
" SetBorderColor 255 1 254" + Environment.NewLine +
" SetFontSize 50" + Environment.NewLine +
" PlayAlertSound 6 90" + Environment.NewLine +
- " DisableDropSound True";/* + Environment.NewLine +
- " Icon Icon4";
- " BeamColor 120 130 140 False";*/
+ " DisableDropSound True";
_testUtility.TestBlock.BlockItems.Add(new ActionBlockItem(BlockAction.Show));
_testUtility.TestBlock.BlockItems.Add(new IdentifiedBlockItem(true));
@@ -1997,8 +1931,6 @@ namespace Filtration.Parser.Tests.Services
_testUtility.TestBlock.BlockItems.Add(new ShapedMapBlockItem(true));
_testUtility.TestBlock.BlockItems.Add(new ElderMapBlockItem(true));
_testUtility.TestBlock.BlockItems.Add(new DisableDropSoundBlockItem(true));
- _testUtility.TestBlock.BlockItems.Add(new IconBlockItem("Icon4"));
- _testUtility.TestBlock.BlockItems.Add(new BeamBlockItem(new Color { A = 255, R = 120, G = 130, B = 140 }, false));
// Act
var result = _testUtility.Translator.TranslateItemFilterBlockToString(_testUtility.TestBlock);
diff --git a/Filtration.Parser/Services/ItemFilterBlockTranslator.cs b/Filtration.Parser/Services/ItemFilterBlockTranslator.cs
index e5b0fb7..aecb295 100644
--- a/Filtration.Parser/Services/ItemFilterBlockTranslator.cs
+++ b/Filtration.Parser/Services/ItemFilterBlockTranslator.cs
@@ -310,36 +310,59 @@ namespace Filtration.Parser.Services
AddBooleanItemToBlockItems(block, trimmedLine);
break;
}
- case "Icon":
+ case "MinimapIcon":
{
// Only ever use the last Icon item encountered as multiples aren't valid.
- RemoveExistingBlockItemsOfType(block);
-
- var match = Regex.Match(trimmedLine, @"\S+\s+""(\S+)""");
+ RemoveExistingBlockItemsOfType(block);
+
+ // TODO: Get size, color, shape values programmatically
+ var match = Regex.Match(trimmedLine,
+ @"\S+\s+(0|1|2)\s+(Red|Green|Blue|Brown|White|Yellow)\s+(Circle|Diamond|Hexagon|Square|Star|Triangle)\s*([#]?)(.*)",
+ RegexOptions.IgnoreCase);
if (match.Success)
{
- var blockItemValue = new IconBlockItem
+ var blockItemValue = new MapIconBlockItem
{
- Value = match.Groups[1].Value
- };
+ Size = (IconSize)Int16.Parse(match.Groups[1].Value),
+ Color = EnumHelper.GetEnumValueFromDescription(match.Groups[2].Value),
+ Shape = EnumHelper.GetEnumValueFromDescription(match.Groups[3].Value)
+ };
+
+ if(match.Groups[4].Value == "#" && !string.IsNullOrWhiteSpace(match.Groups[5].Value))
+ {
+ ThemeComponent themeComponent = _masterComponentCollection.AddComponent(ThemeComponentType.Icon, match.Groups[5].Value.Trim(),
+ blockItemValue.Size, blockItemValue.Color, blockItemValue.Shape);
+ blockItemValue.ThemeComponent = themeComponent;
+ }
block.BlockItems.Add(blockItemValue);
}
break;
}
- case "BeamColor":
+ case "PlayEffect":
{
// Only ever use the last BeamColor item encountered as multiples aren't valid.
- RemoveExistingBlockItemsOfType(block);
+ RemoveExistingBlockItemsOfType(block);
- var result = Regex.Matches(trimmedLine, @"([\w\s]*)(True|False)[#]?(.*)", RegexOptions.IgnoreCase);
- var color = GetColorFromString(result[0].Groups[1].Value);
- var beamBlockItem = new BeamBlockItem
+ // TODO: Get colors programmatically
+ var match = Regex.Match(trimmedLine, @"\S+\s+(Red|Green|Blue|Brown|White|Yellow)\s+(Temp)?\s*([#]?)(.*)", RegexOptions.IgnoreCase);
+
+ if (match.Success)
{
- Color = GetColorFromString(result[0].Groups[1].Value),
- BooleanValue = result[0].Groups[2].Value.Trim().ToLowerInvariant() == "true"
- };
- block.BlockItems.Add(beamBlockItem);
+ var blockItemValue = new PlayEffectBlockItem
+ {
+ Color = EnumHelper.GetEnumValueFromDescription(match.Groups[1].Value),
+ Temporary = match.Groups[2].Value.Trim().ToLower() == "temp"
+ };
+
+ if(match.Groups[3].Value == "#" && !string.IsNullOrWhiteSpace(match.Groups[4].Value))
+ {
+ ThemeComponent themeComponent = _masterComponentCollection.AddComponent(ThemeComponentType.Effect, match.Groups[4].Value.Trim(),
+ blockItemValue.Color, blockItemValue.Temporary);
+ blockItemValue.ThemeComponent = themeComponent;
+ }
+ block.BlockItems.Add(blockItemValue);
+ }
break;
}
case "CustomAlertSound":
@@ -367,6 +390,11 @@ namespace Filtration.Parser.Services
}
break;
}
+ case "MapTier":
+ {
+ AddNumericFilterPredicateItemToBlockItems(block, trimmedLine);
+ break;
+ }
}
}
@@ -640,12 +668,6 @@ namespace Filtration.Parser.Services
// ReSharper disable once LoopCanBeConvertedToQuery
foreach (var blockItem in block.BlockItems.Where(b => b.GetType() != typeof(ActionBlockItem)).OrderBy(b => b.SortOrder))
{
- // Do not save temporary blocks until the new features are fully implemented
- if (blockItem is IconBlockItem || blockItem is BeamBlockItem)
- {
- continue;
- }
-
if (blockItem.OutputText != string.Empty)
{
outputString += (!block.Enabled ? _disabledNewLine : _newLine) + blockItem.OutputText;
diff --git a/Filtration.ThemeEditor/Filtration.ThemeEditor.csproj b/Filtration.ThemeEditor/Filtration.ThemeEditor.csproj
index a32ef1f..20cd268 100644
--- a/Filtration.ThemeEditor/Filtration.ThemeEditor.csproj
+++ b/Filtration.ThemeEditor/Filtration.ThemeEditor.csproj
@@ -109,6 +109,8 @@
+
+
diff --git a/Filtration.ThemeEditor/ViewModels/EffectColorThemeComponentViewModel.cs b/Filtration.ThemeEditor/ViewModels/EffectColorThemeComponentViewModel.cs
new file mode 100644
index 0000000..07d64cf
--- /dev/null
+++ b/Filtration.ThemeEditor/ViewModels/EffectColorThemeComponentViewModel.cs
@@ -0,0 +1,10 @@
+using Filtration.ObjectModel.Enums;
+
+namespace Filtration.ThemeEditor.ViewModels
+{
+ public class EffectColorThemeComponentViewModel : ThemeComponentViewModel
+ {
+ public EffectColor EffectColor { get; set; }
+ public bool Temporary { get; set; }
+ }
+}
diff --git a/Filtration.ThemeEditor/ViewModels/IconThemeComponentViewModel.cs b/Filtration.ThemeEditor/ViewModels/IconThemeComponentViewModel.cs
new file mode 100644
index 0000000..0a61f1f
--- /dev/null
+++ b/Filtration.ThemeEditor/ViewModels/IconThemeComponentViewModel.cs
@@ -0,0 +1,11 @@
+using Filtration.ObjectModel.Enums;
+
+namespace Filtration.ThemeEditor.ViewModels
+{
+ public class IconThemeComponentViewModel : ThemeComponentViewModel
+ {
+ public IconSize IconSize { get; set; }
+ public IconColor IconColor { get; set; }
+ public IconShape IconShape { get; set; }
+ }
+}
diff --git a/Filtration.ThemeEditor/ViewModels/ThemeEditorViewModel.cs b/Filtration.ThemeEditor/ViewModels/ThemeEditorViewModel.cs
index d67c8ac..c18a8c9 100644
--- a/Filtration.ThemeEditor/ViewModels/ThemeEditorViewModel.cs
+++ b/Filtration.ThemeEditor/ViewModels/ThemeEditorViewModel.cs
@@ -211,6 +211,12 @@ namespace Filtration.ThemeEditor.ViewModels
case ThemeComponentType.CustomSound:
Components.Add(new StringThemeComponent(themeComponentType, "Untitled Component", "placeholder.mp3"));
break;
+ case ThemeComponentType.Icon:
+ Components.Add(new IconThemeComponent(themeComponentType, "Untitled Component", IconSize.Largest, IconColor.Red, IconShape.Circle));
+ break;
+ case ThemeComponentType.Effect:
+ Components.Add(new EffectColorThemeComponent(themeComponentType, "Untitled Component", EffectColor.Red, false));
+ break;
}
}
diff --git a/Filtration.ThemeEditor/Views/ThemeComponentControl.xaml b/Filtration.ThemeEditor/Views/ThemeComponentControl.xaml
index 5d06641..2130c90 100644
--- a/Filtration.ThemeEditor/Views/ThemeComponentControl.xaml
+++ b/Filtration.ThemeEditor/Views/ThemeComponentControl.xaml
@@ -7,7 +7,8 @@
xmlns:commonConverters="clr-namespace:Filtration.Common.Converters;assembly=Filtration.Common"
xmlns:themeEditor="clr-namespace:Filtration.ObjectModel.ThemeEditor;assembly=Filtration.ObjectModel"
xmlns:views="clr-namespace:Filtration.ThemeEditor.Views"
- xmlns:viewModels="clr-namespace:Filtration.ThemeEditor.ViewModels"
+ xmlns:extensions="clr-namespace:Filtration.Common.Extensions;assembly=Filtration.Common"
+ xmlns:enums="clr-namespace:Filtration.ObjectModel.Enums;assembly=Filtration.ObjectModel"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance Type=themeEditor:ThemeComponent}"
d:DesignHeight="100" d:DesignWidth="200">
@@ -18,7 +19,7 @@
-
+
@@ -99,6 +100,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Permanent
+ Temporary
+
+
+
+
diff --git a/Filtration/App.xaml.cs b/Filtration/App.xaml.cs
index a123909..624f22e 100644
--- a/Filtration/App.xaml.cs
+++ b/Filtration/App.xaml.cs
@@ -50,6 +50,8 @@ namespace Filtration
cfg.CreateMap().ReverseMap();
cfg.CreateMap().ReverseMap();
cfg.CreateMap().ReverseMap();
+ cfg.CreateMap().ReverseMap();
+ cfg.CreateMap().ReverseMap();
cfg.CreateMap();
});
diff --git a/Filtration/Converters/AvailableThemeComponentsConverter.cs b/Filtration/Converters/AvailableThemeComponentsConverter.cs
index 77a6803..e4c5d61 100644
--- a/Filtration/Converters/AvailableThemeComponentsConverter.cs
+++ b/Filtration/Converters/AvailableThemeComponentsConverter.cs
@@ -45,6 +45,14 @@ namespace Filtration.Converters
{
themeComponentType = ThemeComponentType.CustomSound;
}
+ else if (blockItem.GetType() == typeof(MapIconBlockItem))
+ {
+ themeComponentType = ThemeComponentType.Icon;
+ }
+ else if (blockItem.GetType() == typeof(PlayEffectBlockItem))
+ {
+ themeComponentType = ThemeComponentType.Effect;
+ }
else
{
return null;
diff --git a/Filtration/Converters/DropIconConverter.cs b/Filtration/Converters/IconShapeToSourceConverter.cs
similarity index 61%
rename from Filtration/Converters/DropIconConverter.cs
rename to Filtration/Converters/IconShapeToSourceConverter.cs
index 4caeffa..c727045 100644
--- a/Filtration/Converters/DropIconConverter.cs
+++ b/Filtration/Converters/IconShapeToSourceConverter.cs
@@ -1,28 +1,29 @@
-using System;
+using Filtration.ObjectModel.Enums;
+using System;
using System.Globalization;
using System.Windows.Data;
namespace Filtration.Converters
{
- internal class DropIconConverter : IValueConverter
+ internal class IconShapeToSourceConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
- var iconString = (string)value;
- switch(iconString)
+ var iconShape = (IconShape)(int)value;
+ switch (iconShape)
{
- case "Icon1":
- return "/Filtration;component/Resources/DropIcons/Icon1.png";
- case "Icon2":
- return "/Filtration;component/Resources/DropIcons/Icon2.png";
- case "Icon3":
- return "/Filtration;component/Resources/DropIcons/Icon3.png";
- case "Icon4":
- return "/Filtration;component/Resources/DropIcons/Icon4.png";
- case "Icon5":
- return "/Filtration;component/Resources/DropIcons/Icon5.png";
- case "Icon6":
- return "/Filtration;component/Resources/DropIcons/Icon6.png";
+ case IconShape.Circle:
+ return "/Filtration;component/Resources/DropIcons/Circle.png";
+ case IconShape.Diamond:
+ return "/Filtration;component/Resources/DropIcons/Diamond.png";
+ case IconShape.Hexagon:
+ return "/Filtration;component/Resources/DropIcons/Hexagon.png";
+ case IconShape.Square:
+ return "/Filtration;component/Resources/DropIcons/Square.png";
+ case IconShape.Star:
+ return "/Filtration;component/Resources/DropIcons/Star.png";
+ case IconShape.Triangle:
+ return "/Filtration;component/Resources/DropIcons/Triangle.png";
}
return "/Filtration;component/Resources/DropIcons/NoIcon.png";
diff --git a/Filtration/Converters/SizeColorToRectConverter.cs b/Filtration/Converters/SizeColorToRectConverter.cs
new file mode 100644
index 0000000..0be1814
--- /dev/null
+++ b/Filtration/Converters/SizeColorToRectConverter.cs
@@ -0,0 +1,33 @@
+using Filtration.ObjectModel.Enums;
+using System;
+using System.Globalization;
+using System.Windows;
+using System.Windows.Data;
+
+namespace Filtration.Converters
+{
+ internal class SizeColorToRectConverter : IMultiValueConverter
+ {
+ public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
+ {
+ var size = (int)(values[0]);
+ var color = (int)(values[1]);
+
+ if (size < 0 || color < 0)
+ return new Rect(0, 0, 0, 0);
+
+ Rect cropArea = new Rect();
+ cropArea.Width = 64;
+ cropArea.Height = 64;
+ cropArea.X = 0 + size * 64;
+ cropArea.Y = 0 + color * 64;
+
+ return cropArea;
+ }
+
+ public object[] ConvertBack(object value, Type[] targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Filtration/Filtration.csproj b/Filtration/Filtration.csproj
index 9b35e47..6a1ac98 100644
--- a/Filtration/Filtration.csproj
+++ b/Filtration/Filtration.csproj
@@ -167,12 +167,11 @@
-
+
+
-
-
@@ -546,13 +545,13 @@
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/Filtration/Resources/DropIcons/Circle.png b/Filtration/Resources/DropIcons/Circle.png
new file mode 100644
index 0000000..7b59891
Binary files /dev/null and b/Filtration/Resources/DropIcons/Circle.png differ
diff --git a/Filtration/Resources/DropIcons/Diamond.png b/Filtration/Resources/DropIcons/Diamond.png
new file mode 100644
index 0000000..ab917dd
Binary files /dev/null and b/Filtration/Resources/DropIcons/Diamond.png differ
diff --git a/Filtration/Resources/DropIcons/Hexagon.png b/Filtration/Resources/DropIcons/Hexagon.png
new file mode 100644
index 0000000..549fa94
Binary files /dev/null and b/Filtration/Resources/DropIcons/Hexagon.png differ
diff --git a/Filtration/Resources/DropIcons/Icon1.png b/Filtration/Resources/DropIcons/Icon1.png
deleted file mode 100644
index 38a4314..0000000
Binary files a/Filtration/Resources/DropIcons/Icon1.png and /dev/null differ
diff --git a/Filtration/Resources/DropIcons/Icon2.png b/Filtration/Resources/DropIcons/Icon2.png
deleted file mode 100644
index 8d10d5d..0000000
Binary files a/Filtration/Resources/DropIcons/Icon2.png and /dev/null differ
diff --git a/Filtration/Resources/DropIcons/Icon3.png b/Filtration/Resources/DropIcons/Icon3.png
deleted file mode 100644
index 2ef3b30..0000000
Binary files a/Filtration/Resources/DropIcons/Icon3.png and /dev/null differ
diff --git a/Filtration/Resources/DropIcons/Icon4.png b/Filtration/Resources/DropIcons/Icon4.png
deleted file mode 100644
index b471723..0000000
Binary files a/Filtration/Resources/DropIcons/Icon4.png and /dev/null differ
diff --git a/Filtration/Resources/DropIcons/Icon5.png b/Filtration/Resources/DropIcons/Icon5.png
deleted file mode 100644
index ad3709f..0000000
Binary files a/Filtration/Resources/DropIcons/Icon5.png and /dev/null differ
diff --git a/Filtration/Resources/DropIcons/Icon6.png b/Filtration/Resources/DropIcons/Icon6.png
deleted file mode 100644
index 8febb46..0000000
Binary files a/Filtration/Resources/DropIcons/Icon6.png and /dev/null differ
diff --git a/Filtration/Resources/DropIcons/Square.png b/Filtration/Resources/DropIcons/Square.png
new file mode 100644
index 0000000..9e143cf
Binary files /dev/null and b/Filtration/Resources/DropIcons/Square.png differ
diff --git a/Filtration/Resources/DropIcons/Star.png b/Filtration/Resources/DropIcons/Star.png
new file mode 100644
index 0000000..9158e90
Binary files /dev/null and b/Filtration/Resources/DropIcons/Star.png differ
diff --git a/Filtration/Resources/DropIcons/Triangle.png b/Filtration/Resources/DropIcons/Triangle.png
new file mode 100644
index 0000000..3d8d6d9
Binary files /dev/null and b/Filtration/Resources/DropIcons/Triangle.png differ
diff --git a/Filtration/Resources/ItemBaseTypes.txt b/Filtration/Resources/ItemBaseTypes.txt
index cc1a744..c978d72 100644
--- a/Filtration/Resources/ItemBaseTypes.txt
+++ b/Filtration/Resources/ItemBaseTypes.txt
@@ -1,5 +1,6 @@
A Mother's Parting Gift
Abandoned Wealth
+Aberrant Fossil
Abyssal Axe
Abyssal Cry
Abyssal Sceptre
@@ -10,6 +11,7 @@ Added Cold Damage Support
Added Fire Damage Support
Added Lightning Damage Support
Additional Accuracy Support
+Aetheric Fossil
Agate Amulet
Albino Rhoa Feather
Alchemy Shard
@@ -111,6 +113,7 @@ Battle Sword
Bazaar Map
Beach Map
Bear Trap
+Beauty Through Death
Behemoth Mace
Belfry Map
Bestel's Manuscript
@@ -148,6 +151,7 @@ Blood Raiment
Blood Sceptre
Bloodlines Leaguestone
Bloodlust Support
+Bloodstained Fossil
Blue Pearl Amulet
Blunt Arrow Quiver
Boarding Axe
@@ -161,9 +165,11 @@ Bone Helmet
Bone Offering
Bone Spirit Shield
Bonespire Talisman
+Boon of the First Ones
Boot Blade
Boot Knife
Bottled Storm
+Bound Fossil
Boundless Realms
Bowyer's Dream
Branded Kite Shield
@@ -293,6 +299,7 @@ Conjurer Boots
Conjurer Gloves
Conjurer's Vestment
Conquest Chainmail
+Consecrated Path
Conservatory Map
Contagion
Controlled Destruction Support
@@ -309,6 +316,7 @@ Core Map
Coronal Leather
Coronal Maul
Corroded Blade
+Corroded Fossil
Corroded Tower Shield
Corrugated Buckler
Corsair Sword
@@ -388,6 +396,7 @@ Defiled Cathedral Map
Deicide Mask
Demon Dagger
Demon's Horn
+Dense Fossil
Desecrate
Desert Brigandine
Desert Map
@@ -463,6 +472,8 @@ Emperor of Purity
Emperor's Luck
Empower Support
Enameled Buckler
+Enchanted Fossil
+Encrusted Fossil
Endurance Charge on Melee Stun Support
Enduring Cry
Enfeeble
@@ -508,6 +519,7 @@ Ezomyte Dagger
Ezomyte Spiked Shield
Ezomyte Staff
Ezomyte Tower Shield
+Faceted Fossil
Factory Map
Fancy Foil
Fangjaw Talisman
@@ -552,6 +564,7 @@ Fork Support
Fortify Support
Fossilised Spirit Shield
Foul Staff
+Fractured Fossil
Fragment of the Chimera
Fragment of the Hydra
Fragment of the Minotaur
@@ -561,6 +574,7 @@ Freezing Pulse
Frenzy
Fright Claw
Fright Maul
+Frigid Fossil
Frontier Leather
Frost Blades
Frost Bomb
@@ -590,6 +604,7 @@ Giant Mana Flask
Gift of the Gemling Queen
Gilded Axe
Gilded Buckler
+Gilded Fossil
Gilded Sallet
Girded Tower Shield
Glacial Cascade
@@ -602,6 +617,7 @@ Glassblower's Bauble
Glimmer of Hope
Glorious Leather
Glorious Plate
+Glyphic Fossil
Gnarled Branch
Goat's Horn
Goathide Boots
@@ -675,8 +691,10 @@ Heavy Quiver
Heavy Strike
Hellion's Paw
Her Mask
+Herald of Agony
Herald of Ash
Herald of Ice
+Herald of Purity
Herald of Thunder
Heterochromia
Hexclaw Talisman
@@ -684,6 +702,7 @@ Highborn Bow
Highborn Staff
Highland Blade
Hinekora's Hair
+Hollow Fossil
Holy Chainmail
Hook Sword
Hope
@@ -759,6 +778,7 @@ Jade Chopper
Jade Flask
Jade Hatchet
Jagged Foil
+Jagged Fossil
Jagged Maul
Jasper Axe
Jasper Chopper
@@ -843,6 +863,7 @@ Lordly Plate
Loricated Ringmail
Lost Worlds
Loyalty
+Lucent Fossil
Lucky Connections
Lucky Deck
Lunaris Circlet
@@ -884,6 +905,7 @@ Merciless Armament
Mesa Map
Mesh Boots
Mesh Gloves
+Metallic Fossil
Miasmeter
Midnight Blade
Might is Right
@@ -995,13 +1017,13 @@ Penetrating Arrow Quiver
Peninsula Map
Perandus Coin
Perandus Leaguestone
+Perfect Fossil
Perfection
Pernarch
Petrified Club
Phantasmagoria Map
Phantom Mace
Phase Run
-Physical Projectile Attack Damage Support
Physical to Lightning Support
Pier Map
Pierce Support
@@ -1031,19 +1053,29 @@ Port Map
Portal
Portal Scroll
Portal Shredder
+Potent Alchemical Resonator
+Potent Chaotic Resonator
Power Charge On Critical Support
Power Siphon
+Powerful Alchemical Resonator
+Powerful Chaotic Resonator
Praetor Crown
Precinct Map
Prehistoric Claw
Pride Before the Fall
Primal Skull Talisman
+Prime Alchemical Resonator
+Prime Chaotic Resonator
Primeval Rapier
+Primitive Alchemical Resonator
+Primitive Chaotic Resonator
Primitive Staff
Primordial Pool Map
Primordial Staff
+Prismatic Fossil
Prismatic Jewel
Prismatic Ring
+Pristine Fossil
Profane Wand
Projectile Weakness
Promenade Map
@@ -1157,6 +1189,7 @@ Sambar Sceptre
Samite Gloves
Samite Helmet
Samite Slippers
+Sanctified Fossil
Sanctified Life Flask
Sanctified Mana Flask
Sand of Eternity
@@ -1173,7 +1206,9 @@ Scarlet Round Shield
Scholar Boots
Scholar of the Seas
Scholar's Robe
+Scorched Fossil
Scorching Ray
+Scourge Arrow
Screaming Essence
Screaming Essence of Anger
Screaming Essence of Anguish
@@ -1212,6 +1247,7 @@ Serpentscale Boots
Serpentscale Gauntlets
Serrated Arrow Quiver
Serrated Foil
+Serrated Fossil
Shabby Jerkin
Shackled Boots
Shadow Axe
@@ -1221,7 +1257,6 @@ Shagreen Gloves
Shagreen Tower Shield
Shaper's Orb
Shaper's Orb (Tier 1)
-Shaper's Orb (Tier 10)
Shaper's Orb (Tier 2)
Shaper's Orb (Tier 3)
Shaper's Orb (Tier 4)
@@ -1230,6 +1265,7 @@ Shaper's Orb (Tier 6)
Shaper's Orb (Tier 7)
Shaper's Orb (Tier 8)
Shaper's Orb (Tier 9)
+Shaper's Orb (Tier 10)
Shard of Fate
Sharkskin Boots
Sharkskin Gloves
@@ -1265,6 +1301,7 @@ Shrieking Essence of Woe
Shrieking Essence of Wrath
Shrieking Essence of Zeal
Shrine Map
+Shuddering Fossil
Siege Axe
Siege Ballista
Siege Helmet
@@ -1299,6 +1336,7 @@ Small Hybrid Flask
Small Life Flask
Small Mana Flask
Smallsword
+Smite
Smoke Mine
Sniper Bow
Solar Maul
@@ -1385,6 +1423,7 @@ Sulphur Vents Map
Summit Map
Summon Chaos Golem
Summon Flame Golem
+Summon Holy Relic
Summon Ice Golem
Summon Lightning Golem
Summon Phantasm on Kill Support
@@ -1402,6 +1441,7 @@ Sweep
Swift Affliction Support
Talisman Leaguestone
Talon Axe
+Tangled Fossil
Tarnished Spirit Shield
Teak Round Shield
Tectonic Slam
@@ -1431,6 +1471,7 @@ The Blazing Fire
The Body
The Breach
The Brittle Emperor
+The Cacophony
The Calling
The Carrion Crow
The Cartographer
@@ -1456,6 +1497,7 @@ The Dreamer
The Dreamland
The Drunken Aristocrat
The Encroaching Darkness
+The Endless Darkness
The Endurance
The Enlightened
The Ethereal
@@ -1483,6 +1525,7 @@ The Hoarder
The Hunger
The Immortal
The Incantation
+The Innocent
The Inoculated
The Insatiable
The Inventor
@@ -1512,6 +1555,7 @@ The Penitent
The Poet
The Polymath
The Porcupine
+The Price of Protection
The Professor
The Puzzle
The Queen
@@ -1548,6 +1592,7 @@ The Throne
The Tower
The Traitor
The Trial
+The Twilight Moon
The Twins
The Tyrant
The Undaunted
@@ -1562,6 +1607,7 @@ The Warden
The Warlord
The Watcher
The Web
+The Wilted Rose
The Wind
The Witch
The Wolf
@@ -1589,6 +1635,7 @@ Tiger's Paw
Timber Axe
Time-Lost Relic
Timeworn Claw
+Timeworn Reliquary Key
Titan Gauntlets
Titan Greaves
Titanium Spirit Shield
@@ -1604,6 +1651,7 @@ Torture Chamber Map
Totemic Maul
Tower Key
Tower Map
+Toxic Rain
Toxic Sewer Map
Tranquillity
Transmutation Shard
@@ -1644,6 +1692,7 @@ Unset Ring
Unshaping Orb
Ursine Pelt
Uul-Netol's Breachstone
+Vaal Ancestral Warchief
Vaal Arc
Vaal Axe
Vaal Blade
@@ -1713,6 +1762,7 @@ Vial of Summoning
Vial of the Ghost
Vial of the Ritual
Vial of Transcendence
+Vicious Projectiles Support
Vigilant Strike
Vile Staff
Vile Toxins Support
@@ -1790,6 +1840,7 @@ Wild Leather
Wild Strike
Wings of Vastiri
Wither
+Withering Touch Support
Wolf Pelt
Woodful Staff
Woodsplitter
diff --git a/Filtration/Resources/ItemClasses.txt b/Filtration/Resources/ItemClasses.txt
index 0554a03..d38526b 100644
--- a/Filtration/Resources/ItemClasses.txt
+++ b/Filtration/Resources/ItemClasses.txt
@@ -9,6 +9,7 @@ Bows
Claws
Currency
Daggers
+Delve Stackable Currency
Divination Card
Fishing Rods
Flasks
diff --git a/Filtration/UserControls/BlockItemControl.xaml b/Filtration/UserControls/BlockItemControl.xaml
index b8d42a4..1a0d699 100644
--- a/Filtration/UserControls/BlockItemControl.xaml
+++ b/Filtration/UserControls/BlockItemControl.xaml
@@ -7,7 +7,7 @@
xmlns:commonConverters="clr-namespace:Filtration.Common.Converters;assembly=Filtration.Common"
xmlns:blockItemBaseTypes="clr-namespace:Filtration.ObjectModel.BlockItemBaseTypes;assembly=Filtration.ObjectModel"
xmlns:blockItemTypes="clr-namespace:Filtration.ObjectModel.BlockItemTypes;assembly=Filtration.ObjectModel"
- xmlns:extensions="clr-namespace:Filtration.Extensions"
+ xmlns:extensions="clr-namespace:Filtration.Common.Extensions;assembly=Filtration.Common"
xmlns:enums="clr-namespace:Filtration.ObjectModel.Enums;assembly=Filtration.ObjectModel"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
xmlns:views="clr-namespace:Filtration.Views"
@@ -86,14 +86,25 @@
-
-
+
+
- Permanent
- Temporary
+ Permanent
+ Temporary
-
+
+
+
+
+
+
+
+
+
@@ -171,11 +182,30 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Filtration/UserControls/BlockItemControl.xaml.cs b/Filtration/UserControls/BlockItemControl.xaml.cs
index 7679d1f..db0909c 100644
--- a/Filtration/UserControls/BlockItemControl.xaml.cs
+++ b/Filtration/UserControls/BlockItemControl.xaml.cs
@@ -90,10 +90,6 @@ namespace Filtration.UserControls
"ShFusing", "ShRegal", "ShVaal"
};
- public List IconsAvailable => new List {
- "Icon1", "Icon2", "Icon3", "Icon4", "Icon5", "Icon6"
- };
-
private void OnSetBlockValueCommmand()
{
var blockItemWithTheme = BlockItem as IBlockItemWithTheme;
@@ -121,6 +117,17 @@ namespace Filtration.UserControls
var stringBlockItem = BlockItem as StringBlockItem;
stringBlockItem.Value = ((StringThemeComponent)stringBlockItem.ThemeComponent).Value;
break;
+ case ThemeComponentType.Icon:
+ var iconBlockItem = BlockItem as IconBlockItem;
+ iconBlockItem.Size = ((IconThemeComponent)iconBlockItem.ThemeComponent).IconSize;
+ iconBlockItem.Color = ((IconThemeComponent)iconBlockItem.ThemeComponent).IconColor;
+ iconBlockItem.Shape = ((IconThemeComponent)iconBlockItem.ThemeComponent).IconShape;
+ break;
+ case ThemeComponentType.Effect:
+ var effectColorBlockItem = BlockItem as EffectColorBlockItem;
+ effectColorBlockItem.Color = ((EffectColorThemeComponent)effectColorBlockItem.ThemeComponent).EffectColor;
+ effectColorBlockItem.Temporary = ((EffectColorThemeComponent)effectColorBlockItem.ThemeComponent).Temporary;
+ break;
}
}
diff --git a/Filtration/UserControls/ImageComboBoxControl.xaml b/Filtration/UserControls/ImageComboBoxControl.xaml
index 1494353..88b1726 100644
--- a/Filtration/UserControls/ImageComboBoxControl.xaml
+++ b/Filtration/UserControls/ImageComboBoxControl.xaml
@@ -8,7 +8,7 @@
mc:Ignorable="d">
-
+
diff --git a/Filtration/UserControls/ItemPreviewControl.xaml b/Filtration/UserControls/ItemPreviewControl.xaml
index f9232fe..0ba9de4 100644
--- a/Filtration/UserControls/ItemPreviewControl.xaml
+++ b/Filtration/UserControls/ItemPreviewControl.xaml
@@ -8,7 +8,7 @@
d:DataContext="{d:DesignInstance Type=userControls:ItemPreviewControl}"
d:DesignHeight="35" d:DesignWidth="170">
-
+
diff --git a/Filtration/UserControls/NumericFilterPredicateControl.xaml b/Filtration/UserControls/NumericFilterPredicateControl.xaml
index 32ce079..8d8d03f 100644
--- a/Filtration/UserControls/NumericFilterPredicateControl.xaml
+++ b/Filtration/UserControls/NumericFilterPredicateControl.xaml
@@ -5,7 +5,7 @@
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:extensions="clr-namespace:Filtration.Extensions"
+ xmlns:extensions="clr-namespace:Filtration.Common.Extensions;assembly=Filtration.Common"
xmlns:userControls="clr-namespace:Filtration.UserControls"
xmlns:enums="clr-namespace:Filtration.ObjectModel.Enums;assembly=Filtration.ObjectModel"
mc:Ignorable="d"
diff --git a/Filtration/UserControls/ThemeComponentSelectionControl.xaml b/Filtration/UserControls/ThemeComponentSelectionControl.xaml
index bd68cac..ae2f094 100644
--- a/Filtration/UserControls/ThemeComponentSelectionControl.xaml
+++ b/Filtration/UserControls/ThemeComponentSelectionControl.xaml
@@ -67,6 +67,14 @@
+
+
+
+
+
+
+
+
diff --git a/Filtration/ViewModels/ItemFilterBlockViewModel.cs b/Filtration/ViewModels/ItemFilterBlockViewModel.cs
index 7284af5..ac2411a 100644
--- a/Filtration/ViewModels/ItemFilterBlockViewModel.cs
+++ b/Filtration/ViewModels/ItemFilterBlockViewModel.cs
@@ -8,6 +8,7 @@ using System.Windows.Media;
using Filtration.ObjectModel;
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.BlockItemTypes;
+using Filtration.ObjectModel.Enums;
using Filtration.Services;
using Filtration.Views;
using GalaSoft.MvvmLight.CommandWpf;
@@ -181,6 +182,7 @@ namespace Filtration.ViewModels
typeof (CorruptedBlockItem),
typeof (ElderItemBlockItem),
typeof (ShaperItemBlockItem),
+ typeof (MapTierBlockItem),
typeof (ShapedMapBlockItem),
typeof (ElderMapBlockItem),
typeof (GemLevelBlockItem),
@@ -197,8 +199,8 @@ namespace Filtration.ViewModels
typeof (SoundBlockItem),
typeof (PositionalSoundBlockItem),
typeof (DisableDropSoundBlockItem),
- typeof (IconBlockItem),
- typeof (BeamBlockItem),
+ typeof (MapIconBlockItem),
+ typeof (PlayEffectBlockItem),
typeof (CustomSoundBlockItem)
};
@@ -241,8 +243,10 @@ namespace Filtration.ViewModels
public Color DisplayBackgroundColor => Block.DisplayBackgroundColor;
public Color DisplayBorderColor => Block.DisplayBorderColor;
public double DisplayFontSize => Block.DisplayFontSize/1.8;
- public string DisplayIcon => Block.DisplayIcon;
- public Color DisplayBeamColor => Block.DisplayBeamColor;
+ public int DisplayIconSize => Block.DisplayIconSize;
+ public int DisplayIconColor => Block.DisplayIconColor;
+ public int DisplayIconShape => Block.DisplayIconShape;
+ public Color DisplayEffectColor => Block.DisplayEffectColor;
public bool HasSound => Block.HasBlockItemOfType();
public bool HasPositionalSound => Block.HasBlockItemOfType();
@@ -476,8 +480,10 @@ namespace Filtration.ViewModels
RaisePropertyChanged(nameof(DisplayBackgroundColor));
RaisePropertyChanged(nameof(DisplayBorderColor));
RaisePropertyChanged(nameof(DisplayFontSize));
- RaisePropertyChanged(nameof(DisplayIcon));
- RaisePropertyChanged(nameof(DisplayBeamColor));
+ RaisePropertyChanged(nameof(DisplayIconSize));
+ RaisePropertyChanged(nameof(DisplayIconColor));
+ RaisePropertyChanged(nameof(DisplayIconShape));
+ RaisePropertyChanged(nameof(DisplayEffectColor));
RaisePropertyChanged(nameof(HasSound));
RaisePropertyChanged(nameof(HasPositionalSound));
RaisePropertyChanged(nameof(HasCustomSound));
diff --git a/Filtration/ViewModels/MainWindowViewModel.cs b/Filtration/ViewModels/MainWindowViewModel.cs
index 8651c46..74e6534 100644
--- a/Filtration/ViewModels/MainWindowViewModel.cs
+++ b/Filtration/ViewModels/MainWindowViewModel.cs
@@ -117,6 +117,8 @@ namespace Filtration.ViewModels
AddFontSizeThemeComponentCommand = new RelayCommand(OnAddFontSizeThemeComponentCommand, () => ActiveDocumentIsTheme && ActiveThemeIsEditable);
AddAlertSoundThemeComponentCommand = new RelayCommand(OnAddAlertSoundThemeComponentCommand, () => ActiveDocumentIsTheme && ActiveThemeIsEditable);
AddCustomSoundThemeComponentCommand = new RelayCommand(OnAddCustomSoundThemeComponentCommand, () => ActiveDocumentIsTheme && ActiveThemeIsEditable);
+ AddIconThemeComponentCommand = new RelayCommand(OnAddIconThemeComponentCommand, () => ActiveDocumentIsTheme && ActiveThemeIsEditable);
+ AddEffectColorThemeComponentCommand = new RelayCommand(OnAddEffectColorThemeComponentCommand, () => ActiveDocumentIsTheme && ActiveThemeIsEditable);
DeleteThemeComponentCommand = new RelayCommand(OnDeleteThemeComponentCommand, () => ActiveDocumentIsTheme && ActiveThemeIsEditable && _avalonDockWorkspaceViewModel.ActiveThemeViewModel.SelectedThemeComponent != null);
ExpandAllBlocksCommand = new RelayCommand(OnExpandAllBlocksCommand, () => ActiveDocumentIsScript);
@@ -219,6 +221,8 @@ namespace Filtration.ViewModels
public RelayCommand AddFontSizeThemeComponentCommand { get; }
public RelayCommand AddAlertSoundThemeComponentCommand { get; }
public RelayCommand AddCustomSoundThemeComponentCommand { get; }
+ public RelayCommand AddIconThemeComponentCommand { get; }
+ public RelayCommand AddEffectColorThemeComponentCommand { get; }
public RelayCommand DeleteThemeComponentCommand { get; }
public RelayCommand AddBlockCommand { get; }
@@ -698,6 +702,16 @@ namespace Filtration.ViewModels
_avalonDockWorkspaceViewModel.ActiveThemeViewModel.AddThemeComponentCommand.Execute(ThemeComponentType.CustomSound);
}
+ private void OnAddIconThemeComponentCommand()
+ {
+ _avalonDockWorkspaceViewModel.ActiveThemeViewModel.AddThemeComponentCommand.Execute(ThemeComponentType.Icon);
+ }
+
+ private void OnAddEffectColorThemeComponentCommand()
+ {
+ _avalonDockWorkspaceViewModel.ActiveThemeViewModel.AddThemeComponentCommand.Execute(ThemeComponentType.Effect);
+ }
+
private void OnDeleteThemeComponentCommand()
{
_avalonDockWorkspaceViewModel.ActiveThemeViewModel.DeleteThemeComponentCommand.Execute(
diff --git a/Filtration/Views/AboutWindow.xaml b/Filtration/Views/AboutWindow.xaml
index 9b8c9ae..9862989 100644
--- a/Filtration/Views/AboutWindow.xaml
+++ b/Filtration/Views/AboutWindow.xaml
@@ -1,7 +1,7 @@
-
+
+