view api/Objects/UnitEquipmentItem.cs @ 54:3a90f70dac73

Re #61 - Complete structure of WarFoundry API objects * Remove min/max from EquipmentItem and add description * Add min/max numbers and percentages to UnitEquipmentItem * Make Race schema define min/max number without the ratio (which is the percentage) * Replace use of EquipmentItem with UnitEquipmentItem because of increased use of UnitEquipmentItem for unit-specific data * Use doubles instead of floats for equipment amounts * Distinguish between ratio and absolute limits * Delete UnitEquipmentItemObj helper class that was purely used for UI Re #9 - Use smaller methods * Deprecate long Race and EquipmentItem constructors and ensure all getters/setters exist Also: * Migrate Unit to using genericed collections * Always use GameSystem object for Race, not ID string
author IBBoard <dev@ibboard.co.uk>
date Sun, 05 Apr 2009 13:45:23 +0000
parents 306558904c2a
children 284ebe05158c
line wrap: on
line source

// This file (UnitEquipmentItem.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 under the GNU LGPL license, either version 3 of the License or (at your option) any later version. Please see COPYING.LGPL for more information and the full license.

using System;
using System.Xml;

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 int minNum;
		private int maxNum;
		private double minPercentage;
		private double maxPercentage;
		private string mutexGroup;
		private UnitType unitType;

		protected UnitEquipmentItem(EquipmentItem equipmentItem, UnitType equipForType)
		{
			item = equipmentItem;
			EquipmentForUnit = equipForType;
		}
		
		public override string Name
		{
			get {
				return item.Name;
			}
			set {
				base.Name = value;
			}
		}
		
		public string EquipmentItemID
		{
			get { return item.ID; }
		}

        public double Cost
        {
            get { return item.Cost; }
        }

		public bool IsRequired
		{
			get { return required; }
			set { required = value; }
		}

		public bool RoundNumberUp
		{
			get { return roundUp; }
			set { roundUp = value; }
		}

		public string MutexGroup
		{
			get { return mutexGroup; }
			set { mutexGroup = (value == null ? "" : value.Trim()); }
		}

		public UnitType EquipmentForUnit
		{
			get { return unitType; }
			set 
			{ 
				if (value != null)
				{
					unitType = value;
				}
			}
		}
		
		public bool IsRatioLimit
		{
			get { return minPercentage!=100 || maxPercentage!=100; }
		}
		
		public int MinNumber
		{
			get { return minNum; }
			set
			{
				if (value >=0 || value == WarFoundryCore.INFINITY)
				{
					minNum = value;
				}
				//TODO: Check Min<Max
			}
		}
		
		public int MaxNumber
		{
			get { return maxNum; }
			set
			{
				if (value >=0 || value == WarFoundryCore.INFINITY)
				{
					maxNum = value;
				}
				//TODO: Check Min<Max
			}
		}
		
		public double MinPercentage
		{
			get { return minPercentage; }
			set
			{
				if (value >=0 && value <= 100)
				{
					minPercentage = value;
				}
				//TODO: Check Min<Max
			}
		}
		
		public double MaxPercentage
		{
			get { return maxPercentage; }
			set
			{
				if (value >=0 && value <= 100)
				{
					maxPercentage = value;
				}
				//TODO: Check Min<Max
			}
		}

		public EquipmentItem EquipmentItem
		{
			get { return item; }
		}

		public override string ToString()
		{
			return EquipmentItem.Name+ " ("+EquipmentItem.Cost+"pts each)";
		}

		public bool HasAlternatives()
		{
			if (MutexGroup=="")
			{
				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.GetEquipmentItemsByExclusionGroup(MutexGroup).Length > 1;
			}
		}
		
		public static string FormatEquipmentAmount(UnitEquipmentItem item, double amount)
		{
			if (item.IsRatioLimit)
			{
				return Math.Round(amount * 100) + "%";
			}
			else
			{
				if (amount == WarFoundryCore.INFINITY)
				{
					return "all";
				}
				else
				{
					return amount.ToString();
				}
			}
		}
	}
}