Mercurial > repos > IBBoard.WarFoundry.API
view api/Objects/GameSystem.cs @ 221:78f7456f6419
Re #228: Crash with missing abilityID
* Quick fix to check if an ability ID doesn't match an ability and throw a standard error if it isn't found
TODO:
* Need to check why it isn't handled by the attribute type (IDREF)
* Need to test it works!
Problem shouldn't occur for <notes> because it is just a block of text and isn't referenced anywhere
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Mon, 07 Dec 2009 19:40:12 +0000 |
parents | 2f3cafb69799 |
children | d576034ad1dd |
line wrap: on
line source
// 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 { 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; } } }