# HG changeset patch # User IBBoard # Date 1307994279 0 # Node ID bfdb95906075c8571b152a9c5add24a43a8695f2 # Parent 077e9be484387ae267545ff6df2d0b32fd3218dc Re #351: Add extensible requirement handling method * First refactor of extensible requirement creation * Needs to return different types of factory * Needs to handle unit types that are currently not loaded diff -r 077e9be48438 -r bfdb95906075 API/Factories/Requirement/UnitRequiresAtLeastNUnitsRequirementFactory.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/API/Factories/Requirement/UnitRequiresAtLeastNUnitsRequirementFactory.cs Mon Jun 13 19:44:39 2011 +0000 @@ -0,0 +1,24 @@ +// This file (UnitRequiresAtLeastNUnitsRequirementFactory.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 UnitRequiresAtLeastNUnitsRequirementFactory + { + public UnitRequiresAtLeastNUnitsRequirementFactory() + { + //Do nothing special + } + + public UnitRequiresAtLeastNUnitsRequirement CreateRequirement (UnitType type, string data) + { + UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(type); + return req; + } + } +} + diff -r 077e9be48438 -r bfdb95906075 API/Factories/Xml/WarFoundryXmlRaceFactory.cs --- a/API/Factories/Xml/WarFoundryXmlRaceFactory.cs Mon Jun 13 15:15:04 2011 +0000 +++ b/API/Factories/Xml/WarFoundryXmlRaceFactory.cs Mon Jun 13 19:44:39 2011 +0000 @@ -12,7 +12,8 @@ using IBBoard.CustomMath; using ICSharpCode.SharpZipLib.Zip; using IBBoard.WarFoundry.API.Objects; -using IBBoard.WarFoundry.API.Objects.Requirement; +using IBBoard.WarFoundry.API.Objects.Requirement; +using IBBoard.WarFoundry.API.Factories.Requirement; namespace IBBoard.WarFoundry.API.Factories.Xml { @@ -373,19 +374,24 @@ } private void LoadRequirementsForUnitType(XmlElement elem, UnitType type) - { - //TODO: Handle requirements more extensibly + { foreach (XmlElement extraData in WarFoundryXmlFactoryUtils.SelectNodes(elem, "race:requirements/race:requirement")) { string name = extraData.GetAttribute("requirementName"); - if (name == "RequiresAtLeastNUnits") { + UnitRequiresAtLeastNUnitsRequirementFactory reqFactory = GetRequirementFactory(name); + + if (reqFactory != null) { string data = WarFoundryXmlFactoryUtils.SelectSingleElement(extraData, "race:data").InnerText; - UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(type); - req.AddUnitTypeRequirement(GetUnitTypeFromDocument(elem.OwnerDocument, data, type.Race)); + UnitRequiresAtLeastNUnitsRequirement req = reqFactory.CreateRequirement(type, data); type.AddRequirement(req); } } } + + UnitRequiresAtLeastNUnitsRequirementFactory GetRequirementFactory (string name) + { + return new UnitRequiresAtLeastNUnitsRequirementFactory(); + } private void LoadExtraDataForUnitType(XmlElement elem, UnitType type) { diff -r 077e9be48438 -r bfdb95906075 IBBoard.WarFoundry.API.csproj --- a/IBBoard.WarFoundry.API.csproj Mon Jun 13 15:15:04 2011 +0000 +++ b/IBBoard.WarFoundry.API.csproj Mon Jun 13 19:44:39 2011 +0000 @@ -179,6 +179,7 @@ +