# HG changeset patch # User IBBoard # Date 1237133272 0 # Node ID b28be912adaba9dab77a5e109bd9d2030ca25862 # Parent 4308424b4145272bf81227e218e1781ea9c37f2a 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 diff -r 4308424b4145 -r b28be912adab api/Factories/Xml/WarFoundryXmlFactory.cs --- 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; } diff -r 4308424b4145 -r b28be912adab api/Objects/UnitType.cs --- a/api/Objects/UnitType.cs Sun Mar 15 15:10:02 2009 +0000 +++ b/api/Objects/UnitType.cs Sun Mar 15 16:07:52 2009 +0000 @@ -16,8 +16,7 @@ /// public class UnitType : WarFoundryObject { - protected Category mainCat; - protected List categories = new List(); + protected Category mainCat; protected Race race; protected int min, max, baseSize = 0; protected int minSize, maxSize; @@ -39,13 +38,7 @@ public UnitType(string id, string typeName, string mainCategoryID, string[] allCategoryIDs, int minNum, int maxNum, int minimumSize, int maximumSize, double unitCost, double trooperCost, Stats unitStats, UnitRequirement[] unitRequirements, Race parentRace) : base(id, typeName) { race = parentRace; - mainCat = race.GetCategory(mainCategoryID); - - foreach (string catID in allCategoryIDs) - { - categories.Add(race.GetCategory(catID)); - } - + mainCat = race.GetCategory(mainCategoryID); MinNumber = minNum; MaxNumber = maxNum; MinSize = minimumSize; @@ -73,30 +66,7 @@ } set { - if (value!=null && categories.Contains(value)) - { - mainCat = value; - } - else - { - throw new ArgumentException("MainCategory must exist in list of Categories"); - } - } - } - - public virtual Category[] Categories - { - get - { - return categories.ToArray(); - } - } - - public void AddCategory(Category cat) - { - if (!categories.Contains(cat)) - { - categories.Add(cat); + mainCat = value; } } @@ -158,7 +128,7 @@ { if (MinSize > MaxSize && MaxSize!=-1) { - MinSize = MaxNumber; + MinSize = MaxSize; LogNotifier.WarnFormat(GetType(), "Unit type {0} ({1}) had a minimum size greater than their maximum size.", Name, ID); } } diff -r 4308424b4145 -r b28be912adab api/Objects/WarFoundryStagedLoadingObject.cs --- a/api/Objects/WarFoundryStagedLoadingObject.cs Sun Mar 15 15:10:02 2009 +0000 +++ b/api/Objects/WarFoundryStagedLoadingObject.cs Sun Mar 15 16:07:52 2009 +0000 @@ -11,6 +11,7 @@ public class WarFoundryStagedLoadingObject : WarFoundryObject, IWarFoundryStagedLoadObject { private bool isFullyLoaded; + private bool isLoading; private IWarFoundryFactory creatingFactory; private FileInfo sourceFile; @@ -36,7 +37,7 @@ public void EnsureFullyLoaded () { - if (!IsFullyLoaded) + if (!IsFullyLoaded && !IsLoading) { if (Factory == null) { @@ -57,9 +58,19 @@ get { return isFullyLoaded; } } + public bool IsLoading + { + get { return isLoading; } + } + public void SetAsFullyLoaded() { isFullyLoaded = true; } + + public void SetAsLoading() + { + isLoading = true; + } } }