private static CraftingSubcondition CreateCraftingSubcondition(SubconditionAggregateType aggregateType, StatValueType statType, int?min, int?max, params ConditionAffix[] affixes) { CraftingSubcondition subcondition = new CraftingSubcondition { AggregateType = aggregateType, AggregateMin = min, AggregateMax = max, ValueType = statType }; subcondition.PrefixConditions.AddRange(affixes.ToList()); return(subcondition); }
public void AddSubcondition() { var subcondition = new CraftingSubcondition(); var subconditionControl = new SubconditionControl(subcondition, _affixes, GetNextIndex(), _itemBase); subconditionControl.OnDeleteEvent += (x, y) => RemoveSubcondition(y.Control); _craftingCondition.CraftingSubConditions.Add(subcondition); SubconditionControls.Add(subconditionControl); SelectedSubcondition = subconditionControl; OnPropertyChanged(nameof(SelectedSubcondition)); OnPropertyChanged(nameof(SubconditionControls)); }
public SubconditionControl(CraftingSubcondition subCondition, List <Affix> affixes, int index, ItemBase itemBase) { SubconditionName = string.IsNullOrEmpty(subCondition.Name) ? "Subcondition " + index : subCondition.Name; Index = index; SubCondition = subCondition; AggregateTypeMin = subCondition.AggregateMin; AggregateTypeMax = subCondition.AggregateMax; PrefixConditions = new SubconditionAffixesControl(subCondition.PrefixConditions, affixes, AffixType.Prefix, itemBase, subCondition.ValueType); SuffixConditions = new SubconditionAffixesControl(subCondition.SuffixConditions, affixes, AffixType.Suffix, itemBase, subCondition.ValueType); MetaConditions = new SubconditionAffixesControl(subCondition.MetaConditions, affixes, AffixType.Meta, itemBase, subCondition.ValueType); SelectedAggregateType = subCondition.AggregateType.ToString(); SelectedValueType = subCondition.ValueType.ToString(); DataContext = this; InitializeComponent(); }
private bool IsSubconditionValid(CraftingSubcondition subcondition, Equipment item) { var prefixResolutions = subcondition.PrefixConditions.Select( x => ResolveCondition(x, item, AffixType.Prefix, subcondition.ValueType)).ToList(); var suffixResolutions = subcondition.SuffixConditions.Select( x => ResolveCondition(x, item, AffixType.Suffix, subcondition.ValueType)).ToList(); var metaResolutions = subcondition.MetaConditions.Select( x => ResolveCondition(x, item, AffixType.Meta, subcondition.ValueType)).ToList(); var allResolutions = prefixResolutions .Concat(suffixResolutions) .Concat(metaResolutions) .ToList(); var matched = allResolutions.Count(x => x.IsMatch); var sum = allResolutions.Where(x => x.IsPresent).Sum(x => x.Values.Sum()); switch (subcondition.AggregateType) { case SubconditionAggregateType.Count: return((!subcondition.AggregateMin.HasValue || matched >= subcondition.AggregateMin) && (!subcondition.AggregateMax.HasValue || matched <= subcondition.AggregateMax)); case SubconditionAggregateType.And: return(allResolutions.All(x => x.IsPresent && x.IsMatch)); case SubconditionAggregateType.If: return(allResolutions.Where(x => x.IsPresent).All(x => x.IsMatch)); case SubconditionAggregateType.Not: return(!allResolutions.Any(x => x.IsMatch)); case SubconditionAggregateType.Sum: return((!subcondition.AggregateMin.HasValue || sum >= subcondition.AggregateMin) && (!subcondition.AggregateMax.HasValue || sum <= subcondition.AggregateMax)); default: throw new InvalidOperationException($"The subcondition aggregate type {Enum.GetName(typeof(SubconditionAggregateType), subcondition.AggregateType)} is not recognized"); } }
public SubconditionControlViewModel(CraftingSubcondition subCondition, List <Affix> affixes, int index, PoeCrafting.Entities.ItemBase itemBase) { SubconditionName = string.IsNullOrEmpty(subCondition.Name) ? "JsonSubcondition " + index : subCondition.Name; Index = index; SubCondition = subCondition; AggregateTypeMin = subCondition.AggregateMin; AggregateTypeMax = subCondition.AggregateMax; PrefixConditionsModel = new SubconditionAffixesControlViewModel(subCondition.PrefixConditions, affixes, AffixType.Prefix, itemBase, subCondition.ValueType); SuffixConditionsModel = new SubconditionAffixesControlViewModel(subCondition.SuffixConditions, affixes, AffixType.Suffix, itemBase, subCondition.ValueType); MetaConditionsModel = new SubconditionAffixesControlViewModel(subCondition.MetaConditions, affixes, AffixType.Meta, itemBase, subCondition.ValueType); PrefixConditions = new SubconditionAffixesControlView(PrefixConditionsModel); SuffixConditions = new SubconditionAffixesControlView(SuffixConditionsModel); MetaConditions = new SubconditionAffixesControlView(MetaConditionsModel); SelectedAggregateType = subCondition.AggregateType.ToString(); SelectedValueType = subCondition.ValueType.ToString(); }