comparison api/Util/UnitEquipmentUtil.cs @ 187:104a683b5ef8

Re #198: Add equipment slots * Fix problem with shared "get limit" method not handling min and max properly * Add method to get percentage limit
author IBBoard <dev@ibboard.co.uk>
date Tue, 27 Oct 2009 20:53:27 +0000
parents c8682d206a73
children 354d51cc002b
comparison
equal deleted inserted replaced
186:c8682d206a73 187:104a683b5ef8
99 99
100 return areMutex; 100 return areMutex;
101 } 101 }
102 102
103 public static int GetMaxEquipmentCount (Unit unit, UnitEquipmentItem equip) 103 public static int GetMaxEquipmentCount (Unit unit, UnitEquipmentItem equip)
104 { 104 {
105 return GetEquipmentCountLimit (unit, equip); 105 int unitSize = unit.Size;
106 int max = Math.Max(equip.MinLimit.GetLimit(unitSize), equip.MaxLimit.GetLimit (unitSize));
107 return GetEquipmentCountLimit (unit, max, equip);
106 } 108 }
107 109
108 private static int GetEquipmentCountLimit (Unit unit, UnitEquipmentItem equip) 110 private static int GetEquipmentCountLimit (Unit unit, int currLimit, UnitEquipmentItem equip)
109 { 111 {
110 int unitSize = unit.Size; 112 int newLimit = currLimit;
111 int max = Math.Min (equip.MinLimit.GetLimit (unitSize), equip.MaxLimit.GetLimit (unitSize));
112 AbstractLimit limit = unit.UnitType.GetEquipmentSlotLimit (equip.SlotName); 113 AbstractLimit limit = unit.UnitType.GetEquipmentSlotLimit (equip.SlotName);
113 114
114 if (!(limit is UnlimitedLimit)) 115 if (!(limit is UnlimitedLimit))
115 { 116 {
116 int slotMax = limit.GetLimit (unitSize) - unit.GetEquipmentAmountInSlot (equip.SlotName); 117 int slotMax = limit.GetLimit (unit.Size) - unit.GetEquipmentAmountInSlot (equip.SlotName);
117 max = Math.Min (slotMax, max); 118 newLimit = Math.Min (slotMax, newLimit);
118 } 119 }
119 120
120 return max; 121 return newLimit;
121 } 122 }
122 123
123 public static int GetMinEquipmentCount (Unit unit, UnitEquipmentItem equip) 124 public static int GetMinEquipmentCount (Unit unit, UnitEquipmentItem equip)
124 { 125 {
125 return GetEquipmentCountLimit (unit, equip); 126 int unitSize = unit.Size;
127 int min = Math.Min (equip.MinLimit.GetLimit (unitSize), equip.MaxLimit.GetLimit (unitSize));
128 return GetEquipmentCountLimit (unit, min, equip);
126 } 129 }
127 130
128 public static bool IsEquipmentRatioLimited(Unit unit, UnitEquipmentItem equip) 131 public static bool IsEquipmentRatioLimited(Unit unit, UnitEquipmentItem equip)
129 { 132 {
130 AbstractLimit limit = unit.UnitType.GetEquipmentSlotLimit(equip.SlotName); 133 AbstractLimit limit = unit.UnitType.GetEquipmentSlotLimit(equip.SlotName);
131 return equip.IsRatioLimit && (limit is IPercentageLimit || limit is UnlimitedLimit); 134 return equip.IsRatioLimit && (limit is IPercentageLimit || limit is UnlimitedLimit);
132 } 135 }
136
137 public static double GetMaxEquipmentPercentage(Unit unit, UnitEquipmentItem equip)
138 {
139 double limit = 0;
140
141 if (equip.IsRatioLimit)
142 {
143 limit = Math.Max(((IPercentageLimit)equip.MinLimit).Percentage, ((IPercentageLimit)equip.MaxLimit).Percentage);
144 }
145
146 return limit;
147 }
133 } 148 }
134 } 149 }