# HG changeset patch # User IBBoard # Date 1304277460 0 # Node ID 0dd8dbe8afe97d13dce0373bfb9c3f76fdec4439 # Parent 506af4cbe3f52518da6c96f1609a92908b5bf9b3 Fixes #345: Add failure message to requirements * Add implementation of failure messages for "allows adding" diff -r 506af4cbe3f5 -r 0dd8dbe8afe9 API/Objects/Requirement/AbstractRequirement.cs --- a/API/Objects/Requirement/AbstractRequirement.cs Sun May 01 19:16:23 2011 +0000 +++ b/API/Objects/Requirement/AbstractRequirement.cs Sun May 01 19:17:40 2011 +0000 @@ -50,12 +50,12 @@ } - public string GetValidationMessage (Army army) + public string GetValidationMessage(Army army) { string message = ""; - var obj = ValidatesArmy(army); - if (!Validates.AsOkay(obj)) + Validation result = ValidatesArmy(army); + if (!Validates.AsOkay(result)) { message = GetValidationFailedMessage(army); } @@ -63,11 +63,26 @@ return message; } - protected abstract string GetValidationFailedMessage (Army army); + protected abstract string GetValidationFailedMessage(Army army); + + public string GetAllowsAddingMessage(UnitType toAdd, Army toArmy) + { + string message = ""; + + Validation result = AllowsAdding(toAdd, toArmy); + if (!Validates.AsOkay(result)) + { + message = GetAllowsAddingFailedMessage(toAdd, toArmy); + } + + return message; + } + + protected abstract string GetAllowsAddingFailedMessage(UnitType toAdd, Army toArmy); - public abstract Validation AllowsAdding (WarFoundryObject wfObject, Army toArmy); + public abstract Validation AllowsAdding(WarFoundryObject wfObject, Army toArmy); - public abstract Validation ValidatesArmy (Army army); + public abstract Validation ValidatesArmy(Army army); } } diff -r 506af4cbe3f5 -r 0dd8dbe8afe9 API/Objects/Requirement/IRequirement.cs --- a/API/Objects/Requirement/IRequirement.cs Sun May 01 19:16:23 2011 +0000 +++ b/API/Objects/Requirement/IRequirement.cs Sun May 01 19:17:40 2011 +0000 @@ -45,6 +45,20 @@ /// The army to validate. /// string GetValidationMessage(Army army); + + /// + /// Gets the validation message for adding a unit to the army + /// + /// + /// A validation message, if the type cannot be added, else an empty string. + /// + /// + /// The unit type to try to add + /// + /// + /// The army the unit will be added to + /// + string GetAllowsAddingMessage(UnitType toAdd, Army toArmy); } } diff -r 506af4cbe3f5 -r 0dd8dbe8afe9 API/Objects/Requirement/RequiresAtLeastNUnitsRequirement.cs --- a/API/Objects/Requirement/RequiresAtLeastNUnitsRequirement.cs Sun May 01 19:16:23 2011 +0000 +++ b/API/Objects/Requirement/RequiresAtLeastNUnitsRequirement.cs Sun May 01 19:17:40 2011 +0000 @@ -182,7 +182,7 @@ protected string FailureStringPrefix { get; set; } - protected override string GetValidationFailedMessage (Army army) + protected override string GetValidationFailedMessage(Army army) { StringBuilder sb = new StringBuilder(); sb.Append(FailureStringPrefix); @@ -207,6 +207,32 @@ return failures; } + + protected override string GetAllowsAddingFailedMessage(UnitType toAdd, Army toArmy) + { + StringBuilder sb = new StringBuilder(); + sb.Append(FailureStringPrefix); + sb.Append(String.Join("; ", GetFailedAddingRequirements(toAdd, toArmy).ToArray())); + sb.Append("."); + return sb.ToString(); + } + + private List GetFailedAddingRequirements(UnitType unitType, Army army) + { + List failures = new List(); + + foreach (UnitCountRequirementData requirement in requiredTypes) + { + int unitCount = GetUnitTypeCount(army, requirement.UnitType, unitType); + + if (unitCount < requirement.Count) + { + failures.Add(requirement.Count + " × " + requirement.UnitType.Name + " (would have " + unitCount + ")"); + } + } + + return failures; + } } } diff -r 506af4cbe3f5 -r 0dd8dbe8afe9 API/Objects/Requirement/RequiresNoMoreThanNOfUnitTypeRequirement.cs --- a/API/Objects/Requirement/RequiresNoMoreThanNOfUnitTypeRequirement.cs Sun May 01 19:16:23 2011 +0000 +++ b/API/Objects/Requirement/RequiresNoMoreThanNOfUnitTypeRequirement.cs Sun May 01 19:17:40 2011 +0000 @@ -147,6 +147,32 @@ return failures; } + + protected override string GetAllowsAddingFailedMessage(UnitType toAdd, Army toArmy) + { + StringBuilder sb = new StringBuilder(); + sb.Append(FailureStringPrefix); + sb.Append(String.Join("; ", GetFailedAddingRequirements(toAdd, toArmy).ToArray())); + sb.Append("."); + return sb.ToString(); + } + + private List GetFailedAddingRequirements(UnitType unitType, Army army) + { + List failures = new List(); + + foreach (UnitCountRequirementData requirement in limitedTypes) + { + int unitCount = GetUnitTypeCount(army, requirement.UnitType, unitType); + + if (unitCount > requirement.Count) + { + failures.Add(requirement.Count + " × " + requirement.UnitType.Name + " (would have " + unitCount + ")"); + } + } + + return failures; + } } }