Mercurial > repos > IBBoard.WarFoundry.Plugin.Rollcall
comparison RollcallUnitTypeParser.cs @ 6:0509ed2e686a
Re #16 - File loading
* Refactor race detail parsing and unit type parsing in to their own classes
Re #17 - Unit detail loading
* Add a couple of extra attributes to those loaded
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Mon, 26 Jan 2009 20:31:05 +0000 |
parents | |
children | 35bc86f8c283 |
comparison
equal
deleted
inserted
replaced
5:8c34e01a11da | 6:0509ed2e686a |
---|---|
1 // This file (RollcallUnitTypeParser.cs) is a part of the IBBoard.WarFoundry.Plugin.Rollcall library and is copyright 2009 IBBoard. | |
2 // | |
3 // The file and the library/program it is in are licensed under the GNU LGPL license. Please see COPYING.LGPL for more information and the full license. | |
4 | |
5 using System; | |
6 using IBBoard.IO; | |
7 using IBBoard.Ini; | |
8 using IBBoard.CustomMath; | |
9 using IBBoard.WarFoundry.API.Objects; | |
10 | |
11 namespace IBBoard.WarFoundry.Plugin.Rollcall | |
12 { | |
13 /// <summary> | |
14 /// A helper class to parse INI sections as Units | |
15 /// </summary> | |
16 public class RollcallUnitTypeParser | |
17 { | |
18 public static UnitType ReadUnitTypeSectionFromID(IniFile file, String sectionID, Race race) | |
19 { | |
20 return ReadUnitTypeSection(file, "Unit"+sectionID, race); | |
21 } | |
22 | |
23 public static UnitType ReadUnitTypeSection(IniFile file, String sectionName, Race race) | |
24 { | |
25 return ReadUnitTypeSection(file, file[sectionName], race); | |
26 } | |
27 | |
28 public static UnitType ReadUnitTypeSection(IniFile file, IniSection section, Race race) | |
29 { | |
30 UnitType unitType = race.GetUnitType(section.Name); | |
31 | |
32 if (unitType == null) | |
33 { | |
34 string unitID = RollcallUnitTypeParser.GetUnitID(section); | |
35 string name = section["Name"].Value; | |
36 unitType = new UnitType(unitID, name, race); | |
37 Category mainCat = race.GetCategory(section["Category"].Value); | |
38 unitType.AddCategory(mainCat); | |
39 unitType.MainCategory = mainCat; | |
40 IniKeyValuePairLine line = section["MaximumSize"]; | |
41 | |
42 if (line!=null) | |
43 { | |
44 unitType.MaxSize = NumberParser.ParseAsInt(line.Value, -1); | |
45 } | |
46 | |
47 line = section["MinimumSize"]; | |
48 | |
49 if (line!=null) | |
50 { | |
51 unitType.MinSize = NumberParser.ParseAsInt(line.Value, 1); | |
52 } | |
53 | |
54 line = section["TroopCost"]; | |
55 | |
56 if (line!=null) | |
57 { | |
58 unitType.CostPerTrooper = NumberParser.ParseAsInt(line.Value, 0); | |
59 } | |
60 | |
61 race.AddUnitType(unitType); | |
62 } | |
63 | |
64 return unitType; | |
65 } | |
66 | |
67 private static string GetUnitID(IniSection section) | |
68 { | |
69 string sectionName = section.Name; | |
70 | |
71 if (sectionName != "Unit" + section["UnitID"].Value) | |
72 { | |
73 throw new InvalidFileException("Attribute 'UnitID' for "+sectionName+" did not match section name"); | |
74 } | |
75 | |
76 return sectionName; | |
77 } | |
78 | |
79 public static void ReadEquipmentSection(IniFile file, IniSection section, Race race) | |
80 { | |
81 } | |
82 } | |
83 } |