annotate api/Factories/Xml/WarFoundryXmlRaceFactory.cs @ 219:f609bcf7035b

Fixes #222: decimal comma/point not handled correctly (again?) in costMultiplier * Replace two "type.Parse" calls with XmlTools calls All decimals in WarFoundry should use the decimal point (or "period" to Americans) rather than the decimal comma because that's what XML uses in its default type definitions
author IBBoard <dev@ibboard.co.uk>
date Sat, 28 Nov 2009 16:40:27 +0000
parents 89e26d51afc2
children 78f7456f6419
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
1 // This file (WarFoundryXmlRaceFactory.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2009 IBBoard
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
2 //
104
2f3cafb69799 Re #121: Migrate to AGPL license
IBBoard <dev@ibboard.co.uk>
parents: 99
diff changeset
3 // 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.
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
4
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
5 using System;
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
6 using System.Collections.Generic;
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
7 using System.IO;
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
8 using System.Xml;
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
9 using IBBoard.Xml;
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
10 using IBBoard.IO;
176
22429737cd77 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 175
diff changeset
11 using IBBoard.Limits;
171
85dc413279a4 * Change imports to stop references to deprecated code
IBBoard <dev@ibboard.co.uk>
parents: 170
diff changeset
12 using IBBoard.CustomMath;
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
13 using ICSharpCode.SharpZipLib.Zip;
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
14 using IBBoard.WarFoundry.API.Objects;
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
15
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
16 namespace IBBoard.WarFoundry.API.Factories.Xml
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
17 {
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
18 /// <summary>
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
19 /// A sub-factory for loading WarFoundry Race XML files
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
20 /// </summary>
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
21 public class WarFoundryXmlRaceFactory : AbstractStagedLoadedSubFactory
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
22 {
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
23 private Dictionary<Race, XmlDocument> extraData = new Dictionary<Race, XmlDocument>();
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
24
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
25 public WarFoundryXmlRaceFactory(WarFoundryXmlFactory factory) : base (factory)
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
26 {
99
05a78408ae8f Re #58: Remove log notifier
IBBoard <dev@ibboard.co.uk>
parents: 92
diff changeset
27 //Do nothing special
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
28 }
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
29
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
30 private void StoreExtraData(Race wfObject, XmlElement elem)
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
31 {
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
32 extraData[wfObject] = elem.OwnerDocument;
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
33 }
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
34
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
35 private XmlDocument GetExtraData(Race obj)
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
36 {
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
37 XmlDocument extra = null;
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
38 extraData.TryGetValue(obj, out extra);
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
39 return extra;
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
40 }
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
41
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
42 public Race CreateRaceFromElement(ZipFile file, XmlElement elem)
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
43 {
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
44 string id = elem.GetAttribute("id");
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
45 string subid = elem.GetAttribute("subid");
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
46 string systemID = elem.GetAttribute("system");
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
47 string name = elem.GetAttribute("name");
55
9080366031c0 Re #9 - Refactor for small methods
IBBoard <dev@ibboard.co.uk>
parents: 53
diff changeset
48 Race race = new Race(id, subid, name, WarFoundryLoader.GetDefault().GetGameSystem(systemID), mainFactory);
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
49 StoreExtraData(race, elem);
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
50 return race;
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
51 }
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
53 public void CompleteLoading(Race race)
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
54 {
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
55 if (!WarFoundryXmlFactoryUtils.CanCompleteLoading(race))
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
56 {
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
57 return;
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
58 }
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
59
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
60 race.SetAsLoading();
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
61 XmlDocument extraData = GetExtraData(race);
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
62
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
63 foreach (XmlElement node in WarFoundryXmlFactoryUtils.SelectNodes(extraData, "/race:race/race:categories/cat:cat"))
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
64 {
68
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
65 CreateCategoryFromElement(node, race);
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
66 }
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
67
85
46ad6f478203 Re #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 81
diff changeset
68 foreach (XmlElement node in WarFoundryXmlFactoryUtils.SelectNodes(extraData, "/race:race/race:equipment/race:equipmentItem"))
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
69 {
68
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
70 CreateEquipmentItemFromElement(node, race);
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
71 }
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
72
85
46ad6f478203 Re #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 81
diff changeset
73 foreach (XmlElement node in WarFoundryXmlFactoryUtils.SelectNodes(extraData, "/race:race/race:abilities/race:ability"))
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
74 {
68
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
75 CreateAbilityFromElement(node, race);
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
76 }
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
77
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
78 foreach (XmlElement node in WarFoundryXmlFactoryUtils.SelectNodes(extraData, "/race:race/race:units/race:unit"))
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
79 {
70
780f3926abad Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 69
diff changeset
80 GetUnitTypeForElement(node, race);
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
81 }
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
82
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
83 race.SetAsFullyLoaded();
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
84 }
68
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
85
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
86 private Category CreateCategoryFromElement(XmlElement elem, Race parentRace)
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
87 {
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
88 Category cat = CreateCategoryFromElement(elem);
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
89 parentRace.AddCategory(cat);
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
90 return cat;
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
91 }
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
92
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
93 private UnitType GetUnitTypeFromDocument(XmlDocument doc, string id, Race parentRace)
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
94 {
217
89e26d51afc2 Fixes #226: "NullReferenceException" for a unitID
IBBoard <dev@ibboard.co.uk>
parents: 207
diff changeset
95 XmlElement unitWithId = WarFoundryXmlFactoryUtils.SelectSingleElement (doc, "/race:race/race:units/race:unit[@id='" + id + "']");
89e26d51afc2 Fixes #226: "NullReferenceException" for a unitID
IBBoard <dev@ibboard.co.uk>
parents: 207
diff changeset
96
89e26d51afc2 Fixes #226: "NullReferenceException" for a unitID
IBBoard <dev@ibboard.co.uk>
parents: 207
diff changeset
97 if (unitWithId == null)
89e26d51afc2 Fixes #226: "NullReferenceException" for a unitID
IBBoard <dev@ibboard.co.uk>
parents: 207
diff changeset
98 {
89e26d51afc2 Fixes #226: "NullReferenceException" for a unitID
IBBoard <dev@ibboard.co.uk>
parents: 207
diff changeset
99 throw new InvalidFileException("Could not find unit with ID "+id);
89e26d51afc2 Fixes #226: "NullReferenceException" for a unitID
IBBoard <dev@ibboard.co.uk>
parents: 207
diff changeset
100 }
89e26d51afc2 Fixes #226: "NullReferenceException" for a unitID
IBBoard <dev@ibboard.co.uk>
parents: 207
diff changeset
101
89e26d51afc2 Fixes #226: "NullReferenceException" for a unitID
IBBoard <dev@ibboard.co.uk>
parents: 207
diff changeset
102 return GetUnitTypeForElement(unitWithId, parentRace);
68
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
103 }
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
104
70
780f3926abad Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 69
diff changeset
105 private UnitType GetUnitTypeForElement(XmlElement elem, Race parentRace)
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
106 {
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
107 string id = elem.GetAttribute("id");
68
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
108 UnitType type = parentRace.GetUnitType(id);
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
109
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
110 if (type==null)
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
111 {
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
112 type = CreateUnitTypeFromElement(elem, id, parentRace);
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
113 }
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
114
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
115 return type;
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
116 }
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
117
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
118 private UnitType CreateUnitTypeFromElement(XmlElement elem, string id, Race parentRace)
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
119 {
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
120 string name = elem.GetAttribute("typeName");
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
121 UnitType type = new UnitType(id, name, parentRace);
170
3045a168714a * Line ending clean-up
IBBoard <dev@ibboard.co.uk>
parents: 167
diff changeset
122 LoadCoreValuesForUnitType(elem, type);
167
9ba56a8e5096 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 158
diff changeset
123 LoadEquipmentSlotsForUnitType(elem, type);
68
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
124 LoadEquipmentForUnitType(elem, type);
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
125 LoadAbilitiesForUnitType(elem, type);
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
126 LoadContainedUnitsForUnitType(elem, type);
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
127 LoadRequirementsForUnitType(elem, type);
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
128 LoadExtraDataForUnitType(elem, type);
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
129 LoadNotesForUnitType(elem, type);
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
130 parentRace.AddUnitType(type);
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
131 return type;
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
132 }
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
133
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
134 private void LoadCoreValuesForUnitType(XmlElement elem, UnitType type)
158
eb9a6d91a6db Fixes #190: Mutex groups aren't honoured when adding equipment
IBBoard <dev@ibboard.co.uk>
parents: 156
diff changeset
135 {
eb9a6d91a6db Fixes #190: Mutex groups aren't honoured when adding equipment
IBBoard <dev@ibboard.co.uk>
parents: 156
diff changeset
136 try
eb9a6d91a6db Fixes #190: Mutex groups aren't honoured when adding equipment
IBBoard <dev@ibboard.co.uk>
parents: 156
diff changeset
137 {
eb9a6d91a6db Fixes #190: Mutex groups aren't honoured when adding equipment
IBBoard <dev@ibboard.co.uk>
parents: 156
diff changeset
138 type.MaxNumber = XmlTools.GetIntValueFromAttribute(elem, "maxNum");
eb9a6d91a6db Fixes #190: Mutex groups aren't honoured when adding equipment
IBBoard <dev@ibboard.co.uk>
parents: 156
diff changeset
139 type.MinNumber = XmlTools.GetIntValueFromAttribute(elem, "minNum");
eb9a6d91a6db Fixes #190: Mutex groups aren't honoured when adding equipment
IBBoard <dev@ibboard.co.uk>
parents: 156
diff changeset
140 type.MaxSize = XmlTools.GetIntValueFromAttribute(elem, "maxSize");
eb9a6d91a6db Fixes #190: Mutex groups aren't honoured when adding equipment
IBBoard <dev@ibboard.co.uk>
parents: 156
diff changeset
141 type.MinSize = XmlTools.GetIntValueFromAttribute(elem, "minSize");
eb9a6d91a6db Fixes #190: Mutex groups aren't honoured when adding equipment
IBBoard <dev@ibboard.co.uk>
parents: 156
diff changeset
142 type.BaseSize = XmlTools.GetIntValueFromAttribute(elem, "baseSize");
eb9a6d91a6db Fixes #190: Mutex groups aren't honoured when adding equipment
IBBoard <dev@ibboard.co.uk>
parents: 156
diff changeset
143 type.CostPerTrooper = XmlTools.GetDoubleValueFromAttribute(elem, "points");
eb9a6d91a6db Fixes #190: Mutex groups aren't honoured when adding equipment
IBBoard <dev@ibboard.co.uk>
parents: 156
diff changeset
144 type.BaseUnitCost = XmlTools.GetDoubleValueFromAttribute(elem, "unitPoints");
eb9a6d91a6db Fixes #190: Mutex groups aren't honoured when adding equipment
IBBoard <dev@ibboard.co.uk>
parents: 156
diff changeset
145 }
eb9a6d91a6db Fixes #190: Mutex groups aren't honoured when adding equipment
IBBoard <dev@ibboard.co.uk>
parents: 156
diff changeset
146 catch (FormatException ex)
eb9a6d91a6db Fixes #190: Mutex groups aren't honoured when adding equipment
IBBoard <dev@ibboard.co.uk>
parents: 156
diff changeset
147 {
217
89e26d51afc2 Fixes #226: "NullReferenceException" for a unitID
IBBoard <dev@ibboard.co.uk>
parents: 207
diff changeset
148 throw new InvalidFileException(ex.Message, ex);
156
62ff1ac132d2 Fixes #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 154
diff changeset
149 }
62ff1ac132d2 Fixes #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 154
diff changeset
150
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
151 string mainCatID = elem.GetAttribute("cat");
68
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
152 Category cat = type.Race.GetCategory(mainCatID);
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
153
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
154 if (cat == null)
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
155 {
217
89e26d51afc2 Fixes #226: "NullReferenceException" for a unitID
IBBoard <dev@ibboard.co.uk>
parents: 207
diff changeset
156 throw new InvalidFileException(String.Format("Category with ID '{1}' did not exist for UnitType '{0}'", type.Name, mainCatID));
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
157 }
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
158
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
159 type.MainCategory = cat;
133
a6d1cc17ec33 * Fix XPath query so that units get the right stats instead of just the first stats
IBBoard <dev@ibboard.co.uk>
parents: 128
diff changeset
160 XmlElement statsElement = WarFoundryXmlFactoryUtils.SelectSingleElement(elem, "race:stats");
81
032b174fc17a Re #10 - Refactoring for readability
IBBoard <dev@ibboard.co.uk>
parents: 71
diff changeset
161 Stats unitStats = ParseUnitStats(statsElement, type.GameSystem);
170
3045a168714a * Line ending clean-up
IBBoard <dev@ibboard.co.uk>
parents: 167
diff changeset
162 type.SetUnitStats(unitStats);
3045a168714a * Line ending clean-up
IBBoard <dev@ibboard.co.uk>
parents: 167
diff changeset
163 }
3045a168714a * Line ending clean-up
IBBoard <dev@ibboard.co.uk>
parents: 167
diff changeset
164
3045a168714a * Line ending clean-up
IBBoard <dev@ibboard.co.uk>
parents: 167
diff changeset
165 private void LoadEquipmentSlotsForUnitType(XmlElement elem, UnitType type)
3045a168714a * Line ending clean-up
IBBoard <dev@ibboard.co.uk>
parents: 167
diff changeset
166 {
176
22429737cd77 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 175
diff changeset
167 foreach (XmlElement equipSlot in WarFoundryXmlFactoryUtils.SelectNodes(elem, "race:equipmentSlots/race:equipmentSlot"))
170
3045a168714a * Line ending clean-up
IBBoard <dev@ibboard.co.uk>
parents: 167
diff changeset
168 {
176
22429737cd77 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 175
diff changeset
169 LoadEquipmentSlotForUnitType (type, equipSlot);
22429737cd77 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 175
diff changeset
170 }
22429737cd77 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 175
diff changeset
171 }
22429737cd77 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 175
diff changeset
172
22429737cd77 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 175
diff changeset
173 private static void LoadEquipmentSlotForUnitType (UnitType type, XmlElement equipSlot)
22429737cd77 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 175
diff changeset
174 {
22429737cd77 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 175
diff changeset
175 string slotName = equipSlot.GetAttribute ("name");
183
36adabb1c3ea Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 176
diff changeset
176 AbstractLimit limit = GetMaxLimit (equipSlot);
176
22429737cd77 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 175
diff changeset
177
22429737cd77 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 175
diff changeset
178 if (limit!=null)
22429737cd77 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 175
diff changeset
179 {
22429737cd77 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 175
diff changeset
180 type.AddEquipmentSlot (slotName, limit);
170
3045a168714a * Line ending clean-up
IBBoard <dev@ibboard.co.uk>
parents: 167
diff changeset
181 }
68
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
182 }
183
36adabb1c3ea Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 176
diff changeset
183
36adabb1c3ea Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 176
diff changeset
184 private static AbstractLimit GetMaxLimit (XmlElement equipSlot)
36adabb1c3ea Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 176
diff changeset
185 {
36adabb1c3ea Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 176
diff changeset
186 XmlElement limitElem = WarFoundryXmlFactoryUtils.SelectSingleElement(equipSlot, "race:maxLimit/*[1]");
36adabb1c3ea Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 176
diff changeset
187 return GetLimitFromElement(limitElem);
36adabb1c3ea Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 176
diff changeset
188 }
176
22429737cd77 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 175
diff changeset
189
22429737cd77 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 175
diff changeset
190 private static AbstractLimit GetLimitFromElement(XmlElement limitElem)
22429737cd77 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 175
diff changeset
191 {
198
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
192 AbstractLimit limit = null;
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
193
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
194 if (limitElem != null)
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
195 {
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
196 switch (limitElem.LocalName)
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
197 {
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
198 case "percentageLimit":
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
199 double limitPercent = XmlTools.GetDoubleValueFromAttribute(limitElem, "limit");
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
200 bool roundUp = limitElem.GetAttribute("round").Equals("up");
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
201 limit = new SimpleRoundedPercentageLimit(limitPercent, roundUp);
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
202 break;
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
203 case "sizeConstrainedLimit":
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
204 limit = new NumericSizeConstrainedLimit(XmlTools.GetIntValueFromAttribute(limitElem, "limit"));
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
205 break;
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
206 case "absoluteLimit":
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
207 limit = new AbsoluteNumericLimit(XmlTools.GetIntValueFromAttribute(limitElem, "limit"));
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
208 break;
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
209 case "unitSizeLimit":
207
897c53d5a8aa Re #208
IBBoard <dev@ibboard.co.uk>
parents: 198
diff changeset
210 limit = new SimpleRoundedPercentageLimit(100);
198
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
211 break;
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
212 default:
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
213 //TODO: Warn of missing handler for when we've extended the limit list
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
214 break;
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
215 }
176
22429737cd77 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 175
diff changeset
216 }
22429737cd77 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 175
diff changeset
217
22429737cd77 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 175
diff changeset
218 return limit;
22429737cd77 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 175
diff changeset
219 }
22429737cd77 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 175
diff changeset
220
68
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
221
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
222 private void LoadEquipmentForUnitType(XmlElement elem, UnitType type)
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
223 {
85
46ad6f478203 Re #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 81
diff changeset
224 foreach (XmlElement equip in WarFoundryXmlFactoryUtils.SelectNodes(elem, "race:unitEquipment/race:unitEquipmentItem"))
46ad6f478203 Re #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 81
diff changeset
225 {
46ad6f478203 Re #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 81
diff changeset
226 string id = equip.GetAttribute("id");
46ad6f478203 Re #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 81
diff changeset
227 EquipmentItem equipItem = type.Race.GetEquipmentItem(id);
46ad6f478203 Re #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 81
diff changeset
228
46ad6f478203 Re #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 81
diff changeset
229 if (equipItem!=null)
46ad6f478203 Re #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 81
diff changeset
230 {
154
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
231 string mutexGroupString = equip.GetAttribute("exclusivityGroups");
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
232 string[] mutexGroups;
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
233
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
234 if (mutexGroupString == "")
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
235 {
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
236 mutexGroupString = equip.GetAttribute("exclusivityGroup");
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
237 }
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
238
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
239 if (mutexGroupString != "")
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
240 {
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
241 string[] groups = mutexGroupString.Split(',');
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
242 int groupCount = groups.Length;
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
243
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
244 for (int i = 0; i < groupCount; i++)
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
245 {
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
246 groups[i] = groups[i].Trim();
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
247 }
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
248
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
249 mutexGroups = groups;
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
250 }
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
251 else
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
252 {
4a02c07278e7 Re #185: Problems with decimals in race definitions
IBBoard <dev@ibboard.co.uk>
parents: 152
diff changeset
253 mutexGroups = new string[0];
152
0c0e14f03785 Re #180: Add multiple mutex groups
IBBoard <dev@ibboard.co.uk>
parents: 138
diff changeset
254 }
0c0e14f03785 Re #180: Add multiple mutex groups
IBBoard <dev@ibboard.co.uk>
parents: 138
diff changeset
255
170
3045a168714a * Line ending clean-up
IBBoard <dev@ibboard.co.uk>
parents: 167
diff changeset
256 UnitEquipmentItem unitEquipItem = new UnitEquipmentItem(equipItem, type, mutexGroups);
3045a168714a * Line ending clean-up
IBBoard <dev@ibboard.co.uk>
parents: 167
diff changeset
257
3045a168714a * Line ending clean-up
IBBoard <dev@ibboard.co.uk>
parents: 167
diff changeset
258 string equipSlot = equip.GetAttribute("equipmentSlot");
3045a168714a * Line ending clean-up
IBBoard <dev@ibboard.co.uk>
parents: 167
diff changeset
259
3045a168714a * Line ending clean-up
IBBoard <dev@ibboard.co.uk>
parents: 167
diff changeset
260 if (equipSlot != "")
3045a168714a * Line ending clean-up
IBBoard <dev@ibboard.co.uk>
parents: 167
diff changeset
261 {
3045a168714a * Line ending clean-up
IBBoard <dev@ibboard.co.uk>
parents: 167
diff changeset
262 if (type.HasEquipmentSlot(equipSlot))
3045a168714a * Line ending clean-up
IBBoard <dev@ibboard.co.uk>
parents: 167
diff changeset
263 {
3045a168714a * Line ending clean-up
IBBoard <dev@ibboard.co.uk>
parents: 167
diff changeset
264 unitEquipItem.SlotName = equipSlot;
3045a168714a * Line ending clean-up
IBBoard <dev@ibboard.co.uk>
parents: 167
diff changeset
265 }
3045a168714a * Line ending clean-up
IBBoard <dev@ibboard.co.uk>
parents: 167
diff changeset
266 else
3045a168714a * Line ending clean-up
IBBoard <dev@ibboard.co.uk>
parents: 167
diff changeset
267 {
3045a168714a * Line ending clean-up
IBBoard <dev@ibboard.co.uk>
parents: 167
diff changeset
268 throw new InvalidFileException("Attribute 'equipmentSlot' of unit equipment item " + id + " for " + type.Name + " was not a valid slot name");
3045a168714a * Line ending clean-up
IBBoard <dev@ibboard.co.uk>
parents: 167
diff changeset
269 }
198
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
270 }
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
271
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
272 AbstractLimit limit = GetMaxLimit(equip);
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
273
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
274 if (limit != null)
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
275 {
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
276 unitEquipItem.MaxLimit = limit;
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
277 }
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
278
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
279 limit = GetMinLimit(equip);
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
280
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
281 if (limit != null)
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
282 {
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
283 unitEquipItem.MinLimit = limit;
167
9ba56a8e5096 Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 158
diff changeset
284 }
183
36adabb1c3ea Re #198: Add slots with counts to units
IBBoard <dev@ibboard.co.uk>
parents: 176
diff changeset
285
90
bd2aaa9a61df Re #50: Complete loading of core XML file
IBBoard <dev@ibboard.co.uk>
parents: 88
diff changeset
286 unitEquipItem.RoundNumberUp = equip.GetAttribute("roundDirection").Equals("up");
86
129636305ad7 Re #50: Complete core loading of XML files
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
287
129636305ad7 Re #50: Complete core loading of XML files
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
288 try
129636305ad7 Re #50: Complete core loading of XML files
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
289 {
219
f609bcf7035b Fixes #222: decimal comma/point not handled correctly (again?) in costMultiplier
IBBoard <dev@ibboard.co.uk>
parents: 217
diff changeset
290 unitEquipItem.IsRequired = XmlTools.GetBoolValueFromAttribute(equip, "required");
86
129636305ad7 Re #50: Complete core loading of XML files
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
291 }
129636305ad7 Re #50: Complete core loading of XML files
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
292 catch(FormatException e)
129636305ad7 Re #50: Complete core loading of XML files
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
293 {
87
9fba3b4ccdcd Re #50: Complete core XML loading
IBBoard <dev@ibboard.co.uk>
parents: 86
diff changeset
294 throw new InvalidFileException("Attribute 'required' of unit equipment item " + id + " for " + type.Name + " was not a valid boolean", e);
86
129636305ad7 Re #50: Complete core loading of XML files
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
295 }
129636305ad7 Re #50: Complete core loading of XML files
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
296
129636305ad7 Re #50: Complete core loading of XML files
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
297 try
91
571d8ddc7d9a Fixes #111: "Replace Weapon" button doesn't always enable
IBBoard <dev@ibboard.co.uk>
parents: 90
diff changeset
298 {
219
f609bcf7035b Fixes #222: decimal comma/point not handled correctly (again?) in costMultiplier
IBBoard <dev@ibboard.co.uk>
parents: 217
diff changeset
299 unitEquipItem.CostMultiplier = XmlTools.GetDoubleValueFromAttribute(equip, "costMultiplier");
86
129636305ad7 Re #50: Complete core loading of XML files
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
300 }
129636305ad7 Re #50: Complete core loading of XML files
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
301 catch (FormatException e)
129636305ad7 Re #50: Complete core loading of XML files
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
302 {
87
9fba3b4ccdcd Re #50: Complete core XML loading
IBBoard <dev@ibboard.co.uk>
parents: 86
diff changeset
303 throw new InvalidFileException("Attribute 'costMultiplier' of unit equipment item " + id + " for " + type.Name + " was not a valid decimal number", e);
86
129636305ad7 Re #50: Complete core loading of XML files
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
304 }
129636305ad7 Re #50: Complete core loading of XML files
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
305
129636305ad7 Re #50: Complete core loading of XML files
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
306 try
129636305ad7 Re #50: Complete core loading of XML files
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
307 {
88
110a7b0bcab5 Re #50: Complete core loading from XML
IBBoard <dev@ibboard.co.uk>
parents: 87
diff changeset
308 unitEquipItem.CostRoundType = (RoundType) Enum.Parse(typeof(RoundType), equip.GetAttribute("costRounding"));
86
129636305ad7 Re #50: Complete core loading of XML files
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
309 }
129636305ad7 Re #50: Complete core loading of XML files
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
310 catch (ArgumentException e)
129636305ad7 Re #50: Complete core loading of XML files
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
311 {
87
9fba3b4ccdcd Re #50: Complete core XML loading
IBBoard <dev@ibboard.co.uk>
parents: 86
diff changeset
312 throw new InvalidFileException("Attribute 'costRounding' of unit equipment item " + id + " for " + type.Name + " was not a valid rounding type", e);
86
129636305ad7 Re #50: Complete core loading of XML files
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
313 }
85
46ad6f478203 Re #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 81
diff changeset
314 }
46ad6f478203 Re #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 81
diff changeset
315 else
46ad6f478203 Re #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 81
diff changeset
316 {
128
45a9452579a2 Fixes #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 104
diff changeset
317 throw new InvalidFileException("Equipment item with ID '" + id + "' was required by " + type.Name + " but was not found");
85
46ad6f478203 Re #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 81
diff changeset
318 }
195
11bad32cfa06 * Implement new equipment limit loading
IBBoard <dev@ibboard.co.uk>
parents: 192
diff changeset
319 }
198
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
320 }
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
321
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
322 private static AbstractLimit GetMinLimit(XmlElement elem)
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
323 {
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
324 XmlElement limitElem = WarFoundryXmlFactoryUtils.SelectSingleElement(elem, "race:minLimit/*[1]");
c4cf4c7db7d5 * Line ending fix
IBBoard <dev@ibboard.co.uk>
parents: 195
diff changeset
325 return GetLimitFromElement(limitElem);
68
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
326 }
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
327
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
328 private void LoadAbilitiesForUnitType(XmlElement elem, UnitType type)
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
329 {
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
330 foreach (XmlElement ability in WarFoundryXmlFactoryUtils.SelectNodes(elem, "race:unitAbilities/race:unitAbility"))
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
331 {
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
332 string id = ability.GetAttribute("abilityID");
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
333 bool required = XmlTools.GetBoolValueFromAttribute(ability, "required");
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
334 type.AddAbility(type.Race.GetAbility(id), required);
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
335 }
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
336 }
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
337
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
338 private void LoadContainedUnitsForUnitType(XmlElement elem, UnitType type)
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
339 {
69
91cf8efbea0b Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 68
diff changeset
340 foreach (XmlElement containedUnitType in WarFoundryXmlFactoryUtils.SelectNodes(elem, "race:contains/race:containedUnit"))
91cf8efbea0b Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 68
diff changeset
341 {
91cf8efbea0b Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 68
diff changeset
342 string id = containedUnitType.GetAttribute("containedID");
91cf8efbea0b Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 68
diff changeset
343 UnitType containedType = GetUnitTypeFromDocument(elem.OwnerDocument, id, type.Race);
91cf8efbea0b Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 68
diff changeset
344
91cf8efbea0b Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 68
diff changeset
345 if (containedType!=null)
91cf8efbea0b Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 68
diff changeset
346 {
91cf8efbea0b Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 68
diff changeset
347 type.AddContainedUnitType(containedType);
91cf8efbea0b Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 68
diff changeset
348 }
91cf8efbea0b Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 68
diff changeset
349 else
91cf8efbea0b Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 68
diff changeset
350 {
128
45a9452579a2 Fixes #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 104
diff changeset
351 throw new InvalidFileException("Unit type " + type.Name + " tried to contain undefined unit with ID "+id);
69
91cf8efbea0b Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 68
diff changeset
352 }
91cf8efbea0b Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 68
diff changeset
353 }
68
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
354 }
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
355
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
356 private void LoadRequirementsForUnitType(XmlElement elem, UnitType type)
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
357 {
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
358 //TODO: Load requirements
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
359 }
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
360
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
361 private void LoadExtraDataForUnitType(XmlElement elem, UnitType type)
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
362 {
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
363 }
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
364
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
365 private void LoadNotesForUnitType(XmlElement elem, UnitType type)
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
366 {
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
367 XmlNode node = WarFoundryXmlFactoryUtils.SelectSingleNode(elem, "race:notes");
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
368
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
369 if (node!=null)
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
370 {
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
371 type.Notes = node.InnerText;
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
372 }
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
373 }
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
374
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
375 private Stats ParseUnitStats(XmlElement elem, GameSystem system)
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
376 {
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
377 String statsID = elem.GetAttribute("statSet");
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
378 SystemStats statsSet;
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
379
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
380 if (statsID == "")
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
381 {
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
382 statsSet = system.StandardSystemStats;
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
383 }
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
384 else
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
385 {
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
386 statsSet = system.GetSystemStatsForID(statsID);
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
387 }
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
388
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
389 Stats stats = new Stats(statsSet);
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
390
53
1b35eed503ef Closes #13 - Migrate to XPath
IBBoard <dev@ibboard.co.uk>
parents: 52
diff changeset
391 foreach (XmlElement stat in WarFoundryXmlFactoryUtils.SelectNodes(elem, "race:stat"))
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
392 {
67
e6200220ece3 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 55
diff changeset
393 String statName = stat.GetAttribute("name");
e6200220ece3 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 55
diff changeset
394 stats.SetStatValue(statName, stat.InnerText);
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
395 }
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
396
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
397 return stats;
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
398 }
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
399
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
400 private EquipmentItem CreateEquipmentItemFromElement(XmlElement elem, Race race)
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
401 {
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
402 string id = elem.GetAttribute("id");
68
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
403 EquipmentItem item = race.GetEquipmentItem(id);
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
404
85
46ad6f478203 Re #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 81
diff changeset
405 if (item == null)
68
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
406 {
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
407 item = CreateEquipmentItemFromElement(elem, id, race);
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
408 }
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
409
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
410 return item;
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
411 }
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
412
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
413 private EquipmentItem CreateEquipmentItemFromElement(XmlElement elem, string id, Race race)
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
414 {
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
415 string name = elem.GetAttribute("name");
68
10d14a7051d5 Re #50 - Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 67
diff changeset
416 EquipmentItem item = new EquipmentItem(id, name, race);
55
9080366031c0 Re #9 - Refactor for small methods
IBBoard <dev@ibboard.co.uk>
parents: 53
diff changeset
417 double cost = 0;
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
418 ArmourType armourType;
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
419
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
420 try
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
421 {
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
422 cost = XmlTools.GetDoubleValueFromAttribute(elem, "cost");
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
423 }
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
424 catch(FormatException ex)
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
425 {
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
426 throw new InvalidFileException("Attribute 'cost' of equipment item "+id+" was not a valid number", ex);
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
427 }
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
428
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
429 try
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
430 {
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
431 armourType = (ArmourType)Enum.Parse(typeof(ArmourType), elem.GetAttribute("armourType"));
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
432 }
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
433 catch(ArgumentException ex)
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
434 {
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
435 throw new InvalidFileException("Attribute 'armourType' of equipment "+id+" was not a valid value from the enumeration", ex);
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
436 }
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
437
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
438 //TODO: Parse equipment stats if there are any
55
9080366031c0 Re #9 - Refactor for small methods
IBBoard <dev@ibboard.co.uk>
parents: 53
diff changeset
439 item.Cost = cost;
9080366031c0 Re #9 - Refactor for small methods
IBBoard <dev@ibboard.co.uk>
parents: 53
diff changeset
440 item.ItemArmourType = armourType;
85
46ad6f478203 Re #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 81
diff changeset
441 race.AddEquipmentItem(item);
55
9080366031c0 Re #9 - Refactor for small methods
IBBoard <dev@ibboard.co.uk>
parents: 53
diff changeset
442 return item;
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
443 }
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
444
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
445 private Ability CreateAbilityFromElement(XmlElement elem, Race race)
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
446 {
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
447 string id = elem.GetAttribute("id");
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
448 string name = elem.GetAttribute("name");
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
449 Ability ability = new Ability(id, name);
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
450 XmlNode node = elem.SelectSingleNode("description", WarFoundryXmlFactoryUtils.GetNamespaceManager());
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
451 ability.Description = (node == null) ? "" : node.InnerText;
85
46ad6f478203 Re #50: Complete core loading of WarFoundry XML files
IBBoard <dev@ibboard.co.uk>
parents: 81
diff changeset
452 race.AddAbility(ability);
52
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
453 return ability;
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
454 }
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
455 }
64ef178c18aa Re #10 - Refactor for readability
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
456 }