Mercurial > repos > IBBoard.WarFoundry.API
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); } } }