annotate API/Objects/Requirement/RequiresNoMoreThanNOfUnitTypeRequirement.cs @ 487:248df19652f9

Re #410: Create "N units per M models in parent unit" requirement * Add null adding context * Add initial skeleton of "N units per M models in parent unit" requirement * Update use of context * Standardise some of "is applicable" testing
author IBBoard <dev@ibboard.co.uk>
date Fri, 27 Jul 2012 20:31:12 +0100
parents e0641e0eb86c
children
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;
480
e0641e0eb86c Re #410: "N units per M models in parent" requirement
IBBoard <dev@ibboard.co.uk>
parents: 479
diff changeset
8 using IBBoard.WarFoundry.API.Objects.Requirement.Context;
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
9
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
10 namespace IBBoard.WarFoundry.API.Objects.Requirement
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
11 {
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
12 /// <summary>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
13 /// 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
14 /// </summary>
458
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
15 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
16 {
427
3882b533d99d Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 419
diff changeset
17 public static readonly string REQUIREMENT_ID = "RequiresNoMoreThanNUnits";
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
18
457
8e01c3174cc3 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 455
diff changeset
19 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
20 {
457
8e01c3174cc3 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 455
diff changeset
21 //Do nothing special
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
22 }
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
23
427
3882b533d99d Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 419
diff changeset
24 public override string RequirementID
3882b533d99d Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 419
diff changeset
25 {
3882b533d99d Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 419
diff changeset
26 get
3882b533d99d Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 419
diff changeset
27 {
3882b533d99d Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 419
diff changeset
28 return REQUIREMENT_ID;
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 }
3882b533d99d Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 419
diff changeset
31
479
f48c49b53738 Re #410: "N units per M models in parent" requirement
IBBoard <dev@ibboard.co.uk>
parents: 462
diff changeset
32 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
33 {
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
34 return false;
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
35 }
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
36
479
f48c49b53738 Re #410: "N units per M models in parent" requirement
IBBoard <dev@ibboard.co.uk>
parents: 462
diff changeset
37 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
38 {
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
39 bool isApplicable = false;
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
40 UnitType unitType = GetUnitTypeFromObject(toObject);
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
41
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
42 if (unitType != null)
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
43 {
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
44 isApplicable = IsApplicable(unitType);
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
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
47 return isApplicable;
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
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
50 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
51 {
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
52 bool isApplicable = false;
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
53 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
54 {
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
55 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
56 {
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
57 isApplicable = true;
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
58 break;
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 }
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
61 return isApplicable;
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
62 }
f0594621e4a0 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 458
diff changeset
63
479
f48c49b53738 Re #410: "N units per M models in parent" requirement
IBBoard <dev@ibboard.co.uk>
parents: 462
diff changeset
64 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
65 {
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
66 Validation canAdd = Validation.Passed;
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
67
457
8e01c3174cc3 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 455
diff changeset
68 foreach (UnitCountRequirementData limit in ConstraintTypes)
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
69 {
487
248df19652f9 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents: 480
diff changeset
70 if (GetUnitTypeCount(toArmy, limit.UnitType, wfObject, context) > limit.Count)
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
71 {
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
72 canAdd = Validation.Failed;
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
73 break;
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
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
77 return canAdd;
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
487
248df19652f9 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents: 480
diff changeset
80 private int GetUnitTypeCount(Army toArmy, UnitType unitType, IWarFoundryObject wfObject, AddingContext context)
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
81 {
487
248df19652f9 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents: 480
diff changeset
82 return toArmy.GetUnitTypeCount(unitType) + GetCountFromObject(wfObject, unitType) + GetCountFromContext(context);
356
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
487
248df19652f9 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents: 480
diff changeset
85 private int GetCountFromObject(IWarFoundryObject wfObject, UnitType limitedType, AddingContext context)
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
86 {
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
87 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
88 }
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
89
487
248df19652f9 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents: 480
diff changeset
90 protected virtual int GetCountFromContext(AddingContext context)
248df19652f9 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents: 480
diff changeset
91 {
248df19652f9 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents: 480
diff changeset
92 return 0;
248df19652f9 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents: 480
diff changeset
93 }
248df19652f9 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents: 480
diff changeset
94
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
95 /// <summary>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
96 /// 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
97 /// </summary>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
98 /// <param name='unitType'>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
99 /// The unit type to limit.
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
100 /// </param>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
101 /// <param name='minCount'>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
102 /// The maximum number of that type that must exist.
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
103 /// </param>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
104 public void AddUnitTypeRequirement(UnitType unitType, int maxCount)
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
105 {
457
8e01c3174cc3 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 455
diff changeset
106 ConstraintTypes.Add(new UnitCountRequirementData(unitType, maxCount));
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
107 }
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
108
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
109 /// <summary>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
110 /// 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
111 /// </summary>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
112 /// <param name='unitType'>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
113 /// The unit type to limit.
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
114 /// </param>
455
afc6410e4efc Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 453
diff changeset
115 public override void AddUnitTypeRequirement(UnitType unitType)
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
116 {
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
117 AddUnitTypeRequirement(unitType, 0);
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
118 }
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
119
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
120 /// <summary>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
121 /// 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
122 /// </summary>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
123 /// <returns>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
124 /// 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
125 /// </returns>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
126 /// <param name='toValidate'>
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
127 /// The army to validate
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
128 /// </param>
358
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 357
diff changeset
129 public override Validation ValidatesArmy(Army army)
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
130 {
458
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
131 Validation canAdd = Validation.NotApplicable;
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
132 int allowedTypeCount = GetObjectCountFromArmy(army, AllowedObject);
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
133
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
134 if (allowedTypeCount > 0)
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
135 {
458
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
136 canAdd = Validation.Passed;
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
137
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
138 foreach (UnitCountRequirementData limit in ConstraintTypes)
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
139 {
458
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
140 if (army.GetUnitTypeCount(limit.UnitType) > limit.Count)
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
141 {
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
142 canAdd = Validation.Failed;
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
143 break;
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 }
458
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
147 else
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
148 {
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
149 canAdd = Validation.NotApplicable;
680db2462e34 Re #379:
IBBoard <dev@ibboard.co.uk>
parents: 457
diff changeset
150 }
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
151
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
152 return canAdd;
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
153 }
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
154
453
dace3b7779ca Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 427
diff changeset
155 protected override string ValidationFailedMessage
358
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 357
diff changeset
156 {
453
dace3b7779ca Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 427
diff changeset
157 get
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 "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
160 }
dace3b7779ca Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 427
diff changeset
161 }
dace3b7779ca Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 427
diff changeset
162
dace3b7779ca Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 427
diff changeset
163 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
164 {
dace3b7779ca Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 427
diff changeset
165 return String.Join("; ", GetFailedRequirements(army).ToArray());
362
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
166 }
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 private List<string> GetFailedRequirements(Army army)
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 List<string> failures = new List<string>();
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
171
457
8e01c3174cc3 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 455
diff changeset
172 foreach (UnitCountRequirementData requirement in ConstraintTypes)
362
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 int unitCount = army.GetUnitTypeCount(requirement.UnitType);
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 if (unitCount > requirement.Count)
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
177 {
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
178 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
179 }
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
180 }
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
181
c19e61262400 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
182 return failures;
358
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 357
diff changeset
183 }
364
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
184
487
248df19652f9 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents: 480
diff changeset
185 protected override string GetFailedAddingRequirementsString(IWarFoundryObject toAdd, Army toArmy, AddingContext context)
364
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
186 {
453
dace3b7779ca Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 427
diff changeset
187 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
188 }
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 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
191 {
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
192 List<string> failures = new List<string>();
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
193
457
8e01c3174cc3 Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 455
diff changeset
194 foreach (UnitCountRequirementData requirement in ConstraintTypes)
364
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
195 {
455
afc6410e4efc Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 453
diff changeset
196 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
197
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
198 if (unitCount > requirement.Count)
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
199 {
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
200 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
201 }
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
202 }
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
203
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
204 return failures;
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 362
diff changeset
205 }
455
afc6410e4efc Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 453
diff changeset
206
afc6410e4efc Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 453
diff changeset
207 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
208 {
afc6410e4efc Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 453
diff changeset
209 return 0;
afc6410e4efc Re #379: Fix validation of requirements to check for unit
IBBoard <dev@ibboard.co.uk>
parents: 453
diff changeset
210 }
356
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
211 }
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
212 }
51cccccf3669 Re #27: Unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 347
diff changeset
213