diff api/Objects/UnitType.cs @ 152:0c0e14f03785

Re #180: Add multiple mutex groups * Add multiple mutex groups to UnitEquipmentItem * Add new attribute to Race schema * Make everywhere handle multiple groups instead of assuming one * Make factory load new attribute then fall back to old (deprecated) attribute * Add method to Unit to get the blocking items (useful for future UI work to say "replace X and Y with Z") * Add IsMutuallyExclusive method to UnitEquipmentItem to determine whether mutex groups overlap
author IBBoard <dev@ibboard.co.uk>
date Sat, 26 Sep 2009 19:51:11 +0000
parents 5145b7c61ae0
children 4a02c07278e7
line wrap: on
line diff
--- a/api/Objects/UnitType.cs	Sat Sep 26 18:48:36 2009 +0000
+++ b/api/Objects/UnitType.cs	Sat Sep 26 19:51:11 2009 +0000
@@ -233,15 +233,15 @@
 			{
 				equipment.Add(item.ID, item);
 				equipmentKeyOrder.Add(item.ID);
-				AddToMutexGroup(item);
+				AddToMutexGroups(item);
 			}
 		}
 		
-		private void AddToMutexGroup(UnitEquipmentItem item)
+		private void AddToMutexGroups(UnitEquipmentItem item)
 		{
-			string mutexGroup = item.MutexGroup;
+			string[] mutexGroups = item.MutexGroups;
 			
-			if (mutexGroup!="" && mutexGroup!=null)
+			foreach (string mutexGroup in mutexGroups)
 			{
 				List<UnitEquipmentItem> items = DictionaryUtils.GetValue(equipmentExclusionGroups, mutexGroup);
 				
@@ -295,17 +295,25 @@
 		}
 
 		public UnitEquipmentItem[] GetEquipmentItemsByExclusionGroup(string group)
-		{
-			List<UnitEquipmentItem> list = DictionaryUtils.GetValue(equipmentExclusionGroups, group);
+		{
+			return GetEquipmentItemsByExclusionGroups(new string[] { group });
+		}
 
-			if (list == null)
-			{
-				return new UnitEquipmentItem[0];
-			}
-			else
-			{
-				return list.ToArray();
-			}
+		public UnitEquipmentItem[] GetEquipmentItemsByExclusionGroups(string[] groups)
+		{
+			List<UnitEquipmentItem> list = new List<UnitEquipmentItem>();
+
+			foreach (string group in groups)
+			{
+				List<UnitEquipmentItem> groupList = DictionaryUtils.GetValue(equipmentExclusionGroups, group);
+
+				if (groupList != null)
+				{
+					list.AddRange(groupList);
+				}
+			}
+
+			return list.ToArray();
 		}
 		
 		public bool IsRatioLimitedEquipmentItem(EquipmentItem item)