Mercurial > repos > IBDev-IBBoard.WarFoundry.API
comparison api/Factories/Xml/WarFoundryXmlFactory.cs @ 49:9d31d063b194
Re #10 - Refactor source code for readability
* Add SelectSingleElement method that checks type and casts return as XmlElement
Also:
* Delete code to staged load Army and add TODO
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sat, 28 Mar 2009 16:45:24 +0000 |
parents | b49372dd8afa |
children | bb6b993b98bf |
comparison
equal
deleted
inserted
replaced
48:b49372dd8afa | 49:9d31d063b194 |
---|---|
91 GameSystem system = WarFoundryLoader.GetDefault().GetGameSystem(systemID); | 91 GameSystem system = WarFoundryLoader.GetDefault().GetGameSystem(systemID); |
92 string raceID = elem.GetAttribute("race"); | 92 string raceID = elem.GetAttribute("race"); |
93 Race race = WarFoundryLoader.GetDefault().GetRace(system, raceID); | 93 Race race = WarFoundryLoader.GetDefault().GetRace(system, raceID); |
94 int points = GetIntValueFromAttribute(elem, "maxPoints"); | 94 int points = GetIntValueFromAttribute(elem, "maxPoints"); |
95 Army army = new Army(race, name, points, file); | 95 Army army = new Army(race, name, points, file); |
96 StoreExtraData(army, elem); | 96 //TODO: Complete loading of army |
97 return army; | 97 return army; |
98 } | 98 } |
99 | 99 |
100 private void StoreExtraData(WarFoundryStagedLoadingObject wfObject, XmlElement elem) | 100 private void StoreExtraData(WarFoundryStagedLoadingObject wfObject, XmlElement elem) |
101 { | 101 { |
247 | 247 |
248 private XmlNode SelectSingleNode(XmlNode element, string xpathQuery) | 248 private XmlNode SelectSingleNode(XmlNode element, string xpathQuery) |
249 { | 249 { |
250 return element.SelectSingleNode(xpathQuery, GetNamespaceManager()); | 250 return element.SelectSingleNode(xpathQuery, GetNamespaceManager()); |
251 } | 251 } |
252 | |
253 private XmlElement SelectSingleElement(XmlNode element, string xpathQuery) | |
254 { | |
255 XmlNode node = SelectSingleNode(element, xpathQuery); | |
256 return (node is XmlElement) ? (XmlElement) node : null; | |
257 } | |
252 | 258 |
253 private int GetIntValueFromAttribute(XmlElement elem, string attributeName) | 259 private int GetIntValueFromAttribute(XmlElement elem, string attributeName) |
254 { | 260 { |
255 try | 261 try |
256 { | 262 { |
296 } | 302 } |
297 else if (obj is Race) | 303 else if (obj is Race) |
298 { | 304 { |
299 CompleteLoading((Race)obj); | 305 CompleteLoading((Race)obj); |
300 } | 306 } |
301 else if (obj is Army) | |
302 { | |
303 CompleteLoading((Army) obj); | |
304 } | |
305 } | 307 } |
306 | 308 |
307 public void CompleteLoading(GameSystem system) | 309 public void CompleteLoading(GameSystem system) |
308 { | 310 { |
309 if (system.IsFullyLoaded) | 311 if (system.IsFullyLoaded) |
320 | 322 |
321 system.SetAsLoading(); | 323 system.SetAsLoading(); |
322 | 324 |
323 XmlDocument extraData = GetExtraData(system); | 325 XmlDocument extraData = GetExtraData(system); |
324 LoadCategoriesForSystem(system, extraData); | 326 LoadCategoriesForSystem(system, extraData); |
325 XmlElement statsElem = SelectSingleNode(extraData, "/system:system/system:sysStatsList"); | 327 XmlElement statsElem = SelectSingleElement(extraData, "/system:system/system:sysStatsList"); |
326 string defaultStatsID = statsElem.GetAttribute("defaultStats"); | 328 string defaultStatsID = statsElem.GetAttribute("defaultStats"); |
327 LoadSystemStatsForSystem(system, extraData); | 329 LoadSystemStatsForSystem(system, extraData); |
328 system.StandardSystemStatsID = defaultStatsID; | 330 system.StandardSystemStatsID = defaultStatsID; |
329 LogNotifier.DebugFormat(GetType(), "Completed loading of GameSystem with ID {0}", system.ID); | 331 LogNotifier.DebugFormat(GetType(), "Completed loading of GameSystem with ID {0}", system.ID); |
330 LogNotifier.DebugFormat(GetType(), "GameSystem with ID {0} default stats: {1}", system.ID, system.StandardSystemStatsID); | 332 LogNotifier.DebugFormat(GetType(), "GameSystem with ID {0} default stats: {1}", system.ID, system.StandardSystemStatsID); |
444 { | 446 { |
445 throw new InvalidDataException(String.Format("Attribute 'cat' of UnitType {0} (value: {1}) did not reference a valid category", id, mainCatID)); | 447 throw new InvalidDataException(String.Format("Attribute 'cat' of UnitType {0} (value: {1}) did not reference a valid category", id, mainCatID)); |
446 } | 448 } |
447 | 449 |
448 type.MainCategory = cat; | 450 type.MainCategory = cat; |
449 XmlElement statsElement = SelectSingleNodes(elem, "/race:race/race:units/race:unit/race:stats"); | 451 XmlElement statsElement = SelectSingleElement(elem, "/race:race/race:units/race:unit/race:stats"); |
450 type.UnitStats = ParseUnitStats(statsElement, system); | 452 type.UnitStats = ParseUnitStats(statsElement, system); |
451 //TODO: Add unit requirements | 453 //TODO: Add unit requirements |
452 LogNotifier.Debug(GetType(), "Loaded "+type.Name); | 454 LogNotifier.Debug(GetType(), "Loaded "+type.Name); |
453 return type; | 455 return type; |
454 } | 456 } |