Mercurial > repos > IBDev-IBBoard.WarFoundry.API
annotate api/Objects/UnitType.cs @ 167:9ba56a8e5096
Re #198: Add slots with counts to units
* Add initial API methods
* Add value loading
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Tue, 06 Oct 2009 14:59:54 +0000 |
parents | 4a02c07278e7 |
children | 3045a168714a |
rev | line source |
---|---|
104
2f3cafb69799
Re #121: Migrate to AGPL license
IBBoard <dev@ibboard.co.uk>
parents:
93
diff
changeset
|
1 // This file (UnitType.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2007, 2008, 2009 IBBoard. |
15 | 2 // |
104
2f3cafb69799
Re #121: Migrate to AGPL license
IBBoard <dev@ibboard.co.uk>
parents:
93
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. |
15 | 4 |
56
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
5 using System; |
82 | 6 using System.Collections.Generic; |
0 | 7 using System.Xml; |
8 using IBBoard.Logging; | |
82 | 9 using IBBoard.WarFoundry.API.Requirements; |
10 | |
11 namespace IBBoard.WarFoundry.API.Objects | |
12 { | |
13 /// <summary> | |
14 /// A UnitType is a type for a <see cref=" Unit"/>, normally relating to an entry in an army list. The UnitType defines the name, cost, minimum and maximum limits of a unit, and the equipment units of the type can take. | |
15 /// </summary> | |
16 public class UnitType : WarFoundryObject | |
0 | 17 { |
56
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
18 private Category mainCat; |
82 | 19 private Race race; |
20 private int min, max, baseSize = 0; | |
56
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
21 private int minSize, maxSize; |
82 | 22 private double baseUnitCost; |
23 private double costPerTrooper; | |
24 private Stats stats; | |
25 private List<UnitRequirement> requirements = new List<UnitRequirement>(); | |
26 private Dictionary<string, UnitEquipmentItem> equipment = new Dictionary<string, UnitEquipmentItem>(); | |
27 private Dictionary<string, List<UnitEquipmentItem>> equipmentExclusionGroups = new Dictionary<string, List<UnitEquipmentItem>>(); | |
56
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
28 private List<string> equipmentKeyOrder = new List<string>(); |
57
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
29 private Dictionary<string, Ability> requiredAbilities = new Dictionary<string, Ability>(); |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
30 private Dictionary<string, Ability> optionalAbilities = new Dictionary<string, Ability>(); |
69
91cf8efbea0b
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
68
diff
changeset
|
31 private String notes = ""; |
167
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
32 private List<UnitType> containedTypes = new List<UnitType>(); |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
33 private Dictionary<string, string> extraData = new Dictionary<string, string>(); |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
34 private Dictionary<string, int> slotLimits = new Dictionary<string, int>(); |
82 | 35 |
36 | |
37 public UnitType(string id, string typeName, Race parentRace) : base(id, typeName) | |
38 { | |
39 race = parentRace; | |
40 } | |
41 | |
12
ac232763858b
Re #9 - Make WarFoundry API use smaller methods
IBBoard <dev@ibboard.co.uk>
parents:
8
diff
changeset
|
42 [Obsolete("Use three parameter constructor and setters")] |
56
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
43 public UnitType(string id, string typeName, string mainCategoryID, string[] allCategoryIDs, int minNum, int maxNum, int minimumSize, int maximumSize, double unitCost, double trooperCost, Stats unitStats, UnitRequirement[] unitRequirements, Race parentRace) : this (id, typeName, parentRace) |
0 | 44 { |
34 | 45 mainCat = race.GetCategory(mainCategoryID); |
12
ac232763858b
Re #9 - Make WarFoundry API use smaller methods
IBBoard <dev@ibboard.co.uk>
parents:
8
diff
changeset
|
46 MinNumber = minNum; |
ac232763858b
Re #9 - Make WarFoundry API use smaller methods
IBBoard <dev@ibboard.co.uk>
parents:
8
diff
changeset
|
47 MaxNumber = maxNum; |
ac232763858b
Re #9 - Make WarFoundry API use smaller methods
IBBoard <dev@ibboard.co.uk>
parents:
8
diff
changeset
|
48 MinSize = minimumSize; |
ac232763858b
Re #9 - Make WarFoundry API use smaller methods
IBBoard <dev@ibboard.co.uk>
parents:
8
diff
changeset
|
49 MaxSize = maximumSize; |
ac232763858b
Re #9 - Make WarFoundry API use smaller methods
IBBoard <dev@ibboard.co.uk>
parents:
8
diff
changeset
|
50 BaseUnitCost = unitCost; |
ac232763858b
Re #9 - Make WarFoundry API use smaller methods
IBBoard <dev@ibboard.co.uk>
parents:
8
diff
changeset
|
51 CostPerTrooper = trooperCost; |
82 | 52 SetUnitStats(unitStats); |
53 | |
54 foreach (UnitRequirement requirement in requirements) | |
55 { | |
56 AddRequirement(requirement); | |
0 | 57 } |
82 | 58 } |
46
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
59 |
68
10d14a7051d5
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
67
diff
changeset
|
60 public GameSystem GameSystem |
10d14a7051d5
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
67
diff
changeset
|
61 { |
10d14a7051d5
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
67
diff
changeset
|
62 get { return Race.GameSystem; } |
10d14a7051d5
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
67
diff
changeset
|
63 } |
10d14a7051d5
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
67
diff
changeset
|
64 |
46
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
65 /// <value> |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
66 /// Gets the <see cref=" Race"/> that this unit belongs to. |
82 | 67 /// </value> |
68 public Race Race | |
69 { | |
70 get { return race; } | |
71 } | |
46
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
72 |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
73 /// <value> |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
74 /// Gets or sets the <see cref=" Category"/> that this unit type is a member of. |
82 | 75 /// </value> |
76 public virtual Category MainCategory | |
77 { | |
0 | 78 get |
12
ac232763858b
Re #9 - Make WarFoundry API use smaller methods
IBBoard <dev@ibboard.co.uk>
parents:
8
diff
changeset
|
79 { |
0 | 80 return mainCat; |
82 | 81 } |
82 set | |
83 { | |
84 mainCat = value; | |
85 } | |
86 } | |
46
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
87 |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
88 /// <value> |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
89 /// Gets or sets the minimum size of each unit of this type. Note: This should be set AFTER MaxSize, otherwise an unintended default value may be set for the minimum |
82 | 90 /// </value> |
91 public int MinSize | |
92 { | |
93 get { return minSize; } | |
94 set | |
12
ac232763858b
Re #9 - Make WarFoundry API use smaller methods
IBBoard <dev@ibboard.co.uk>
parents:
8
diff
changeset
|
95 { |
82 | 96 minSize = (value >= 0 ? value : 0); |
97 CheckMinimumSize(); | |
98 } | |
99 } | |
46
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
100 |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
101 /// <value> |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
102 /// Gets or sets the maximum size of each unit of this type. Note: This should be set BEFORE MinSize, otherwise an unintended default value may be set for the minimum |
82 | 103 /// </value> |
104 public int MaxSize | |
105 { | |
106 get { return maxSize; } | |
107 set | |
108 { | |
109 maxSize = (value >= 0 ? value : WarFoundryCore.INFINITY); | |
110 CheckMinimumSize(); | |
111 } | |
0 | 112 } |
82 | 113 |
46
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
114 /// <value> |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
115 /// Gets or sets the minimum number of units of this type that must be taken in an army. Note: This should be set AFTER MaxNumber, otherwise an unintended default value may be set for the minimum |
82 | 116 /// </value> |
117 public int MinNumber | |
118 { | |
119 get { return min; } | |
120 set | |
12
ac232763858b
Re #9 - Make WarFoundry API use smaller methods
IBBoard <dev@ibboard.co.uk>
parents:
8
diff
changeset
|
121 { |
82 | 122 min = (value >= 0 ? value : 0); |
123 CheckMinimumNumber(); | |
124 } | |
125 } | |
46
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
126 |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
127 /// <value> |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
128 /// Gets or sets the maximum number of units of this type that can be taken in an army. Note: This should be set BEFORE MinNumber, otherwise an unintended default value may be set for the minimum |
82 | 129 /// </value> |
130 public int MaxNumber | |
131 { | |
132 get { return max; } | |
133 set | |
134 { | |
135 max = (value >= 0 ? value : WarFoundryCore.INFINITY); | |
136 CheckMinimumNumber(); | |
137 } | |
138 } | |
46
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
139 |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
140 /// <summary> |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
141 /// Makes sure that the minimum number isn't more than the maximum number, hence the warning on the properties |
82 | 142 /// </summary> |
143 private void CheckMinimumNumber() | |
144 { | |
38
548cfc776f54
Fixes #34 - Remove "Choices" and "Base/Increment" from Category
IBBoard <dev@ibboard.co.uk>
parents:
34
diff
changeset
|
145 if (MinNumber > MaxNumber && MaxNumber!=WarFoundryCore.INFINITY) |
12
ac232763858b
Re #9 - Make WarFoundry API use smaller methods
IBBoard <dev@ibboard.co.uk>
parents:
8
diff
changeset
|
146 { |
ac232763858b
Re #9 - Make WarFoundry API use smaller methods
IBBoard <dev@ibboard.co.uk>
parents:
8
diff
changeset
|
147 MinNumber = MaxNumber; |
ac232763858b
Re #9 - Make WarFoundry API use smaller methods
IBBoard <dev@ibboard.co.uk>
parents:
8
diff
changeset
|
148 LogNotifier.WarnFormat(GetType(), "Unit type {0} ({1}) had a minimum number greater than their maximum number.", Name, ID); |
82 | 149 } |
150 } | |
46
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
151 |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
152 /// <summary> |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
153 /// Makes sure that the minimum unit size isn't more than the maximum unit size, hence the warning on the properties |
82 | 154 /// </summary> |
155 private void CheckMinimumSize() | |
156 { | |
38
548cfc776f54
Fixes #34 - Remove "Choices" and "Base/Increment" from Category
IBBoard <dev@ibboard.co.uk>
parents:
34
diff
changeset
|
157 if (MinSize > MaxSize && MaxSize!=WarFoundryCore.INFINITY) |
12
ac232763858b
Re #9 - Make WarFoundry API use smaller methods
IBBoard <dev@ibboard.co.uk>
parents:
8
diff
changeset
|
158 { |
34 | 159 MinSize = MaxSize; |
12
ac232763858b
Re #9 - Make WarFoundry API use smaller methods
IBBoard <dev@ibboard.co.uk>
parents:
8
diff
changeset
|
160 LogNotifier.WarnFormat(GetType(), "Unit type {0} ({1}) had a minimum size greater than their maximum size.", Name, ID); |
82 | 161 } |
0 | 162 } |
163 | |
46
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
164 //// <value> |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
165 /// Gets or sets the "base size" of a unit, which is the number of troopers the unit has in it for its "base cost". For a lot of units this value will be 0 as the cost is worked out based on the total number of members. |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
166 /// </value> |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
167 public int BaseSize |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
168 { |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
169 get { return baseSize; } |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
170 set { baseSize = (value >= 0 ? value : 0); } |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
171 } |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
172 |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
173 /// <value> |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
174 /// The number of points that a "base unit" of <code>BaseSize</code> models costs. Additional models are charged at <code>CostPerTrooper</code> each. |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
175 /// </value> |
0 | 176 public double BaseUnitCost |
177 { | |
82 | 178 get { return baseUnitCost; } |
12
ac232763858b
Re #9 - Make WarFoundry API use smaller methods
IBBoard <dev@ibboard.co.uk>
parents:
8
diff
changeset
|
179 set { baseUnitCost = (value >= 0 ? value : 0); } |
82 | 180 } |
46
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
181 |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
182 //// <value> |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
183 /// The cost of an individual trooper. This value is the cost for a basic trooper without weapons, which are added on top of the cost before calculating a unit cost. |
82 | 184 /// </value> |
185 public double CostPerTrooper | |
186 { | |
187 get { return costPerTrooper; } | |
188 set { costPerTrooper = (value >= 0 ? value : 0); } | |
189 } | |
190 | |
191 protected override string DefaultName() | |
192 { | |
193 throw new InvalidOperationException("Unit type with id "+id+" did not have a name specified"); | |
194 } | |
46
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
195 |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
196 /// <value> |
81
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
197 /// The set of <see cref="Stat"/>s for the unit in a format that is valid for the game system. |
82 | 198 /// </value> |
199 public Stat[] UnitStatsArray | |
200 { | |
201 get | |
202 { | |
203 return stats.StatsArray; | |
204 } | |
81
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
205 } |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
206 |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
207 //// <value> |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
208 /// The set of <see cref="Stat"/>s for the unit including an additional column that contains the unit type name |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
209 /// </value> |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
210 public Stat[] UnitStatsArrayWithName |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
211 { |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
212 get |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
213 { |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
214 Stat[] extendedStats = new Stat[stats.StatCount+1]; |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
215 extendedStats[0] = new Stat(new StatSlot("Name"), Name); |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
216 stats.StatsArray.CopyTo(extendedStats, 1); |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
217 return extendedStats; |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
218 } |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
219 } |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
220 |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
221 public void SetUnitStats(Stats newStats) |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
222 { |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
223 stats = newStats; |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
224 } |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
225 |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
226 public string GetStatValue(string statName) |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
227 { |
032b174fc17a
Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents:
69
diff
changeset
|
228 return stats.GetStatValue(statName); |
56
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
229 } |
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
230 |
92
729d9e54162c
Re #111: "Replace" button doesn't always enable
IBBoard <dev@ibboard.co.uk>
parents:
85
diff
changeset
|
231 internal void AddEquipmentItem(UnitEquipmentItem item) |
93
789dfab13449
* Remove debugging Console.WriteLine call
IBBoard <dev@ibboard.co.uk>
parents:
92
diff
changeset
|
232 { |
85
46ad6f478203
Re #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
82
diff
changeset
|
233 if (!equipment.ContainsKey(item.ID)) |
46ad6f478203
Re #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
82
diff
changeset
|
234 { |
46ad6f478203
Re #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
82
diff
changeset
|
235 equipment.Add(item.ID, item); |
46ad6f478203
Re #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
82
diff
changeset
|
236 equipmentKeyOrder.Add(item.ID); |
152
0c0e14f03785
Re #180: Add multiple mutex groups
IBBoard <dev@ibboard.co.uk>
parents:
131
diff
changeset
|
237 AddToMutexGroups(item); |
85
46ad6f478203
Re #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
82
diff
changeset
|
238 } |
56
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
239 } |
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
240 |
152
0c0e14f03785
Re #180: Add multiple mutex groups
IBBoard <dev@ibboard.co.uk>
parents:
131
diff
changeset
|
241 private void AddToMutexGroups(UnitEquipmentItem item) |
56
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
242 { |
152
0c0e14f03785
Re #180: Add multiple mutex groups
IBBoard <dev@ibboard.co.uk>
parents:
131
diff
changeset
|
243 string[] mutexGroups = item.MutexGroups; |
56
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
244 |
152
0c0e14f03785
Re #180: Add multiple mutex groups
IBBoard <dev@ibboard.co.uk>
parents:
131
diff
changeset
|
245 foreach (string mutexGroup in mutexGroups) |
56
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
246 { |
66
d100ca4bd0c1
Re #61 - Update classes to match schema
IBBoard <dev@ibboard.co.uk>
parents:
64
diff
changeset
|
247 List<UnitEquipmentItem> items = DictionaryUtils.GetValue(equipmentExclusionGroups, mutexGroup); |
56
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
248 |
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
249 if (items == null) |
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
250 { |
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
251 items = new List<UnitEquipmentItem>(); |
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
252 equipmentExclusionGroups.Add(mutexGroup, items); |
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
253 } |
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
254 |
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
255 items.Add(item); |
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
256 } |
82 | 257 } |
46
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
258 |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
259 /// <summary> |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
260 /// Gets a <see cref="UnitEquipmentItem"/> for the given ID string, or <code>null</code> if nothing exists for that ID |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
261 /// </summary> |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
262 /// <param name="id"> |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
263 /// The ID of the UnitEquipmentItem to get |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
264 /// </param> |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
265 /// <returns> |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
266 /// The <see cref="UnitEquipmentItem"/> for the given ID string, or <code>null</code> if nothing exists for that ID |
82 | 267 /// </returns> |
268 public UnitEquipmentItem GetEquipmentItem(string id) | |
56
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
269 { |
82 | 270 return DictionaryUtils.GetValue(equipment, id); |
64
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
271 } |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
272 |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
273 /// <summary> |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
274 /// Gets a <see cref=" UnitEquipmentItem"/> for the given <see cref=" EquipmentItem"/>, or <code>null</code> if the unit can't take that <code>EquipmentItem</code> |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
275 /// </summary> |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
276 /// <param name="item"> |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
277 /// The <see cref="EquipmentItem"/> to get the <see cref=" UnitEquipmentItem"/> |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
278 /// </param> |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
279 /// <returns> |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
280 /// The <see cref="UnitEquipmentItem"/> that definies the UnitType's restrictions for taking the <see cref=" EquipmentItem"/> |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
281 /// </returns> |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
282 public UnitEquipmentItem GetEquipmentItem(EquipmentItem item) |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
283 { |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
284 return GetEquipmentItem(item.ID); |
82 | 285 } |
46
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
286 |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
287 /// <summary> |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
288 /// Gets an array of all available <see cref="UnitEquipmentItem"/>s for this UnitType |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
289 /// </summary> |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
290 /// <returns> |
a5855fcd75ab
Re #11 - Document classes and methods
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
291 /// An array of all available <see cref="UnitEquipmentItem"/>s for this UnitType |
82 | 292 /// </returns> |
293 public UnitEquipmentItem[] GetEquipmentItems() | |
294 { | |
295 return DictionaryUtils.ToArray<string, UnitEquipmentItem>(equipment); | |
56
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
296 } |
57
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
297 |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
298 public UnitEquipmentItem[] GetEquipmentItemsByExclusionGroup(string group) |
154
4a02c07278e7
Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents:
152
diff
changeset
|
299 { |
152
0c0e14f03785
Re #180: Add multiple mutex groups
IBBoard <dev@ibboard.co.uk>
parents:
131
diff
changeset
|
300 return GetEquipmentItemsByExclusionGroups(new string[] { group }); |
0c0e14f03785
Re #180: Add multiple mutex groups
IBBoard <dev@ibboard.co.uk>
parents:
131
diff
changeset
|
301 } |
57
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
302 |
152
0c0e14f03785
Re #180: Add multiple mutex groups
IBBoard <dev@ibboard.co.uk>
parents:
131
diff
changeset
|
303 public UnitEquipmentItem[] GetEquipmentItemsByExclusionGroups(string[] groups) |
0c0e14f03785
Re #180: Add multiple mutex groups
IBBoard <dev@ibboard.co.uk>
parents:
131
diff
changeset
|
304 { |
154
4a02c07278e7
Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents:
152
diff
changeset
|
305 List<UnitEquipmentItem> list = new List<UnitEquipmentItem>(); |
4a02c07278e7
Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents:
152
diff
changeset
|
306 |
4a02c07278e7
Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents:
152
diff
changeset
|
307 foreach (string group in groups) |
4a02c07278e7
Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents:
152
diff
changeset
|
308 { |
4a02c07278e7
Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents:
152
diff
changeset
|
309 List<UnitEquipmentItem> groupList = DictionaryUtils.GetValue(equipmentExclusionGroups, group); |
4a02c07278e7
Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents:
152
diff
changeset
|
310 |
4a02c07278e7
Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents:
152
diff
changeset
|
311 if (groupList != null) |
4a02c07278e7
Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents:
152
diff
changeset
|
312 { |
4a02c07278e7
Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents:
152
diff
changeset
|
313 list.AddRange(groupList); |
4a02c07278e7
Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents:
152
diff
changeset
|
314 } |
4a02c07278e7
Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents:
152
diff
changeset
|
315 } |
4a02c07278e7
Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents:
152
diff
changeset
|
316 |
152
0c0e14f03785
Re #180: Add multiple mutex groups
IBBoard <dev@ibboard.co.uk>
parents:
131
diff
changeset
|
317 return list.ToArray(); |
56
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
318 } |
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
319 |
64
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
320 public bool IsRatioLimitedEquipmentItem(EquipmentItem item) |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
321 { |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
322 UnitEquipmentItem equip = GetEquipmentItem(item); |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
323 return equip != null && equip.IsRatioLimit; |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
324 } |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
325 |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
326 public bool IsAbsoluteLimitedEquipmentItem(EquipmentItem item) |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
327 { |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
328 UnitEquipmentItem equip = GetEquipmentItem(item); |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
329 return equip != null && !equip.IsRatioLimit; |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
330 } |
2094bd0ba652
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
61
diff
changeset
|
331 |
56
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
332 public ICollection<Ability> GetRequiredAbilities() |
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
333 { |
57
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
334 return requiredAbilities.Values; |
56
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
335 } |
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
336 |
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
337 public ICollection<Ability> GetOptionalAbilities() |
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
338 { |
57
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
339 return optionalAbilities.Values; |
56
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
340 } |
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
341 |
57
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
342 public void AddAbility(Ability ability, bool isRequired) |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
343 { |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
344 string id = ability.ID; |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
345 |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
346 if (!requiredAbilities.ContainsKey(id) && !optionalAbilities.ContainsKey(id)) |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
347 { |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
348 if (isRequired) |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
349 { |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
350 requiredAbilities[id] = ability; |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
351 } |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
352 else |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
353 { |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
354 optionalAbilities[id] = ability; |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
355 } |
56
9561ef46c6fb
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
46
diff
changeset
|
356 } |
82 | 357 } |
358 | |
359 public void AddRequirement(UnitRequirement requirement) | |
360 { | |
361 requirements.Add(requirement); | |
57
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
362 } |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
363 |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
364 public UnitRequirement[] Requirements |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
365 { |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
366 get { return requirements.ToArray(); } |
82 | 367 } |
0 | 368 |
369 public List<FailedUnitRequirement> CanAddToArmy(Army army) | |
370 { | |
371 List<FailedUnitRequirement> failures = new List<FailedUnitRequirement>(); | |
372 | |
82 | 373 if (requirements!=null && requirements.Count > 0) |
0 | 374 { |
375 foreach (UnitRequirement requirement in requirements) | |
376 { | |
377 FailedUnitRequirement failure = (FailedUnitRequirement)requirement.CanAddToWarFoundryObject(army); | |
378 | |
379 if (failure!=null) | |
380 { | |
381 failures.Add(failure); | |
382 } | |
383 } | |
384 } | |
385 | |
386 return failures; | |
387 } | |
388 | |
389 public List<FailedUnitRequirement> CanRemoveFromArmy(Army army) | |
390 { | |
391 List<FailedUnitRequirement> failures = new List<FailedUnitRequirement>(); | |
392 | |
82 | 393 if (requirements!=null && requirements.Count > 0) |
0 | 394 { |
395 foreach (UnitRequirement requirement in requirements) | |
396 { | |
397 FailedUnitRequirement failure = (FailedUnitRequirement)requirement.CanRemoveFromWarFoundryObject(army); | |
398 | |
399 if (failure!=null) | |
400 { | |
401 failures.Add(failure); | |
402 } | |
403 } | |
404 } | |
405 | |
406 return failures; | |
57
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
407 } |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
408 |
69
91cf8efbea0b
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
68
diff
changeset
|
409 public string Notes |
57
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
410 { |
69
91cf8efbea0b
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
68
diff
changeset
|
411 get { return notes; } |
91cf8efbea0b
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
68
diff
changeset
|
412 set { notes = value; } |
57
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
413 } |
69
91cf8efbea0b
Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents:
68
diff
changeset
|
414 |
61
3c77722a02b5
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
57
diff
changeset
|
415 public bool CanContainUnit(Unit unit) |
3c77722a02b5
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
57
diff
changeset
|
416 { |
3c77722a02b5
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
57
diff
changeset
|
417 return CanContainUnitType(unit.UnitType); |
3c77722a02b5
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
57
diff
changeset
|
418 } |
3c77722a02b5
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
57
diff
changeset
|
419 |
3c77722a02b5
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
57
diff
changeset
|
420 public bool CanContainUnitType(UnitType unitType) |
3c77722a02b5
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
57
diff
changeset
|
421 { |
3c77722a02b5
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
57
diff
changeset
|
422 return containedTypes.Contains(unitType); |
3c77722a02b5
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
57
diff
changeset
|
423 } |
3c77722a02b5
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
57
diff
changeset
|
424 |
57
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
425 public UnitType[] ContainedUnitTypes |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
426 { |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
427 get { return containedTypes.ToArray(); } |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
428 } |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
429 |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
430 public void AddContainedUnitType(UnitType containedType) |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
431 { |
e0ce5578e7c2
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
56
diff
changeset
|
432 containedTypes.Add(containedType); |
66
d100ca4bd0c1
Re #61 - Update classes to match schema
IBBoard <dev@ibboard.co.uk>
parents:
64
diff
changeset
|
433 } |
d100ca4bd0c1
Re #61 - Update classes to match schema
IBBoard <dev@ibboard.co.uk>
parents:
64
diff
changeset
|
434 |
d100ca4bd0c1
Re #61 - Update classes to match schema
IBBoard <dev@ibboard.co.uk>
parents:
64
diff
changeset
|
435 public void AddExtraData(string id, string data) |
d100ca4bd0c1
Re #61 - Update classes to match schema
IBBoard <dev@ibboard.co.uk>
parents:
64
diff
changeset
|
436 { |
d100ca4bd0c1
Re #61 - Update classes to match schema
IBBoard <dev@ibboard.co.uk>
parents:
64
diff
changeset
|
437 extraData[id] = data; |
d100ca4bd0c1
Re #61 - Update classes to match schema
IBBoard <dev@ibboard.co.uk>
parents:
64
diff
changeset
|
438 } |
d100ca4bd0c1
Re #61 - Update classes to match schema
IBBoard <dev@ibboard.co.uk>
parents:
64
diff
changeset
|
439 |
d100ca4bd0c1
Re #61 - Update classes to match schema
IBBoard <dev@ibboard.co.uk>
parents:
64
diff
changeset
|
440 public string GetExtraData(string id) |
d100ca4bd0c1
Re #61 - Update classes to match schema
IBBoard <dev@ibboard.co.uk>
parents:
64
diff
changeset
|
441 { |
d100ca4bd0c1
Re #61 - Update classes to match schema
IBBoard <dev@ibboard.co.uk>
parents:
64
diff
changeset
|
442 return DictionaryUtils.GetValue(extraData, id); |
82 | 443 } |
131
5145b7c61ae0
Re #68: Add "export army list" function
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
444 |
5145b7c61ae0
Re #68: Add "export army list" function
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
445 public string StatsID |
5145b7c61ae0
Re #68: Add "export army list" function
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
446 { |
5145b7c61ae0
Re #68: Add "export army list" function
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
447 get |
5145b7c61ae0
Re #68: Add "export army list" function
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
448 { |
5145b7c61ae0
Re #68: Add "export army list" function
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
449 return stats.StatsID; |
167
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
450 } |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
451 } |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
452 |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
453 public void AddEquipmentSlot(string slotName, int slotLimit) |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
454 { |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
455 slotLimits.Add(slotName, slotLimit); |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
456 } |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
457 |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
458 public bool HasEquipmentSlot(string slotName) |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
459 { |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
460 return slotLimits.ContainsKey(slotName); |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
461 } |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
462 |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
463 /// <summary> |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
464 /// Gets the maximum number of items allowed in a single slot |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
465 /// </summary> |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
466 /// <param name="slotName">The name of the equipment slot to get the limit for the named slot</param> |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
467 /// <returns>The maximum number of items allowed in a slot, or <code>-1</code> if the slot is the default one or has not been specified</returns> |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
468 public int GetEquipmentSlotLimit(string slotName) |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
469 { |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
470 int slotLimit = -1; |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
471 |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
472 if (HasEquipmentSlot(slotName)) |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
473 { |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
474 slotLimit = DictionaryUtils.GetValue(slotLimits, slotName); |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
475 } |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
476 |
9ba56a8e5096
Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents:
154
diff
changeset
|
477 return slotLimit; |
131
5145b7c61ae0
Re #68: Add "export army list" function
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
478 } |
82 | 479 } |
66
d100ca4bd0c1
Re #61 - Update classes to match schema
IBBoard <dev@ibboard.co.uk>
parents:
64
diff
changeset
|
480 } |