diff api/Objects/Army.cs @ 83:89cc29b4c012

Re #90: Stop new units showing up twice * Hand all of unit adding/removing down to category * Refactor out OnFailedRequirement method in Army * Make Army listen to and propogate FailedRequirement events from Units * Add OnUnitAdded/Removed method to ArmyCategory that takes list of failures * Remove direct reference to Army from Unit and go via ArmyCategory instead
author IBBoard <dev@ibboard.co.uk>
date Sat, 27 Jun 2009 19:39:04 +0000
parents 3ea0ab04352b
children cb3759c3ea19
line wrap: on
line diff
--- a/api/Objects/Army.cs	Sat Jun 27 18:59:49 2009 +0000
+++ b/api/Objects/Army.cs	Sat Jun 27 19:39:04 2009 +0000
@@ -69,6 +69,7 @@
 						cat.PointsValueChanged+= PointsValueChangedMethod;
 						cat.UnitAdded+=new ObjectAddDelegate(Army_UnitAdded);
 						cat.UnitRemoved+=new ObjectRemoveDelegate(Army_UnitRemoved);
+						cat.FailedRequirement+=new FailedUnitRequirementDelegate(Army_FailedRequirement);
 					}
 				}
 				
@@ -97,19 +98,16 @@
 		protected void OnUnitAdded(Unit unit)
 		{
 			OnUnitAdded(unit, null);
-		}
-
-		protected void OnUnitAdded(Unit unit, List<FailedUnitRequirement> failedReqs)
-		{
-			if (UnitAdded!=null)
-			{
-				UnitAdded(unit);
-			}
-
-			if (FailedRequirement!=null && failedReqs!=null && failedReqs.Count > 0)
-			{
-				FailedRequirement(failedReqs);
-			}
+		}
+
+		protected void OnUnitAdded(Unit unit, List<FailedUnitRequirement> failedReqs)
+		{
+			if (UnitAdded != null)
+			{
+				UnitAdded(unit);
+			}
+
+			OnFailedRequirement(failedReqs);
 		}
 
 		protected void OnUnitRemoved(Unit unit)
@@ -122,12 +120,17 @@
 			if (UnitRemoved!=null)
 			{
 				UnitRemoved(unit);
-			}
-
-			if (FailedRequirement!=null && failedReqs!=null && failedReqs.Count > 0)
-			{
-				FailedRequirement(failedReqs);
-			}
+			}
+
+			OnFailedRequirement(failedReqs);
+		}
+
+		protected void OnFailedRequirement(List<FailedUnitRequirement> failedReqs)
+		{
+			if (FailedRequirement != null && failedReqs != null && failedReqs.Count > 0)
+			{
+				FailedRequirement(failedReqs);
+			}
 		}
 
 		private void OnPointsValueChanged(double oldValue, double newValue)
@@ -160,17 +163,13 @@
 		
 		public void AddUnit(Unit unit)
 		{
-			unit.Army = this;
 			ArmyCategory armyCat = GetCategory(unit.UnitType.MainCategory);
 			armyCat.AddUnit(unit);
 		}
 		
 		public void RemoveUnit(Unit unit)
 		{
-			List<FailedUnitRequirement> failedReqs = CanRemoveUnit(unit);
-			unit.Army = null;
 			unit.Category.RemoveUnit(unit);
-			OnUnitRemoved(unit, failedReqs);
 		}
 
 		public Unit[] GetUnits(Category cat)
@@ -254,14 +253,19 @@
 			return count;
 		}
 
-		private void Army_UnitAdded(object val)
+		private void Army_UnitAdded(WarFoundryObject val)
 		{
 			OnUnitAdded((Unit)val);
-		}
-
-		private void Army_UnitRemoved(object val)
+		}
+
+		private void Army_UnitRemoved(WarFoundryObject val)
 		{
 			OnUnitRemoved((Unit)val);
+		}
+
+		private void Army_FailedRequirement(List<FailedUnitRequirement> val)
+		{
+			OnFailedRequirement(val);
 		}
 	}
 }