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); }
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); }
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); } }
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); }
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); }