瀏覽代碼

Merge pull request #41362 from neikeq/fix-play-issues-after-ide-play-request

C#: Fix editor unable to play game after IDE PlayRequest
Rémi Verschelde 5 年之前
父節點
當前提交
f568cede8d

+ 2 - 17
modules/mono/editor/GodotTools/GodotTools/BuildManager.cs

@@ -205,23 +205,8 @@ namespace GodotTools
             if (File.Exists(editorScriptsMetadataPath))
                 File.Copy(editorScriptsMetadataPath, playerScriptsMetadataPath);
 
-            var currentPlayRequest = GodotSharpEditor.Instance.CurrentPlaySettings;
-
-            if (currentPlayRequest != null)
-            {
-                if (currentPlayRequest.Value.HasDebugger)
-                {
-                    // Set the environment variable that will tell the player to connect to the IDE debugger
-                    // TODO: We should probably add a better way to do this
-                    Environment.SetEnvironmentVariable("GODOT_MONO_DEBUGGER_AGENT",
-                        "--debugger-agent=transport=dt_socket" +
-                        $",address={currentPlayRequest.Value.DebuggerHost}:{currentPlayRequest.Value.DebuggerPort}" +
-                        ",server=n");
-                }
-
-                if (!currentPlayRequest.Value.BuildBeforePlaying)
-                    return true; // Requested play from an external editor/IDE which already built the project
-            }
+            if (GodotSharpEditor.Instance.SkipBuildBeforePlaying)
+                return true; // Requested play from an external editor/IDE which already built the project
 
             return BuildProjectBlocking("Debug");
         }

+ 1 - 1
modules/mono/editor/GodotTools/GodotTools/GodotSharpEditor.cs

@@ -38,7 +38,7 @@ namespace GodotTools
 
         public BottomPanel BottomPanel { get; private set; }
 
-        public PlaySettings? CurrentPlaySettings { get; set; }
+        public bool SkipBuildBeforePlaying { get; set; } = false;
 
         public static string ProjectAssemblyName
         {

+ 18 - 5
modules/mono/editor/GodotTools/GodotTools/Ides/MessagingServer.cs

@@ -330,9 +330,10 @@ namespace GodotTools.Ides
             {
                 DispatchToMainThread(() =>
                 {
-                    GodotSharpEditor.Instance.CurrentPlaySettings = new PlaySettings();
+                    // TODO: Add BuildBeforePlaying flag to PlayRequest
+
+                    // Run the game
                     Internal.EditorRunPlay();
-                    GodotSharpEditor.Instance.CurrentPlaySettings = null;
                 });
                 return Task.FromResult<Response>(new PlayResponse());
             }
@@ -341,10 +342,22 @@ namespace GodotTools.Ides
             {
                 DispatchToMainThread(() =>
                 {
-                    GodotSharpEditor.Instance.CurrentPlaySettings =
-                        new PlaySettings(request.DebuggerHost, request.DebuggerPort, request.BuildBeforePlaying ?? true);
+                    // Tell the build callback whether the editor already built the solution or not
+                    GodotSharpEditor.Instance.SkipBuildBeforePlaying = !(request.BuildBeforePlaying ?? true);
+
+                    // Pass the debugger agent settings to the player via an environment variables
+                    // TODO: It would be better if this was an argument in EditorRunPlay instead
+                    Environment.SetEnvironmentVariable("GODOT_MONO_DEBUGGER_AGENT",
+                        "--debugger-agent=transport=dt_socket" +
+                        $",address={request.DebuggerHost}:{request.DebuggerPort}" +
+                        ",server=n");
+
+                    // Run the game
                     Internal.EditorRunPlay();
-                    GodotSharpEditor.Instance.CurrentPlaySettings = null;
+
+                    // Restore normal settings
+                    Environment.SetEnvironmentVariable("GODOT_MONO_DEBUGGER_AGENT", "");
+                    GodotSharpEditor.Instance.SkipBuildBeforePlaying = false;
                 });
                 return Task.FromResult<Response>(new DebugPlayResponse());
             }