annotate API/Objects/Requirement/RequiresNoMoreThanNOfUnitTypeRequirement.cs @ 479:f48c49b53738

Re #410: "N units per M models in parent" requirement * Add a "context" object that will hold the parent unit (or possibly other stuff) * Update all method signatures and calls
author IBBoard <dev@ibboard.co.uk>
date Wed, 23 May 2012 20:56:27 +0100
parents 159dc9be36c2
children e0641e0eb86c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
1 // This file (RequiresNoMoreThanNOfUnitTypeRequirement.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2011 IBBoard
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
2 //
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
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.
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
4 using System;
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
5 using IBBoard.WarFoundry.API.Objects;
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
6 using System.Collections.Generic;
362
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
7 using System.Text;
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
8
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
9 namespace IBBoard.WarFoundry.API.Objects.Requirement
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
10 {
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
11 /// <summary>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
12 /// A requirement where a WarFoundryObject cannot be taken in an army if more than N of a UnitType will be in the army.
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
13 /// </summary>
458
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
14 public abstract class RequiresNoMoreThanNOfUnitTypeRequirement<OBJECT_TYPE> : AbstractUnitRequirement<OBJECT_TYPE> where OBJECT_TYPE : IWarFoundryObject
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
15 {
427
3882b533d99d Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 419
diff changeset
16 public static readonly string REQUIREMENT_ID = "RequiresNoMoreThanNUnits";
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
17
457
8e01c3174cc3 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 455
diff changeset
18 public RequiresNoMoreThanNOfUnitTypeRequirement(OBJECT_TYPE allowedObject, params UnitType[] limitedUnitTypes) : base(allowedObject, limitedUnitTypes)
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
19 {
457
8e01c3174cc3 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 455
diff changeset
20 //Do nothing special
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
21 }
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
22
427
3882b533d99d Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 419
diff changeset
23 public override string RequirementID
3882b533d99d Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 419
diff changeset
24 {
3882b533d99d Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 419
diff changeset
25 get
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 return REQUIREMENT_ID;
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 }
3882b533d99d Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 419
diff changeset
30
479
f48c49b53738 Re #410: "N units per M models in parent" requirement
IBBoard <dev@ibboard.co.uk>
parents: 462
diff changeset
31 protected override bool IsApplicable(Army toArmy, AddingContext context)
461
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
32 {
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
33 return false;
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
34 }
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
35
479
f48c49b53738 Re #410: "N units per M models in parent" requirement
IBBoard <dev@ibboard.co.uk>
parents: 462
diff changeset
36 protected override bool IsApplicable(IWarFoundryObject toObject, AddingContext context)
461
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
37 {
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
38 bool isApplicable = false;
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
39 UnitType unitType = GetUnitTypeFromObject(toObject);
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
40
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
41 if (unitType != null)
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
42 {
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
43 isApplicable = IsApplicable(unitType);
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
44 }
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
45
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
46 return isApplicable;
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
47 }
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
48
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
49 private bool IsApplicable(UnitType unitType)
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
50 {
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
51 bool isApplicable = false;
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
52 foreach (UnitCountRequirementData requirement in ConstraintTypes)
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
53 {
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
54 if (requirement.UnitType.Equals(unitType))
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
55 {
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
56 isApplicable = true;
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
57 break;
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
58 }
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
59 }
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
60 return isApplicable;
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
61 }
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
62
479
f48c49b53738 Re #410: "N units per M models in parent" requirement
IBBoard <dev@ibboard.co.uk>
parents: 462
diff changeset
63 protected override Validation CheckAllowsAdding(IWarFoundryObject wfObject, Army toArmy, AddingContext context)
461
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
64 {
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
65 Validation canAdd = Validation.Passed;
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
66
457
8e01c3174cc3 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 455
diff changeset
67 foreach (UnitCountRequirementData limit in ConstraintTypes)
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
68 {
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
69 if (GetUnitTypeCount(toArmy, limit.UnitType, wfObject) > limit.Count)
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
70 {
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
71 canAdd = Validation.Failed;
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
72 break;
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
73 }
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
74 }
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
75
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
76 return canAdd;
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
77 }
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
78
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
79 private int GetUnitTypeCount(Army toArmy, UnitType unitType, WarFoundryObject wfObject)
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
80 {
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
81 return toArmy.GetUnitTypeCount(unitType) + GetCountFromObject(wfObject, unitType);
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
82 }
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
83
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
84 private int GetCountFromObject(WarFoundryObject wfObject, UnitType limitedType)
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
85 {
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
86 return (limitedType.Equals(wfObject) || (wfObject is Unit && ((Unit)wfObject).UnitType.Equals(limitedType))) ? 1 : 0;
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
87 }
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
88
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
89 /// <summary>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
90 /// Adds a requirement for there to be no more than maxCount of a given UnitType
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
91 /// </summary>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
92 /// <param name='unitType'>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
93 /// The unit type to limit.
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
94 /// </param>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
95 /// <param name='minCount'>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
96 /// The maximum number of that type that must exist.
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
97 /// </param>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
98 public void AddUnitTypeRequirement(UnitType unitType, int maxCount)
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
99 {
457
8e01c3174cc3 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 455
diff changeset
100 ConstraintTypes.Add(new UnitCountRequirementData(unitType, maxCount));
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
101 }
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
102
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
103 /// <summary>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
104 /// Adds a requirement for there to be none of a given UnitType
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
105 /// </summary>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
106 /// <param name='unitType'>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
107 /// The unit type to limit.
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
108 /// </param>
455
afc6410e4efc Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 453
diff changeset
109 public override void AddUnitTypeRequirement(UnitType unitType)
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
110 {
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
111 AddUnitTypeRequirement(unitType, 0);
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
112 }
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
113
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
114 /// <summary>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
115 /// Checks whether the supplied army is currently valid according to this requirement.
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
116 /// </summary>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
117 /// <returns>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
118 /// A <code>Validation</code> enum to show the result of the validation
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
119 /// </returns>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
120 /// <param name='toValidate'>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
121 /// The army to validate
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
122 /// </param>
358
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 357
diff changeset
123 public override Validation ValidatesArmy(Army army)
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
124 {
458
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
125 Validation canAdd = Validation.NotApplicable;
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
126 int allowedTypeCount = GetObjectCountFromArmy(army, AllowedObject);
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
127
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
128 if (allowedTypeCount > 0)
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
129 {
458
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
130 canAdd = Validation.Passed;
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
131
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
132 foreach (UnitCountRequirementData limit in ConstraintTypes)
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
133 {
458
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
134 if (army.GetUnitTypeCount(limit.UnitType) > limit.Count)
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
135 {
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
136 canAdd = Validation.Failed;
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
137 break;
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
138 }
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
139 }
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
140 }
458
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
141 else
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
142 {
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
143 canAdd = Validation.NotApplicable;
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
144 }
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
145
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
146 return canAdd;
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
147 }
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
148
453
dace3b7779ca Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 427
diff changeset
149 protected override string ValidationFailedMessage
358
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 357
diff changeset
150 {
453
dace3b7779ca Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 427
diff changeset
151 get
dace3b7779ca Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 427
diff changeset
152 {
dace3b7779ca Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 427
diff changeset
153 return "Army cannot contain more than: {0}.";
dace3b7779ca Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 427
diff changeset
154 }
dace3b7779ca Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 427
diff changeset
155 }
dace3b7779ca Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 427
diff changeset
156
dace3b7779ca Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 427
diff changeset
157 protected override string GetFailedRequirementsString(Army army)
dace3b7779ca Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 427
diff changeset
158 {
dace3b7779ca Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 427
diff changeset
159 return String.Join("; ", GetFailedRequirements(army).ToArray());
362
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
160 }
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
161
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
162 private List<string> GetFailedRequirements(Army army)
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
163 {
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
164 List<string> failures = new List<string>();
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
165
457
8e01c3174cc3 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 455
diff changeset
166 foreach (UnitCountRequirementData requirement in ConstraintTypes)
362
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
167 {
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
168 int unitCount = army.GetUnitTypeCount(requirement.UnitType);
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
169
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
170 if (unitCount > requirement.Count)
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
171 {
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
172 failures.Add(requirement.Count + " × " + requirement.UnitType.Name + " (have " + unitCount + ")");
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
173 }
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
174 }
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
175
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
176 return failures;
358
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 357
diff changeset
177 }
364
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
178
455
afc6410e4efc Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 453
diff changeset
179 protected override string GetFailedAddingRequirementsString(IWarFoundryObject toAdd, Army toArmy)
364
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
180 {
453
dace3b7779ca Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 427
diff changeset
181 return String.Join("; ", GetFailedAddingRequirements(toAdd, toArmy).ToArray());
364
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
182 }
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
183
455
afc6410e4efc Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 453
diff changeset
184 private List<string> GetFailedAddingRequirements(IWarFoundryObject toAdd, Army army)
364
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
185 {
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
186 List<string> failures = new List<string>();
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
187
457
8e01c3174cc3 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 455
diff changeset
188 foreach (UnitCountRequirementData requirement in ConstraintTypes)
364
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
189 {
455
afc6410e4efc Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 453
diff changeset
190 int unitCount = GetUnitTypeCount(army, requirement.UnitType, toAdd);
364
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
191
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
192 if (unitCount > requirement.Count)
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
193 {
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
194 failures.Add(requirement.Count + " × " + requirement.UnitType.Name + " (would have " + unitCount + ")");
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
195 }
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
196 }
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
197
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
198 return failures;
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
199 }
455
afc6410e4efc Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 453
diff changeset
200
afc6410e4efc Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 453
diff changeset
201 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
202 {
afc6410e4efc Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 453
diff changeset
203 return 0;
afc6410e4efc Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 453
diff changeset
204 }
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
205 }
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
206 }
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
207