Mercurial > repos > IBBoard.WarFoundry.API
annotate api/Objects/Army.cs @ 297:349e521785c1
Re #338: WarFoundry.API - Save System Data
Created IWarFoundryGameSystemSaver
Created WarFoundryXmlGameSystemSaver
Updated WarFoundrySaver
Created GetGameSystemSaver
Created SetGameSystemSaver
author | Tsudico |
---|---|
date | Fri, 07 Jan 2011 03:35:50 +0000 |
parents | 35dc06030355 |
children | 92d10b06ab0f |
rev | line source |
---|---|
104
2f3cafb69799
Re #121: Migrate to AGPL license
IBBoard <dev@ibboard.co.uk>
parents:
89
diff
changeset
|
1 // This file (Army.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:
89
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 |
82 | 5 using System; |
58
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
6 using System.IO; |
82 | 7 using System.Collections.Generic; |
8 using System.Text; | |
9 using System.Xml; | |
0 | 10 using IBBoard.WarFoundry.API; |
11 using IBBoard.WarFoundry.API.Factories; | |
12 using IBBoard.WarFoundry.API.Requirements; | |
82 | 13 using ICSharpCode.SharpZipLib.Zip; |
14 | |
15 namespace IBBoard.WarFoundry.API.Objects | |
16 { | |
17 /// <summary> | |
18 /// Summary description for Army. | |
19 /// </summary> | |
143
7f13ffcb8765
Re #164: Show unit cost in army tree
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
20 public class Army : WarFoundryObject, ICostedWarFoundryObject |
82 | 21 { |
22 //private GameSystem system; | |
23 private Race armyRace; | |
24 private int maxPoints; | |
25 private double pointsTotal; | |
26 private Dictionary<Category, ArmyCategory> categories; | |
27 | |
28 public event ObjectAddDelegate UnitAdded; | |
29 public event ObjectRemoveDelegate UnitRemoved; | |
30 public event FailedUnitRequirementDelegate FailedRequirement; | |
31 public event DoubleValChangedDelegate PointsValueChanged; | |
0 | 32 private DoubleValChangedDelegate PointsValueChangedMethod; |
33 | |
59
3fa4658c50c6
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
58
diff
changeset
|
34 public Army(Race race, string armyName, int maxArmyPoints) : this(race, armyName, maxArmyPoints, null) |
0 | 35 { |
36 } | |
82 | 37 |
38 public Army(Race race, string armyName, int maxArmyPoints, ZipFile file) : base(armyName) | |
39 { | |
40 armyRace = race; | |
41 Name = armyName; | |
42 maxPoints = maxArmyPoints; | |
43 PointsValueChangedMethod = new DoubleValChangedDelegate(PointsValueChangedHandler); | |
44 } | |
45 | |
46 public ArmyCategory GetCategory(Category cat) | |
47 { | |
48 ArmyCategory armyCat = null; | |
49 ArmyCategories.TryGetValue(cat, out armyCat); | |
50 return armyCat; | |
58
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
51 } |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
52 |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
53 private Dictionary<Category, ArmyCategory> ArmyCategories |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
54 { |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
55 get |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
56 { |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
57 if (categories==null) |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
58 { |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
59 categories = new Dictionary<Category, ArmyCategory>(); |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
60 Category[] raceCats = Race.Categories; |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
61 ArmyCategory cat; |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
62 int raceCatCount = raceCats.Length; |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
63 |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
64 for (int i = 0; i < raceCatCount; i++) |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
65 { |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
66 Category raceCat = raceCats[i]; |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
67 cat = new ArmyCategory(this, raceCat); |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
68 categories[raceCat] = cat; |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
69 cat.PointsValueChanged+= PointsValueChangedMethod; |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
70 cat.UnitAdded+=new ObjectAddDelegate(Army_UnitAdded); |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
71 cat.UnitRemoved+=new ObjectRemoveDelegate(Army_UnitRemoved); |
83
89cc29b4c012
Re #90: Stop new units showing up twice
IBBoard <dev@ibboard.co.uk>
parents:
82
diff
changeset
|
72 cat.FailedRequirement+=new FailedUnitRequirementDelegate(Army_FailedRequirement); |
58
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
73 } |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
74 } |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
75 |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
76 return categories; |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
77 } |
82 | 78 } |
79 | |
80 public ArmyCategory[] Categories | |
81 { | |
82 get | |
83 { | |
84 return DictionaryUtils.ToArray<Category, ArmyCategory>(ArmyCategories); | |
85 } | |
86 } | |
87 | |
88 public Race Race | |
89 { | |
90 get { return armyRace; } | |
91 } | |
92 | |
93 public GameSystem GameSystem | |
94 { | |
95 get { return (armyRace!=null ? armyRace.GameSystem : null); } | |
96 } | |
97 | |
98 protected void OnUnitAdded(Unit unit) | |
99 { | |
100 OnUnitAdded(unit, null); | |
89 | 101 } |
102 | |
103 protected void OnUnitAdded(Unit unit, List<FailedUnitRequirement> failedReqs) | |
104 { | |
105 if (UnitAdded != null) | |
106 { | |
107 UnitAdded(unit); | |
108 } | |
109 | |
110 OnFailedRequirement(failedReqs); | |
0 | 111 } |
82 | 112 |
113 protected void OnUnitRemoved(Unit unit) | |
114 { | |
115 OnUnitRemoved(unit, null); | |
116 } | |
117 | |
118 protected void OnUnitRemoved(Unit unit, List<FailedUnitRequirement> failedReqs) | |
119 { | |
120 if (UnitRemoved!=null) | |
121 { | |
122 UnitRemoved(unit); | |
89 | 123 } |
124 | |
83
89cc29b4c012
Re #90: Stop new units showing up twice
IBBoard <dev@ibboard.co.uk>
parents:
82
diff
changeset
|
125 OnFailedRequirement(failedReqs); |
89 | 126 } |
127 | |
128 protected void OnFailedRequirement(List<FailedUnitRequirement> failedReqs) | |
129 { | |
130 if (FailedRequirement != null && failedReqs != null && failedReqs.Count > 0) | |
131 { | |
132 FailedRequirement(failedReqs); | |
133 } | |
82 | 134 } |
135 | |
136 private void OnPointsValueChanged(double oldValue, double newValue) | |
137 { | |
138 if (PointsValueChanged!=null) | |
139 { | |
140 PointsValueChanged(this, oldValue, newValue); | |
141 } | |
142 } | |
143 | |
144 private double TotalPoints | |
145 { | |
146 get { return pointsTotal; } | |
147 set | |
148 { | |
149 double oldPoints = pointsTotal; | |
150 pointsTotal = value; | |
151 | |
152 if (oldPoints!=pointsTotal) | |
153 { | |
154 OnPointsValueChanged(oldPoints, pointsTotal); | |
155 } | |
156 } | |
157 } | |
158 | |
143
7f13ffcb8765
Re #164: Show unit cost in army tree
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
159 [Obsolete("Use Points instead")] |
82 | 160 public double PointsTotal |
161 { | |
162 get { return TotalPoints; } | |
58
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
163 } |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
164 |
143
7f13ffcb8765
Re #164: Show unit cost in army tree
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
165 public double Points |
7f13ffcb8765
Re #164: Show unit cost in army tree
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
166 { |
7f13ffcb8765
Re #164: Show unit cost in army tree
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
167 get { return TotalPoints; } |
7f13ffcb8765
Re #164: Show unit cost in army tree
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
168 } |
7f13ffcb8765
Re #164: Show unit cost in army tree
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
169 |
58
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
170 public void AddUnit(Unit unit) |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
171 { |
259
35dc06030355
Re #270: Add multiple categories to API
IBBoard <dev@ibboard.co.uk>
parents:
143
diff
changeset
|
172 Category category = unit.UnitType.MainCategory; |
35dc06030355
Re #270: Add multiple categories to API
IBBoard <dev@ibboard.co.uk>
parents:
143
diff
changeset
|
173 AddUnit(unit, category); |
35dc06030355
Re #270: Add multiple categories to API
IBBoard <dev@ibboard.co.uk>
parents:
143
diff
changeset
|
174 } |
35dc06030355
Re #270: Add multiple categories to API
IBBoard <dev@ibboard.co.uk>
parents:
143
diff
changeset
|
175 |
35dc06030355
Re #270: Add multiple categories to API
IBBoard <dev@ibboard.co.uk>
parents:
143
diff
changeset
|
176 public void AddUnit(Unit unit, Category category) |
35dc06030355
Re #270: Add multiple categories to API
IBBoard <dev@ibboard.co.uk>
parents:
143
diff
changeset
|
177 { |
35dc06030355
Re #270: Add multiple categories to API
IBBoard <dev@ibboard.co.uk>
parents:
143
diff
changeset
|
178 ArmyCategory armyCat = GetCategory(category); |
58
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
179 armyCat.AddUnit(unit); |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
180 } |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
181 |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
182 public void RemoveUnit(Unit unit) |
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
183 { |
82 | 184 unit.Category.RemoveUnit(unit); |
185 } | |
186 | |
187 public Unit[] GetUnits(Category cat) | |
188 { | |
189 return GetUnits(this.GetCategory(cat)); | |
190 } | |
191 | |
192 public Unit[] GetUnits(ArmyCategory cat) | |
193 { | |
194 return cat.GetUnits(); | |
195 } | |
196 | |
197 public Unit[] GetUnits() | |
198 { | |
199 List<Unit> fullList = new List<Unit>(); | |
200 | |
201 foreach(ArmyCategory cat in Categories) | |
202 { | |
203 fullList.AddRange(cat.GetUnits()); | |
204 } | |
205 | |
206 return fullList.ToArray(); | |
207 } | |
208 | |
209 public int MaxPoints | |
210 { | |
211 get { return maxPoints; } | |
212 set | |
213 { | |
214 if (value > 0) | |
215 { | |
216 maxPoints = value; | |
217 } | |
218 } | |
219 } | |
220 | |
221 private void PointsValueChangedHandler(WarFoundryObject obj, double oldVal, double newVal) | |
222 { | |
223 if (obj is ArmyCategory) | |
58
e53ed2d613a1
Re #61 - Complete structure of WarFoundry API objects
IBBoard <dev@ibboard.co.uk>
parents:
15
diff
changeset
|
224 { |
82 | 225 double points = 0; |
226 | |
227 foreach (ArmyCategory cat in Categories) | |
228 { | |
143
7f13ffcb8765
Re #164: Show unit cost in army tree
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
229 points+= cat.Points; |
82 | 230 } |
231 | |
232 TotalPoints = points; | |
233 } | |
234 } | |
235 | |
236 public List<FailedUnitRequirement> CanAddUnit(Unit unit) | |
237 { | |
238 return CanAddUnitType(unit.UnitType); | |
239 } | |
240 | |
241 public List<FailedUnitRequirement> CanAddUnitType(UnitType unitType) | |
242 { | |
243 return unitType.CanAddToArmy(this); | |
244 } | |
245 | |
246 public List<FailedUnitRequirement> CanRemoveUnit(Unit unit) | |
247 { | |
248 return CanRemoveUnitType(unit.UnitType); | |
249 } | |
250 | |
251 public List<FailedUnitRequirement> CanRemoveUnitType(UnitType unitType) | |
252 { | |
253 return unitType.CanRemoveFromArmy(this); | |
254 } | |
255 | |
256 public int GetUnitTypeCount(UnitType unitType) | |
257 { | |
258 int count = 0; | |
259 | |
260 foreach (ArmyCategory cat in Categories) | |
261 { | |
262 count+= cat.GetUnitTypeCount(unitType); | |
263 } | |
264 | |
265 return count; | |
266 } | |
267 | |
83
89cc29b4c012
Re #90: Stop new units showing up twice
IBBoard <dev@ibboard.co.uk>
parents:
82
diff
changeset
|
268 private void Army_UnitAdded(WarFoundryObject val) |
82 | 269 { |
270 OnUnitAdded((Unit)val); | |
89 | 271 } |
272 | |
83
89cc29b4c012
Re #90: Stop new units showing up twice
IBBoard <dev@ibboard.co.uk>
parents:
82
diff
changeset
|
273 private void Army_UnitRemoved(WarFoundryObject val) |
82 | 274 { |
275 OnUnitRemoved((Unit)val); | |
89 | 276 } |
277 | |
278 private void Army_FailedRequirement(List<FailedUnitRequirement> val) | |
279 { | |
280 OnFailedRequirement(val); | |
82 | 281 } |
282 } | |
283 } |