#region Arthea License /*********************************************************************** * Arthea MUD by R. Jennings (2007) http://arthea.googlecode.com/ * * By using this code you comply with the Artistic and GPLv2 Licenses. * ***********************************************************************/ #endregion using System; using System.Collections.Generic; using System.Reflection; namespace Arthea.Connections.Colors { /// <summary> /// Implements a customizable color /// </summary> public class CustomColor { #region [rgn] Fields (6) private static int count = 0; private readonly int ordinal = count++; /// <summary> /// Color for items in rooms /// </summary> public static readonly CustomColor Items = new CustomColor(); /// <summary> /// Color for room names /// </summary> public static readonly CustomColor RoomName = new CustomColor(); /// <summary> /// Color for say command /// </summary> public static readonly CustomColor Say = new CustomColor(); /// <summary> /// Color for say command text /// </summary> public static readonly CustomColor SayText = new CustomColor(); #endregion [rgn] #region [rgn] Properties (1) /// <summary> /// Gets the count. /// </summary> /// <value>The count.</value> public static int Count { get { return count; } } #endregion [rgn] #region [rgn] Methods (7) // [rgn] Public Methods (7) /// <summary> /// Creates a color array. /// </summary> /// <returns></returns> public static Color[] CreateColorArray() { Color[] colors = new Color[count]; colors[Say] = new Color('g'); colors[SayText] = new Color('G'); colors[RoomName] = new Color('G'); colors[Items] = new Color('Y'); return colors; } /// <summary> /// Gets the name. /// </summary> /// <param name="color">The color.</param> /// <returns>returns the name of the custom color</returns> public static string GetName(CustomColor color) { foreach (FieldInfo fi in typeof (CustomColor).GetFields(BindingFlags.Public | BindingFlags.Static)) { if (fi.FieldType != color.GetType()) continue; if (fi.GetValue(color) == color) return fi.Name; } return "unknown"; } /// <summary> /// Gets the names. /// </summary> /// <returns>an array custom color names</returns> public static string[] GetNames() { List<string> names = new List<string>(); Type type = typeof (CustomColor); foreach (FieldInfo fi in type.GetFields(BindingFlags.Public | BindingFlags.Static)) { if (fi.FieldType != type) continue; names.Add(fi.Name); } return names.ToArray(); } /// <summary> /// Performs an implicit conversion from <see cref="CustomColor"/> to <see cref="System.Int32"/>. /// </summary> /// <param name="c">The custom color.</param> /// <returns>The result of the conversion.</returns> public static implicit operator int(CustomColor c) { return c.ordinal; } /// <summary> /// Parses the specified word. /// </summary> /// <param name="word">The word.</param> /// <returns>a custom color</returns> public static CustomColor Parse(String word) { Type type = typeof (CustomColor); foreach (FieldInfo fi in type.GetFields(BindingFlags.Static | BindingFlags.Public)) { if (fi.FieldType != type) continue; if (word.IsPrefixOf(fi.Name)) return (CustomColor) fi.GetValue(null); } return null; } /// <summary> /// Returns a <see cref="T:System.String"></see> that represents the current <see cref="T:System.Object"></see>. /// </summary> /// <returns> /// A <see cref="T:System.String"></see> that represents the current <see cref="T:System.Object"></see>. /// </returns> public override string ToString() { return BEGIN + ordinal.ToString() + END; } /// <summary> /// Valids the specified index. /// </summary> /// <param name="index">The index.</param> /// <returns></returns> public static bool Valid(int index) { return (index >= 0 && index < count); } #endregion [rgn] #region Constants (2) /// <summary> /// Custom color begining escape code /// </summary> public const char BEGIN = '\x96'; /// <summary> /// Custom color ending escape code /// </summary> public const char END = '\x97'; #endregion } }