Mercurial > repos > IBDev-IBBoard.WarFoundry.API
comparison API/Factories/Requirement/UnitRequiresAtLeastNUnitsRequirementFactory.cs @ 377:c3b0b28bad48
Re #353: Handle unloaded units being referenced outside factory
* Create interface for race factories
* Start to pull out common methods and add "try unit and fall back to factory" method for getting unit types
* Make XML Race Factory implement interface
* Use new factory
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Mon, 04 Jul 2011 20:02:26 +0000 |
parents | e50682387d63 |
children | 04f4c2fea356 |
comparison
equal
deleted
inserted
replaced
376:e50682387d63 | 377:c3b0b28bad48 |
---|---|
12 public UnitRequiresAtLeastNUnitsRequirementFactory() | 12 public UnitRequiresAtLeastNUnitsRequirementFactory() |
13 { | 13 { |
14 //Do nothing special | 14 //Do nothing special |
15 } | 15 } |
16 | 16 |
17 public UnitRequiresAtLeastNUnitsRequirement CreateRequirement(UnitType type, string data) | 17 public UnitRequiresAtLeastNUnitsRequirement CreateRequirement<SOURCE_FILE_TYPE, ENTRY_TYPE>(UnitType type, string data, IRaceFactory<SOURCE_FILE_TYPE, ENTRY_TYPE> raceFactory) |
18 { | 18 { |
19 UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(type); | 19 UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(type); |
20 Race race = type.Race; | 20 Race race = type.Race; |
21 AddRequirements(req, race, data); | 21 AddRequirements(req, race, data, raceFactory); |
22 return req; | 22 return req; |
23 } | 23 } |
24 | 24 |
25 private void AddRequirements(UnitRequiresAtLeastNUnitsRequirement req, Race race, string data) | 25 private void AddRequirements<SOURCE_FILE_TYPE, ENTRY_TYPE>(UnitRequiresAtLeastNUnitsRequirement req, Race race, string data, IRaceFactory<SOURCE_FILE_TYPE, ENTRY_TYPE> raceFactory) |
26 { | 26 { |
27 foreach (string requirement in data.Split('|')) | 27 foreach (string requirement in data.Split('|')) |
28 { | 28 { |
29 string[] requirementParts = requirement.Split(':'); | 29 string[] requirementParts = requirement.Split(':'); |
30 string unitID = requirementParts[0]; | 30 string unitID = requirementParts[0]; |
31 UnitType unitType = race.GetUnitType(unitID); | 31 UnitType unitType = raceFactory.GetUnitType(unitID, race); |
32 | 32 |
33 if (unitType == null) | 33 if (unitType == null) |
34 { | 34 { |
35 throw new InvalidRequirementException(String.Format("Invalid unit type '{0}' for 'Requires at least N units' requirement", unitID)); | 35 throw new InvalidRequirementException(String.Format("Invalid unit type '{0}' for 'Requires at least N units' requirement", unitID)); |
36 } | 36 } |