diff api/Factories/Xml/WarFoundryXmlArmyParser.cs @ 116:2010a7e8bf9a

Re #54: Add Army support to WarFoundryFactory * Separate out army parsing to a separate class to make unit loading easier
author IBBoard <dev@ibboard.co.uk>
date Sat, 22 Aug 2009 19:42:04 +0000
parents
children 093ee2da0f6e
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/api/Factories/Xml/WarFoundryXmlArmyParser.cs	Sat Aug 22 19:42:04 2009 +0000
@@ -0,0 +1,59 @@
+//  This file (WarFoundryXmlArmyParser.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2009 IBBoard
+// 
+// The file and the library/program it is in are licensed and distributed, without warranty, under the GNU Affero GPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license.
+
+using System;
+using System.Xml;
+using IBBoard.Xml;
+using ICSharpCode.SharpZipLib.Zip;
+using IBBoard.WarFoundry.API.Objects;
+
+namespace IBBoard.WarFoundry.API.Factories.Xml
+{
+	public class WarFoundryXmlArmyParser
+	{
+		private ZipFile file;
+		private XmlElement elem;
+		private Army army;
+		
+		public WarFoundryXmlArmyParser(ZipFile file, XmlElement elem)
+		{
+			this.file = file;
+			this.elem = elem;
+		}
+
+		public Army GetArmy()
+		{
+			if (army == null)
+			{
+				ParseArmy();
+			}
+
+			return army;
+		}
+
+		private void ParseArmy()
+		{
+			string name = elem.GetAttribute("name");
+			string systemID = elem.GetAttribute("system");
+			GameSystem system = WarFoundryLoader.GetDefault().GetGameSystem(systemID);
+			
+			if (system == null)
+			{
+				throw new RequiredDataMissingException(file.Name, "gameSystem", systemID);
+			}
+			
+			string raceID = elem.GetAttribute("race");
+			Race race = WarFoundryLoader.GetDefault().GetRace(system, raceID);
+			
+			if (race == null)
+			{
+				throw new RequiredDataMissingException(file.Name, "race", raceID);
+			}
+			
+			int points = XmlTools.GetIntValueFromAttribute(elem, "maxPoints");			
+			army = new Army(race, name, points, file);
+			//TODO: Complete loading of army
+		}
+	}
+}