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;
+				}
+			}
+		}
+	}
+}