Mercurial > repos > snowblizz-super-API-ideas
changeset 350:6c0404277cad
Re #27: Unit requirements
* Rebuild base "at least" requirement to say "N/A" when added unit isn't constrained
* Remove duplicate code from "unit requires at least" requirement and override where necessary
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sat, 09 Apr 2011 19:57:40 +0000 |
parents | 12a56786120c |
children | d97016f2515b |
files | API/Objects/Requirement/RequiresAtLeastNUnitsRequirement.cs API/Objects/Requirement/UnitRequiresAtLeastNUnitsRequirement.cs |
diffstat | 2 files changed, 65 insertions(+), 28 deletions(-) [+] |
line wrap: on
line diff
--- a/API/Objects/Requirement/RequiresAtLeastNUnitsRequirement.cs Sat Apr 09 19:14:11 2011 +0000 +++ b/API/Objects/Requirement/RequiresAtLeastNUnitsRequirement.cs Sat Apr 09 19:57:40 2011 +0000 @@ -38,8 +38,66 @@ /// </param> public virtual Validation AllowsAdding(WarFoundryObject wfObject, Army toArmy) { + return IsApplicable(wfObject, toArmy) ? CheckAllowsAdding(wfObject, toArmy) : Validation.NotApplicable; + } + + private bool IsApplicable(WarFoundryObject toObjectAdded, Army toArmy) + { + return IsApplicable(toArmy) || IsApplicable(toObjectAdded); + } + + protected virtual bool IsApplicable(Army toArmy) + { + return false; + } + + protected virtual bool IsApplicable(WarFoundryObject toObject) + { + bool isApplicable = false; + UnitType unitType = GetUnitTypeFromObject(toObject); + + if (unitType != null) + { + isApplicable = IsApplicable(unitType); + } + + return isApplicable; + } + + protected UnitType GetUnitTypeFromObject (WarFoundryObject toObject) + { + UnitType unitType = null; + + if (toObject is UnitType) + { + unitType = (UnitType)toObject; + } + else if (toObject is Unit) + { + unitType = ((Unit)toObject).UnitType; + } + + return unitType; + } + + private bool IsApplicable (UnitType unitType) + { + bool isApplicable = false; + foreach (UnitCountRequirementData requirement in requiredTypes) + { + if (requirement.UnitType.Equals(unitType)) + { + isApplicable = true; + break; + } + } + return isApplicable; + } + + private Validation CheckAllowsAdding(WarFoundryObject wfObject, Army toArmy) + { Validation isValid = Validation.Passed; - + foreach (UnitCountRequirementData requirement in requiredTypes) { if (GetUnitTypeCount(toArmy, requirement.UnitType, wfObject) < requirement.Count) @@ -48,7 +106,7 @@ break; } } - + return isValid; }
--- a/API/Objects/Requirement/UnitRequiresAtLeastNUnitsRequirement.cs Sat Apr 09 19:14:11 2011 +0000 +++ b/API/Objects/Requirement/UnitRequiresAtLeastNUnitsRequirement.cs Sat Apr 09 19:57:40 2011 +0000 @@ -19,42 +19,21 @@ requirementOnType = requirementOn; } - /// <summary> - /// Checks whether the supplied WarFoundryObject can be added to the supplied army. - /// </summary> - /// <returns> - /// A <code>Validation</code> enum to show the result of the validation - /// </returns> - /// <param name='wfObject'> - /// The object that we want to add. This may be involved in the check, or it may not affect the evaluation of the requirement - /// </param> - /// <param name='toArmy'> - /// The army to add the object to. - /// </param> - public override Validation AllowsAdding(WarFoundryObject wfObject, Army toArmy) + protected override bool IsApplicable(WarFoundryObject toObjectAdded) { - return IsApplicable(wfObject, toArmy) ? base.AllowsAdding(wfObject, toArmy) : Validation.NotApplicable; + return base.IsApplicable(toObjectAdded) || IsRequirementOnType(toObjectAdded); } - - private bool IsApplicable(WarFoundryObject toObject, Army toArmy) + private bool IsRequirementOnType(WarFoundryObject toObjectAdded) { - return IsApplicable(toArmy) || IsApplicable(toObject); + return requirementOnType.Equals(toObjectAdded) || (toObjectAdded is Unit && requirementOnType.Equals(((Unit)toObjectAdded).UnitType)); } - - private bool IsApplicable(Army toArmy) + protected override bool IsApplicable(Army toArmy) { return toArmy.GetUnitTypeCount(requirementOnType) > 0; } - - private bool IsApplicable(WarFoundryObject toObject) - { - return requirementOnType.Equals(toObject) || (toObject is Unit && requirementOnType.Equals(((Unit)toObject).UnitType)); - } - - public override Validation ValidatesArmy(Army toArmy) { return IsApplicable(toArmy) ? base.ValidatesArmy(toArmy) : Validation.NotApplicable;