Mercurial > repos > IBDev-IBBoard.WarFoundry.API
diff API/Objects/Requirement/RequiresAtLeastNUnitsRequirement.cs @ 345:008537acf244
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
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sat, 09 Apr 2011 11:00:09 +0000 |
parents | 7bd2a7cdbfbd |
children | 44a6539fadf9 |
line wrap: on
line diff
--- 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 @@ /// </param> 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; } /// <summary>