private async void BtnExport_OnClick(object sender, RoutedEventArgs e)
        {            
            // Get input field values
            var deckIndex = ComboBoxDeckPicker.SelectedIndex;
            var deck = deckIndex <= 0 ? (Guid?)null : decks.ElementAt(deckIndex - 1).DeckId;
            var region = (StatsRegion)ComboBoxRegion.SelectedItem;
            var time = (TimeFrame)ComboBoxTime.SelectedItem;
            var mode = (GameMode)ComboBoxMode.SelectedItem;

            // create exporting objects
            var filter = new StatsFilter(deck, region, mode, time);
            // TODO: needs to be selectable with further export types
            var exporter = new CSVExporter();

            // set up and open save dialog
            SaveFileDialog dlg = new SaveFileDialog();
            dlg.FileName = GetDefaultFileName();
            dlg.DefaultExt = "." + exporter.FileExtension;
            dlg.InitialDirectory = Settings.Default.DefaultExportPath;
            dlg.Filter = exporter.Name + " Files | *." + exporter.FileExtension;
            Nullable<bool> result = dlg.ShowDialog();
            // close export dialog
			await Hearthstone_Deck_Tracker.API.Core.MainWindow.HideMetroDialogAsync(this);

            // Process save file dialog box results
            if (result == true)
            {
                // Save document
                string filename = dlg.FileName;                
                await Converter.Export(exporter, filter, filename);                
            }
            
        }
Ejemplo n.º 2
0
        public Stats(StatsFilter bonusType, Monster vsMonster)
        {
            this.OriginalItem = null;

            this.Damage = 0;
            this.Accuracy = 0;
            this.CriticalRate = 0;
            this.Defense = 0;
            this.MagicDefense = 0;
            this.Hp = 0;

            if (bonusType == StatsFilter.Damage)
                this.Damage = 1 / (1 + vsMonster.Defense / 100.0);
            if (bonusType == StatsFilter.MagicAttack)
                this.Damage = 1 / (1 + vsMonster.MagicDefense / 100.0);

            if (bonusType == StatsFilter.Accuracy)
                this.Accuracy = 0.01;
            if (bonusType == StatsFilter.CriticalRate)
                this.CriticalRate = 0.01;
            if (bonusType == StatsFilter.Defense)
                this.Defense = 0.01;
            if (bonusType == StatsFilter.MagicDefense)
                this.MagicDefense = 0.01;
            if (bonusType == StatsFilter.Hp)
                this.Hp = 1;
        }
        private static Dictionary<ItemSlot, Stats[]> removeRedundantItems(IEnumerable<Item> items, Hero hero, Monster monster, StatsFilter statsMask)
        {
            var itemGroups = items.Select(x => new Stats(x, hero, monster)).GroupBy(x => x.OriginalItem.Slot);
            var filteredItems = new Dictionary<ItemSlot, Stats[]>();

            foreach (var itemGroup in itemGroups)
            {
                var filteredList = new List<Stats>();
                foreach (var item in itemGroup)
                {
                    bool redundant = false;
                    var superiorTo = new HashSet<Stats>();
                    foreach (var filteredItem in filteredList)
                    {
                        if (item.isSuperiorTo(filteredItem, statsMask))
                            superiorTo.Add(filteredItem);
                        redundant |= item.isInferiorTo(filteredItem, statsMask);
                    }
                    foreach (var toRemove in superiorTo)
                        filteredList.Remove(toRemove);
                    if (!redundant)
                        filteredList.Add(item);
                }

                if (filteredList.Count == 0)
                {
                    var maxDamage = itemGroup.Max(x => x.Damage);
                    filteredList.Add(itemGroup.First(x => Math.Abs(x.Damage - maxDamage) < 1e-3));
                }

                filteredItems.Add(itemGroup.Key, filteredList.ToArray());
            }

            return filteredItems;
        }
 public void TestCsvHelper()
 {
     var exporter = new CSVExporter();
     var filter = new StatsFilter();
     var file = "sample-export.csv";
     exporter.To(file, filter.Apply(stats));
     var count = TestHelper.CountLines(file);
     Assert.AreEqual(10, count);
 }
Ejemplo n.º 5
0
 public bool isSuperiorTo(Stats other, StatsFilter statsMask)
 {
     return((this.Damage >= other.Damage || !statsMask.HasFlag(StatsFilter.Damage)) &&
            (this.Accuracy >= other.Accuracy || !statsMask.HasFlag(StatsFilter.Accuracy)) &&
            (this.CriticalRate >= other.CriticalRate || !statsMask.HasFlag(StatsFilter.CriticalRate)) &&
            (this.Defense >= other.Defense || !statsMask.HasFlag(StatsFilter.Defense)) &&
            (this.MagicDefense >= other.MagicDefense || !statsMask.HasFlag(StatsFilter.MagicDefense)) &&
            (this.Hp >= other.Hp || !statsMask.HasFlag(StatsFilter.Hp)));
 }
Ejemplo n.º 6
0
        public Stats(StatsFilter bonusType, Monster vsMonster)
        {
            this.OriginalItem = null;

            this.Damage       = 0;
            this.Accuracy     = 0;
            this.CriticalRate = 0;
            this.Defense      = 0;
            this.MagicDefense = 0;
            this.Hp           = 0;

            if (bonusType == StatsFilter.Damage)
            {
                this.Damage = 1 / (1 + vsMonster.Defense / 100.0);
            }
            if (bonusType == StatsFilter.MagicAttack)
            {
                this.Damage = 1 / (1 + vsMonster.MagicDefense / 100.0);
            }

            if (bonusType == StatsFilter.Accuracy)
            {
                this.Accuracy = 0.01;
            }
            if (bonusType == StatsFilter.CriticalRate)
            {
                this.CriticalRate = 0.01;
            }
            if (bonusType == StatsFilter.Defense)
            {
                this.Defense = 0.01;
            }
            if (bonusType == StatsFilter.MagicDefense)
            {
                this.MagicDefense = 0.01;
            }
            if (bonusType == StatsFilter.Hp)
            {
                this.Hp = 1;
            }
        }
Ejemplo n.º 7
0
        private void CheckSelection(object o)
        {
            switch (Convert.ToInt32(o))
            {
            case 1:
                if (ItemTypeFilterTabContent == null)
                {
                    ItemTypeFilterTabContent = new ItemTypeFilter(this);
                }
                ((ItemTypeFilterTabContent as ItemTypeFilter).DataContext as ItemTypeFilterControl).FilterEnabled = true;
                break;

            case 2:
                if (WeaponFilterTabContent == null)
                {
                    WeaponFilterTabContent = new WeaponFilter(this);
                }
                ((WeaponFilterTabContent as WeaponFilter).DataContext as WeaponFilterControl).FilterEnabled = true;
                break;

            case 3:
                if (ArmourFilterTabContent == null)
                {
                    ArmourFilterTabContent = new ArmourFilter(this);
                }
                ((ArmourFilterTabContent as ArmourFilter).DataContext as ArmourFilterControl).FilterEnabled = true;
                break;

            case 4:
                if (SocketFilterTabContent == null)
                {
                    SocketFilterTabContent = new SocketFilter(this);
                }
                ((SocketFilterTabContent as SocketFilter).DataContext as SocketFilterControl).FilterEnabled = true;
                break;

            case 5:
                if (RequirementFilterTabContent == null)
                {
                    RequirementFilterTabContent = new RequirementsFilter(this);
                }
                ((RequirementFilterTabContent as RequirementsFilter).DataContext as RequirementsFilterControl).FilterEnabled = true;
                break;

            case 6:
                if (MapFilterTabContent == null)
                {
                    MapFilterTabContent = new MapFilter(this);
                }
                ((MapFilterTabContent as MapFilter).DataContext as MapFilterControl).FilterEnabled = true;
                break;

            case 7:
                if (MiscellaneousFilterTabContent == null)
                {
                    MiscellaneousFilterTabContent = new MiscellaneousFilter(this);
                }
                ((MiscellaneousFilterTabContent as MiscellaneousFilter).DataContext as MiscellaneousFilterControl).FilterEnabled = true;
                break;

            case 8:
                if (StatsFilterTabContent == null)
                {
                    StatsFilterTabContent = new StatsFilter(this);
                }
                ((StatsFilterTabContent as StatsFilter).DataContext as StatsFilterControl).FilterEnabled = true;
                break;
            }
        }
 public static Dictionary<ItemSlot, Stats[]> RelevantFor(Hero hero, int maxItemLevel, Monster monster, StatsFilter statsMask)
 {
     return removeRedundantItems(
         MakeItems(maxItemLevel),
         hero, monster, statsMask);
 }
Ejemplo n.º 9
0
 public bool isSuperiorTo(Stats other, StatsFilter statsMask)
 {
     return (this.Damage >= other.Damage || !statsMask.HasFlag(StatsFilter.Damage)) &&
         (this.Accuracy >= other.Accuracy || !statsMask.HasFlag(StatsFilter.Accuracy)) &&
         (this.CriticalRate >= other.CriticalRate || !statsMask.HasFlag(StatsFilter.CriticalRate)) &&
         (this.Defense >= other.Defense || !statsMask.HasFlag(StatsFilter.Defense)) &&
         (this.MagicDefense >= other.MagicDefense || !statsMask.HasFlag(StatsFilter.MagicDefense)) &&
         (this.Hp >= other.Hp || !statsMask.HasFlag(StatsFilter.Hp));
 }
 public void TestUnknownDeckId()
 {
     var filter = new StatsFilter(new Guid(), StatsRegion.All, GameMode.All, TimeFrame.AllTime);
     var filtered = filter.Apply(stats);
     Assert.AreEqual(0, filtered.Count);
 }
 public void TestTimeFrameFilter()
 {
     var filter = new StatsFilter(null, StatsRegion.All, GameMode.All, TimeFrame.Last7Days);
     var filtered = filter.Apply(stats);
     Assert.AreEqual(7, filtered.Count);
 }
 public void TestSingleDeckNoStats()
 {
     var filter = new StatsFilter(empty, StatsRegion.All, GameMode.All, TimeFrame.AllTime);
     var filtered = filter.Apply(stats);
     Assert.AreEqual(0, filtered.Count);
 }
 public void TestRegionFilter()
 {
     var filter = new StatsFilter(null, StatsRegion.EU, GameMode.All, TimeFrame.AllTime);
     var filtered = filter.Apply(stats);
     Assert.AreEqual(5, filtered.Count);
 }
 public void TestDefaultFilterReturnsAll()
 {
     var filter = new StatsFilter();
     var filtered = filter.Apply(stats);
     Assert.AreEqual(9, filtered.Count);
 }
Ejemplo n.º 15
0
        private static Dictionary <ItemSlot, Stats[]> removeRedundantItems(IEnumerable <Item> items, Hero hero, Monster monster, StatsFilter statsMask)
        {
            var itemGroups    = items.Select(x => new Stats(x, hero, monster)).GroupBy(x => x.OriginalItem.Slot);
            var filteredItems = new Dictionary <ItemSlot, Stats[]>();

            foreach (var itemGroup in itemGroups)
            {
                var filteredList = new List <Stats>();
                foreach (var item in itemGroup)
                {
                    bool redundant  = false;
                    var  superiorTo = new HashSet <Stats>();
                    foreach (var filteredItem in filteredList)
                    {
                        if (item.isSuperiorTo(filteredItem, statsMask))
                        {
                            superiorTo.Add(filteredItem);
                        }
                        redundant |= item.isInferiorTo(filteredItem, statsMask);
                    }
                    foreach (var toRemove in superiorTo)
                    {
                        filteredList.Remove(toRemove);
                    }
                    if (!redundant)
                    {
                        filteredList.Add(item);
                    }
                }

                if (filteredList.Count == 0)
                {
                    var maxDamage = itemGroup.Max(x => x.Damage);
                    filteredList.Add(itemGroup.First(x => Math.Abs(x.Damage - maxDamage) < 1e-3));
                }

                filteredItems.Add(itemGroup.Key, filteredList.ToArray());
            }

            return(filteredItems);
        }
Ejemplo n.º 16
0
 public static Dictionary <ItemSlot, Stats[]> RelevantFor(Hero hero, int maxItemLevel, Monster monster, StatsFilter statsMask)
 {
     return(removeRedundantItems(
                MakeItems(maxItemLevel),
                hero, monster, statsMask));
 }