Skip to content

Commit

Permalink
Modify APIs
Browse files Browse the repository at this point in the history
  • Loading branch information
ichenpipi committed Aug 24, 2023
1 parent 8926ff0 commit d9ebea1
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 38 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog

## [1.0.2] - 2023-08-24

- Modify APIs

## [1.0.1] - 2023-08-23

- Fix bugs
Expand Down
54 changes: 48 additions & 6 deletions Editor/Scripts/CodeExecutorManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ public static class CodeExecutorManager

#region Macro

// /// <summary>
// /// 设置插件宏
// /// </summary>
// [InitializeOnLoadMethod]
// public static void SetupMacro()
// {
Expand All @@ -66,6 +69,10 @@ public static class CodeExecutorManager

#region Window

/// <summary>
/// 打开窗口
/// </summary>
/// <param name="forceReopen"></param>
public static void Open(bool forceReopen = false)
{
if (!forceReopen && CodeExecutorWindow.HasOpenInstances())
Expand Down Expand Up @@ -244,7 +251,7 @@ public static void RemoveSnippets(string[] guids)

#endregion

#region Update Snippet
#region Data Operation Snippet

/// <summary>
/// 代码段名称非法字符
Expand Down Expand Up @@ -385,19 +392,19 @@ public static void RegisterExecMode(ExecutionMode mode)
string modeName = mode.name;
if (string.IsNullOrEmpty(modeName))
{
Debug.LogError($"[CodeExecutor] Cannot register execution mode without a name!");
Debug.LogError($"[CodeExecutor] Cannot register execution mode without a name!\n");
return;
}

if (modeName.Equals(DefaultExecMode.name, StringComparison.OrdinalIgnoreCase))
{
Debug.LogError($"[CodeExecutor] Cannot register execution mode with name '{modeName}'!");
Debug.LogError($"[CodeExecutor] Cannot register execution mode with name '{modeName}'!\n");
return;
}

if (ExecutionModes.ContainsKey(modeName))
{
Debug.LogError($"[CodeExecutor] A Execution mode named '{modeName}' is already registered!");
Debug.LogError($"[CodeExecutor] A Execution mode named '{modeName}' is already registered!\n");
return;
}

Expand Down Expand Up @@ -461,6 +468,41 @@ public static bool HasExecMode(string modeName)
return mode;
}

/// <summary>
/// 重新注册所有执行模式
/// </summary>
public static void ReRegisterExecModes()
{
ExecutionModes.Clear();
UnityEditor.Compilation.CompilationPipeline.RequestScriptCompilation();
}

/// <summary>
/// 启用内置的执行模式 C#
/// </summary>
public static bool enableBuiltinExecModeCSharp
{
get => CodeExecutorSettings.enableBuiltinExecModeCSharp;
set
{
CodeExecutorSettings.enableBuiltinExecModeCSharp = value;
ReRegisterExecModes();
}
}

/// <summary>
/// 启用内置的执行模式 xLua
/// </summary>
public static bool enableBuiltinExecModeXLua
{
get => CodeExecutorSettings.enableBuiltinExecModeXLua;
set
{
CodeExecutorSettings.enableBuiltinExecModeXLua = value;
ReRegisterExecModes();
}
}

#endregion

#region Execution
Expand All @@ -475,13 +517,13 @@ internal static object[] ExecuteCode(string codeText, string modeName)
{
if (!ExecutionModes.TryGetValue(modeName, out ExecutionMode mode))
{
Debug.LogError($"[CodeExecutor] No execution mode named '{modeName}' was found!");
Debug.LogError($"[CodeExecutor] No execution mode named '{modeName}' was found!\n");
return null;
}

if (mode.executor == null)
{
Debug.LogError($"[CodeExecutor] Invalid executor for execution mode '{modeName}'!");
Debug.LogError($"[CodeExecutor] Invalid executor for execution mode '{modeName}'!\n");
return null;
}

Expand Down
35 changes: 5 additions & 30 deletions Editor/Scripts/Window/CodeExecutorWindowMenu.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ public partial class CodeExecutorWindow : EditorWindow, IHasCustomMenu

public void AddItemsToMenu(GenericMenu menu)
{
menu.AddItem(new GUIContent("Built-in Execution Mode/C#"), enableBuiltinExecModeCSharp, Menu_BuiltinExecutionModeCSharp);
menu.AddItem(new GUIContent("Built-in Execution Mode/XLua (Standalone)"), enableBuiltinExecModeXLua, Menu_BuiltinExecutionModeXLua);
menu.AddItem(new GUIContent("Built-in Execution Mode/C#"), CodeExecutorManager.enableBuiltinExecModeCSharp, Menu_BuiltinExecutionModeCSharp);
menu.AddItem(new GUIContent("Built-in Execution Mode/XLua (Standalone)"), CodeExecutorManager.enableBuiltinExecModeXLua, Menu_BuiltinExecutionModeXLua);
menu.AddItem(new GUIContent("Document: How to register execution modes?"), false, Menu_Document);
menu.AddSeparator(string.Empty);
menu.AddItem(new GUIContent("Reload"), false, Menu_Reload);
Expand All @@ -29,39 +29,14 @@ public void AddItemsToMenu(GenericMenu menu)
menu.AddItem(new GUIContent("About/Project Home Page (Gitee)"), false, Menu_ProjectHomePageGitee);
}

public static void ReRegisterExecModes()
{
UnityEditor.Compilation.CompilationPipeline.RequestScriptCompilation();
}

public static bool enableBuiltinExecModeCSharp
{
get => CodeExecutorSettings.enableBuiltinExecModeCSharp;
set
{
CodeExecutorSettings.enableBuiltinExecModeCSharp = value;
ReRegisterExecModes();
}
}

public static bool enableBuiltinExecModeXLua
{
get => CodeExecutorSettings.enableBuiltinExecModeXLua;
set
{
CodeExecutorSettings.enableBuiltinExecModeXLua = value;
ReRegisterExecModes();
}
}

private void Menu_BuiltinExecutionModeCSharp()
{
enableBuiltinExecModeCSharp = !enableBuiltinExecModeCSharp;
CodeExecutorManager.enableBuiltinExecModeCSharp = !CodeExecutorManager.enableBuiltinExecModeCSharp;
}

private void Menu_BuiltinExecutionModeXLua()
{
enableBuiltinExecModeXLua = !enableBuiltinExecModeXLua;
CodeExecutorManager.enableBuiltinExecModeXLua = !CodeExecutorManager.enableBuiltinExecModeXLua;
}

private void Menu_Document()
Expand All @@ -78,7 +53,7 @@ private void Menu_Reload()
ApplySettings();
UpdateContent();
// 刷新注册模式
ReRegisterExecModes();
CodeExecutorManager.ReRegisterExecModes();
}

private void Menu_ShowSerializedDataFile()
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ public static class Example

After successful registration, the name of the mode will appear in the drop-down list of the Execution Mode menu at the top right of the Code Executor window, and can be used to execute code snippets.

![image-001.png](Screenshots~/image-001.png)
![Execution Modes](Screenshots~/execution-modes.png)

#### Register by reflection

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "com.chenpipi.code-executor",
"version": "1.0.1",
"version": "1.0.2",
"unity": "2020.2",
"displayName": "Code Executor",
"keywords": [
Expand Down

0 comments on commit d9ebea1

Please sign in to comment.