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;
 		}