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" />