# HG changeset patch # User IBBoard # Date 1249674561 0 # Node ID 729d9e54162cb3b5ec59efae850ab5d4167b2764 # Parent 571d8ddc7d9ae0d5a5f038a43fa514031d4fc21c Re #111: "Replace" button doesn't always enable * Implement better fix: * Make UnitEquipmentItem ID based on unit type ID and equipment item ID * Make UnitEquipmentItem require UnitType at construction again * Remove setter from EquipmentItemForUnit * Make AddEquipmentItem method internal so that the UnitEquipmentItem and not the factory is responsible for setting up the reverse link no-open-ticket diff -r 571d8ddc7d9a -r 729d9e54162c api/Factories/Xml/WarFoundryXmlRaceFactory.cs --- a/api/Factories/Xml/WarFoundryXmlRaceFactory.cs Fri Aug 07 19:22:08 2009 +0000 +++ b/api/Factories/Xml/WarFoundryXmlRaceFactory.cs Fri Aug 07 19:49:21 2009 +0000 @@ -156,7 +156,7 @@ if (equipItem!=null) { - UnitEquipmentItem unitEquipItem = new UnitEquipmentItem(equipItem); + UnitEquipmentItem unitEquipItem = new UnitEquipmentItem(equipItem, type); unitEquipItem.MutexGroup = equip.GetAttribute("exclusivityGroup"); unitEquipItem.RoundNumberUp = equip.GetAttribute("roundDirection").Equals("up"); @@ -223,8 +223,6 @@ { throw new InvalidFileException("Attribute 'costRounding' of unit equipment item " + id + " for " + type.Name + " was not a valid rounding type", e); } - - type.AddEquipmentItem(unitEquipItem); } else { diff -r 571d8ddc7d9a -r 729d9e54162c api/Objects/UnitEquipmentItem.cs --- a/api/Objects/UnitEquipmentItem.cs Fri Aug 07 19:22:08 2009 +0000 +++ b/api/Objects/UnitEquipmentItem.cs Fri Aug 07 19:49:21 2009 +0000 @@ -25,20 +25,36 @@ private string mutexGroup; private UnitType unitType; - public UnitEquipmentItem(EquipmentItem equipmentItem) + public UnitEquipmentItem(EquipmentItem equipmentItem, UnitType equipmentFor) { item = equipmentItem; + unitType = equipmentFor; + unitType.AddEquipmentItem(this); } public override string Name { - get { + get + { return item.Name; } - set { + set + { base.Name = value; } } + + public override string ID { + get + { + return (EquipmentForUnit == null ? base.ID : EquipmentForUnit.ID) + EquipmentItemID; + } + set + { + base.ID = value; + } + } + public string EquipmentItemID { @@ -92,14 +108,6 @@ public UnitType EquipmentForUnit { get { return unitType; } - set - { - if (value != null) - { - unitType = value; - unitType.AddEquipmentItem(this); - } - } } public bool IsRatioLimit @@ -221,7 +229,7 @@ { if (amount == WarFoundryCore.INFINITY) { - return "all"; + return "all"; //TODO: Translate } else { diff -r 571d8ddc7d9a -r 729d9e54162c api/Objects/UnitType.cs --- a/api/Objects/UnitType.cs Fri Aug 07 19:22:08 2009 +0000 +++ b/api/Objects/UnitType.cs Fri Aug 07 19:49:21 2009 +0000 @@ -227,14 +227,14 @@ return stats.GetStatValue(statName); } - public void AddEquipmentItem(UnitEquipmentItem item) - { + internal void AddEquipmentItem(UnitEquipmentItem item) + { + Console.WriteLine("Add " + item.ID + " to " + Name); if (!equipment.ContainsKey(item.ID)) { equipment.Add(item.ID, item); equipmentKeyOrder.Add(item.ID); AddToMutexGroup(item); - item.EquipmentForUnit = this; } }