Mercurial > repos > IBBoard.WarFoundry.API
annotate api/Objects/Army.cs @ 15:306558904c2a
Re #1 - LGPL license all code
* Add LGPL header to all files
* Add COPYING.LGPL and COPYING.GPL with content of license
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sun, 25 Jan 2009 14:50:36 +0000 |
parents | 613bc5eaac59 |
children | e53ed2d613a1 |
rev | line source |
---|---|
15 | 1 // This file (Army.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2009 IBBoard. |
2 // | |
3 // The file and the library/program it is in are licensed under the GNU LGPL license, either version 3 of the License or (at your option) any later version. Please see COPYING.LGPL for more information and the full license. | |
4 | |
0 | 5 using System; |
6 using System.IO; | |
7 using System.Collections; | |
8 using System.Collections.Generic; | |
9 using System.Text; | |
10 using System.Xml; | |
11 using IBBoard.WarFoundry.API; | |
12 using IBBoard.WarFoundry.API.Factories; | |
13 using IBBoard.WarFoundry.API.Requirements; | |
14 using ICSharpCode.SharpZipLib.Zip; | |
15 | |
16 namespace IBBoard.WarFoundry.API.Objects | |
17 { | |
18 /// <summary> | |
19 /// Summary description for Army. | |
20 /// </summary> | |
21 public class Army : WarFoundryObject | |
22 { | |
23 //private GameSystem system; | |
24 private Race armyRace; | |
25 private int maxPoints; | |
26 private double pointsTotal; | |
27 private ArmyCategory[] categories; | |
28 | |
29 public event ObjectAddDelegate UnitAdded; | |
30 public event ObjectRemoveDelegate UnitRemoved; | |
31 public event FailedUnitRequirementDelegate FailedRequirement; | |
32 public event DoubleValChangedDelegate PointsValueChanged; | |
33 private DoubleValChangedDelegate PointsValueChangedMethod; | |
34 | |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
35 public Army(Race race, string armyName, int maxArmyPoints) : this(race, armyName, maxArmyPoints, null/*, factory*/) |
0 | 36 { |
37 } | |
38 | |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
39 public Army(Race race, string armyName, int maxArmyPoints, ZipFile file) : base(armyName) |
0 | 40 { |
41 armyRace = race; | |
42 Name = armyName; | |
43 maxPoints = maxArmyPoints; | |
44 PointsValueChangedMethod = new DoubleValChangedDelegate(PointsValueChangedHandler); | |
45 } | |
46 | |
47 public ArmyCategory GetCategory(Category cat) | |
48 { | |
49 foreach (ArmyCategory armyCat in Categories) | |
50 { | |
51 if (armyCat.Category.Equals(cat)) | |
52 { | |
53 return armyCat; | |
54 } | |
55 } | |
56 | |
57 return null; | |
58 } | |
59 | |
60 public ArmyCategory[] Categories | |
61 { | |
62 get | |
63 { | |
64 if (categories==null) | |
65 { | |
66 Category[] raceCats = Race.Categories; | |
67 ArmyCategory cat; | |
68 int raceCatCount = raceCats.Length; | |
69 categories = new ArmyCategory[raceCatCount]; | |
70 | |
71 for (int i = 0; i < raceCatCount; i++) | |
72 { | |
73 cat = new ArmyCategory(this, raceCats[i]); | |
74 categories[i] = cat; | |
75 cat.PointsValueChanged+= PointsValueChangedMethod; | |
76 cat.UnitAdded+=new ObjectAddDelegate(Army_UnitAdded); | |
77 cat.UnitRemoved+=new ObjectRemoveDelegate(Army_UnitRemoved); | |
78 cat.RequirementsFailed+=new FailedUnitRequirementDelegate(Army_FailedRequirement); | |
79 } | |
80 } | |
81 | |
82 return categories; | |
83 } | |
84 } | |
85 | |
86 public Race Race | |
87 { | |
88 get { return armyRace; } | |
89 } | |
90 | |
91 public GameSystem GameSystem | |
92 { | |
93 get { return (armyRace!=null ? armyRace.GameSystem : null); } | |
94 } | |
95 | |
96 protected void OnUnitAdded(Unit unit) | |
97 { | |
98 OnUnitAdded(unit, null); | |
99 } | |
100 | |
101 protected void OnUnitAdded(Unit unit, List<FailedUnitRequirement> failedReqs) | |
102 { | |
103 if (UnitAdded!=null) | |
104 { | |
105 UnitAdded(unit); | |
106 } | |
107 | |
108 if (FailedRequirement!=null && failedReqs!=null && failedReqs.Count > 0) | |
109 { | |
110 FailedRequirement(failedReqs); | |
111 } | |
112 } | |
113 | |
114 protected void OnUnitRemoved(Unit unit) | |
115 { | |
116 OnUnitRemoved(unit, null); | |
117 } | |
118 | |
119 protected void OnUnitRemoved(Unit unit, List<FailedUnitRequirement> failedReqs) | |
120 { | |
121 if (UnitRemoved!=null) | |
122 { | |
123 UnitRemoved(unit); | |
124 } | |
125 | |
126 if (FailedRequirement!=null && failedReqs!=null && failedReqs.Count > 0) | |
127 { | |
128 FailedRequirement(failedReqs); | |
129 } | |
130 } | |
131 | |
132 private void OnPointsValueChanged(double oldValue, double newValue) | |
133 { | |
134 if (PointsValueChanged!=null) | |
135 { | |
136 PointsValueChanged(this, oldValue, newValue); | |
137 } | |
138 } | |
139 | |
140 private double TotalPoints | |
141 { | |
142 get { return pointsTotal; } | |
143 set | |
144 { | |
145 double oldPoints = pointsTotal; | |
146 pointsTotal = value; | |
147 | |
148 if (oldPoints!=pointsTotal) | |
149 { | |
150 OnPointsValueChanged(oldPoints, pointsTotal); | |
151 } | |
152 } | |
153 } | |
154 | |
155 public double PointsTotal | |
156 { | |
157 get { return TotalPoints; } | |
158 } | |
159 | |
160 public Unit[] GetUnits(Category cat) | |
161 { | |
162 return GetUnits(this.GetCategory(cat)); | |
163 } | |
164 | |
165 public Unit[] GetUnits(ArmyCategory cat) | |
166 { | |
167 return cat.GetUnits(); | |
168 } | |
169 | |
170 public Unit[] GetUnits() | |
171 { | |
172 ArrayList fullList = new ArrayList(); | |
173 | |
174 foreach(ArmyCategory cat in Categories) | |
175 { | |
176 foreach(Unit unit in cat.GetUnits()) | |
177 { | |
178 if (!fullList.Contains(unit)) | |
179 { | |
180 fullList.Add(unit); | |
181 } | |
182 } | |
183 } | |
184 | |
185 return (Unit[])fullList.ToArray(typeof(Unit)); | |
186 } | |
187 | |
188 public int MaxPoints | |
189 { | |
190 get { return maxPoints; } | |
191 set | |
192 { | |
193 if (value > 0) | |
194 { | |
195 maxPoints = value; | |
196 } | |
197 } | |
198 } | |
199 | |
200 private void PointsValueChangedHandler(WarFoundryObject obj, double oldVal, double newVal) | |
201 { | |
202 if (obj is ArmyCategory) | |
203 { | |
204 double points = 0; | |
205 | |
206 foreach (ArmyCategory cat in Categories) | |
207 { | |
208 points+= cat.PointsTotal; | |
209 } | |
210 | |
211 TotalPoints = points; | |
212 } | |
213 } | |
214 | |
215 public List<FailedUnitRequirement> CanAddUnit(Unit unit) | |
216 { | |
217 return CanAddUnitType(unit.UnitType); | |
218 } | |
219 | |
220 public List<FailedUnitRequirement> CanAddUnitType(UnitType unitType) | |
221 { | |
222 return unitType.CanAddToArmy(this); | |
223 } | |
224 | |
225 public List<FailedUnitRequirement> CanRemoveUnit(Unit unit) | |
226 { | |
227 return CanRemoveUnitType(unit.UnitType); | |
228 } | |
229 | |
230 public List<FailedUnitRequirement> CanRemoveUnitType(UnitType unitType) | |
231 { | |
232 return unitType.CanRemoveFromArmy(this); | |
233 } | |
234 | |
235 public int GetUnitTypeCount(UnitType unitType) | |
236 { | |
237 int count = 0; | |
238 | |
239 foreach (ArmyCategory cat in Categories) | |
240 { | |
241 count+= cat.GetUnitTypeCount(unitType); | |
242 } | |
243 | |
244 return count; | |
245 } | |
246 | |
247 private void Army_UnitAdded(object val) | |
248 { | |
249 OnUnitAdded((Unit)val); | |
250 } | |
251 | |
252 private void Army_UnitRemoved(object val) | |
253 { | |
254 OnUnitRemoved((Unit)val); | |
255 } | |
256 | |
257 private void Army_FailedRequirement(List<FailedUnitRequirement> failedRequirements) | |
258 { | |
259 if (FailedRequirement!=null) | |
260 { | |
261 FailedRequirement(failedRequirements); | |
262 } | |
263 } | |
264 } | |
265 } |