Mercurial > repos > IBBoard.WarFoundry.API
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; + } + } + } +}