annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
1 // This file (RollcallUnitTypeParser.cs) is a part of the IBBoard.WarFoundry.Plugin.Rollcall library and is copyright 2009 IBBoard.
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
2 //
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
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.
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
4
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
5 using System;
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
6 using IBBoard.IO;
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
7 using IBBoard.Ini;
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
8 using IBBoard.CustomMath;
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
9 using IBBoard.WarFoundry.API.Objects;
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
10
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
11 namespace IBBoard.WarFoundry.Plugin.Rollcall
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
12 {
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
13 /// <summary>
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
14 /// A helper class to parse INI sections as Units
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
15 /// </summary>
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
16 public class RollcallUnitTypeParser
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
17 {
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
18 public static UnitType ReadUnitTypeSectionFromID(IniFile file, String sectionID, Race race)
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
19 {
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
20 return ReadUnitTypeSection(file, "Unit"+sectionID, race);
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
21 }
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
22
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
23 public static UnitType ReadUnitTypeSection(IniFile file, String sectionName, Race race)
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
24 {
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
25 return ReadUnitTypeSection(file, file[sectionName], race);
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
26 }
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
27
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
28 public static UnitType ReadUnitTypeSection(IniFile file, IniSection section, Race race)
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
29 {
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
30 UnitType unitType = race.GetUnitType(section.Name);
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
31
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
32 if (unitType == null)
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
33 {
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
34 string unitID = RollcallUnitTypeParser.GetUnitID(section);
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
35 string name = section["Name"].Value;
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
36 unitType = new UnitType(unitID, name, race);
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
37 Category mainCat = race.GetCategory(section["Category"].Value);
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
38 unitType.AddCategory(mainCat);
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
39 unitType.MainCategory = mainCat;
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
40 IniKeyValuePairLine line = section["MaximumSize"];
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
41
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
42 if (line!=null)
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
43 {
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
44 unitType.MaxSize = NumberParser.ParseAsInt(line.Value, -1);
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
45 }
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
46
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
47 line = section["MinimumSize"];
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
48
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
49 if (line!=null)
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
50 {
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
51 unitType.MinSize = NumberParser.ParseAsInt(line.Value, 1);
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
52 }
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
53
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
54 line = section["TroopCost"];
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
55
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
56 if (line!=null)
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
57 {
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
58 unitType.CostPerTrooper = NumberParser.ParseAsInt(line.Value, 0);
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
59 }
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
60
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
61 race.AddUnitType(unitType);
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
62 }
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
63
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
64 return unitType;
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
65 }
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
66
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
67 private static string GetUnitID(IniSection section)
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
68 {
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
69 string sectionName = section.Name;
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
70
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
71 if (sectionName != "Unit" + section["UnitID"].Value)
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
72 {
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
73 throw new InvalidFileException("Attribute 'UnitID' for "+sectionName+" did not match section name");
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
74 }
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
75
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
76 return sectionName;
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
77 }
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
78
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
79 public static void ReadEquipmentSection(IniFile file, IniSection section, Race race)
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
80 {
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
81 }
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
82 }
0509ed2e686a Re #16 - File loading
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
83 }