Mercurial > repos > IBBoard.WarFoundry.API
diff API/Objects/UnitEquipmentItem.cs @ 337:3c4a6403a88c
* Fix capitalisation so that new files are in the namespace
no-open-ticket
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sun, 03 Apr 2011 18:50:32 +0000 |
parents | |
children | 7e95b880f9cc |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/API/Objects/UnitEquipmentItem.cs Sun Apr 03 18:50:32 2011 +0000 @@ -0,0 +1,248 @@ +// This file (UnitEquipmentItem.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 IBBoard.CustomMath; +using IBBoard.Limits; +using IBBoard.WarFoundry.API.Util; +using IBBoard.Lang; +//using IBBoard.WarFoundry.API.Objects; + +namespace IBBoard.WarFoundry.API.Objects +{ + /// <summary> + /// Summary description for UnitEquipmentItem. + /// </summary> + public class UnitEquipmentItem : WarFoundryObject + { + private EquipmentItem item; + private bool required; + private bool roundUp; + private double costMultiplier; + private RoundType roundType; + private string[] mutexGroups; + private UnitType unitType; + private string slotName = ""; + private ILimit minLimit; + private ILimit maxLimit; + public UnitEquipmentItem(EquipmentItem equipmentItem, UnitType equipmentFor) + : this(equipmentItem, equipmentFor, new string[0]) + { + //Do nothing extra + } + + public UnitEquipmentItem(EquipmentItem equipmentItem, UnitType equipmentFor, params string[] mutexGroups) + { + item = equipmentItem; + unitType = equipmentFor; + this.mutexGroups = mutexGroups; + unitType.AddEquipmentItem(this); + } + + public override string Name + { + get + { + return item.Name; + } + set + { + base.Name = value; + } + } + + public override string ID + { + get + { + return (EquipmentForUnit == null ? base.ID : EquipmentForUnit.ID) + EquipmentItemID; + } + set + { + base.ID = value; + } + } + + public string EquipmentItemID + { + get { return item.ID; } + } + + public double Cost + { + get + { + return IBBMath.Round(EquipmentItem.Cost * CostMultiplier, CostRoundType); + } + } + + public double CostMultiplier + { + get { return costMultiplier; } + set + { + costMultiplier = value; + } + } + + public RoundType CostRoundType + { + get { return roundType; } + set + { + roundType = value; + } + } + + public bool IsRequired + { + get { return required; } + set { required = value; } + } + + public bool RoundNumberUp + { + get { return roundUp; } + set { roundUp = value; } + } + + public GameSystem GameSystem + { + get { return EquipmentItem.GameSystem; } + } + + public String[] MutexGroups + { + get { return (string[]) mutexGroups.Clone(); } + } + + public UnitType EquipmentForUnit + { + get { return unitType; } + } + + public bool IsRatioLimit + { + get { return MinLimit is IPercentageLimit && MaxLimit is IPercentageLimit; } + } + + /// <summary> + /// Gets the Limit object for the minimum number of items that can be taken + /// </summary> + public ILimit MinLimit + { + get + { + ILimit limit = minLimit; + + if (limit == null) + { + if (maxLimit != null) + { + limit = maxLimit; + } + else + { + limit = new SimpleRoundedPercentageLimit(100, false); + } + } + + return limit; + } + set + { + if (value != null) + { + minLimit = value; + } + } + } + + /// <summary> + /// Gets the Limit object for the maximum number of items that can be taken + /// </summary> + public ILimit MaxLimit + { + get + { + ILimit limit = maxLimit; + + if (limit == null) + { + if (minLimit != null) + { + limit = minLimit; + } + else + { + limit = new SimpleRoundedPercentageLimit(100, false); + } + } + + return limit; + } + set + { + if (value != null) + { + maxLimit = value; + } + } + } + + public EquipmentItem EquipmentItem + { + get { return item; } + } + + public override string ToString() + { + return Translation.GetTranslation("UnitEquipmentItemName", "{0} ({1}{2} each)", Name, Cost, GameSystem.GetPointsAbbrev(Cost)); + } + + public bool HasAlternatives() + { + if (MutexGroups.Length == 0) + { + return false; + } + else if (EquipmentForUnit == null) + { + return false; + } + else + { + //If the number of items in the MutEx group is greater than one then it must be this item plus another + return EquipmentForUnit.GetEquipmentItemsByExclusionGroups(MutexGroups).Length > 1; + } + } + + public string Description + { + get { return EquipmentItem.Description; } + } + + public Race EquipmentForRace + { + get { return EquipmentItem.EquipmentForRace; } + } + + public bool CanBeUsedWithItem(EquipmentItem item) + { + return EquipmentItem.CanBeUsedWithItem(item); + } + + public string SlotName + { + get { return slotName; } + set + { + if (value != null && value != "") + { + slotName = value; + } + } + } + } +}