# HG changeset patch # User IBBoard # Date 1249142785 0 # Node ID 46ad6f478203b5af29fa646c91da212a937efbbe # Parent 2b977962302a0633b3620268ce52cc55bb5e4765 Re #50: Complete core loading of WarFoundry XML files * Start loading of UnitEquipmentItems * Fix XPath queries for equipment items and abilities * Allow UnitEquipmentItem to be created without a UnitType * Make adding UnitEquipmentItem to UnitType set UnitType of UnitEquipmentItem * Make loading of abilities and equipment items add the item to the race Also: * Code cleanup (line endings) * Make method to get equipment by ID return null instead of throwing "no such key" exception diff -r 2b977962302a -r 46ad6f478203 api/Factories/Xml/WarFoundryXmlRaceFactory.cs --- a/api/Factories/Xml/WarFoundryXmlRaceFactory.cs Sun Jul 05 09:50:40 2009 +0000 +++ b/api/Factories/Xml/WarFoundryXmlRaceFactory.cs Sat Aug 01 16:06:25 2009 +0000 @@ -64,12 +64,12 @@ CreateCategoryFromElement(node, race); } - foreach (XmlElement node in WarFoundryXmlFactoryUtils.SelectNodes(extraData, "/race:race/race:equipment/cat:equipmentItem")) + foreach (XmlElement node in WarFoundryXmlFactoryUtils.SelectNodes(extraData, "/race:race/race:equipment/race:equipmentItem")) { CreateEquipmentItemFromElement(node, race); } - foreach (XmlElement node in WarFoundryXmlFactoryUtils.SelectNodes(extraData, "/race:race/race:abilities/cat:ability")) + foreach (XmlElement node in WarFoundryXmlFactoryUtils.SelectNodes(extraData, "/race:race/race:abilities/race:ability")) { CreateAbilityFromElement(node, race); } @@ -148,6 +148,32 @@ private void LoadEquipmentForUnitType(XmlElement elem, UnitType type) { + foreach (XmlElement equip in WarFoundryXmlFactoryUtils.SelectNodes(elem, "race:unitEquipment/race:unitEquipmentItem")) + { + /* + + + + + + + + + */ + string id = equip.GetAttribute("id"); + EquipmentItem equipItem = type.Race.GetEquipmentItem(id); + + if (equipItem!=null) + { + UnitEquipmentItem unitEquipItem = new UnitEquipmentItem(equipItem); + type.AddEquipmentItem(unitEquipItem); + } + else + { + //TODO: Warn about missing item + } + } + } private void LoadAbilitiesForUnitType(XmlElement elem, UnitType type) @@ -227,7 +253,7 @@ string id = elem.GetAttribute("id"); EquipmentItem item = race.GetEquipmentItem(id); - if (item==null) + if (item == null) { item = CreateEquipmentItemFromElement(elem, id, race); } @@ -263,7 +289,7 @@ //TODO: Parse equipment stats if there are any item.Cost = cost; item.ItemArmourType = armourType; - + race.AddEquipmentItem(item); return item; } @@ -274,6 +300,7 @@ Ability ability = new Ability(id, name); XmlNode node = elem.SelectSingleNode("description", WarFoundryXmlFactoryUtils.GetNamespaceManager()); ability.Description = (node == null) ? "" : node.InnerText; + race.AddAbility(ability); return ability; } } diff -r 2b977962302a -r 46ad6f478203 api/Objects/Race.cs --- a/api/Objects/Race.cs Sun Jul 05 09:50:40 2009 +0000 +++ b/api/Objects/Race.cs Sat Aug 01 16:06:25 2009 +0000 @@ -131,10 +131,10 @@ } } - public EquipmentItem GetEquipmentItem(string id) + public EquipmentItem GetEquipmentItem(string id) { EnsureFullyLoaded(); - return (EquipmentItem)equipment[id]; + return DictionaryUtils.GetValue(equipment, id); } public List GetEquipmentList() diff -r 2b977962302a -r 46ad6f478203 api/Objects/Unit.cs --- a/api/Objects/Unit.cs Sun Jul 05 09:50:40 2009 +0000 +++ b/api/Objects/Unit.cs Sat Aug 01 16:06:25 2009 +0000 @@ -24,12 +24,12 @@ private List containedUnits = new List(); public event DoubleValChangedDelegate PointsValueChanged; public event IntValChangedDelegate UnitSizeChanged; - public event DoubleValChangedDelegate UnitEquipmentAmountChanged; - - public Unit(UnitType unitType, ArmyCategory parentArmyCat) : this(unitType, unitType.MinSize, parentArmyCat) { } - + public event DoubleValChangedDelegate UnitEquipmentAmountChanged; + + public Unit(UnitType unitType, ArmyCategory parentArmyCat) : this(unitType, unitType.MinSize, parentArmyCat) { } + public Unit(UnitType unitType, int startSize, ArmyCategory parentArmyCat) - { + { Category = parentArmyCat; type = unitType; Size = startSize; @@ -151,10 +151,10 @@ } public ArmyCategory Category - { - get - { - return cat; + { + get + { + return cat; } set { cat = value; } } diff -r 2b977962302a -r 46ad6f478203 api/Objects/UnitEquipmentItem.cs --- a/api/Objects/UnitEquipmentItem.cs Sun Jul 05 09:50:40 2009 +0000 +++ b/api/Objects/UnitEquipmentItem.cs Sat Aug 01 16:06:25 2009 +0000 @@ -25,10 +25,9 @@ private string mutexGroup; private UnitType unitType; - protected UnitEquipmentItem(EquipmentItem equipmentItem, UnitType equipForType) + public UnitEquipmentItem(EquipmentItem equipmentItem) { item = equipmentItem; - EquipmentForUnit = equipForType; } public override string Name @@ -98,6 +97,7 @@ if (value != null) { unitType = value; + unitType.AddEquipmentItem(this); } } } @@ -175,6 +175,10 @@ { return false; } + else if (EquipmentForUnit == null) + { + return false; + } else { //If the number of items in the MutEx group is greater than one then it must be this item plus another diff -r 2b977962302a -r 46ad6f478203 api/Objects/UnitType.cs --- a/api/Objects/UnitType.cs Sun Jul 05 09:50:40 2009 +0000 +++ b/api/Objects/UnitType.cs Sat Aug 01 16:06:25 2009 +0000 @@ -229,9 +229,13 @@ public void AddEquipmentItem(UnitEquipmentItem item) { - equipment.Add(item.ID, item); - equipmentKeyOrder.Add(item.ID); - AddToMutexGroup(item); + if (!equipment.ContainsKey(item.ID)) + { + equipment.Add(item.ID, item); + equipmentKeyOrder.Add(item.ID); + AddToMutexGroup(item); + item.EquipmentForUnit = this; + } } private void AddToMutexGroup(UnitEquipmentItem item)