diff options
| author | RogueAI42 <[email protected]> | 2017-06-13 20:06:38 +1000 |
|---|---|---|
| committer | RogueAI42 <[email protected]> | 2017-06-13 20:06:38 +1000 |
| commit | 2acfa34596061a9236bb6a9df1e3f3a0c01d6ff0 (patch) | |
| tree | 72954044f3dde5f9a17d12f99cd57a819f1b0f58 /ShiftOS_TheReturn/ReflectMan.cs | |
| parent | a2db5d39096cbf4d32412ad40168769ca63d9493 (diff) | |
| download | shiftos_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.cs | 45 |
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 } |
