using System; using System.Collections; using System.Collections.Generic; using System.Reflection; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; namespace StardewModdingAPI { public static class Extensions { public static Random Random = new Random(); public static bool IsKeyDown(this Keys key) { return Keyboard.GetState().IsKeyDown(key); } public static Color RandomColour() { return new Color(Random.Next(0, 255), Random.Next(0, 255), Random.Next(0, 255)); } public static string ToSingular(this IEnumerable ienum, string split = ", ") { //Apparently Keys[] won't split normally :l if (ienum is Keys[]) { return string.Join(split, (Keys[])ienum); } return string.Join(split, ienum); } public static bool IsInt32(this object o) { int i; return Int32.TryParse(o.ToString(), out i); } public static Int32 AsInt32(this object o) { return Int32.Parse(o.ToString()); } public static bool IsBool(this object o) { bool b; return Boolean.TryParse(o.ToString(), out b); } public static bool AsBool(this object o) { return Boolean.Parse(o.ToString()); } public static int GetHash(this IEnumerable enumerable) { int hash = 0; foreach (var v in enumerable) { hash ^= v.GetHashCode(); } return hash; } public static T Cast(this object o) where T : class { return o as T; } public static FieldInfo[] GetPrivateFields(this object o) { return o.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic); } public static FieldInfo GetBaseFieldInfo(this Type t, string name) { return t.GetField(name, BindingFlags.Instance | BindingFlags.NonPublic); } public static T GetBaseFieldValue(this Type t, object o, string name) where T : class { return t.GetBaseFieldInfo(name).GetValue(o) as T; } public static void SetBaseFieldValue(this Type t, object o, string name, object newValue) where T : class { t.GetBaseFieldInfo(name).SetValue(o, newValue as T); } /* public static T GetBaseFieldValue(this object o, string name) where T : class { return o.GetType().GetBaseFieldInfo(name).GetValue(o) as T; }*/ /* public static object GetBaseFieldValue(this object o, string name) { return o.GetType().GetBaseFieldInfo(name).GetValue(o); } public static void SetBaseFieldValue (this object o, string name, object newValue) { o.GetType().GetBaseFieldInfo(name).SetValue(o, newValue); } */ public static string RemoveNumerics(this string st) { string s = st; foreach (char c in s) { if (!char.IsLetterOrDigit(c)) { s = s.Replace(c.ToString(), ""); } } return s; } } }