# HG changeset patch # User IBBoard # Date 1321217702 0 # Node ID 93c373701016191a9de35b352868ffd132e23a3e # Parent f64a52e2f8b113d30e6998f713cfaf893e958897 Re #356: Add factory for UnitRequiresNoMoreThanNOfUnitTypeRequirement * Fill in body of methods, based on existing factory * Rename factory to match requirement diff -r f64a52e2f8b1 -r 93c373701016 API/Factories/Requirement/UnitRequiresNoMoreThanNOfUnitTypeRequirementFactory.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/API/Factories/Requirement/UnitRequiresNoMoreThanNOfUnitTypeRequirementFactory.cs Sun Nov 13 20:55:02 2011 +0000 @@ -0,0 +1,67 @@ +// This file (UnitRequiresNoMoreThanNUnitsRequirementFactory.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2011 IBBoard +// +// The file and the library/program it is in are licensed and distributed, without warranty, under the GNU Affero GPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license. +using System; +using IBBoard.WarFoundry.API.Objects; +using IBBoard.WarFoundry.API.Objects.Requirement; + +namespace IBBoard.WarFoundry.API.Factories.Requirement +{ + public class UnitRequiresNoMoreThanNOfUnitTypeRequirementFactory : IRequirementFactory + { + public UnitRequiresNoMoreThanNOfUnitTypeRequirementFactory() + { + //Do nothing special + } + + public string AppliesToID + { + get + { + return UnitRequiresNoMoreThanNOfUnitTypeRequirement.REQUIREMENT_ID; + } + } + + public IRequirement CreateRequirement(UnitType type, string data, IRaceFactory raceFactory) + { + UnitRequiresNoMoreThanNOfUnitTypeRequirement req = new UnitRequiresNoMoreThanNOfUnitTypeRequirement(type); + Race race = type.Race; + AddRequirements(req, race, data, raceFactory); + return req; + } + + private void AddRequirements(UnitRequiresNoMoreThanNOfUnitTypeRequirement req, Race race, string data, IRaceFactory raceFactory) + { + foreach (string requirement in data.Split('|')) + { + string[] requirementParts = requirement.Split(':'); + string unitID = requirementParts[0]; + UnitType unitType = raceFactory.GetUnitType(unitID, race); + + if (unitType == null) + { + throw new InvalidRequirementException(String.Format("Invalid unit type '{0}' for 'Requires no more than N of unit type' requirement", unitID)); + } + + if (requirementParts.Length == 2) + { + string amount = requirementParts[1]; + + try + { + req.AddUnitTypeRequirement(unitType, Int32.Parse(amount)); + } + catch (FormatException) + { + throw new InvalidRequirementException(String.Format("Invalid amount '{0}' for unit type '{1}' for 'Requires no more than N of unit type' requirement", amount, unitID)); + } + } + else + { + req.AddUnitTypeRequirement(unitType); + } + } + } + } +} + diff -r f64a52e2f8b1 -r 93c373701016 API/Factories/Requirement/UnitRequiresNoMoreThanNUnitsRequirementFactory.cs --- a/API/Factories/Requirement/UnitRequiresNoMoreThanNUnitsRequirementFactory.cs Sun Nov 13 20:46:46 2011 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -// This file (UnitRequiresNoMoreThanNUnitsRequirementFactory.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2011 IBBoard -// -// The file and the library/program it is in are licensed and distributed, without warranty, under the GNU Affero GPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license. -using System; -using IBBoard.WarFoundry.API.Objects; -using IBBoard.WarFoundry.API.Objects.Requirement; - -namespace IBBoard.WarFoundry.API.Factories.Requirement -{ - public class UnitRequiresNoMoreThanNUnitsRequirementFactory : IRequirementFactory - { - public UnitRequiresNoMoreThanNUnitsRequirementFactory() - { - //Do nothing special - } - - public IRequirement CreateRequirement(UnitType unitType, string typeID, IRaceFactory raceFactory) - { - throw new NotImplementedException(); - } - - public string AppliesToID { - get { - throw new NotImplementedException (); - } - } - } -} - diff -r f64a52e2f8b1 -r 93c373701016 IBBoard.WarFoundry.API.csproj --- a/IBBoard.WarFoundry.API.csproj Sun Nov 13 20:46:46 2011 +0000 +++ b/IBBoard.WarFoundry.API.csproj Sun Nov 13 20:55:02 2011 +0000 @@ -183,7 +183,7 @@ - +