Mercurial > repos > IBBoard.WarFoundry.API
annotate API/Objects/Requirement/RequiresNoMoreThanNOfUnitTypeRequirement.cs @ 344:8585dfacac3b
Re #27: Unit Requirements
* Take unit being added into account
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sat, 09 Apr 2011 10:47:58 +0000 |
parents | acd390dba551 |
children | 44a6539fadf9 |
rev | line source |
---|---|
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
1 // This file (RequiresNoMoreThanNOfUnitTypeRequirement.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2011 IBBoard |
341 | 2 // |
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. | |
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
4 using System; |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
5 using IBBoard.WarFoundry.API.Objects; |
341 | 6 using System.Collections.Generic; |
7 | |
8 namespace IBBoard.WarFoundry.API.Objects.Requirement | |
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
9 { |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
10 /// <summary> |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
11 /// A requirement where a WarFoundryObject cannot be taken in an army if more than N of a UnitType will be in the army. |
341 | 12 /// </summary> |
13 public class RequiresNoMoreThanNOfUnitTypeRequirement | |
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
14 { |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
15 private List<UnitCountRequirementData> limitedTypes; |
341 | 16 |
17 public RequiresNoMoreThanNOfUnitTypeRequirement(params UnitType[] limitedUnitTypes) | |
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
18 { |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
19 limitedTypes = new List<UnitCountRequirementData>(); |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
20 |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
21 foreach (UnitType unitType in limitedUnitTypes) |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
22 { |
342 | 23 AddUnitTypeRequirement(unitType); |
341 | 24 } |
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
25 } |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
26 |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
27 /// <summary> |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
28 /// Checks whether the supplied WarFoundryObject can be added to the supplied army. |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
29 /// </summary> |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
30 /// <returns> |
341 | 31 /// A <code>Validation</code> enum to show the result of the validation |
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
32 /// </returns> |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
33 /// <param name='wfObject'> |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
34 /// The object that we want to add. This may be involved in the check, or it may not affect the evaluation of the requirement |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
35 /// </param> |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
36 /// <param name='toArmy'> |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
37 /// The army to add the object to. |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
38 /// </param> |
343 | 39 public virtual Validation AllowsAdding(WarFoundryObject wfObject, Army toArmy) |
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
40 { |
341 | 41 Validation canAdd = Validation.Passed; |
42 | |
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
43 foreach (UnitCountRequirementData limit in limitedTypes) |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
44 { |
344 | 45 if (GetUnitTypeCount(toArmy, limit.UnitType, wfObject) > limit.Count) |
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
46 { |
341 | 47 canAdd = Validation.Failed; |
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
48 break; |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
49 } |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
50 } |
341 | 51 |
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
52 return canAdd; |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
53 } |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
54 |
344 | 55 private int GetUnitTypeCount(Army toArmy, UnitType unitType, WarFoundryObject wfObject) |
56 { | |
57 return toArmy.GetUnitTypeCount(unitType) + GetCountFromObject(wfObject, unitType); | |
58 } | |
59 | |
60 private int GetCountFromObject(WarFoundryObject wfObject, UnitType limitedType) | |
61 { | |
62 return (limitedType.Equals(wfObject) || (wfObject is Unit && ((Unit)wfObject).UnitType.Equals(limitedType))) ? 1 : 0; | |
63 } | |
64 | |
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
65 /// <summary> |
342 | 66 /// Adds a requirement for there to be no more than maxCount of a given UnitType |
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
67 /// </summary> |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
68 /// <param name='unitType'> |
342 | 69 /// The unit type to limit. |
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
70 /// </param> |
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
71 /// <param name='minCount'> |
342 | 72 /// The maximum number of that type that must exist. |
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
73 /// </param> |
342 | 74 public void AddUnitTypeRequirement(UnitType unitType, int maxCount) |
337
3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
75 { |
342 | 76 limitedTypes.Add(new UnitCountRequirementData(unitType, maxCount)); |
77 } | |
78 | |
79 /// <summary> | |
80 /// Adds a requirement for there to be none of a given UnitType | |
81 /// </summary> | |
82 /// <param name='unitType'> | |
83 /// The unit type to limit. | |
84 /// </param> | |
85 public void AddUnitTypeRequirement(UnitType unitType) | |
86 { | |
87 AddUnitTypeRequirement(unitType, 0); | |
341 | 88 } |
344 | 89 |
90 /// <summary> | |
91 /// Checks whether the supplied army is currently valid according to this requirement. | |
92 /// </summary> | |
93 /// <returns> | |
94 /// A <code>Validation</code> enum to show the result of the validation | |
95 /// </returns> | |
96 /// <param name='toValidate'> | |
97 /// The army to validate | |
98 /// </param> | |
99 public Validation ValidatesArmy(Army army) | |
100 { | |
101 Validation canAdd = Validation.Passed; | |
102 | |
103 foreach (UnitCountRequirementData limit in limitedTypes) | |
104 { | |
105 if (army.GetUnitTypeCount(limit.UnitType) > limit.Count) | |
106 { | |
107 canAdd = Validation.Failed; | |
108 break; | |
109 } | |
110 } | |
111 | |
112 return canAdd; | |
113 } | |
341 | 114 } |
115 } | |
116 |