changeset 67:e6200220ece3

Re #50 - Complete core loading of WarFoundry XML files * Clean up stat loading for game systems and unit types * Delete rogue character that stopped code compiling
author IBBoard <dev@ibboard.co.uk>
date Sat, 25 Apr 2009 14:59:23 +0000
parents d100ca4bd0c1
children 10d14a7051d5
files api/Factories/Xml/WarFoundryXmlGameSystemFactory.cs api/Factories/Xml/WarFoundryXmlRaceFactory.cs api/Objects/Stats.cs api/Objects/SystemStats.cs api/Objects/UnitType.cs
diffstat 5 files changed, 50 insertions(+), 53 deletions(-) [+]
line wrap: on
line diff
--- a/api/Factories/Xml/WarFoundryXmlGameSystemFactory.cs	Sat Apr 11 14:53:45 2009 +0000
+++ b/api/Factories/Xml/WarFoundryXmlGameSystemFactory.cs	Sat Apr 25 14:59:23 2009 +0000
@@ -86,15 +86,14 @@
 		
 		private SystemStats CreateSystemStatsFromElement(XmlElement elem)
 		{
-			List<StatSlot> slots = new List<StatSlot>();
-			string id = elem.GetAttribute("id");	
+			SystemStats sysStats = new SystemStats(elem.GetAttribute("id"));
 			
 			foreach (XmlElement slot in WarFoundryXmlFactoryUtils.SelectNodes(elem, "system:sysStat"))
 			{
-				StatSlot statSlot = new StatSlot(slot.GetAttribute("name"));
-				slots.Add(statSlot);
+				sysStats.AddStatSlot(slot.GetAttribute("name"));
 			}
-			
-			return new SystemStats(id, slots.ToArray());
-		}	}
+
+			return sysStats;
+		}	
+	}
 }
--- a/api/Factories/Xml/WarFoundryXmlRaceFactory.cs	Sat Apr 11 14:53:45 2009 +0000
+++ b/api/Factories/Xml/WarFoundryXmlRaceFactory.cs	Sat Apr 25 14:59:23 2009 +0000
@@ -116,7 +116,6 @@
 		
 		private Stats ParseUnitStats(XmlElement elem, GameSystem system)
 		{
-			List<Stat> statsList = new List<Stat>();
 			String statsID = elem.GetAttribute("statSet");
 			SystemStats statsSet;
 			
@@ -133,21 +132,10 @@
 			
 			foreach (XmlElement stat in WarFoundryXmlFactoryUtils.SelectNodes(elem, "race:stat"))
 			{
-				String statID = stat.GetAttribute("name");
-				StatSlot slot = statsSet[statID];
-				
-				if (slot!=null)
-				{
-					statsList.Add(new Stat(slot, stat.InnerText));
-				}
-				else
-				{
-					throw new InvalidFileException("The stat "+statID+" was not found in stats set "+statsID);
-				}
+				String statName = stat.GetAttribute("name");
+				stats.SetStatValue(statName, stat.InnerText);
 			}
 			
-			stats.SetStats(statsList);
-			
 			return stats;
 		}
 		
--- a/api/Objects/Stats.cs	Sat Apr 11 14:53:45 2009 +0000
+++ b/api/Objects/Stats.cs	Sat Apr 25 14:59:23 2009 +0000
@@ -13,37 +13,42 @@
 	/// </summary>
 	public class Stats
 	{
-		private Stat[] stats;
-		private List<string> statOrder;
+		private List<Stat> stats;
 		private SystemStats sysStats;
 		
 		public Stats(SystemStats systemStats)
 		{
 			sysStats = systemStats;
+			stats = new List<Stat>(sysStats.SlotCount);
 		}
 		
 		public Stat[] StatsArray
 		{
-			get { return (Stat[])stats.Clone(); }
+			get { return stats.ToArray(); }
 		}
-		
-		protected internal void SetStats(List<Stat> statList)
+
+		public void SetStatValue(string statName, string statValue)
 		{
-			stats = statList.ToArray();
-			statOrder = new List<string>();
-			
-			foreach (Stat stat in statList)
+			StatSlot slot = sysStats[statName];
+
+			if (slot!=null)
 			{
-				statOrder.Add(stat.ParentSlot.Name);
-			}
+				int pos = sysStats.GetStatSlotPosition(slot);
+
+				if (pos > -1)
+				{
+					stats[pos] = new Stat(slot, statValue);
+				}
+			}				
 		}
 		
 		public Stat this[string id]
 		{
 			get
 			{
+				StatSlot slot = sysStats[id];
+				int pos = sysStats.GetStatSlotPosition(slot);
 				Stat stat = null;
-				int pos = statOrder.IndexOf(id);
 				
 				try
 				{
@@ -62,7 +67,7 @@
 		{
 			get
 			{
-				if (pos < stats.Length && pos >= 0)
+				if (pos < stats.Count && pos >= 0)
 				{
 					return stats[pos];
 				}
@@ -75,7 +80,7 @@
 		
 		public int StatCount
 		{
-			get { return stats.Length; }
+			get { return stats.Count; }
 		}
 	}
 }
--- a/api/Objects/SystemStats.cs	Sat Apr 11 14:53:45 2009 +0000
+++ b/api/Objects/SystemStats.cs	Sat Apr 25 14:59:23 2009 +0000
@@ -12,40 +12,45 @@
 	/// </summary>
 	public class SystemStats
 	{
-		private Dictionary<string, StatSlot> stats;
+		private Dictionary<string, StatSlot> statsByName;
+		private List<StatSlot> stats;
 		private string id;
 
-		public SystemStats(string statsID, StatSlot[] statSlots)
+		public SystemStats(string statsID)
 		{
 			id = statsID;
-			stats = new Dictionary<string, StatSlot>();
-			
-			foreach (StatSlot slot in statSlots)
-			{
-				slot.SystemStats = this;
-				stats[slot.Name] = slot;
-			}
-		}
+			statsByName = new Dictionary<string, StatSlot>();
+			stats = new List<StatSlot>();
+		}
+
+		public void AddStatSlot(string slotName)
+		{
+			StatSlot slot = new StatSlot(slotName);
+			slot.SystemStats = this;
+			statsByName[slot.Name] = slot;
+			stats.Add(slot);
+		}		
 
 		public StatSlot[] StatSlots
 		{
 			get
 			{
-				StatSlot[] slots = new StatSlot[stats.Count];
-				stats.Values.CopyTo(slots, 0);
-				return slots;
+				return stats.ToArray();
 			}
 		}
 		
-		public StatSlot this[string key]
+		public StatSlot this[string statName]
 		{
 			get 
 			{
-				StatSlot slot = null;
-				stats.TryGetValue(key, out slot);
-				return slot;
+				return DictionaryUtils.GetValue(statsByName, statName);
 			}
 		}
+
+		public int GetStatSlotPosition(StatSlot slot)
+		{
+			return stats.IndexOf(slot);
+		}
 		
         public int SlotCount
         {
--- a/api/Objects/UnitType.cs	Sat Apr 11 14:53:45 2009 +0000
+++ b/api/Objects/UnitType.cs	Sat Apr 25 14:59:23 2009 +0000
@@ -271,7 +271,7 @@
 
 		public UnitEquipmentItem[] GetEquipmentItemsByExclusionGroup(string group)
 		{
-			List<UnitEquipmentItem> list = nDictionaryUtils.GetValue(equipmentExclusionGroups, group);
+			List<UnitEquipmentItem> list = DictionaryUtils.GetValue(equipmentExclusionGroups, group);
 
 			if (list == null)
 			{