aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS_TheReturn/ReflectMan.cs
diff options
context:
space:
mode:
authorRogueAI42 <[email protected]>2017-06-13 20:06:38 +1000
committerRogueAI42 <[email protected]>2017-06-13 20:06:38 +1000
commit2acfa34596061a9236bb6a9df1e3f3a0c01d6ff0 (patch)
tree72954044f3dde5f9a17d12f99cd57a819f1b0f58 /ShiftOS_TheReturn/ReflectMan.cs
parenta2db5d39096cbf4d32412ad40168769ca63d9493 (diff)
downloadshiftos_thereturn-2acfa34596061a9236bb6a9df1e3f3a0c01d6ff0.tar.gz
shiftos_thereturn-2acfa34596061a9236bb6a9df1e3f3a0c01d6ff0.tar.bz2
shiftos_thereturn-2acfa34596061a9236bb6a9df1e3f3a0c01d6ff0.zip
Python API
It uses a meta-language and a CSharpCodeProvider on startup. I will release a tutorial on the forums soon showing how to use it. This commit also adds an extremely basic loading screen which shows while Desktop is getting everything ready. Which can take a while if you have any Python mods. Thanks, IronPython.
Diffstat (limited to 'ShiftOS_TheReturn/ReflectMan.cs')
-rw-r--r--ShiftOS_TheReturn/ReflectMan.cs45
1 files changed, 42 insertions, 3 deletions
diff --git a/ShiftOS_TheReturn/ReflectMan.cs b/ShiftOS_TheReturn/ReflectMan.cs
index a0ead60..78f6bf3 100644
--- a/ShiftOS_TheReturn/ReflectMan.cs
+++ b/ShiftOS_TheReturn/ReflectMan.cs
@@ -22,6 +22,7 @@
* SOFTWARE.
*/
+using Microsoft.Scripting.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -31,34 +32,46 @@ using System.Threading.Tasks;
namespace ShiftOS.Engine
{
+ /// <summary>
+ /// Mirror, mirror on the wall. Manages a list of types found in ShiftOS-related assemblies.
+ /// </summary>
public static class ReflectMan
{
private static Assembly[] asms = null;
+ /// <summary>
+ /// The list of found assemblies.
+ /// </summary>
public static Assembly[] Asms
{
get
{
if (asms == null)
- LoadAssemblies();
+ LoadFiles();
return asms;
}
}
private static Type[] types = null;
+ /// <summary>
+ /// The list of found types.
+ /// </summary>
public static Type[] Types
{
get
{
if (types == null)
+ {
FindTypes();
+ PythonAPI.Scan();
+ }
return types;
}
}
- private static void LoadAssemblies()
+ private static void LoadFiles()
{
var ret = new List<Assembly>();
- foreach (var exe in Array.FindAll(System.IO.Directory.GetFiles(Environment.CurrentDirectory), n => n.EndsWith(".exe") || n.EndsWith(".dll")))
+ foreach (var exe in Array.FindAll(System.IO.Directory.GetFiles(Environment.CurrentDirectory), n => n.EndsWith(".exe", true, null) || n.EndsWith(".dll", true, null)))
try
{
var asm = Assembly.LoadFile(exe);
@@ -76,5 +89,31 @@ namespace ShiftOS.Engine
ret.AddRange(asm.GetTypes());
types = ret.ToArray();
}
+
+ /// <summary>
+ /// Add extra types to the ReflectMan array after the scan is complete.
+ /// Shouldn't be public, but C# doesn't support "friend".
+ /// </summary>
+ /// <param name="newtypes">An array of types to append.</param>
+ public static void AddTypes(Type[] newtypes)
+ {
+ var oldlength = types.Length;
+ Array.Resize(ref types, oldlength + newtypes.Length);
+ newtypes.CopyTo(types, oldlength);
+ }
+ }
+
+#if DEBUG
+ [Namespace("dev")]
+ public static class ReflectDebug
+ {
+ [Command("listalltypes", description = "List all types that were found by ReflectMan. Only present in DEBUG builds of ShiftOS.")]
+ public static bool ListAllTypes(Dictionary<string, object> args)
+ {
+ foreach (var type in ReflectMan.Types)
+ Console.WriteLine(type.ToString());
+ return true;
+ }
}
+#endif
}