summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/StardewModdingAPI/Extensions.cs112
-rw-r--r--src/StardewModdingAPI/StardewModdingAPI.csproj1
2 files changed, 113 insertions, 0 deletions
diff --git a/src/StardewModdingAPI/Extensions.cs b/src/StardewModdingAPI/Extensions.cs
new file mode 100644
index 00000000..5726e882
--- /dev/null
+++ b/src/StardewModdingAPI/Extensions.cs
@@ -0,0 +1,112 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+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));
+ }
+
+ [Obsolete("The usage of ToSingular has changed. Please update your call to use ToSingular<T>")]
+ public static string ToSingular(this IEnumerable ienum, string split = ", ")
+ {
+ Log.AsyncR("The usage of ToSingular has changed. Please update your call to use ToSingular<T>");
+ return "";
+ }
+
+ public static string ToSingular<T>(this IEnumerable<T> ienum, string split = ", ") // where T : class
+ {
+ //Apparently Keys[] won't split normally :l
+ if (typeof(T) == typeof(Keys))
+ {
+ return string.Join(split, ienum.ToArray());
+ }
+ return string.Join(split, ienum);
+ }
+
+ public static bool IsInt32(this object o)
+ {
+ int i;
+ return int.TryParse(o.ToString(), out i);
+ }
+
+ public static int AsInt32(this object o)
+ {
+ return int.Parse(o.ToString());
+ }
+
+ public static bool IsBool(this object o)
+ {
+ bool b;
+ return bool.TryParse(o.ToString(), out b);
+ }
+
+ public static bool AsBool(this object o)
+ {
+ return bool.Parse(o.ToString());
+ }
+
+ public static int GetHash(this IEnumerable enumerable)
+ {
+ var hash = 0;
+ foreach (var v in enumerable)
+ {
+ hash ^= v.GetHashCode();
+ }
+ return hash;
+ }
+
+ public static T Cast<T>(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 | BindingFlags.Static);
+ }
+
+ public static FieldInfo GetBaseFieldInfo(this Type t, string name)
+ {
+ return t.GetField(name, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static);
+ }
+
+ public static T GetBaseFieldValue<T>(this Type t, object o, string name) where T : class
+ {
+ return t.GetBaseFieldInfo(name).GetValue(o) as T;
+ }
+
+ public static void SetBaseFieldValue<T>(this Type t, object o, string name, object newValue) where T : class
+ {
+ t.GetBaseFieldInfo(name).SetValue(o, newValue as T);
+ }
+
+ public static string RemoveNumerics(this string st)
+ {
+ var s = st;
+ foreach (var c in s)
+ {
+ if (!char.IsLetterOrDigit(c))
+ {
+ s = s.Replace(c.ToString(), "");
+ }
+ }
+ return s;
+ }
+ }
+} \ No newline at end of file
diff --git a/src/StardewModdingAPI/StardewModdingAPI.csproj b/src/StardewModdingAPI/StardewModdingAPI.csproj
index 0b55a925..5a901e4b 100644
--- a/src/StardewModdingAPI/StardewModdingAPI.csproj
+++ b/src/StardewModdingAPI/StardewModdingAPI.csproj
@@ -195,6 +195,7 @@
<Compile Include="Events\MineEvents.cs" />
<Compile Include="Events\PlayerEvents.cs" />
<Compile Include="Events\TimeEvents.cs" />
+ <Compile Include="Extensions.cs" />
<Compile Include="Framework\DeprecationManager.cs" />
<Compile Include="Framework\UpdateHelper.cs" />
<Compile Include="Framework\GitRelease.cs" />