Mercurial > repos > IBDev-IBBoard.WarFoundry.API
diff api/Util/UnitEquipmentUtil.cs @ 202:37ad50823531
Re #208: equipmentslot limit issues
* Move more code to a common method
* Use new IBBMath.Percentage method to ensure consistent calculation of percentages
* Move subtraction of amount already taken in slot inside IF and ELSE and tailor to situation
Some tests still failing
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Fri, 06 Nov 2009 20:11:30 +0000 |
parents | 4d7ff70bb109 |
children | df4e56e2ee71 |
line wrap: on
line diff
--- a/api/Util/UnitEquipmentUtil.cs Thu Nov 05 21:09:03 2009 +0000 +++ b/api/Util/UnitEquipmentUtil.cs Fri Nov 06 20:11:30 2009 +0000 @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Text; +using IBBoard.CustomMath; using IBBoard.Limits; using IBBoard.WarFoundry.API.Objects; @@ -142,31 +143,31 @@ public static double GetMaxEquipmentPercentage(Unit unit, UnitEquipmentItem equip) { + return GetMinOfSlotLimitAndEquipmentLimit(equip, equip.MaxLimit, unit); + } + + private static double GetPercentageOfUnitSize(int number, Unit unit) + { + return IBBMath.Percentage(number, unit.Size); + } + + private static double GetMinOfSlotLimitAndEquipmentLimit(UnitEquipmentItem equip, AbstractLimit equipLimit, Unit unit) + { double limit = 0; AbstractLimit slotLimit = GetSlotLimitForItem(unit, equip); if (slotLimit is IPercentageLimit) { limit = ((IPercentageLimit)slotLimit).Percentage; + limit = limit - GetPercentageOfUnitSize(unit.GetEquipmentAmountInSlotExcludingItem(equip), unit); } else { - limit = GetPercentageOfUnitSize(slotLimit.GetLimit(unit.Size), unit); + int remaining = slotLimit.GetLimit(unit.Size) - unit.GetEquipmentAmountInSlotExcludingItem(equip); + limit = GetPercentageOfUnitSize(remaining, unit); } - limit = limit - GetPercentageOfUnitSize(unit.GetEquipmentAmountInSlotExcludingItem(equip), unit); - - return GetMinOfSlotLimitAndEquipmentLimit(equip.IsRatioLimit, limit, equip.MaxLimit, unit); - } - - private static double GetPercentageOfUnitSize(int number, Unit unit) - { - return (number / (double)unit.Size) * 100; - } - - private static double GetMinOfSlotLimitAndEquipmentLimit(bool equipIsRatio, double limit, AbstractLimit equipLimit, Unit unit) - { - if (equipIsRatio) + if (equip.IsRatioLimit) { limit = Math.Min(limit, ((IPercentageLimit)equipLimit).Percentage); } @@ -179,22 +180,8 @@ } public static double GetMinEquipmentPercentage(Unit unit, UnitEquipmentItem equip) - { - double limit = 0; - AbstractLimit slotLimit = GetSlotLimitForItem(unit, equip); - - if (slotLimit is IPercentageLimit) - { - limit = ((IPercentageLimit)slotLimit).Percentage; - } - else - { - limit = GetPercentageOfUnitSize(slotLimit.GetLimit(unit.Size), unit); - } - - limit = limit - GetPercentageOfUnitSize(unit.GetEquipmentAmountInSlotExcludingItem(equip), unit); - - return GetMinOfSlotLimitAndEquipmentLimit(equip.IsRatioLimit, limit, equip.MinLimit, unit); + { + return GetMinOfSlotLimitAndEquipmentLimit(equip, equip.MinLimit, unit); } } }