Mercurial > repos > IBDev-IBBoard.WarFoundry.API
annotate api/Objects/GameSystem.cs @ 8:613bc5eaac59
Re #9 - Make WarFoundry loading granular
* Remove specific staged loading classes
* Rework category loading for GameSystem and Race to make it use AddCategory(Category) method
* Promote staged loading from Native Factory to all Factories level
* Refactor XML Factory to use smaller methods
Also removed some commented code that isn't used any more
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sun, 04 Jan 2009 19:24:13 +0000 |
parents | 150a5669cd7b |
children | 0770e5cbba7c |
rev | line source |
---|---|
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
1 // GameSystem.cs is a part of the IBBoard.WarFoundry.API library (referred to from here as "this program") |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
2 // |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
3 // Copyright (C) 2009 IBBoard |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
4 // |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
5 // This program is free software: you can redistribute it and/or modify |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
6 // it under the terms of the GNU Lesser General Public License as published by |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
7 // the Free Software Foundation, either version 3 of the License, or |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
8 // (at your option) any later version. |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
9 // |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
10 // This program is distributed in the hope that it will be useful, |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
13 // GNU Lesser General Public License for more details. |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
14 // |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
15 // You should have received a copy of the GNU Lesser General Public License |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
16 // along with this program. If not, see <http://www.gnu.org/licenses/>. |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
17 // |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
18 |
0 | 19 using System; |
20 using System.Collections.Generic; | |
21 using System.Xml; | |
22 using System.IO; | |
23 using IBBoard.Logging; | |
24 using IBBoard.WarFoundry.API.Factories; | |
25 using ICSharpCode.SharpZipLib.Zip; | |
26 | |
27 namespace IBBoard.WarFoundry.API.Objects | |
28 { | |
29 /// <summary> | |
30 /// Summary description for GameSystem. | |
31 /// </summary> | |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
32 public class GameSystem : WarFoundryStagedLoadingObject |
0 | 33 { |
34 private bool warnOnError; | |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
35 private Dictionary<string, Category> categories = new Dictionary<string,Category>(); |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
36 private Dictionary<string, SystemStats> stats = new Dictionary<string,SystemStats>(); |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
37 private string defaultStats; |
0 | 38 |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
39 public GameSystem(string systemID, string systemName, IWarFoundryFactory creatingFactory) : base(systemID, systemName, creatingFactory) |
0 | 40 { |
6 | 41 stats = new Dictionary<string,SystemStats>(); |
0 | 42 } |
43 | |
44 /*public void CompleteLoading(Category[] cats, Dictionary<string, SystemStats> sysStats, string defaultStatsID) | |
45 { | |
46 categories = cats; | |
47 stats = new SystemStatsSet(sysStats); | |
48 defaultStats = defaultStatsID; | |
49 base.CompleteLoading(); | |
50 }*/ | |
51 | |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
52 public void AddCategory(Category cat) |
0 | 53 { |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
54 RawCategories[cat.ID] = cat; |
0 | 55 } |
56 | |
57 public Category GetCategory(string id) | |
6 | 58 { |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
59 EnsureFullyLoaded(); |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
60 Category cat = null; |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
61 RawCategories.TryGetValue(id, out cat); |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
62 return cat; |
0 | 63 } |
64 | |
65 public Category[] Categories | |
66 { | |
67 get | |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
68 { |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
69 EnsureFullyLoaded(); |
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
70 return DictionaryToArrayConverter.Convert<string, Category>(RawCategories); |
0 | 71 } |
72 } | |
73 | |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
74 protected Dictionary<string, Category> RawCategories |
0 | 75 { |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
76 get { return categories; } |
0 | 77 } |
78 | |
79 public bool WarnOnError | |
80 { | |
81 get | |
82 { | |
83 return warnOnError; | |
84 } | |
85 set { warnOnError = value; } | |
86 } | |
87 | |
6 | 88 public void AddSystemStats(SystemStats sysStats) |
89 { | |
90 stats[sysStats.ID] = sysStats; | |
91 } | |
92 | |
0 | 93 public SystemStats StandardSystemStats |
94 { | |
95 get | |
96 { | |
6 | 97 return stats[defaultStats]; |
0 | 98 } |
99 } | |
100 | |
101 public string StandardSystemStatsID | |
102 { | |
103 get | |
104 { | |
105 return defaultStats; | |
106 } | |
107 | |
108 set | |
109 { | |
110 if (value != null && value.Trim().Length > 0) | |
111 { | |
112 defaultStats = value; | |
113 } | |
114 } | |
115 } | |
116 | |
6 | 117 public SystemStats[] SystemStats |
0 | 118 { |
119 get | |
6 | 120 { |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
121 EnsureFullyLoaded(); |
6 | 122 SystemStats[] statsArray = new SystemStats[stats.Count]; |
123 stats.Values.CopyTo(statsArray, 0); | |
124 return statsArray; | |
0 | 125 } |
126 } | |
127 | |
6 | 128 public SystemStats GetSystemStatsForID(string id) |
129 { | |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
130 EnsureFullyLoaded(); |
6 | 131 SystemStats statsForID; |
132 stats.TryGetValue(id, out statsForID); | |
133 return statsForID; | |
134 } | |
135 | |
0 | 136 public Race SystemDefaultRace |
137 { | |
138 get { return WarFoundryLoader.GetDefault().GetRace(this, Race.SYSTEM_DEFAULT_RACE_ID); } | |
139 } | |
140 | |
141 public bool Matches(GameSystem otherSystem) | |
142 { | |
143 if (otherSystem==null) | |
144 { | |
145 return false; | |
146 } | |
147 | |
148 return this.ID == otherSystem.ID; | |
149 } | |
150 | |
151 public override bool Equals(object obj) | |
152 { | |
153 if (obj == null) | |
154 { | |
155 return false; | |
156 } | |
157 | |
158 if (obj.GetType().Equals(this.GetType())) | |
159 { | |
160 GameSystem otherSystem = (GameSystem)obj; | |
161 | |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
162 return this.ID == otherSystem.ID && this.Name == otherSystem.Name && ((this.RawCategories == null && otherSystem.RawCategories == null) || this.RawCategories.Equals(otherSystem.RawCategories)); |
0 | 163 } |
164 else | |
165 { | |
166 return false; | |
167 } | |
168 } | |
169 | |
170 public override int GetHashCode() | |
171 { | |
8
613bc5eaac59
Re #9 - Make WarFoundry loading granular
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
172 return ID.GetHashCode() + Name.GetHashCode() + (RawCategories!=null ? RawCategories.GetHashCode() : 0) + warnOnError.GetHashCode(); |
0 | 173 } |
174 | |
175 public bool UnitTypeMaxed(UnitType unitType, Army army) | |
176 { | |
177 return unitType.MaxNumber!=-1 && army.GetUnitTypeCount(unitType) >= unitType.MaxNumber; | |
178 } | |
179 | |
180 public bool UnitTypeMinned(UnitType unitType, Army army) | |
181 { | |
182 return army.GetUnitTypeCount(unitType) <= unitType.MinNumber; | |
183 } | |
184 | |
185 public List<EquipmentItem> GetSystemEquipmentList() | |
186 { | |
187 List<EquipmentItem> items = new List<EquipmentItem>(); | |
188 Race defaultRace = SystemDefaultRace; | |
189 | |
190 if (defaultRace!=null) | |
191 { | |
192 items = defaultRace.GetEquipmentList(); | |
193 } | |
194 | |
195 return items; | |
196 } | |
197 | |
198 public EquipmentItem GetSystemEquipmentItem(string id) | |
199 { | |
200 EquipmentItem item = null; | |
201 Race defaultRace = SystemDefaultRace; | |
202 | |
203 if (defaultRace!=null) | |
204 { | |
205 item = defaultRace.GetEquipmentItem(id); | |
206 } | |
207 | |
208 return item; | |
209 } | |
210 | |
211 public UnitType[] GetSystemUnitTypes(Category cat) | |
212 { | |
213 UnitType[] items = new UnitType[0]; | |
214 Race defaultRace = SystemDefaultRace; | |
215 | |
216 if (defaultRace!=null) | |
217 { | |
218 items = defaultRace.GetUnitTypes(cat); | |
219 } | |
220 | |
221 return items; | |
222 } | |
223 | |
224 public UnitType GetSystemUnitType(string id) | |
225 { | |
226 UnitType unit = null; | |
227 Race defaultRace = SystemDefaultRace; | |
228 | |
229 if (defaultRace!=null) | |
230 { | |
231 unit = defaultRace.GetUnitType(id); | |
232 } | |
233 | |
234 return unit; | |
235 } | |
236 | |
237 public List<Ability> GetSystemAbilityList() | |
238 { | |
239 List<Ability> items = new List<Ability>(); | |
240 Race defaultRace = SystemDefaultRace; | |
241 | |
242 if (defaultRace!=null) | |
243 { | |
244 items = defaultRace.GetAbilityList(); | |
245 } | |
246 | |
247 return items; | |
248 } | |
249 | |
250 public Ability GetSystemAbility(string id) | |
251 { | |
252 Ability ability = null; | |
253 Race defaultRace = SystemDefaultRace; | |
254 | |
255 if (defaultRace!=null) | |
256 { | |
257 ability = defaultRace.GetAbility(id); | |
258 } | |
259 | |
260 return ability; | |
261 } | |
262 } | |
263 } |