Exemple #1
0
        private void InitializeModifierFilter <T>(PriceFilterCategory category,
                                                  string id,
                                                  string label,
                                                  T value,
                                                  double delta         = 5,
                                                  bool enabled         = false,
                                                  double?min           = null,
                                                  double?max           = null,
                                                  bool normalizeValues = true)
        {
            ModifierOption option = null;

            if (value is List <double> groupValue)
            {
                var itemValue = groupValue.OrderBy(x => x).FirstOrDefault();

                if (itemValue >= 0)
                {
                    min = itemValue;
                    if (normalizeValues)
                    {
                        min = NormalizeMinValue(min, delta);
                    }
                }
                else
                {
                    max = itemValue;
                    if (normalizeValues)
                    {
                        max = NormalizeMaxValue(max, delta);
                    }
                }

                if (!groupValue.Any())
                {
                    min = null;
                    max = null;
                }
            }

            var priceFilter = new PriceFilter()
            {
                Enabled      = enabled,
                PropertyType = null,
                Id           = id,
                Text         = label,
                Min          = min,
                Max          = max,
                HasRange     = min.HasValue || max.HasValue,
                Option       = option,
            };

            priceFilter.PropertyChanged += (object sender, PropertyChangedEventArgs e) => { UpdateDebounce(); };

            category.Filters.Add(priceFilter);
        }
Exemple #2
0
        private void InitializeModifierFilters(List <Modifier> modifiers, bool normalizeValues = true)
        {
            if (modifiers.Count == 0)
            {
                return;
            }

            PriceFilterCategory category = null;

            var settingMods = Item.Category switch
            {
                Category.Accessory => settings.Price_Mods_Accessory,
                Category.Armour => settings.Price_Mods_Armour,
                Category.Flask => settings.Price_Mods_Flask,
                Category.Jewel => settings.Price_Mods_Jewel,
                Category.Map => settings.Price_Mods_Map,
                Category.Weapon => settings.Price_Mods_Weapon,
                _ => new List <string>(),
            };

            foreach (var modifier in modifiers)
            {
                if (category == null)
                {
                    category = new PriceFilterCategory();
                }

                if (modifier.OptionValue != null)
                {
                    InitializeModifierFilter(category,
                                             modifier.Id,
                                             !string.IsNullOrEmpty(modifier.Category) ? $"({modifier.Category}) {modifier.Text}" : modifier.Text,
                                             modifier.OptionValue,
                                             normalizeValues: normalizeValues,
                                             enabled: settingMods.Contains(modifier.Id) && Item.Rarity != Rarity.Unique
                                             );
                }
                else
                {
                    InitializeModifierFilter(category,
                                             modifier.Id,
                                             !string.IsNullOrEmpty(modifier.Category) ? $"({modifier.Category}) {modifier.Text}" : modifier.Text,
                                             modifier.Values,
                                             normalizeValues: normalizeValues,
                                             enabled: settingMods.Contains(modifier.Id) && Item.Rarity != Rarity.Unique
                                             );
                }
            }

            if (category != null)
            {
                Filters.Add(category);
            }
        }
Exemple #3
0
        private void InitializePropertyFilter <T>(PriceFilterCategory category,
                                                  PropertyFilterType type,
                                                  string label,
                                                  T value,
                                                  double delta         = 5,
                                                  bool enabled         = false,
                                                  double?min           = null,
                                                  double?max           = null,
                                                  bool alwaysIncluded  = false,
                                                  bool normalizeValues = true)
        {
            if (value is bool boolValue)
            {
                if (!boolValue && !alwaysIncluded)
                {
                    return;
                }
            }
            else if (value is int intValue)
            {
                if (intValue == 0 && !alwaysIncluded)
                {
                    return;
                }
                if (min == null && normalizeValues)
                {
                    min = NormalizeMinValue(intValue, delta);
                }
                if (LabelValues.IsMatch(label))
                {
                    label = LabelValues.Replace(label, intValue.ToString());
                }
                else
                {
                    label += $": {value}";
                }
            }
            else if (value is double doubleValue)
            {
                if (doubleValue == 0 && !alwaysIncluded)
                {
                    return;
                }
                if (min == null && normalizeValues)
                {
                    min = NormalizeMinValue(doubleValue, delta);
                }
                if (LabelValues.IsMatch(label))
                {
                    label = LabelValues.Replace(label, doubleValue.ToString("0.00"));
                }
                else
                {
                    label += $": {doubleValue:0.00}";
                }
            }

            var priceFilter = new PriceFilter()
            {
                Enabled      = enabled,
                PropertyType = type,
                Text         = label,
                Min          = min,
                Max          = max,
                HasRange     = min.HasValue || max.HasValue,
                Option       = null,
            };

            priceFilter.PropertyChanged += (object sender, PropertyChangedEventArgs e) => { UpdateDebounce(); };

            category.Filters.Add(priceFilter);
        }
Exemple #4
0
        private void InitializeFilters()
        {
            // No filters for prophecies, currencies and divination cards, etc.
            if (Item.Category == Category.DivinationCard ||
                Item.Category == Category.Currency ||
                Item.Category == Category.Prophecy ||
                Item.Category == Category.ItemisedMonster ||
                Item.Category == Category.Leaguestone ||
                Item.Category == Category.Watchstone ||
                Item.Category == Category.Undefined)
            {
                Filters = null;
                return;
            }

            Filters = new ObservableList <PriceFilterCategory>();

            var propertyCategory1 = new PriceFilterCategory();
            var propertyCategory2 = new PriceFilterCategory();

            // Quality
            InitializePropertyFilter(propertyCategory1, PropertyFilterType.Misc_Quality, gameLanguageProvider.Language.DescriptionQuality, Item.Properties.Quality,
                                     enabled: Item.Rarity == Rarity.Gem,
                                     min: Item.Rarity == Rarity.Gem && Item.Properties.Quality >= 20 ? (double?)Item.Properties.Quality : null);

            // Armour
            InitializePropertyFilter(propertyCategory1, PropertyFilterType.Armour_Armour, gameLanguageProvider.Language.DescriptionArmour, Item.Properties.Armor);
            // Evasion
            InitializePropertyFilter(propertyCategory1, PropertyFilterType.Armour_Evasion, gameLanguageProvider.Language.DescriptionEvasion, Item.Properties.Evasion);
            // Energy shield
            InitializePropertyFilter(propertyCategory1, PropertyFilterType.Armour_EnergyShield, gameLanguageProvider.Language.DescriptionEnergyShield, Item.Properties.EnergyShield);
            // Block
            InitializePropertyFilter(propertyCategory1, PropertyFilterType.Armour_Block, gameLanguageProvider.Language.DescriptionChanceToBlock, Item.Properties.ChanceToBlock,
                                     delta: 1);

            // Gem level
            InitializePropertyFilter(propertyCategory1, PropertyFilterType.Misc_GemLevel, gameLanguageProvider.Language.DescriptionLevel, Item.Properties.GemLevel,
                                     enabled: true,
                                     min: Item.Properties.GemLevel);

            // Item quantity
            InitializePropertyFilter(propertyCategory1, PropertyFilterType.Map_ItemQuantity, gameLanguageProvider.Language.DescriptionItemQuantity, Item.Properties.ItemQuantity);
            // Item rarity
            InitializePropertyFilter(propertyCategory1, PropertyFilterType.Map_ItemRarity, gameLanguageProvider.Language.DescriptionItemRarity, Item.Properties.ItemRarity);
            // Monster pack size
            InitializePropertyFilter(propertyCategory1, PropertyFilterType.Map_MonsterPackSize, gameLanguageProvider.Language.DescriptionMonsterPackSize, Item.Properties.MonsterPackSize);
            // Blighted
            InitializePropertyFilter(propertyCategory1, PropertyFilterType.Map_Blighted, gameLanguageProvider.Language.PrefixBlighted, Item.Properties.Blighted,
                                     enabled: Item.Properties.Blighted);
            // Map tier
            InitializePropertyFilter(propertyCategory1, PropertyFilterType.Map_Tier, gameLanguageProvider.Language.DescriptionMapTier, Item.Properties.MapTier,
                                     enabled: true,
                                     min: Item.Properties.MapTier);

            // Physical Dps
            InitializePropertyFilter(propertyCategory1, PropertyFilterType.Weapon_PhysicalDps, PriceResources.Filters_PDps, Item.Properties.PhysicalDps);
            // Elemental Dps
            InitializePropertyFilter(propertyCategory1, PropertyFilterType.Weapon_ElementalDps, PriceResources.Filters_EDps, Item.Properties.ElementalDps);
            // Total Dps
            InitializePropertyFilter(propertyCategory1, PropertyFilterType.Weapon_Dps, PriceResources.Filters_Dps, Item.Properties.DamagePerSecond);
            // Attacks per second
            InitializePropertyFilter(propertyCategory1, PropertyFilterType.Weapon_AttacksPerSecond, gameLanguageProvider.Language.DescriptionAttacksPerSecond, Item.Properties.AttacksPerSecond,
                                     delta: 0.1);
            // Critical strike chance
            InitializePropertyFilter(propertyCategory1, PropertyFilterType.Weapon_CriticalStrikeChance, gameLanguageProvider.Language.DescriptionCriticalStrikeChance, Item.Properties.CriticalStrikeChance,
                                     delta: 1);

            // Item level
            InitializePropertyFilter(propertyCategory2, PropertyFilterType.Misc_ItemLevel, gameLanguageProvider.Language.DescriptionItemLevel, Item.ItemLevel,
                                     enabled: Item.ItemLevel >= 80 && Item.Properties.MapTier == 0 && Item.Rarity != Rarity.Unique,
                                     min: Item.ItemLevel >= 80 ? (double?)Item.ItemLevel : null);

            // Corrupted
            InitializePropertyFilter(propertyCategory2, PropertyFilterType.Misc_Corrupted, gameLanguageProvider.Language.DescriptionCorrupted, Item.Corrupted,
                                     alwaysIncluded: Item.Rarity == Rarity.Gem || Item.Rarity == Rarity.Unique,
                                     enabled: (Item.Rarity == Rarity.Gem || Item.Rarity == Rarity.Unique || Item.Rarity == Rarity.Rare) && Item.Corrupted);

            // Crusader
            InitializePropertyFilter(propertyCategory2, PropertyFilterType.Influence_Crusader, gameLanguageProvider.Language.InfluenceCrusader, Item.Influences.Crusader,
                                     enabled: Item.Influences.Crusader);
            // Elder
            InitializePropertyFilter(propertyCategory2, PropertyFilterType.Influence_Elder, gameLanguageProvider.Language.InfluenceElder, Item.Influences.Elder,
                                     enabled: Item.Influences.Elder);
            // Hunter
            InitializePropertyFilter(propertyCategory2, PropertyFilterType.Influence_Hunter, gameLanguageProvider.Language.InfluenceHunter, Item.Influences.Hunter,
                                     enabled: Item.Influences.Hunter);
            // Redeemer
            InitializePropertyFilter(propertyCategory2, PropertyFilterType.Influence_Redeemer, gameLanguageProvider.Language.InfluenceRedeemer, Item.Influences.Redeemer,
                                     enabled: Item.Influences.Redeemer);
            // Shaper
            InitializePropertyFilter(propertyCategory2, PropertyFilterType.Influence_Shaper, gameLanguageProvider.Language.InfluenceShaper, Item.Influences.Shaper,
                                     enabled: Item.Influences.Shaper);
            // Warlord
            InitializePropertyFilter(propertyCategory2, PropertyFilterType.Influence_Warlord, gameLanguageProvider.Language.InfluenceWarlord, Item.Influences.Warlord,
                                     enabled: Item.Influences.Warlord);

            if (propertyCategory1.Filters.Any())
            {
                Filters.Add(propertyCategory1);
            }

            if (propertyCategory2.Filters.Any())
            {
                Filters.Add(propertyCategory2);
            }

            // Modifiers
            InitializeModifierFilters(Item.Modifiers.Pseudo);
            InitializeModifierFilters(Item.Modifiers.Enchant, false);
            InitializeModifierFilters(Item.Modifiers.Implicit);
            InitializeModifierFilters(Item.Modifiers.Explicit);
            InitializeModifierFilters(Item.Modifiers.Crafted);
            InitializeModifierFilters(Item.Modifiers.Fractured);

            if (Filters.Count == 0)
            {
                Filters = null;
            }
        }