comparison API/Objects/Requirement/RequiresNUnitsForMUnitsRequirement.cs @ 446:ca1e8f7c8b73

Re: #350: Add requirement to allow N of unit for specific other units * Update army validation to support required amounts other than 1
author IBBoard <dev@ibboard.co.uk>
date Tue, 20 Dec 2011 20:26:54 +0000
parents 2d1bdd679f82
children 4fbb7f205f7e
comparison
equal deleted inserted replaced
445:2d1bdd679f82 446:ca1e8f7c8b73
160 int allowedTypeCount = army.GetUnitTypeCount(allowedType); 160 int allowedTypeCount = army.GetUnitTypeCount(allowedType);
161 bool typeFound = (allowedTypeCount > 0); 161 bool typeFound = (allowedTypeCount > 0);
162 162
163 foreach (UnitCountRequirementData limit in requiredTypes) 163 foreach (UnitCountRequirementData limit in requiredTypes)
164 { 164 {
165 int limitedTypeCount = army.GetUnitTypeCount(limit.UnitType); 165 int limitedTypeCount = GetUnitTypesCount(army, limit.UnitTypes);
166 typeFound |= (limitedTypeCount > 0); 166 typeFound |= (limitedTypeCount > 0);
167 167
168 if (!IsValidByRequirement(limit, allowedTypeCount, limitedTypeCount)) 168 if (!IsValidByRequirement(limit, allowedTypeCount, limitedTypeCount))
169 { 169 {
170 canAdd = Validation.Failed; 170 canAdd = Validation.Failed;
194 List<string> failures = new List<string>(); 194 List<string> failures = new List<string>();
195 int allowedTypeCount = army.GetUnitTypeCount(allowedType); 195 int allowedTypeCount = army.GetUnitTypeCount(allowedType);
196 196
197 foreach (UnitCountRequirementData limit in requiredTypes) 197 foreach (UnitCountRequirementData limit in requiredTypes)
198 { 198 {
199 int limitedTypeCount = army.GetUnitTypeCount(limit.UnitType); 199 int limitedTypeCount = GetUnitTypesCount(army, limit.UnitTypes);
200 200
201 if (!IsValidByRequirement(limit, allowedTypeCount, limitedTypeCount)) 201 if (!IsValidByRequirement(limit, allowedTypeCount, limitedTypeCount))
202 { 202 {
203 failures.Add(String.Format("{0} {1} for every {2} {3} (have {4} for {5})", limit.Count, limit.UnitType.Name, limit.AllowsCount, allowedType.Name, limitedTypeCount, allowedTypeCount)); 203 string unitTypeList = GetUnitTypeList(limit);
204 failures.Add(String.Format("{0} {1} for every {2} {3} (have {4} for {5})", limit.Count, unitTypeList, limit.AllowsCount, allowedType.Name, limitedTypeCount, allowedTypeCount));
204 } 205 }
205 } 206 }
206 207
207 return failures; 208 return failures;
209 }
210
211 private int GetUnitTypesCount(Army army, UnitType[] unitTypes)
212 {
213 return GetUnitTypesCount(army, unitTypes, null);
208 } 214 }
209 215
210 public override string RequirementID 216 public override string RequirementID
211 { 217 {
212 get 218 get