Skip to content

Commit

Permalink
Merge pull request #41362 from neikeq/fix-play-issues-after-ide-play-…
Browse files Browse the repository at this point in the history
…request

C#: Fix editor unable to play game after IDE PlayRequest
  • Loading branch information
akien-mga authored Aug 18, 2020
2 parents 9218f0f + 6e7da72 commit f568ced
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 23 deletions.
19 changes: 2 additions & 17 deletions modules/mono/editor/GodotTools/GodotTools/BuildManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -205,23 +205,8 @@ public static bool EditorBuildCallback()
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");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public class GodotSharpEditor : EditorPlugin, ISerializationListener

public BottomPanel BottomPanel { get; private set; }

public PlaySettings? CurrentPlaySettings { get; set; }
public bool SkipBuildBeforePlaying { get; set; } = false;

public static string ProjectAssemblyName
{
Expand Down
23 changes: 18 additions & 5 deletions modules/mono/editor/GodotTools/GodotTools/Ides/MessagingServer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -330,9 +330,10 @@ private static Task<Response> HandlePlay()
{
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());
}
Expand All @@ -341,10 +342,22 @@ private static Task<Response> HandleDebugPlay(DebugPlayRequest request)
{
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());
}
Expand Down

0 comments on commit f568ced

Please sign in to comment.