diff --git a/Filtration.ObjectModel/BlockItemTypes/BeamBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/BeamBlockItem.cs new file mode 100644 index 0000000..0761609 --- /dev/null +++ b/Filtration.ObjectModel/BlockItemTypes/BeamBlockItem.cs @@ -0,0 +1,21 @@ +using System.Windows.Media; +using Filtration.ObjectModel.BlockItemBaseTypes; + +namespace Filtration.ObjectModel.BlockItemTypes +{ + public class BeamBlockItem : ColorBlockItem + { + public BeamBlockItem() + { + } + + public BeamBlockItem(Color color) : base(color) + { + } + + 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/Filtration.ObjectModel.csproj b/Filtration.ObjectModel/Filtration.ObjectModel.csproj index fcf9bdc..ade4e80 100644 --- a/Filtration.ObjectModel/Filtration.ObjectModel.csproj +++ b/Filtration.ObjectModel/Filtration.ObjectModel.csproj @@ -60,6 +60,7 @@ + diff --git a/Filtration.ObjectModel/ItemFilterBlock.cs b/Filtration.ObjectModel/ItemFilterBlock.cs index 831d3d0..1209677 100644 --- a/Filtration.ObjectModel/ItemFilterBlock.cs +++ b/Filtration.ObjectModel/ItemFilterBlock.cs @@ -24,6 +24,7 @@ namespace Filtration.ObjectModel Color DisplayBorderColor { get; } double DisplayFontSize { get; } string DisplayIcon { get; } + Color DisplayBeamColor { get; } bool HasBlockItemOfType(); bool HasBlockGroupInParentHierarchy(ItemFilterBlockGroup targetBlockGroup, ItemFilterBlockGroup startingBlockGroup); } @@ -270,5 +271,14 @@ namespace Filtration.ObjectModel return (displayIcon != null) ? displayIcon.Value : ""; } } + + public Color DisplayBeamColor + { + get + { + var beamBlockItem = BlockItems.OfType().FirstOrDefault(); + return beamBlockItem?.Color ?? new Color { A = 0, R = 0, G = 0, B = 0 }; + } + } } } diff --git a/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs b/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs index 7ed7f01..f768146 100644 --- a/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs +++ b/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs @@ -907,6 +907,24 @@ namespace Filtration.Parser.Tests.Services 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"; + + // 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); } [Test] @@ -943,7 +961,8 @@ namespace Filtration.Parser.Tests.Services " SetFontSize 50" + Environment.NewLine + " PlayAlertSound 3" + Environment.NewLine + " DisableDropSound False" + Environment.NewLine + - " Icon Icon2" + Environment.NewLine; + " Icon Icon2" + Environment.NewLine + + " BeamColor 255 100 5" + Environment.NewLine; // Act var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript); @@ -1051,6 +1070,11 @@ namespace Filtration.Parser.Tests.Services 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); } [Test] @@ -1877,6 +1901,7 @@ 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() { @@ -1924,8 +1949,9 @@ 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"; + " DisableDropSound True";/* + Environment.NewLine + + " Icon Icon4"; + " BeamColor 120 130 140";*/ _testUtility.TestBlock.BlockItems.Add(new ActionBlockItem(BlockAction.Show)); _testUtility.TestBlock.BlockItems.Add(new IdentifiedBlockItem(true)); @@ -1970,6 +1996,7 @@ namespace Filtration.Parser.Tests.Services _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 })); // Act var result = _testUtility.Translator.TranslateItemFilterBlockToString(_testUtility.TestBlock); diff --git a/Filtration.Parser/Services/ItemFilterBlockTranslator.cs b/Filtration.Parser/Services/ItemFilterBlockTranslator.cs index fbccea4..373c2f3 100644 --- a/Filtration.Parser/Services/ItemFilterBlockTranslator.cs +++ b/Filtration.Parser/Services/ItemFilterBlockTranslator.cs @@ -314,6 +314,14 @@ namespace Filtration.Parser.Services } break; } + case "BeamColor": + { + // Only ever use the last BeamColor item encountered as multiples aren't valid. + RemoveExistingBlockItemsOfType(block); + + AddColorItemToBlockItems(block, trimmedLine); + break; + } } } @@ -587,8 +595,8 @@ 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 block until the new feature is fully implemented - if (blockItem is IconBlockItem) + // Do not save temporary blocks until the new features are fully implemented + if (blockItem is IconBlockItem || blockItem is BeamBlockItem) { continue; } diff --git a/Filtration/ViewModels/ItemFilterBlockViewModel.cs b/Filtration/ViewModels/ItemFilterBlockViewModel.cs index 67761fd..8396902 100644 --- a/Filtration/ViewModels/ItemFilterBlockViewModel.cs +++ b/Filtration/ViewModels/ItemFilterBlockViewModel.cs @@ -175,7 +175,8 @@ namespace Filtration.ViewModels typeof (SoundBlockItem), typeof (PositionalSoundBlockItem), typeof (DisableDropSoundBlockItem), - typeof (IconBlockItem) + typeof (IconBlockItem), + typeof (BeamBlockItem) }; public bool BlockEnabled @@ -216,6 +217,7 @@ namespace Filtration.ViewModels public Color DisplayBorderColor => Block.DisplayBorderColor; public double DisplayFontSize => Block.DisplayFontSize/1.8; public string DisplayIcon => Block.DisplayIcon; + public Color DisplayBeamColor => Block.DisplayBeamColor; public bool HasSound => Block.HasBlockItemOfType(); public bool HasPositionalSound => Block.HasBlockItemOfType(); @@ -440,6 +442,7 @@ namespace Filtration.ViewModels RaisePropertyChanged(nameof(DisplayBorderColor)); RaisePropertyChanged(nameof(DisplayFontSize)); RaisePropertyChanged(nameof(DisplayIcon)); + RaisePropertyChanged(nameof(DisplayBeamColor)); RaisePropertyChanged(nameof(HasSound)); } diff --git a/Filtration/Views/ItemFilterBlockView.xaml b/Filtration/Views/ItemFilterBlockView.xaml index f6bb64a..f4bbeac 100644 --- a/Filtration/Views/ItemFilterBlockView.xaml +++ b/Filtration/Views/ItemFilterBlockView.xaml @@ -131,7 +131,12 @@ - + + + + + +