Mercurial > repos > IBDev-IBBoard.WarFoundry.API
diff api/Factories/Xml/WarFoundryXmlFactory.cs @ 34:b28be912adab
Re #32 - Migrate to schema
* Remove use of Categories (now just has a single category)
* Fix infinite loop of trying to load files by adding a "is loading" flag
* Fix invalid setting of MinSize to MaxNumber when we're testing if MinSize > MaxSize
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sun, 15 Mar 2009 16:07:52 +0000 |
parents | 6b9d37f14a14 |
children | 465a215a21a2 |
line wrap: on
line diff
--- a/api/Factories/Xml/WarFoundryXmlFactory.cs Sun Mar 15 15:10:02 2009 +0000 +++ b/api/Factories/Xml/WarFoundryXmlFactory.cs Sun Mar 15 16:07:52 2009 +0000 @@ -6,6 +6,7 @@ using System.IO; using System.Xml; using System.Xml.Schema; +using System.Xml.XPath; using System.Collections.Generic; using System.Text; using IBBoard; @@ -187,6 +188,14 @@ return; } + if (system.IsLoading) + { + LogNotifier.WarnFormat(GetType(), "Object of type GameSystem with ID {0} is already being loaded", system.ID); + return; + } + + system.SetAsLoading(); + XmlNode elem = GetExtraData(system); XmlNode catsElem = elem.FirstChild; LoadCategoriesForSystem(system, elem); @@ -227,6 +236,14 @@ return; } + if (race.IsLoading) + { + LogNotifier.WarnFormat(GetType(), "Object of type Race with ID {0} is already being loaded", race.ID); + return; + } + + race.SetAsLoading(); + XmlNode elem = GetExtraData(race); XmlNode colNode = elem.FirstChild; @@ -387,21 +404,13 @@ //TODO: Add base size type.CostPerTrooper = GetIntValueFromAttribute(elem, "points"); type.BaseUnitCost = GetIntValueFromAttribute(elem, "unitPoints"); - - XmlNode node = elem.FirstChild; - - foreach(XmlElement cat in node.ChildNodes) - { - string catID = cat.GetAttribute("catID"); - type.AddCategory(parentRace.GetCategory(catID)); - } - string mainCatID = elem.GetAttribute("cat"); type.MainCategory = parentRace.GetCategory(mainCatID); - node = node.NextSibling; + XmlNodeList nodes = elem.SelectNodes("stats"); + XmlNode node = nodes.Item(0); type.UnitStats = ParseUnitStats((XmlElement)node, system); //TODO: Add unit requirements - + LogNotifier.Debug(GetType(), "Loaded "+type.Name); return type; }