Mercurial > repos > IBBoard.WarFoundry.API
annotate api/Factories/Xml/WarFoundryXmlGameSystemFactory.cs @ 300:c7b765f9575f
Re #99: added points name system to system load procedure
author | snowblizz |
---|---|
date | Mon, 24 Jan 2011 16:43:31 +0000 |
parents | 08a9c960e17f |
children | f7c3c1b39726 |
rev | line source |
---|---|
300
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
1 // This file (WarFoundryXmlGameSystemFactory.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2009 IBBoard |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
2 // |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
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. |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
4 |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
5 using System; |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
6 using System.Collections.Generic; |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
7 using System.IO; |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
8 using System.Xml; |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
9 using ICSharpCode.SharpZipLib.Zip; |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
10 using IBBoard.Xml; |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
11 using IBBoard.WarFoundry.API.Objects; |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
12 |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
13 namespace IBBoard.WarFoundry.API.Factories.Xml |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
14 { |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
15 /// <summary> |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
16 /// A sub-factory specifically for loading GameSystems from WarFoundry XML files |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
17 /// </summary> |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
18 public class WarFoundryXmlGameSystemFactory : AbstractStagedLoadedSubFactory |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
19 { |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
20 private Dictionary<GameSystem, XmlDocument> extraData = new Dictionary<GameSystem, XmlDocument>(); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
21 |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
22 public WarFoundryXmlGameSystemFactory(WarFoundryXmlFactory factory) : base(factory) |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
23 { |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
24 } |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
25 |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
26 private void StoreExtraData(GameSystem wfObject, XmlElement elem) |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
27 { |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
28 extraData[wfObject] = elem.OwnerDocument; |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
29 } |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
30 |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
31 private XmlDocument GetExtraData(GameSystem obj) |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
32 { |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
33 XmlDocument extra = null; |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
34 extraData.TryGetValue(obj, out extra); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
35 return extra; |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
36 } |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
37 |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
38 public GameSystem CreateSystemFromElement(ZipFile file, XmlElement elem) |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
39 { |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
40 string id = elem.GetAttribute("id"); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
41 string name = elem.GetAttribute("name"); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
42 GameSystem system = new GameSystem(id, name, mainFactory); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
43 int defaultarmysize = XmlTools.GetIntValueFromAttribute(elem, "defaultArmySize"); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
44 system.SystemArmyDefaultSize = defaultarmysize; |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
45 string defaultptsabbreviationsing = elem.GetAttribute("defaultPtsAbbreviationSingular"); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
46 system.SystemPtsAbbrevSingle = defaultptsabbreviationsing; |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
47 string defaultPtsabbreviationplur = elem.GetAttribute("defaultPtsAbbreviationPlural"); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
48 system.SystemPtsAbbrevPlural = defaultPtsabbreviationplur; |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
49 string defaultPtsnamesing = elem.GetAttribute("defaultPtsNameSingular"); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
50 system.SystemPtsNameSingle = defaultPtsnamesing; |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
51 string defaultPtsnameplur = elem.GetAttribute("defaultPtsNamePlural"); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
52 system.SystemPtsNamePlural = defaultPtsnameplur; |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
53 StoreExtraData(system, elem); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
54 return system; |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
55 } |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
56 |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
57 public void CompleteLoading(GameSystem system) |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
58 { |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
59 if (!WarFoundryXmlFactoryUtils.CanCompleteLoading(system)) |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
60 { |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
61 return; |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
62 } |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
63 |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
64 system.SetAsLoading(); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
65 XmlDocument extraData = GetExtraData(system); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
66 LoadCategoriesForSystem(system, extraData); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
67 XmlElement statsElem = WarFoundryXmlFactoryUtils.SelectSingleElement(extraData, "/system:system/system:sysStatsList"); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
68 string defaultStatsID = statsElem.GetAttribute("defaultStats"); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
69 LoadSystemStatsForSystem(system, extraData); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
70 system.StandardSystemStatsID = defaultStatsID; |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
71 XmlElement systemElement = WarFoundryXmlFactoryUtils.SelectSingleElement(extraData, "/system:system"); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
72 system.WarnOnError = XmlTools.GetBoolValueFromAttribute(systemElement, "warn"); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
73 system.AllowAllies = XmlTools.GetBoolValueFromAttribute(systemElement, "allowAllies"); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
74 system.SetAsFullyLoaded(); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
75 } |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
76 |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
77 |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
78 private void LoadCategoriesForSystem(GameSystem system, XmlNode elem) |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
79 { |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
80 foreach (XmlElement cat in WarFoundryXmlFactoryUtils.SelectNodes(elem, "/system:system/system:categories/cat:cat")) |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
81 { |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
82 system.AddCategory(CreateCategoryFromElement(cat)); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
83 } |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
84 } |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
85 |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
86 private void LoadSystemStatsForSystem(GameSystem system, XmlNode elem) |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
87 { |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
88 foreach (XmlElement stats in WarFoundryXmlFactoryUtils.SelectNodes(elem, "/system:system/system:sysStatsList/system:sysStats")) |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
89 { |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
90 SystemStats sysStats = CreateSystemStatsFromElement(stats); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
91 system.AddSystemStats(sysStats); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
92 } |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
93 } |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
94 |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
95 private SystemStats CreateSystemStatsFromElement(XmlElement elem) |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
96 { |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
97 SystemStats sysStats = new SystemStats(elem.GetAttribute("id")); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
98 |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
99 foreach (XmlElement slot in WarFoundryXmlFactoryUtils.SelectNodes(elem, "system:sysStat")) |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
100 { |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
101 sysStats.AddStatSlot(slot.GetAttribute("name")); |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
102 } |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
103 |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
104 return sysStats; |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
105 } |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
106 } |
c7b765f9575f
Re #99: added points name system to system load procedure
snowblizz
parents:
286
diff
changeset
|
107 } |