private void ClearPseudoAttributeConstraints() { _addedPseudoAttributes.Clear(); PseudoAttributeConstraints.Clear(); PseudoAttributesView.Refresh(); PseudoAttributesView.MoveCurrentToFirst(); NewPseudoAttributeConstraint = new PseudoAttributeConstraint(PseudoAttributesView.CurrentItem as PseudoAttribute); }
/// <summary> /// Reloads the possible PseudoAttributes from the filesystem. /// Resets PseudoAttributeConstraints entered by the user. /// </summary> private void ReloadPseudoAttributes() { _addedPseudoAttributes.Clear(); _pseudoAttributes.Clear(); foreach (var pseudo in _pseudoAttributeLoader.LoadPseudoAttributes()) { _pseudoAttributes.Add(pseudo); } PseudoAttributeConstraints.Clear(); PseudoAttributesView.MoveCurrentToFirst(); NewPseudoAttributeConstraint = new PseudoAttributeConstraint(PseudoAttributesView.CurrentItem as PseudoAttribute); }
public override ISolver CreateSolver(SolverSettings settings) { var attributeConstraints = AttributeConstraints.ToDictionary( constraint => constraint.Data, constraint => new Tuple <float, double>(constraint.TargetValue, constraint.Weight / 100.0)); var pseudoConstraints = PseudoAttributeConstraints.ToDictionary( constraint => constraint.Data, constraint => new Tuple <float, double>(constraint.TargetValue, constraint.Weight / 100.0)); return(new AdvancedSolver(Tree, new AdvancedSolverSettings(settings, CreateInitialAttributes(), attributeConstraints, pseudoConstraints, WeaponClass, Tags, OffHand))); }
protected override Task <ISolver> CreateSolverAsync(SolverSettings settings) { var attributeConstraints = AttributeConstraints.ToDictionary( constraint => constraint.Data, constraint => new Tuple <float, double>(constraint.TargetValue, constraint.Weight / 100.0)); var pseudoConstraints = PseudoAttributeConstraints.ToDictionary( constraint => constraint.Data, constraint => new Tuple <float, double>(constraint.TargetValue, constraint.Weight / 100.0)); var solver = new AdvancedSolver(Tree, new AdvancedSolverSettings(settings, TotalPoints, CreateInitialAttributes(), attributeConstraints, pseudoConstraints, WeaponClass.Value, Tags.Value, OffHand.Value)); return(Task.FromResult <ISolver>(solver)); }
public override void Reset() { _addedAttributes.Clear(); AttributeConstraints.Clear(); AttributesView.Refresh(); AttributesView.MoveCurrentToFirst(); NewAttributeConstraint = new AttributeConstraint(AttributesView.CurrentItem as string); _addedPseudoAttributes.Clear(); PseudoAttributeConstraints.Clear(); PseudoAttributesView.Refresh(); PseudoAttributesView.MoveCurrentToFirst(); NewPseudoAttributeConstraint = new PseudoAttributeConstraint(PseudoAttributesView.CurrentItem as PseudoAttribute); TreePlusItemsMode = TreePlusItemsModeDefaultValue; WeaponClass = WeaponClassDefaultValue; OffHand = OffHandDefaultValue; Tags = TagsDefaultValue; }
/// <summary> /// Converts attribute constraints to pseudo attribute constraints with the set Tags, WeaponClass, /// OffHand and check-tagged keystones where possible. /// Str, Int and Dex are not removed from the attribute constraint list but still converted. /// </summary> private void ConverteAttributeToPseudoAttributeConstraints() { var keystones = from node in Tree.GetCheckedNodes() where node.Type == NodeType.Keystone select node.Name; var conditionSettings = new ConditionSettings(Tags.Value, OffHand.Value, keystones.ToArray(), WeaponClass.Value); var convertedConstraints = new List <AttributeConstraint>(); foreach (var attributeConstraint in AttributeConstraints) { var attrName = attributeConstraint.Data; // Select the pseudo attributes and the multiplier for attributes which match the given one and evaluate to true. var pseudos = from pseudo in _pseudoAttributes let matches = (from attr in pseudo.Attributes where attr.MatchesAndEvaluates(conditionSettings, attrName) select attr) where matches.Any() select new { PseudoAttribute = pseudo, Multiplier = matches.First().ConversionMultiplier }; // Add attribute target and weight to the pseudo attributes. var converted = false; foreach (var pseudo in pseudos) { var pseudoAttribute = pseudo.PseudoAttribute; converted = true; if (_addedPseudoAttributes.Contains(pseudoAttribute)) { foreach (var pseudoAttributeConstraint in PseudoAttributeConstraints) { if (pseudoAttributeConstraint.Data == pseudoAttribute) { pseudoAttributeConstraint.TargetValue += attributeConstraint.TargetValue * pseudo.Multiplier; } } } else { _addedPseudoAttributes.Add(pseudoAttribute); PseudoAttributeConstraints.Add(new PseudoAttributeConstraint(pseudoAttribute) { TargetValue = attributeConstraint.TargetValue * pseudo.Multiplier }); } } if (converted && attrName != "+# to Intelligence" && attrName != "+# to Dexterity" && attrName != "+# to Strength") { convertedConstraints.Add(attributeConstraint); } } // Update the attribute constraint related collections. foreach (var convertedConstraint in convertedConstraints) { _addedAttributes.Remove(convertedConstraint.Data); AttributeConstraints.Remove(convertedConstraint); } if (convertedConstraints.Count > 0) { AttributesView.Refresh(); NewAttributeConstraint = convertedConstraints[0]; PseudoAttributesView.Refresh(); PseudoAttributesView.MoveCurrentToFirst(); NewPseudoAttributeConstraint.Data = PseudoAttributesView.CurrentItem as PseudoAttribute; } }