# HG changeset patch # User IBBoard # Date 1302346809 0 # Node ID 008537acf2447a92187e612a0bf7228f469ae487 # Parent 8585dfacac3b4ae2a90db9b8b1b99f290fa29977 Re #27: Unit requirements * Make basic "Requires at least" requirement take into account the unit type being added * Make unit version of "requires at least" requirement pass execution up to the matching parent method diff -r 8585dfacac3b -r 008537acf244 API/Objects/Requirement/RequiresAtLeastNUnitsRequirement.cs --- a/API/Objects/Requirement/RequiresAtLeastNUnitsRequirement.cs Sat Apr 09 10:47:58 2011 +0000 +++ b/API/Objects/Requirement/RequiresAtLeastNUnitsRequirement.cs Sat Apr 09 11:00:09 2011 +0000 @@ -38,7 +38,28 @@ /// public virtual Validation AllowsAdding(WarFoundryObject wfObject, Army toArmy) { - return this.ValidatesArmy(toArmy); + Validation isValid = Validation.Passed; + + foreach (UnitCountRequirementData requirement in requiredTypes) + { + if (GetUnitTypeCount(toArmy, requirement.UnitType, wfObject) < requirement.Count) + { + isValid = Validation.Failed; + break; + } + } + + return isValid; + } + + private int GetUnitTypeCount(Army toArmy, UnitType unitType, WarFoundryObject wfObject) + { + return toArmy.GetUnitTypeCount(unitType) + GetCountFromObject(wfObject, unitType); + } + + private int GetCountFromObject(WarFoundryObject wfObject, UnitType limitedType) + { + return (limitedType.Equals(wfObject) || (wfObject is Unit && ((Unit)wfObject).UnitType.Equals(limitedType))) ? 1 : 0; } /// diff -r 8585dfacac3b -r 008537acf244 API/Objects/Requirement/UnitRequiresAtLeastNUnitsRequirement.cs --- a/API/Objects/Requirement/UnitRequiresAtLeastNUnitsRequirement.cs Sat Apr 09 10:47:58 2011 +0000 +++ b/API/Objects/Requirement/UnitRequiresAtLeastNUnitsRequirement.cs Sat Apr 09 11:00:09 2011 +0000 @@ -33,7 +33,7 @@ /// public override Validation AllowsAdding(WarFoundryObject wfObject, Army toArmy) { - return IsApplicable(wfObject, toArmy) ? base.ValidatesArmy(toArmy) : Validation.NotApplicable; + return IsApplicable(wfObject, toArmy) ? base.AllowsAdding(wfObject, toArmy) : Validation.NotApplicable; }