Mercurial > repos > IBDev-IBBoard.WarFoundry.API
annotate api/Objects/GameSystem.cs @ 296:ed5e6d92ecd9
Re #323: WarFoundry.API - SystemStats cannot remove stat
Remove code didn't fully remove stat, this has been fixed and tested
author | Tsudico |
---|---|
date | Sat, 18 Dec 2010 22:34:32 +0000 |
parents | 4dcb038e4f55 |
children | 886d28c1b6e5 |
rev | line source |
---|---|
104
2f3cafb69799
Re #121: Migrate to AGPL license
IBBoard <dev@ibboard.co.uk>
parents:
82
diff
changeset
|
1 // This file (GameSystem.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2007, 2008, 2009 IBBoard. |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
2 // |
104
2f3cafb69799
Re #121: Migrate to AGPL license
IBBoard <dev@ibboard.co.uk>
parents:
82
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. |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
4 |
82 | 5 using System; |
6 using System.Collections.Generic; | |
7 using System.Xml; | |
8 using System.IO; | |
0 | 9 using IBBoard.Logging; |
82 | 10 using IBBoard.WarFoundry.API.Factories; |
0 | 11 using ICSharpCode.SharpZipLib.Zip; |
82 | 12 |
13 namespace IBBoard.WarFoundry.API.Objects | |
14 { | |
15 /// <summary> | |
16 /// Summary description for GameSystem. | |
17 /// </summary> | |
18 public class GameSystem : WarFoundryStagedLoadingObject | |
19 { | |
286 | 20 private static int SYSTEM_DEFAULT_ARMY_SIZE = 1000; |
21 private bool warnOnError; | |
82 | 22 private bool allowAllies; |
23 private Dictionary<string, Category> categories = new Dictionary<string,Category>(); | |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
24 private Dictionary<string, SystemStats> stats = new Dictionary<string,SystemStats>(); |
82 | 25 private string defaultStats; |
286 | 26 private int defaultArmySize; |
0 | 27 |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
28 public GameSystem(string systemID, string systemName, IWarFoundryFactory creatingFactory) : base(systemID, systemName, creatingFactory) |
0 | 29 { |
6 | 30 stats = new Dictionary<string,SystemStats>(); |
0 | 31 } |
286 | 32 |
33 public int SystemArmyDefaultSize | |
34 { | |
35 get { return defaultArmySize; } | |
36 set | |
37 { | |
38 if (value == 0) | |
39 { | |
40 defaultArmySize = SYSTEM_DEFAULT_ARMY_SIZE; | |
41 } | |
42 else | |
43 { | |
44 defaultArmySize = value; | |
45 } | |
46 } | |
47 } | |
51 | 48 |
49 public bool AllowAllies | |
0 | 50 { |
51 | 51 get { return allowAllies; } |
52 set { allowAllies = value; } | |
53 } | |
0 | 54 |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
55 public void AddCategory(Category cat) |
0 | 56 { |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
57 RawCategories[cat.ID] = cat; |
82 | 58 } |
59 | |
60 public Category GetCategory(string id) | |
6 | 61 { |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
62 EnsureFullyLoaded(); |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
63 Category cat = null; |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
64 RawCategories.TryGetValue(id, out cat); |
82 | 65 return cat; |
66 } | |
292
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
67 |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
68 public void SetCategory(Category cat) |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
69 { |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
70 Category old; |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
71 RawCategories.TryGetValue(cat.ID, out old); |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
72 |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
73 if(old == null) |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
74 { |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
75 AddCategory(cat); |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
76 } |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
77 else |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
78 { |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
79 if(!old.Equals(cat)) |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
80 { |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
81 RawCategories[old.ID] = cat; |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
82 } |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
83 } |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
84 } |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
85 |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
86 public void RemoveCategory(string id) |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
87 { |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
88 RawCategories.Remove(id); |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
89 } |
82 | 90 |
91 public Category[] Categories | |
92 { | |
93 get | |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
94 { |
82 | 95 EnsureFullyLoaded(); |
96 return DictionaryUtils.ToArray<string, Category>(RawCategories); | |
97 } | |
0 | 98 } |
99 | |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
100 protected Dictionary<string, Category> RawCategories |
0 | 101 { |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
102 get { return categories; } |
82 | 103 } |
104 | |
105 public bool WarnOnError | |
106 { | |
0 | 107 get |
108 { | |
109 return warnOnError; | |
82 | 110 } |
111 set { warnOnError = value; } | |
0 | 112 } |
113 | |
6 | 114 public void AddSystemStats(SystemStats sysStats) |
115 { | |
116 stats[sysStats.ID] = sysStats; | |
117 } | |
118 | |
0 | 119 public SystemStats StandardSystemStats |
120 { | |
121 get | |
122 { | |
43
d0812d7de39d
Re #49 - Resolve namespace issues
IBBoard <dev@ibboard.co.uk>
parents:
38
diff
changeset
|
123 EnsureFullyLoaded(); |
6 | 124 return stats[defaultStats]; |
0 | 125 } |
126 } | |
127 | |
128 public string StandardSystemStatsID | |
129 { | |
130 get | |
276
d576034ad1dd
Re #290: Migrate to using key/keyref definitions instead of ID/IDREF type
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
131 { |
d576034ad1dd
Re #290: Migrate to using key/keyref definitions instead of ID/IDREF type
IBBoard <dev@ibboard.co.uk>
parents:
104
diff
changeset
|
132 EnsureFullyLoaded(); |
0 | 133 return defaultStats; |
134 } | |
135 | |
136 set | |
137 { | |
138 if (value != null && value.Trim().Length > 0) | |
139 { | |
140 defaultStats = value; | |
141 } | |
142 } | |
82 | 143 } |
144 | |
145 public SystemStats[] SystemStats | |
146 { | |
147 get | |
6 | 148 { |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
149 EnsureFullyLoaded(); |
6 | 150 SystemStats[] statsArray = new SystemStats[stats.Count]; |
82 | 151 stats.Values.CopyTo(statsArray, 0); |
152 return statsArray; | |
153 } | |
0 | 154 } |
155 | |
6 | 156 public SystemStats GetSystemStatsForID(string id) |
157 { | |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
158 EnsureFullyLoaded(); |
6 | 159 SystemStats statsForID; |
160 stats.TryGetValue(id, out statsForID); | |
161 return statsForID; | |
162 } | |
163 | |
292
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
164 public void SetSystemStats(SystemStats newStats) |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
165 { |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
166 SystemStats old; |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
167 stats.TryGetValue(newStats.ID, out old); |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
168 |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
169 if(old == null) |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
170 { |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
171 AddSystemStats(newStats); |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
172 } |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
173 else |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
174 { |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
175 if(!old.Equals(newStats)) |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
176 { |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
177 stats[old.ID] = newStats; |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
178 } |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
179 } |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
180 } |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
181 |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
182 public void RemoveSystemStats(string id) |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
183 { |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
184 stats.Remove(id); |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
185 } |
4dcb038e4f55
Re #320: WarFoundry.API - GameSystem cannot remove or set categories and stat lines
Tsudico
parents:
286
diff
changeset
|
186 |
0 | 187 public Race SystemDefaultRace |
188 { | |
189 get { return WarFoundryLoader.GetDefault().GetRace(this, Race.SYSTEM_DEFAULT_RACE_ID); } | |
82 | 190 } |
191 | |
192 public bool Matches(GameSystem otherSystem) | |
193 { | |
194 if (otherSystem==null) | |
195 { | |
196 return false; | |
197 } | |
198 | |
199 return this.ID == otherSystem.ID; | |
200 } | |
201 | |
202 public override bool Equals(object obj) | |
0 | 203 { |
204 if (obj == null) | |
205 { | |
206 return false; | |
207 } | |
82 | 208 |
209 if (obj.GetType().Equals(this.GetType())) | |
210 { | |
211 GameSystem otherSystem = (GameSystem)obj; | |
212 | |
213 return this.ID == otherSystem.ID && this.Name == otherSystem.Name && ((this.RawCategories == null && otherSystem.RawCategories == null) || this.RawCategories.Equals(otherSystem.RawCategories)); | |
214 } | |
215 else | |
216 { | |
217 return false; | |
218 } | |
219 } | |
220 | |
221 public override int GetHashCode() | |
222 { | |
223 return ID.GetHashCode() + Name.GetHashCode() + (RawCategories!=null ? RawCategories.GetHashCode() : 0) + warnOnError.GetHashCode(); | |
224 } | |
225 | |
226 public bool UnitTypeMaxed(UnitType unitType, Army army) | |
227 { | |
228 return unitType.MaxNumber!=WarFoundryCore.INFINITY && army.GetUnitTypeCount(unitType) >= unitType.MaxNumber; | |
229 } | |
230 | |
231 public bool UnitTypeMinned(UnitType unitType, Army army) | |
232 { | |
233 return army.GetUnitTypeCount(unitType) <= unitType.MinNumber; | |
0 | 234 } |
235 | |
236 public List<EquipmentItem> GetSystemEquipmentList() | |
237 { | |
238 List<EquipmentItem> items = new List<EquipmentItem>(); | |
239 Race defaultRace = SystemDefaultRace; | |
240 | |
241 if (defaultRace!=null) | |
242 { | |
243 items = defaultRace.GetEquipmentList(); | |
244 } | |
245 | |
246 return items; | |
247 } | |
248 | |
249 public EquipmentItem GetSystemEquipmentItem(string id) | |
250 { | |
251 EquipmentItem item = null; | |
252 Race defaultRace = SystemDefaultRace; | |
253 | |
254 if (defaultRace!=null) | |
255 { | |
256 item = defaultRace.GetEquipmentItem(id); | |
257 } | |
258 | |
259 return item; | |
260 } | |
261 | |
262 public UnitType[] GetSystemUnitTypes(Category cat) | |
263 { | |
264 UnitType[] items = new UnitType[0]; | |
265 Race defaultRace = SystemDefaultRace; | |
266 | |
267 if (defaultRace!=null) | |
268 { | |
269 items = defaultRace.GetUnitTypes(cat); | |
270 } | |
271 | |
272 return items; | |
273 } | |
274 | |
275 public UnitType GetSystemUnitType(string id) | |
276 { | |
277 UnitType unit = null; | |
278 Race defaultRace = SystemDefaultRace; | |
279 | |
280 if (defaultRace!=null) | |
281 { | |
282 unit = defaultRace.GetUnitType(id); | |
283 } | |
284 | |
285 return unit; | |
286 } | |
287 | |
288 public List<Ability> GetSystemAbilityList() | |
289 { | |
290 List<Ability> items = new List<Ability>(); | |
291 Race defaultRace = SystemDefaultRace; | |
292 | |
293 if (defaultRace!=null) | |
294 { | |
295 items = defaultRace.GetAbilityList(); | |
296 } | |
297 | |
298 return items; | |
299 } | |
300 | |
301 public Ability GetSystemAbility(string id) | |
302 { | |
303 Ability ability = null; | |
304 Race defaultRace = SystemDefaultRace; | |
305 | |
306 if (defaultRace!=null) | |
307 { | |
308 ability = defaultRace.GetAbility(id); | |
309 } | |
310 | |
311 return ability; | |
82 | 312 } |
313 } | |
314 } |