Exemplo n.º 1
0
 private void ClearPseudoAttributeConstraints()
 {
     _addedPseudoAttributes.Clear();
     PseudoAttributeConstraints.Clear();
     PseudoAttributesView.Refresh();
     PseudoAttributesView.MoveCurrentToFirst();
     NewPseudoAttributeConstraint =
         new PseudoAttributeConstraint(PseudoAttributesView.CurrentItem as PseudoAttribute);
 }
Exemplo n.º 2
0
 /// <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);
 }
Exemplo n.º 3
0
        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)));
        }
Exemplo n.º 4
0
        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));
        }
Exemplo n.º 5
0
 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;
 }
Exemplo n.º 6
0
        /// <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;
            }
        }