diff API/Objects/Stats.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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/API/Objects/Stats.cs	Sun Apr 03 18:50:32 2011 +0000
@@ -0,0 +1,104 @@
+// This file (Stats.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;
+
+namespace IBBoard.WarFoundry.API.Objects
+{
+	/// <summary>
+	/// Stats defines the statistic/attribute values for an entity (for example a unit or any of their equipment that has a stat line) paired against a <see cref=" SystemStats"/> stat line definition.
+	/// </summary>
+	public class Stats
+	{
+		private List<Stat> stats;
+		private SystemStats sysStats;
+		
+		public Stats(SystemStats systemStats)
+		{
+			sysStats = systemStats;
+			int statCount = sysStats.SlotCount;
+			stats = new List<Stat>(statCount);
+
+			foreach (StatSlot slot in sysStats.StatSlots)
+			{
+				stats.Add(new Stat(slot, ""));
+			}
+		}
+		
+		public Stat[] StatsArray
+		{
+			get { return stats.ToArray(); }
+		}
+
+		public void SetStatValue(string statName, string statValue)
+		{
+			StatSlot slot = sysStats[statName.ToLower()];
+
+			if (slot!=null)
+			{
+				int pos = sysStats.GetStatSlotPosition(slot);
+
+				if (pos > -1)
+				{
+					stats[pos] = new Stat(slot, statValue);
+				}
+			}				
+		}
+		
+		public Stat this[string id]
+		{
+			get
+			{
+				StatSlot slot = sysStats[id.ToLower()];
+				int pos = sysStats.GetStatSlotPosition(slot);
+				Stat stat = null;
+				
+				try
+				{
+					stat = this[pos];
+				}
+				catch (ArgumentException ex)
+				{
+					throw new ArgumentException(String.Format("Invalid statistic ID {0} for stats based on system stats set {1}", new object[]{id, sysStats.ID}), ex);
+				}
+				
+				return stat;
+			}
+		}
+		
+		public Stat this[int pos]
+		{
+			get
+			{
+				if (pos < stats.Count && pos >= 0)
+				{
+					return stats[pos];
+				}
+				else
+				{
+					throw new ArgumentException(String.Format("Invalid statistic position {0} for stats based on system stats set {1}", new object[]{pos, sysStats.ID})); 
+				}
+			}
+		}
+
+		public string GetStatValue(string id)
+		{
+			return this[id.ToLower()].SlotValueString;
+		}
+		
+		public int StatCount
+		{
+			get { return stats.Count; }
+		}
+		
+		public string StatsID
+		{
+			get
+			{
+				return sysStats.ID;
+			}
+		}
+	}
+}