diff api/Util/UnitEquipmentUtil.cs @ 203:df4e56e2ee71

Re #208: equipment slot issues * Consolidate some code in to one line * Make min/max percentage methods get the min/max of the calculated percentage and the percentage based on the numeric limit to ensure percentage is never greater than or less than (as appropriate) the numeric limit Also: * Remove Math.Min and Math.Max calls from Min/Max equipment count methods - we're assuming min < max in the percentages, so assume it here as well
author IBBoard <dev@ibboard.co.uk>
date Fri, 06 Nov 2009 20:48:07 +0000
parents 37ad50823531
children 1cde49671c8b
line wrap: on
line diff
--- a/api/Util/UnitEquipmentUtil.cs	Fri Nov 06 20:11:30 2009 +0000
+++ b/api/Util/UnitEquipmentUtil.cs	Fri Nov 06 20:48:07 2009 +0000
@@ -102,10 +102,8 @@
 		}
 
 		public static int GetMaxEquipmentCount (Unit unit, UnitEquipmentItem equip)
-		{			
-			int unitSize = unit.Size;
-			int max = Math.Max(equip.MinLimit.GetLimit(unitSize), equip.MaxLimit.GetLimit (unitSize));
-			return GetEquipmentCountLimit (unit, max, equip);
+		{
+			return GetEquipmentCountLimit (unit, equip.MaxLimit.GetLimit(unit.Size), equip);
 		}
 
 		private static int GetEquipmentCountLimit (Unit unit, int currLimit, UnitEquipmentItem equip)
@@ -129,10 +127,8 @@
 
 		
 		public static int GetMinEquipmentCount (Unit unit, UnitEquipmentItem equip)
-		{			
-			int unitSize = unit.Size;
-			int min = Math.Min (equip.MinLimit.GetLimit (unitSize), equip.MaxLimit.GetLimit (unitSize));
-			return GetEquipmentCountLimit (unit, min, equip);
+		{
+			return GetEquipmentCountLimit (unit, equip.MinLimit.GetLimit(unit.Size), equip);
 		}
 		
 		public static bool IsEquipmentRatioLimited(Unit unit, UnitEquipmentItem equip)
@@ -143,7 +139,9 @@
 		
 		public static double GetMaxEquipmentPercentage(Unit unit, UnitEquipmentItem equip)
 		{
-			return GetMinOfSlotLimitAndEquipmentLimit(equip, equip.MaxLimit, unit);
+			double limitMax = GetMinOfSlotLimitAndEquipmentLimit(equip, equip.MaxLimit, unit);
+			double countMax = GetPercentageOfUnitSize(GetMaxEquipmentCount(unit, equip), unit);
+			return Math.Max(limitMax, countMax);
 		}
 		
 		private static double GetPercentageOfUnitSize(int number, Unit unit)
@@ -158,8 +156,7 @@
 			
 			if (slotLimit is IPercentageLimit)
 			{
-				limit = ((IPercentageLimit)slotLimit).Percentage;
-				limit = limit - GetPercentageOfUnitSize(unit.GetEquipmentAmountInSlotExcludingItem(equip), unit);
+				limit = ((IPercentageLimit)slotLimit).Percentage - GetPercentageOfUnitSize(unit.GetEquipmentAmountInSlotExcludingItem(equip), unit);
 			}
 			else
 			{
@@ -180,8 +177,10 @@
 		}
 		
 		public static double GetMinEquipmentPercentage(Unit unit, UnitEquipmentItem equip)
-		{	
-			return GetMinOfSlotLimitAndEquipmentLimit(equip, equip.MinLimit, unit);
+		{
+			double limitMin = GetMinOfSlotLimitAndEquipmentLimit(equip, equip.MinLimit, unit);
+			double countMin = GetPercentageOfUnitSize(GetMinEquipmentCount(unit, equip), unit);
+			return Math.Min(limitMin, countMin);
 		}
 	}
 }