Beispiel #1
0
 public virtual List<ComparisonCalculationBase> GetTinkeringCalculations(ItemSlot slot, Character character, CharacterCalculationsBase currentCalcs, bool equippedOnly, bool forceSlotName=false)
 {
     ClearCache();
     List<ComparisonCalculationBase> tinkerCalcs = new List<ComparisonCalculationBase>();
     CharacterCalculationsBase calcsEquipped = null;
     CharacterCalculationsBase calcsUnequipped = null;
     // only need to get unequipped value once not every time around the loop
     Character charUnequipped = character.Clone();
     charUnequipped.SetTinkeringBySlot(slot, null);
     calcsUnequipped = GetCharacterCalculations(charUnequipped, null, false, false, false);
     foreach (Tinkering tinkering in Tinkering.FindTinkerings(slot, character))
     {
         bool isEquipped = character.GetTinkeringBySlot(slot) == tinkering;
         if (equippedOnly && !isEquipped) continue;
         Character charEquipped = character.Clone();
         charEquipped.SetTinkeringBySlot(slot, tinkering);
         calcsEquipped = GetCharacterCalculations(charEquipped, null, false, false, false);
         ComparisonCalculationBase tinkeringCalc = CreateNewComparisonCalculation();
         tinkeringCalc.Name = forceSlotName || equippedOnly ? string.Format("{0} ({1})", tinkering.Name, slot) : tinkering.Name;
         tinkeringCalc.Item = new Item(tinkering.Name, ItemQuality.Temp, ItemType.None,
             -1 * (tinkering.Id + ((int)AvailableItemIDModifiers.Tinkerings * (int)tinkering.Slot)), null, ItemSlot.None, null,
             false, tinkering.Stats, null, ItemSlot.None, ItemSlot.None, ItemSlot.None,
             0, 0, ItemDamageType.Physical, 0, null);
         tinkeringCalc.Item.Name = forceSlotName || equippedOnly ? string.Format("{0} ({1})", tinkering.Name, slot) : tinkering.Name; ;
         tinkeringCalc.Item.Stats = tinkering.Stats;
         tinkeringCalc.Equipped = isEquipped;
         tinkeringCalc.OverallPoints = calcsEquipped.OverallPoints - calcsUnequipped.OverallPoints;
         float[] subPoints = new float[calcsEquipped.SubPoints.Length];
         for (int i = 0; i < calcsEquipped.SubPoints.Length; i++)
         {
             subPoints[i] = calcsEquipped.SubPoints[i] - calcsUnequipped.SubPoints[i];
         }
         tinkeringCalc.SubPoints = subPoints;
         tinkeringCalc.ImageSource = tinkering.IconSource;
         tinkerCalcs.Add(tinkeringCalc);
         if (equippedOnly && isEquipped) break;
     }
     return tinkerCalcs;
 }