Mercurial > repos > IBBoard.WarFoundry.API
changeset 433:93c373701016
Re #356: Add factory for UnitRequiresNoMoreThanNOfUnitTypeRequirement
* Fill in body of methods, based on existing factory
* Rename factory to match requirement
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sun, 13 Nov 2011 20:55:02 +0000 |
parents | f64a52e2f8b1 |
children | c32bb2a53b87 |
files | API/Factories/Requirement/UnitRequiresNoMoreThanNOfUnitTypeRequirementFactory.cs API/Factories/Requirement/UnitRequiresNoMoreThanNUnitsRequirementFactory.cs IBBoard.WarFoundry.API.csproj |
diffstat | 3 files changed, 68 insertions(+), 30 deletions(-) [+] |
line wrap: on
line diff
--- /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<SOURCE_FILE_TYPE, ENTRY_TYPE>(UnitType type, string data, IRaceFactory<SOURCE_FILE_TYPE, ENTRY_TYPE> raceFactory) + { + UnitRequiresNoMoreThanNOfUnitTypeRequirement req = new UnitRequiresNoMoreThanNOfUnitTypeRequirement(type); + Race race = type.Race; + AddRequirements(req, race, data, raceFactory); + return req; + } + + private void AddRequirements<SOURCE_FILE_TYPE, ENTRY_TYPE>(UnitRequiresNoMoreThanNOfUnitTypeRequirement req, Race race, string data, IRaceFactory<SOURCE_FILE_TYPE, ENTRY_TYPE> 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); + } + } + } + } +} +
--- 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<SOURCE_FILE_TYPE, ENTRY_TYPE>(UnitType unitType, string typeID, IRaceFactory<SOURCE_FILE_TYPE, ENTRY_TYPE> raceFactory) - { - throw new NotImplementedException(); - } - - public string AppliesToID { - get { - throw new NotImplementedException (); - } - } - } -} -
--- 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 @@ <Compile Include="API\Factories\IRaceFactory.cs" /> <Compile Include="API\Factories\Requirement\IRequirementFactory.cs" /> <Compile Include="API\Commands\EditArmyCommand.cs" /> - <Compile Include="API\Factories\Requirement\UnitRequiresNoMoreThanNUnitsRequirementFactory.cs" /> + <Compile Include="API\Factories\Requirement\UnitRequiresNoMoreThanNOfUnitTypeRequirementFactory.cs" /> </ItemGroup> <ItemGroup> <Reference Include="System.Xml" />