Merge pull request #41362 from neikeq/fix-play-issues-after-ide-play-request
C#: Fix editor unable to play game after IDE PlayRequest
This commit is contained in:
commit
f568cede8d
|
@ -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");
|
||||
}
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue