Mercurial > repos > snowblizz-super-API-ideas
changeset 392:db6713d5b35f default-army-size
RRe #97: Default army size issues
author | snowblizz |
---|---|
date | Wed, 01 Dec 2010 20:00:58 +0000 |
parents | 83c82e5c740c |
children | b90db11edc64 |
files | IBBoard.WarFoundry.API.csproj api/Exporters/WarFoundryHtmlExporter.cs api/Factories/Xml/WarFoundryXmlGameSystemFactory.cs api/Factories/Xml/WarFoundryXmlRaceFactory.cs api/Objects/GameSystem.cs schemas/system.xsd |
diffstat | 6 files changed, 375 insertions(+), 355 deletions(-) [+] |
line wrap: on
line diff
--- a/IBBoard.WarFoundry.API.csproj Mon Oct 18 19:59:25 2010 +0000 +++ b/IBBoard.WarFoundry.API.csproj Wed Dec 01 20:00:58 2010 +0000 @@ -60,7 +60,6 @@ </Target> --> <ItemGroup> - <None Include="app.config" /> <None Include="COPYING" /> <Compile Include="api\Objects\ICostedWarFoundryObject.cs" /> <Compile Include="api\Commands\CreateAndAddUnitCommand.cs" /> @@ -186,6 +185,10 @@ <Content Include="libs\ICSharpCode.SharpZipLib.dll" /> </ItemGroup> <ItemGroup> + <Reference Include="IBBoard, Version=1.0.3896.41664, Culture=neutral, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\IBBoard\bin\Release\IBBoard.dll</HintPath> + </Reference> <Reference Include="System.Data" /> <Reference Include="System.Xml" /> <Reference Include="System" /> @@ -195,12 +198,6 @@ </Reference> </ItemGroup> <ItemGroup> - <ProjectReference Include="..\IBBoard\IBBoard.csproj"> - <Project>{5DFD64F6-FC2B-4B4F-B92E-483BAC468105}</Project> - <Name>IBBoard</Name> - </ProjectReference> - </ItemGroup> - <ItemGroup> <BootstrapperPackage Include="Microsoft.Net.Client.3.5"> <Visible>False</Visible> <ProductName>.NET Framework Client Profile</ProductName>
--- a/api/Exporters/WarFoundryHtmlExporter.cs Mon Oct 18 19:59:25 2010 +0000 +++ b/api/Exporters/WarFoundryHtmlExporter.cs Wed Dec 01 20:00:58 2010 +0000 @@ -57,7 +57,7 @@ metaCharset.SetAttribute("content", "text/html;charset=UTF-8"); head.AppendChild(metaCharset); XmlElement style = doc.CreateElement("style"); - style.InnerText = "able, th, td { border: 1px solid #000; border-spacing: 0; border-collapse: collapse; margin: 0 }\n" + style.InnerText = "table, th, td { border: 1px solid #000; border-spacing: 0; border-collapse: collapse; margin: 0 }\n" +"table table { width: 100%; border-width: 0; margin: -2px }\n" +"table table td { border-width:0 1px }"; head.AppendChild(style);
--- a/api/Factories/Xml/WarFoundryXmlGameSystemFactory.cs Mon Oct 18 19:59:25 2010 +0000 +++ b/api/Factories/Xml/WarFoundryXmlGameSystemFactory.cs Wed Dec 01 20:00:58 2010 +0000 @@ -1,97 +1,100 @@ -// This file (WarFoundryXmlGameSystemFactory.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2009 IBBoard -// -// 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. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Xml; -using ICSharpCode.SharpZipLib.Zip; -using IBBoard.Xml; -using IBBoard.WarFoundry.API.Objects; - -namespace IBBoard.WarFoundry.API.Factories.Xml -{ - /// <summary> - /// A sub-factory specifically for loading GameSystems from WarFoundry XML files - /// </summary> - public class WarFoundryXmlGameSystemFactory : AbstractStagedLoadedSubFactory - { - private Dictionary<GameSystem, XmlDocument> extraData = new Dictionary<GameSystem, XmlDocument>(); - - public WarFoundryXmlGameSystemFactory(WarFoundryXmlFactory factory) : base(factory) - { - } - - private void StoreExtraData(GameSystem wfObject, XmlElement elem) - { - extraData[wfObject] = elem.OwnerDocument; - } - - private XmlDocument GetExtraData(GameSystem obj) - { - XmlDocument extra = null; - extraData.TryGetValue(obj, out extra); - return extra; - } - - public GameSystem CreateSystemFromElement(ZipFile file, XmlElement elem) - { - string id = elem.GetAttribute("id"); - string name = elem.GetAttribute("name"); - GameSystem system = new GameSystem(id, name, mainFactory); - StoreExtraData(system, elem); - return system; - } - - public void CompleteLoading(GameSystem system) - { - if (!WarFoundryXmlFactoryUtils.CanCompleteLoading(system)) - { - return; - } - - system.SetAsLoading(); - XmlDocument extraData = GetExtraData(system); - LoadCategoriesForSystem(system, extraData); - XmlElement statsElem = WarFoundryXmlFactoryUtils.SelectSingleElement(extraData, "/system:system/system:sysStatsList"); - string defaultStatsID = statsElem.GetAttribute("defaultStats"); - LoadSystemStatsForSystem(system, extraData); - system.StandardSystemStatsID = defaultStatsID; - XmlElement systemElement = WarFoundryXmlFactoryUtils.SelectSingleElement(extraData, "/system:system"); - system.WarnOnError = XmlTools.GetBoolValueFromAttribute(systemElement, "warn"); - system.AllowAllies = XmlTools.GetBoolValueFromAttribute(systemElement, "allowAllies"); - system.SetAsFullyLoaded(); - } - - - private void LoadCategoriesForSystem(GameSystem system, XmlNode elem) - { - foreach (XmlElement cat in WarFoundryXmlFactoryUtils.SelectNodes(elem, "/system:system/system:categories/cat:cat")) - { - system.AddCategory(CreateCategoryFromElement(cat)); - } - } - - private void LoadSystemStatsForSystem(GameSystem system, XmlNode elem) - { - foreach (XmlElement stats in WarFoundryXmlFactoryUtils.SelectNodes(elem, "/system:system/system:sysStatsList/system:sysStats")) - { - SystemStats sysStats = CreateSystemStatsFromElement(stats); - system.AddSystemStats(sysStats); - } - } - - private SystemStats CreateSystemStatsFromElement(XmlElement elem) - { - SystemStats sysStats = new SystemStats(elem.GetAttribute("id")); - - foreach (XmlElement slot in WarFoundryXmlFactoryUtils.SelectNodes(elem, "system:sysStat")) - { - sysStats.AddStatSlot(slot.GetAttribute("name")); - } - - return sysStats; - } - } -} +// This file (WarFoundryXmlGameSystemFactory.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2009 IBBoard +// +// 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. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Xml; +using ICSharpCode.SharpZipLib.Zip; +using IBBoard.Xml; +using IBBoard.WarFoundry.API.Objects; + +namespace IBBoard.WarFoundry.API.Factories.Xml +{ + /// <summary> + /// A sub-factory specifically for loading GameSystems from WarFoundry XML files + /// </summary> + public class WarFoundryXmlGameSystemFactory : AbstractStagedLoadedSubFactory + { + private Dictionary<GameSystem, XmlDocument> extraData = new Dictionary<GameSystem, XmlDocument>(); + + public WarFoundryXmlGameSystemFactory(WarFoundryXmlFactory factory) : base(factory) + { + } + + private void StoreExtraData(GameSystem wfObject, XmlElement elem) + { + extraData[wfObject] = elem.OwnerDocument; + } + + private XmlDocument GetExtraData(GameSystem obj) + { + XmlDocument extra = null; + extraData.TryGetValue(obj, out extra); + return extra; + } + + public GameSystem CreateSystemFromElement(ZipFile file, XmlElement elem) + { + string id = elem.GetAttribute("id"); + string name = elem.GetAttribute("name"); + GameSystem system = new GameSystem(id, name, mainFactory); + int defaultarmysize = XmlTools.GetIntValueFromAttribute(elem,"defaultArmySize"); + system.SystemArmyDefaultSize = defaultarmysize; + StoreExtraData(system, elem); + return system; + + } + + public void CompleteLoading(GameSystem system) + { + if (!WarFoundryXmlFactoryUtils.CanCompleteLoading(system)) + { + return; + } + + system.SetAsLoading(); + XmlDocument extraData = GetExtraData(system); + LoadCategoriesForSystem(system, extraData); + XmlElement statsElem = WarFoundryXmlFactoryUtils.SelectSingleElement(extraData, "/system:system/system:sysStatsList"); + string defaultStatsID = statsElem.GetAttribute("defaultStats"); + LoadSystemStatsForSystem(system, extraData); + system.StandardSystemStatsID = defaultStatsID; + XmlElement systemElement = WarFoundryXmlFactoryUtils.SelectSingleElement(extraData, "/system:system"); + system.WarnOnError = XmlTools.GetBoolValueFromAttribute(systemElement, "warn"); + system.AllowAllies = XmlTools.GetBoolValueFromAttribute(systemElement, "allowAllies"); + system.SetAsFullyLoaded(); + } + + + private void LoadCategoriesForSystem(GameSystem system, XmlNode elem) + { + foreach (XmlElement cat in WarFoundryXmlFactoryUtils.SelectNodes(elem, "/system:system/system:categories/cat:cat")) + { + system.AddCategory(CreateCategoryFromElement(cat)); + } + } + + private void LoadSystemStatsForSystem(GameSystem system, XmlNode elem) + { + foreach (XmlElement stats in WarFoundryXmlFactoryUtils.SelectNodes(elem, "/system:system/system:sysStatsList/system:sysStats")) + { + SystemStats sysStats = CreateSystemStatsFromElement(stats); + system.AddSystemStats(sysStats); + } + } + + private SystemStats CreateSystemStatsFromElement(XmlElement elem) + { + SystemStats sysStats = new SystemStats(elem.GetAttribute("id")); + + foreach (XmlElement slot in WarFoundryXmlFactoryUtils.SelectNodes(elem, "system:sysStat")) + { + sysStats.AddStatSlot(slot.GetAttribute("name")); + } + + return sysStats; + } + } +}
--- a/api/Objects/GameSystem.cs Mon Oct 18 19:59:25 2010 +0000 +++ b/api/Objects/GameSystem.cs Wed Dec 01 20:00:58 2010 +0000 @@ -1,250 +1,269 @@ -// This file (GameSystem.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2007, 2008, 2009 IBBoard. -// -// 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. - -using System; -using System.Collections.Generic; -using System.Xml; -using System.IO; -using IBBoard.Logging; -using IBBoard.WarFoundry.API.Factories; -using ICSharpCode.SharpZipLib.Zip; - -namespace IBBoard.WarFoundry.API.Objects -{ - /// <summary> - /// Summary description for GameSystem. - /// </summary> - public class GameSystem : WarFoundryStagedLoadingObject - { - private bool warnOnError; - private bool allowAllies; - private Dictionary<string, Category> categories = new Dictionary<string,Category>(); - private Dictionary<string, SystemStats> stats = new Dictionary<string,SystemStats>(); - private string defaultStats; - - public GameSystem(string systemID, string systemName, IWarFoundryFactory creatingFactory) : base(systemID, systemName, creatingFactory) - { - stats = new Dictionary<string,SystemStats>(); - } - - public bool AllowAllies - { - get { return allowAllies; } - set { allowAllies = value; } - } - - public void AddCategory(Category cat) - { - RawCategories[cat.ID] = cat; - } - - public Category GetCategory(string id) - { - EnsureFullyLoaded(); - Category cat = null; - RawCategories.TryGetValue(id, out cat); - return cat; - } - - public Category[] Categories - { - get - { - EnsureFullyLoaded(); - return DictionaryUtils.ToArray<string, Category>(RawCategories); - } - } - - protected Dictionary<string, Category> RawCategories - { - get { return categories; } - } - - public bool WarnOnError - { - get - { - return warnOnError; - } - set { warnOnError = value; } - } - - public void AddSystemStats(SystemStats sysStats) - { - stats[sysStats.ID] = sysStats; - } - - public SystemStats StandardSystemStats - { - get - { - EnsureFullyLoaded(); - return stats[defaultStats]; - } - } - - public string StandardSystemStatsID - { - get - { - EnsureFullyLoaded(); - return defaultStats; - } - - set - { - if (value != null && value.Trim().Length > 0) - { - defaultStats = value; - } - } - } - - public SystemStats[] SystemStats - { - get - { - EnsureFullyLoaded(); - SystemStats[] statsArray = new SystemStats[stats.Count]; - stats.Values.CopyTo(statsArray, 0); - return statsArray; - } - } - - public SystemStats GetSystemStatsForID(string id) - { - EnsureFullyLoaded(); - SystemStats statsForID; - stats.TryGetValue(id, out statsForID); - return statsForID; - } - - public Race SystemDefaultRace - { - get { return WarFoundryLoader.GetDefault().GetRace(this, Race.SYSTEM_DEFAULT_RACE_ID); } - } - - public bool Matches(GameSystem otherSystem) - { - if (otherSystem==null) - { - return false; - } - - return this.ID == otherSystem.ID; - } - - public override bool Equals(object obj) - { - if (obj == null) - { - return false; - } - - if (obj.GetType().Equals(this.GetType())) - { - GameSystem otherSystem = (GameSystem)obj; - - return this.ID == otherSystem.ID && this.Name == otherSystem.Name && ((this.RawCategories == null && otherSystem.RawCategories == null) || this.RawCategories.Equals(otherSystem.RawCategories)); - } - else - { - return false; - } - } - - public override int GetHashCode() - { - return ID.GetHashCode() + Name.GetHashCode() + (RawCategories!=null ? RawCategories.GetHashCode() : 0) + warnOnError.GetHashCode(); - } - - public bool UnitTypeMaxed(UnitType unitType, Army army) - { - return unitType.MaxNumber!=WarFoundryCore.INFINITY && army.GetUnitTypeCount(unitType) >= unitType.MaxNumber; - } - - public bool UnitTypeMinned(UnitType unitType, Army army) - { - return army.GetUnitTypeCount(unitType) <= unitType.MinNumber; - } - - public List<EquipmentItem> GetSystemEquipmentList() - { - List<EquipmentItem> items = new List<EquipmentItem>(); - Race defaultRace = SystemDefaultRace; - - if (defaultRace!=null) - { - items = defaultRace.GetEquipmentList(); - } - - return items; - } - - public EquipmentItem GetSystemEquipmentItem(string id) - { - EquipmentItem item = null; - Race defaultRace = SystemDefaultRace; - - if (defaultRace!=null) - { - item = defaultRace.GetEquipmentItem(id); - } - - return item; - } - - public UnitType[] GetSystemUnitTypes(Category cat) - { - UnitType[] items = new UnitType[0]; - Race defaultRace = SystemDefaultRace; - - if (defaultRace!=null) - { - items = defaultRace.GetUnitTypes(cat); - } - - return items; - } - - public UnitType GetSystemUnitType(string id) - { - UnitType unit = null; - Race defaultRace = SystemDefaultRace; - - if (defaultRace!=null) - { - unit = defaultRace.GetUnitType(id); - } - - return unit; - } - - public List<Ability> GetSystemAbilityList() - { - List<Ability> items = new List<Ability>(); - Race defaultRace = SystemDefaultRace; - - if (defaultRace!=null) - { - items = defaultRace.GetAbilityList(); - } - - return items; - } - - public Ability GetSystemAbility(string id) - { - Ability ability = null; - Race defaultRace = SystemDefaultRace; - - if (defaultRace!=null) - { - ability = defaultRace.GetAbility(id); - } - - return ability; - } - } -} +// This file (GameSystem.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2007, 2008, 2009 IBBoard. +// +// 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. + +using System; +using System.Collections.Generic; +using System.Xml; +using System.IO; +using IBBoard.Logging; +using IBBoard.WarFoundry.API.Factories; +using ICSharpCode.SharpZipLib.Zip; + +namespace IBBoard.WarFoundry.API.Objects +{ + /// <summary> + /// Summary description for GameSystem. + /// </summary> + public class GameSystem : WarFoundryStagedLoadingObject + { + + private bool warnOnError; + private bool allowAllies; + private Dictionary<string, Category> categories = new Dictionary<string,Category>(); + private Dictionary<string, SystemStats> stats = new Dictionary<string,SystemStats>(); + private string defaultStats; + private int defaultArmySize; + + public GameSystem(string systemID, string systemName, IWarFoundryFactory creatingFactory) + : base(systemID, systemName, creatingFactory) + { + stats = new Dictionary<string,SystemStats>(); + } + + public int SystemArmyDefaultSize + { + get { return defaultArmySize; } + set + { + if (value == 0) + { + defaultArmySize = 1; + throw new ArgumentException("No default system army size"); + + } + + defaultArmySize = value; + } + } + + public bool AllowAllies + { + get { return allowAllies; } + set { allowAllies = value; } + } + + public void AddCategory(Category cat) + { + RawCategories[cat.ID] = cat; + } + + public Category GetCategory(string id) + { + EnsureFullyLoaded(); + Category cat = null; + RawCategories.TryGetValue(id, out cat); + return cat; + } + + public Category[] Categories + { + get + { + EnsureFullyLoaded(); + return DictionaryUtils.ToArray<string, Category>(RawCategories); + } + } + + protected Dictionary<string, Category> RawCategories + { + get { return categories; } + } + + public bool WarnOnError + { + get + { + return warnOnError; + } + set { warnOnError = value; } + } + + public void AddSystemStats(SystemStats sysStats) + { + stats[sysStats.ID] = sysStats; + } + + public SystemStats StandardSystemStats + { + get + { + EnsureFullyLoaded(); + return stats[defaultStats]; + } + } + + public string StandardSystemStatsID + { + get + { + EnsureFullyLoaded(); + return defaultStats; + } + + set + { + if (value != null && value.Trim().Length > 0) + { + defaultStats = value; + } + } + } + + public SystemStats[] SystemStats + { + get + { + EnsureFullyLoaded(); + SystemStats[] statsArray = new SystemStats[stats.Count]; + stats.Values.CopyTo(statsArray, 0); + return statsArray; + } + } + + public SystemStats GetSystemStatsForID(string id) + { + EnsureFullyLoaded(); + SystemStats statsForID; + stats.TryGetValue(id, out statsForID); + return statsForID; + } + + public Race SystemDefaultRace + { + get { return WarFoundryLoader.GetDefault().GetRace(this, Race.SYSTEM_DEFAULT_RACE_ID); } + } + + public bool Matches(GameSystem otherSystem) + { + if (otherSystem==null) + { + return false; + } + + return this.ID == otherSystem.ID; + } + + public override bool Equals(object obj) + { + if (obj == null) + { + return false; + } + + if (obj.GetType().Equals(this.GetType())) + { + GameSystem otherSystem = (GameSystem)obj; + + return this.ID == otherSystem.ID && this.Name == otherSystem.Name && ((this.RawCategories == null && otherSystem.RawCategories == null) || this.RawCategories.Equals(otherSystem.RawCategories)); + } + else + { + return false; + } + } + + public override int GetHashCode() + { + return ID.GetHashCode() + Name.GetHashCode() + (RawCategories!=null ? RawCategories.GetHashCode() : 0) + warnOnError.GetHashCode(); + } + + public bool UnitTypeMaxed(UnitType unitType, Army army) + { + return unitType.MaxNumber!=WarFoundryCore.INFINITY && army.GetUnitTypeCount(unitType) >= unitType.MaxNumber; + } + + public bool UnitTypeMinned(UnitType unitType, Army army) + { + return army.GetUnitTypeCount(unitType) <= unitType.MinNumber; + } + + public List<EquipmentItem> GetSystemEquipmentList() + { + List<EquipmentItem> items = new List<EquipmentItem>(); + Race defaultRace = SystemDefaultRace; + + if (defaultRace!=null) + { + items = defaultRace.GetEquipmentList(); + } + + return items; + } + + public EquipmentItem GetSystemEquipmentItem(string id) + { + EquipmentItem item = null; + Race defaultRace = SystemDefaultRace; + + if (defaultRace!=null) + { + item = defaultRace.GetEquipmentItem(id); + } + + return item; + } + + public UnitType[] GetSystemUnitTypes(Category cat) + { + UnitType[] items = new UnitType[0]; + Race defaultRace = SystemDefaultRace; + + if (defaultRace!=null) + { + items = defaultRace.GetUnitTypes(cat); + } + + return items; + } + + public UnitType GetSystemUnitType(string id) + { + UnitType unit = null; + Race defaultRace = SystemDefaultRace; + + if (defaultRace!=null) + { + unit = defaultRace.GetUnitType(id); + } + + return unit; + } + + public List<Ability> GetSystemAbilityList() + { + List<Ability> items = new List<Ability>(); + Race defaultRace = SystemDefaultRace; + + if (defaultRace!=null) + { + items = defaultRace.GetAbilityList(); + } + + return items; + } + + public Ability GetSystemAbility(string id) + { + Ability ability = null; + Race defaultRace = SystemDefaultRace; + + if (defaultRace!=null) + { + ability = defaultRace.GetAbility(id); + } + + return ability; + } + } +}
--- a/schemas/system.xsd Mon Oct 18 19:59:25 2010 +0000 +++ b/schemas/system.xsd Wed Dec 01 20:00:58 2010 +0000 @@ -39,6 +39,7 @@ </xs:sequence> <xs:attribute name="id" type="xs:string" /> <xs:attribute name="name" type="xs:string" use="required"/> + <xs:attribute name="defaultArmySize" type="core:nonNegativeNonInfiniteDouble" default="0"/> <xs:attribute name="warn" type="xs:boolean" default="false"/> <xs:attribute name="allowAllies" type="xs:boolean" default="true"/> <xs:anyAttribute processContents="lax"/>