Mercurial > repos > IBDev-IBBoard.WarFoundry.API
annotate API/Objects/Requirement/RequiresAtLeastNUnitsRequirement.cs @ 465:7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
* Make UnitRequiresAtLeastNUnitsRequirementFactory handle "alternatives" (Rollcall's "-1,X|Y" notation)
* Make RequiresAtLeastNUnitsRequirement handle alternatives/multiple unit types in one limit
* Move some useful code up the classes
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sat, 24 Mar 2012 20:33:11 +0000 |
parents | 159dc9be36c2 |
children | f48c49b53738 |
rev | line source |
---|---|
357 | 1 // This file (UnitRequiresAtLeastNUnitsRequirement.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2011 IBBoard |
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
2 // |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
3 // The file and the library/program it is in are licensed and distributed, without warranty, under the GNU Affero GPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license. |
357 | 4 using System; |
5 using System.Collections.Generic; | |
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
6 using IBBoard.WarFoundry.API.Objects; |
359
2a9c046be55a
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
7 using System.Text; |
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
8 |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
9 namespace IBBoard.WarFoundry.API.Objects.Requirement |
357 | 10 { |
11 /// <summary> | |
427
3882b533d99d
Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents:
419
diff
changeset
|
12 /// A requirement where a WarFoundryObject requires at least N units of any of the specified unit types before any number of that object can be taken in an army. |
3882b533d99d
Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents:
419
diff
changeset
|
13 /// |
3882b533d99d
Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents:
419
diff
changeset
|
14 /// The definition for how this requirement is built from a data file is defined in the <see cref="UnitRequiresAtLeastNUnitsRequirementFactory"/> class. |
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
15 /// </summary> |
458 | 16 public abstract class RequiresAtLeastNUnitsRequirement<OBJECT_TYPE> : AbstractUnitRequirement<OBJECT_TYPE> where OBJECT_TYPE : IWarFoundryObject |
357 | 17 { |
427
3882b533d99d
Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents:
419
diff
changeset
|
18 public static readonly string REQUIREMENT_ID = "RequiresAtLeastNUnits"; |
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
19 |
455
afc6410e4efc
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
453
diff
changeset
|
20 public RequiresAtLeastNUnitsRequirement(OBJECT_TYPE requirementOn, params UnitType[] requiredUnitTypes) : base(requirementOn, requiredUnitTypes) |
357 | 21 { |
455
afc6410e4efc
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
453
diff
changeset
|
22 //Do nothing |
357 | 23 } |
24 | |
427
3882b533d99d
Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents:
419
diff
changeset
|
25 public override string RequirementID |
3882b533d99d
Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents:
419
diff
changeset
|
26 { |
3882b533d99d
Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents:
419
diff
changeset
|
27 get |
3882b533d99d
Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents:
419
diff
changeset
|
28 { |
3882b533d99d
Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents:
419
diff
changeset
|
29 return REQUIREMENT_ID; |
3882b533d99d
Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents:
419
diff
changeset
|
30 } |
3882b533d99d
Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents:
419
diff
changeset
|
31 } |
3882b533d99d
Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents:
419
diff
changeset
|
32 |
357 | 33 /// <summary> |
34 /// Checks whether the supplied WarFoundryObject can be added to the supplied army. | |
35 /// </summary> | |
36 /// <returns> | |
37 /// A <code>Validation</code> enum to show the result of the validation | |
38 /// </returns> | |
39 /// <param name='wfObject'> | |
40 /// The object that we want to add. This may be involved in the check, or it may not affect the evaluation of the requirement | |
41 /// </param> | |
42 /// <param name='toArmy'> | |
43 /// The army to add the object to. | |
44 /// </param> | |
455
afc6410e4efc
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
453
diff
changeset
|
45 public override Validation AllowsAdding(IWarFoundryObject wfObject, Army toArmy) |
357 | 46 { |
47 return IsApplicable(wfObject, toArmy) ? CheckAllowsAdding(wfObject, toArmy) : Validation.NotApplicable; | |
48 } | |
49 | |
358
dbe7ccb1e557
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
357
diff
changeset
|
50 protected override bool IsApplicable(Army toArmy) |
357 | 51 { |
52 return false; | |
53 } | |
54 | |
455
afc6410e4efc
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
453
diff
changeset
|
55 protected override bool IsApplicable(IWarFoundryObject toObject) |
357 | 56 { |
57 bool isApplicable = false; | |
58 UnitType unitType = GetUnitTypeFromObject(toObject); | |
59 | |
60 if (unitType != null) | |
61 { | |
62 isApplicable = IsApplicable(unitType); | |
63 } | |
64 | |
65 return isApplicable; | |
66 } | |
67 | |
452
b671085871b7
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
427
diff
changeset
|
68 private bool IsApplicable(UnitType unitType) |
357 | 69 { |
70 bool isApplicable = false; | |
457
8e01c3174cc3
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
456
diff
changeset
|
71 foreach (UnitCountRequirementData requirement in ConstraintTypes) |
357 | 72 { |
73 if (requirement.UnitType.Equals(unitType)) | |
74 { | |
75 isApplicable = true; | |
76 break; | |
77 } | |
78 } | |
79 return isApplicable; | |
80 } | |
81 | |
455
afc6410e4efc
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
453
diff
changeset
|
82 private Validation CheckAllowsAdding(IWarFoundryObject wfObject, Army toArmy) |
357 | 83 { |
84 Validation isValid = Validation.Passed; | |
85 | |
457
8e01c3174cc3
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
456
diff
changeset
|
86 foreach (UnitCountRequirementData requirement in ConstraintTypes) |
357 | 87 { |
465
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
88 if (GetUnitTypesCount(toArmy, requirement.UnitTypes, wfObject) < requirement.Count) |
357 | 89 { |
90 isValid = Validation.Failed; | |
91 break; | |
92 } | |
93 } | |
94 | |
95 return isValid; | |
96 } | |
97 | |
98 /// <summary> | |
465
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
99 /// Adds a requirement for there to be at least minCount of a given UnitType, allowing any number of of this UnitType. |
357 | 100 /// </summary> |
101 /// <param name='unitType'> | |
102 /// The unit type to require. | |
103 /// </param> | |
104 /// <param name='minCount'> | |
105 /// The minimum number of that type that must exist. | |
106 /// </param> | |
107 public void AddUnitTypeRequirement(UnitType unitType, int minCount) | |
108 { | |
465
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
109 AddUnitTypeRequirement(minCount, unitType); |
357 | 110 } |
111 | |
112 /// <summary> | |
465
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
113 /// Adds a requirement for there to be one or more of a given UnitType, allowing any number of of this UnitType. |
357 | 114 /// </summary> |
115 /// <param name='unitType'> | |
116 /// The unit type to require. | |
117 /// </param> | |
455
afc6410e4efc
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
453
diff
changeset
|
118 public override void AddUnitTypeRequirement(UnitType unitType) |
357 | 119 { |
120 AddUnitTypeRequirement(unitType, 1); | |
121 } | |
122 | |
123 /// <summary> | |
465
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
124 /// Adds a requirement for there to be one or more of the given UnitTypes, allowing any number of of this UnitType. If multiple unit types |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
125 /// are supplied here then they are treated as alternatives (so "unitType1, unitType2" requires one of either type). |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
126 /// </summary> |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
127 /// <param name='unitType'> |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
128 /// The unit type or types to require. |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
129 /// </param> |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
130 public void AddUnitTypeRequirement(params UnitType[] unitTypes) |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
131 { |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
132 AddUnitTypeRequirement(1, unitTypes); |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
133 } |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
134 |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
135 /// <summary> |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
136 /// Adds a requirement for there to be minCount or more of the given UnitTypes, allowing any number of of this UnitType. If multiple unit types |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
137 /// are supplied here then they are treated as alternatives (so "unitType1, unitType2" requires one of either type). |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
138 /// </summary> |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
139 /// <param name="minCount"> |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
140 /// The number of units to be allowed for each 1 of unitType |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
141 /// </param> |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
142 /// <param name='unitType'> |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
143 /// The unit type or types to require. |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
144 /// </param> |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
145 public void AddUnitTypeRequirement(int minCount, params UnitType[] unitTypes) |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
146 { |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
147 ConstraintTypes.Add(new UnitCountRequirementData(unitTypes, minCount)); |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
148 } |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
149 |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
150 |
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
151 /// <summary> |
357 | 152 /// Checks whether the supplied army is currently valid according to this requirement. |
153 /// </summary> | |
154 /// <returns> | |
155 /// A <code>Validation</code> enum to show the result of the validation | |
156 /// </returns> | |
157 /// <param name='toValidate'> | |
158 /// The army to validate | |
159 /// </param> | |
358
dbe7ccb1e557
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
357
diff
changeset
|
160 public override Validation ValidatesArmy(Army toValidate) |
357 | 161 { |
458 | 162 Validation isValid = Validation.NotApplicable; |
163 int allowedTypeCount = GetObjectCountFromArmy(toValidate, AllowedObject); | |
357 | 164 |
458 | 165 if (allowedTypeCount > 0) |
357 | 166 { |
458 | 167 isValid = Validation.Passed; |
168 | |
169 foreach (UnitCountRequirementData requirement in ConstraintTypes) | |
357 | 170 { |
465
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
171 if (GetUnitTypesCount(toValidate, requirement.UnitTypes) < requirement.Count) |
458 | 172 { |
173 isValid = Validation.Failed; | |
174 break; | |
175 } | |
357 | 176 } |
177 } | |
458 | 178 else |
179 { | |
180 isValid = Validation.NotApplicable; | |
181 } | |
357 | 182 |
183 return isValid; | |
184 } | |
358
dbe7ccb1e557
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
357
diff
changeset
|
185 |
453
dace3b7779ca
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
452
diff
changeset
|
186 protected override string GetFailedRequirementsString(Army army) |
358
dbe7ccb1e557
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
357
diff
changeset
|
187 { |
453
dace3b7779ca
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
452
diff
changeset
|
188 return String.Join("; ", GetFailedRequirements(army).ToArray()); |
359
2a9c046be55a
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
189 } |
2a9c046be55a
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
190 |
2a9c046be55a
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
191 private List<string> GetFailedRequirements(Army army) |
2a9c046be55a
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
192 { |
2a9c046be55a
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
193 List<string> failures = new List<string>(); |
2a9c046be55a
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
194 |
457
8e01c3174cc3
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
456
diff
changeset
|
195 foreach (UnitCountRequirementData requirement in ConstraintTypes) |
359
2a9c046be55a
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
196 { |
465
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
197 int unitCount = GetUnitTypesCount(army, requirement.UnitTypes); |
359
2a9c046be55a
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
198 |
2a9c046be55a
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
199 if (unitCount < requirement.Count) |
2a9c046be55a
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
200 { |
465
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
201 failures.Add(requirement.Count + " × " + GetUnitTypeList(requirement) + " (have " + unitCount + ")"); |
359
2a9c046be55a
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
202 } |
2a9c046be55a
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
203 } |
2a9c046be55a
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
204 |
2a9c046be55a
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
358
diff
changeset
|
205 return failures; |
358
dbe7ccb1e557
Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
357
diff
changeset
|
206 } |
364
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
360
diff
changeset
|
207 |
455
afc6410e4efc
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
453
diff
changeset
|
208 protected override string GetFailedAddingRequirementsString(IWarFoundryObject toAdd, Army toArmy) |
364
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
360
diff
changeset
|
209 { |
453
dace3b7779ca
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
452
diff
changeset
|
210 return String.Join("; ", GetFailedAddingRequirements(toAdd, toArmy).ToArray()); |
364
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
360
diff
changeset
|
211 } |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
360
diff
changeset
|
212 |
455
afc6410e4efc
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
453
diff
changeset
|
213 private List<string> GetFailedAddingRequirements(IWarFoundryObject toAdd, Army army) |
364
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
360
diff
changeset
|
214 { |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
360
diff
changeset
|
215 List<string> failures = new List<string>(); |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
360
diff
changeset
|
216 |
457
8e01c3174cc3
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
456
diff
changeset
|
217 foreach (UnitCountRequirementData requirement in ConstraintTypes) |
364
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
360
diff
changeset
|
218 { |
465
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
219 int unitCount = GetUnitTypesCount(army, requirement.UnitTypes, toAdd); |
364
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
360
diff
changeset
|
220 |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
360
diff
changeset
|
221 if (unitCount < requirement.Count) |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
360
diff
changeset
|
222 { |
465
7b9ff7b1df24
Re #394: Make requirements (or factory) more closely match Rollcall methods
IBBoard <dev@ibboard.co.uk>
parents:
462
diff
changeset
|
223 failures.Add(requirement.Count + " × " + GetUnitTypeList(requirement) + " (would have " + unitCount + ")"); |
364
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
360
diff
changeset
|
224 } |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
360
diff
changeset
|
225 } |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
360
diff
changeset
|
226 |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
360
diff
changeset
|
227 return failures; |
0dd8dbe8afe9
Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
360
diff
changeset
|
228 } |
455
afc6410e4efc
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
453
diff
changeset
|
229 |
afc6410e4efc
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
453
diff
changeset
|
230 protected override int GetObjectCountFromArmy(Army toArmy) |
afc6410e4efc
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
453
diff
changeset
|
231 { |
afc6410e4efc
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
453
diff
changeset
|
232 return 0; |
afc6410e4efc
Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents:
453
diff
changeset
|
233 } |
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
234 } |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
235 } |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
236 |