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 }