diff api/Factories/Xml/WarFoundryXmlRaceFactory.cs @ 257:435eb28b4549

Re #270: Add multiple categories to API * Add section for multiple categories to schema * Add category loading to factory Also: * Do more sensible check on whether we need to set MainCategory when adding category to unit type
author IBBoard <dev@ibboard.co.uk>
date Tue, 18 May 2010 19:59:17 +0000
parents a54da5a8b5bb
children 7933d852181e
line wrap: on
line diff
--- a/api/Factories/Xml/WarFoundryXmlRaceFactory.cs	Mon May 17 20:03:05 2010 +0000
+++ b/api/Factories/Xml/WarFoundryXmlRaceFactory.cs	Tue May 18 19:59:17 2010 +0000
@@ -160,8 +160,9 @@
 				throw new InvalidFileException(ex.Message, ex);
 			}
 
+			Race race = type.Race;
 			string mainCatID = elem.GetAttribute("cat");
-			Category cat = type.Race.GetCategory(mainCatID);
+			Category cat = race.GetCategory(mainCatID);
 			
 			if (cat == null)
 			{
@@ -169,6 +170,22 @@
 			}
 			
 			type.MainCategory = cat;
+			
+			XmlNodeList unitCategories = WarFoundryXmlFactoryUtils.SelectNodes(elem, "race:unitCategories/race:unitCategory");
+			
+			foreach (XmlElement unitCategory in unitCategories)
+			{
+				string catID = unitCategory.GetAttribute("catID");
+				Category unitCat = race.GetCategory(catID);
+				
+				if (unitCat == null)
+				{
+					throw new InvalidFileException(String.Format("Category with ID '{1}' did not exist for UnitType '{0}'", type.Name, catID));
+				}
+				
+				type.AddCategory(unitCat);
+			}
+			
 			XmlElement statsElement = WarFoundryXmlFactoryUtils.SelectSingleElement(elem, "race:stats");
 			
 			if (statsElement!=null)
@@ -182,7 +199,7 @@
 			foreach (XmlElement unitMemberRef in unitMemberReferences)
 			{
 				string typeID = unitMemberRef.GetAttribute("typeID");
-				UnitMemberType unitMemberType = type.Race.GetUnitMemberType(typeID);
+				UnitMemberType unitMemberType = race.GetUnitMemberType(typeID);
 				type.AddUnitMemberType(unitMemberType);
 			}
 		}