Mercurial > repos > IBBoard.WarFoundry.API
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 } |