UnityExplorer/src/CSConsole/ScriptInteraction.cs

72 lines
2.3 KiB
C#
Raw Normal View History

2022-01-31 21:24:01 +11:00
using HarmonyLib;
using Mono.CSharp;
using System.Collections;
using System.Text;
using UnityExplorer.UI.Panels;
namespace UnityExplorer.CSConsole
{
public class ScriptInteraction : InteractiveBase
{
public static object CurrentTarget
=> InspectorManager.ActiveInspector?.Target;
public static object[] AllTargets
=> InspectorManager.Inspectors.Select(it => it.Target).ToArray();
public static void Log(object message)
=> ExplorerCore.Log(message);
public static void Inspect(object obj)
=> InspectorManager.Inspect(obj);
public static void Inspect(Type type)
=> InspectorManager.Inspect(type);
public static Coroutine Start(IEnumerator ienumerator)
2022-01-31 21:24:01 +11:00
=> RuntimeHelper.StartCoroutine(ienumerator);
public static void Stop(Coroutine coro)
=> RuntimeHelper.StopCoroutine(coro);
public static void Copy(object obj)
=> ClipboardPanel.Copy(obj);
public static object Paste()
=> ClipboardPanel.Current;
public static void GetUsing()
=> Log(Evaluator.GetUsing());
public static void GetVars()
{
string vars = Evaluator.GetVars()?.Trim();
if (string.IsNullOrEmpty(vars))
ExplorerCore.LogWarning("No variables seem to be defined!");
else
Log(vars);
}
public static void GetClasses()
{
2022-01-31 21:24:01 +11:00
if (AccessTools.Field(typeof(Evaluator), "source_file")
2021-06-05 19:36:09 +10:00
.GetValue(Evaluator) is CompilationSourceFile sourceFile
&& sourceFile.Containers.Any())
{
StringBuilder sb = new();
sb.Append($"There are {sourceFile.Containers.Count} defined classes:");
foreach (TypeDefinition type in sourceFile.Containers.Where(it => it is TypeDefinition))
{
sb.Append($"\n\n{type.MemberName.Name}:");
foreach (MemberCore member in type.Members)
sb.Append($"\n\t- {member.AttributeTargets}: \"{member.MemberName.Name}\" ({member.ModFlags})");
}
Log(sb.ToString());
}
else
ExplorerCore.LogWarning("No classes seem to be defined.");
}
}
2021-07-07 23:21:40 +10:00
}