Example #1
0
        public MappingResults MapEverything(IList <IList <IEquipment> > allEquipment, IAbility[] desiredAbilities, IEnumerable <SolverDataJewelModel> jewels, bool createNullEquipments)
        {
            var results = new MappingResults();

            results.DesiredAbilities = MapDesiredAbilities(desiredAbilities);
            IDictionary <int, int> desiredDict = results.DesiredAbilities.ToDictionary(x => x.SkillId, x => x.MappedId);

            results.SetParts  = MapSkillParts(allEquipment, desiredDict, results.DesiredAbilities);
            results.Equipment = MapAllEquipment(allEquipment, desiredDict, results, createNullEquipments);
            results.Jewels    = MapJewels(jewels, desiredDict, results.DesiredAbilities);
            return(results);
        }
Example #2
0
        public MappedEquipment[] MapSupersets(IList <SupersetInfo> supersets, MappingResults existingResults)
        {
            IDictionary <int, int> desiredDict = existingResults.DesiredAbilities.ToDictionary(x => x.SkillId, x => x.MappedId);
            var equipments = supersets.Select(x => x.Equipment).ToList();

            MappedEquipment[] mappedEquipments = MapEquipments(equipments, desiredDict, existingResults, false);
            for (int i = 0; i < mappedEquipments.Length; i++)
            {
                MappedEquipment equipment     = mappedEquipments[i];
                int             maxSkills     = supersets[i].MaxSkills;
                int             abilityLevels = equipment.Skills.Sum(x => x.Level);
                equipment.SkillDebt = abilityLevels - maxSkills;
            }
            return(mappedEquipments);
        }
Example #3
0
 public Combination(MappedEquipment[] initialEquipment, int[] weaponSlots, MappingResults results)
 {
     Equipments = initialEquipment.ToArray();
     Slots      = new int[CutoffSearchConstants.Slots + 1];
     foreach (int weaponSlot in weaponSlots)
     {
         Slots[weaponSlot]++;
     }
     Grants                 = results.SetParts.Select(x => new ArmorSetSkillGrant(x)).ToArray();
     RemainingSkills        = results.DesiredAbilities.Select(x => x.Level).ToArray();
     ExcludedAbilityIndices = results.DesiredAbilities.Where(x => x.Level == 0).Select(x => x.MappedId).ToArray();
     Jewels                 = results.Jewels;
     foreach (MappedEquipment equipment in initialEquipment)
     {
         Add(equipment);
     }
 }
Example #4
0
        private MappedEquipment[] MapEquipments(IList <IEquipment> equipments, IDictionary <int, int> desiredDict, MappingResults results, bool createNullEquipment)
        {
            int startingIndex = 0;
            int count         = equipments.Count;

            if (createNullEquipment)
            {
                startingIndex = 1;
                count++;
            }
            var mappedEquipments = new MappedEquipment[count];

            if (createNullEquipment)
            {
                var nullEquipment = new MappedEquipment();
                nullEquipment.Skills     = new MappedSkill[0];
                nullEquipment.SkillParts = new MappedSkillPart[0];
                mappedEquipments[0]      = nullEquipment;
            }
            for (int j = startingIndex; j < count; j++)
            {
                IEquipment equipment       = equipments[j - startingIndex];
                var        mappedEquipment = new MappedEquipment();
                mappedEquipments[j]       = mappedEquipment;
                mappedEquipment.Equipment = equipment;
                mappedEquipment.Skills    = equipment.Abilities
                                            .Where(x => desiredDict.ContainsKey(x.Skill.Id))
                                            .Select(x => results.DesiredAbilities[desiredDict[x.Skill.Id]].CopyWithLevel(x.Level))
                                            .ToArray();
                mappedEquipment.SkillParts = new MappedSkillPart[0];
                if (equipment.Type == EquipmentType.Charm)
                {
                    continue;
                }
                var armor = (IArmorPiece)equipment;
                if (armor.ArmorSetSkills == null)
                {
                    continue;
                }
                var containedPartIDs = new HashSet <int>(armor.ArmorSetSkills.SelectMany(x => x.Parts).Select(x => x.Id));
                mappedEquipment.SkillParts = results.SetParts.Where(x => containedPartIDs.Contains(x.Part.Id)).ToArray();
            }
            return(mappedEquipments);
        }
Example #5
0
        private MappedEquipment[][] MapAllEquipment(IList <IList <IEquipment> > allEquipment, IDictionary <int, int> desiredDict, MappingResults results, bool createNullEquipments)
        {
            var allMapped = new MappedEquipment[allEquipment.Count][];

            for (int i = 0; i < allEquipment.Count; i++)
            {
                IList <IEquipment> equipments = allEquipment[i];
                allMapped[i] = MapEquipments(equipments, desiredDict, results, createNullEquipments);
            }
            return(allMapped);
        }