Mercurial > repos > IBDev-IBBoard.WarFoundry.API
view api/Objects/GameSystem.cs @ 391:d051f8f44e6c default-army-name
Re #99: added points name system to GameSystem
author | snowblizz |
---|---|
date | Mon, 24 Jan 2011 16:42:43 +0000 |
parents | 4e0031339bcb |
children |
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.Lang; 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 static decimal SYSTEM_DEFAULT_ARMY_SIZE = 1000; 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 decimal defaultArmySize; private string systemPtsAbbrevSingle; private string systemPtsAbbrevPlural; private string systemPtsNameSingle; private string systemPtsNamePlural; private string pointsAbbrevSingle; private string pointsAbbrevPlural; public string pointsAbbreviation; private string pointsNameSingle; private string pointsNamePlural; public string pointsName; public GameSystem(string systemID, string systemName, IWarFoundryFactory creatingFactory) : base(systemID, systemName, creatingFactory) { stats = new Dictionary<string, SystemStats>(); } public decimal SystemArmyDefaultSize { get { return defaultArmySize; } set { if (value == 0) { defaultArmySize = SYSTEM_DEFAULT_ARMY_SIZE; } else { defaultArmySize = value; } } } public string SystemPtsAbbrevSingle { get { return systemPtsAbbrevSingle; } set { systemPtsAbbrevSingle = value; } } public string SystemPtsAbbrevPlural { get { return systemPtsAbbrevPlural; } set { systemPtsAbbrevPlural = value; } } public string SystemPtsNameSingle { get { return systemPtsNameSingle; } set { systemPtsNameSingle = value; } } public string SystemPtsNamePlural { get { return systemPtsNamePlural; } set { systemPtsNamePlural = 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 void SetCategory(Category cat) { Category old; RawCategories.TryGetValue(cat.ID, out old); if (old == null) { AddCategory(cat); } else { if (!old.Equals(cat)) { RawCategories[old.ID] = cat; } } } public void RemoveCategory(string id) { RawCategories.Remove(id); } 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 void SetSystemStats(SystemStats newStats) { SystemStats old; stats.TryGetValue(newStats.ID, out old); if (old == null) { AddSystemStats(newStats); } else { if (!old.Equals(newStats)) { stats[old.ID] = newStats; } } } public void RemoveSystemStats(string id) { stats.Remove(id); } 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; } public string UsePointsAbbrev(double pointTemp) { if (pointTemp == 1) { pointsAbbreviation = pointsAbbrevSingle; } else { pointsAbbreviation = pointsAbbrevPlural; } return pointsAbbreviation; } public string UsePointsName(double pointTemp) { if (pointTemp == 1) { pointsName = pointsNameSingle; } else { pointsName = pointsNamePlural; } return pointsName; } public void LoadPointsSystemNames() { if (this != null) { LoadPointsAbbrevPlural(); LoadPointsAbbrevSingle(); LoadPointsNamePlural(); LoadPointsNameSingle(); } } private void LoadPointsAbbrevPlural() { // Use this before calling on pointsAbbreviationPlural to "populate" the variable if (SystemPtsAbbrevPlural == "") { pointsAbbrevPlural = String.Format(Translation.GetTranslation("PointsLocalisationAbbrevPlural")); } else { pointsAbbrevPlural = SystemPtsAbbrevPlural; } } private void LoadPointsAbbrevSingle() { // Use this before calling on pointsAbbreviationSingle to "populate" the variable if (SystemPtsAbbrevSingle == "") { pointsAbbrevSingle = String.Format(Translation.GetTranslation("PointsLocalisationAbbrevSingle")); } else { pointsAbbrevSingle = SystemPtsAbbrevSingle; } } private void LoadPointsNamePlural() { // Use this before calling on pointsNamePlural to "populate" the variable if (SystemPtsNamePlural == "") { pointsNamePlural = String.Format(Translation.GetTranslation("PointsLocalisationNamePlural")); } else { pointsNamePlural = SystemPtsNamePlural; } } private void LoadPointsNameSingle() { // Use this before calling on pointsNameSingle to "populate" the variable if (SystemPtsNameSingle == "") { pointsNameSingle = String.Format(Translation.GetTranslation("PointsLocalisationNameSingle")); } else { pointsNameSingle = SystemPtsNameSingle; } } public string setUnitEquipmentItemName(string itemName,double pointsTemp) { return itemName + Translation.GetTranslation("setUnitEquipmentItemName", "({0}pts each)", pointsTemp, UsePointsAbbrev(pointsTemp)); } } }