view api/Objects/SystemStats.cs @ 252:a54da5a8b5bb

Re #268: Restructure stats for re-use * Add "Member Type" class * Add member type setting and getting to Race * Load member types from XML files * Make unit type pull stat line from stats or first member type, or fall back to a blank stat line * Change Stats object to initialise blank values * Change schema * Make stats optional * Add member type list to race * Add optional member type references to units
author IBBoard <dev@ibboard.co.uk>
date Sun, 25 Apr 2010 15:07:08 +0000
parents 8c6f55d289b0
children f8f441f2fcfe
line wrap: on
line source

// This file (SystemStats.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>
	/// SystemStats defines the available statistics/attributes that entity types can use (either a unit or an equipment item that has a stats line). Statistic/attribute values will be defined by a <see cref="Stats"/> object.
	/// </summary>
	public class SystemStats
	{
		private Dictionary<string, StatSlot> statsByName;
		private List<StatSlot> stats;
		private string id;

		public SystemStats(string statsID)
		{
			id = statsID;
			statsByName = new Dictionary<string, StatSlot>();
			stats = new List<StatSlot>();
		}

		public void AddStatSlot(string slotName)
		{
			StatSlot slot = new StatSlot(slotName);
			slot.SystemStats = this;
			statsByName[slot.Name.ToLower()] = slot;
			stats.Add(slot);
		}		

		public StatSlot[] StatSlots
		{
			get
			{
				return stats.ToArray();
			}
		}
		
		public StatSlot this[string statName]
		{
			get 
			{
				return DictionaryUtils.GetValue(statsByName, statName.ToLower());
			}
		}

		public int GetStatSlotPosition(StatSlot slot)
		{
			return stats.IndexOf(slot);
		}
		
        public int SlotCount
        {
            get { return stats.Count; }
        }
		
		public string ID
		{
			get { return id; }
		}
	}
}