diff --git a/Source/Editor/Content/Items/ScriptItem.cs b/Source/Editor/Content/Items/ScriptItem.cs index 811afc179..95b879b79 100644 --- a/Source/Editor/Content/Items/ScriptItem.cs +++ b/Source/Editor/Content/Items/ScriptItem.cs @@ -30,7 +30,7 @@ namespace FlaxEditor.Content ShowFileExtension = true; } - private static string FilterScriptName(string input) + internal static string FilterScriptName(string input) { var length = input.Length; var sb = new StringBuilder(length); diff --git a/Source/Editor/Windows/PluginsWindow.cs b/Source/Editor/Windows/PluginsWindow.cs index fa2547797..d53b64e22 100644 --- a/Source/Editor/Windows/PluginsWindow.cs +++ b/Source/Editor/Windows/PluginsWindow.cs @@ -6,6 +6,7 @@ using System.IO; using System.IO.Compression; using System.Linq; using System.Net.Http; +using System.Text; using System.Threading.Tasks; using FlaxEditor.GUI; using FlaxEditor.GUI.ContextMenu; @@ -13,7 +14,6 @@ using FlaxEditor.GUI.Tabs; using FlaxEngine; using FlaxEngine.GUI; using FlaxEngine.Json; -using Debug = FlaxEngine.Debug; namespace FlaxEditor.Windows { @@ -193,7 +193,7 @@ namespace FlaxEditor.Windows Text = "Create Plugin Project", TooltipText = "Add new plugin project.", AnchorPreset = AnchorPresets.TopLeft, - LocalLocation = new Float2(70,18), + LocalLocation = new Float2(70, 18), Size = new Float2(150, 25), Parent = vp, }; @@ -209,7 +209,7 @@ namespace FlaxEditor.Windows Parent = vp, }; _cloneProjectButton.Clicked += OnCloneProjectButtonClicked; - + _tabs = new Tabs { Orientation = Orientation.Vertical, @@ -254,7 +254,7 @@ namespace FlaxEditor.Windows nameTextBox.LocalX += (300 - (10)) * 0.5f; nameTextBox.LocalY += 10; nameLabel.LocalX += (300 - (nameLabel.Width + nameTextBox.Width)) * 0.5f + 10; - + var defaultTextBoxBorderColor = nameTextBox.BorderColor; var defaultTextBoxBorderSelectedColor = nameTextBox.BorderSelectedColor; nameTextBox.TextChanged += () => @@ -265,7 +265,7 @@ namespace FlaxEditor.Windows nameTextBox.BorderSelectedColor = defaultTextBoxBorderSelectedColor; return; } - + var pluginPath = Path.Combine(Globals.ProjectFolder, "Plugins", nameTextBox.Text); if (Directory.Exists(pluginPath)) { @@ -315,7 +315,7 @@ namespace FlaxEditor.Windows { if (Directory.Exists(Path.Combine(Globals.ProjectFolder, "Plugins", nameTextBox.Text)) && !string.IsNullOrEmpty(nameTextBox.Text)) { - Debug.Logger.LogHandler.LogWrite(LogType.Warning, "Cannot create plugin due to name conflict."); + Editor.LogWarning("Cannot create plugin due to name conflict."); return; } OnCloneButtonClicked(nameTextBox.Text, gitPathTextBox.Text); @@ -346,7 +346,7 @@ namespace FlaxEditor.Windows { if (string.IsNullOrEmpty(gitPath)) { - Debug.Logger.LogHandler.LogWrite(LogType.Error, $"Failed to create plugin project due to no GIT path."); + Editor.LogError($"Failed to create plugin project due to no GIT path."); return; } if (string.IsNullOrEmpty(pluginName)) @@ -363,32 +363,34 @@ namespace FlaxEditor.Windows pluginName = name; } } - + var clonePath = Path.Combine(Globals.ProjectFolder, "Plugins", pluginName); if (!Directory.Exists(clonePath)) Directory.CreateDirectory(clonePath); else { - Debug.Logger.LogHandler.LogWrite(LogType.Error, $"Plugin Name is already used. Pick a different Name."); + Editor.LogError($"Plugin Name is already used. Pick a different Name."); return; } try { // Start git clone - var settings = new CreateProcessSettings(); - settings.FileName = "git"; - settings.Arguments = $"clone {gitPath} \"{clonePath}\""; - settings.ShellExecute = false; - settings.LogOutput = true; + var settings = new CreateProcessSettings + { + FileName = "git", + Arguments = $"clone {gitPath} \"{clonePath}\"", + ShellExecute = false, + LogOutput = true, + }; Platform.CreateProcess(ref settings); } catch (Exception e) { - Debug.Logger.LogHandler.LogWrite(LogType.Error, $"Failed Git process. {e}"); + Editor.LogError($"Failed Git process. {e}"); return; } - - Debug.Logger.LogHandler.LogWrite(LogType.Info, $"Plugin project has been cloned."); + + Editor.Log($"Plugin project has been cloned."); // Find project config file. Could be different then what the user named the folder. var files = Directory.GetFiles(clonePath); @@ -401,9 +403,9 @@ namespace FlaxEditor.Windows Debug.Log(pluginProjectName); } } - + if (string.IsNullOrEmpty(pluginProjectName)) - Debug.Logger.LogHandler.LogWrite(LogType.Error, $"Failed to find plugin project file to add to Project config. Please add manually."); + Editor.LogError($"Failed to find plugin project file to add to Project config. Please add manually."); else { await AddReferenceToProject(pluginName, pluginProjectName); @@ -450,7 +452,7 @@ namespace FlaxEditor.Windows nameTextBox.BorderSelectedColor = defaultTextBoxBorderSelectedColor; return; } - + var pluginPath = Path.Combine(Globals.ProjectFolder, "Plugins", nameTextBox.Text); if (Directory.Exists(pluginPath)) { @@ -518,7 +520,7 @@ namespace FlaxEditor.Windows { if (Directory.Exists(Path.Combine(Globals.ProjectFolder, "Plugins", nameTextBox.Text))) { - Debug.Logger.LogHandler.LogWrite(LogType.Warning, "Cannot create plugin due to name conflict."); + Editor.LogWarning("Cannot create plugin due to name conflict."); return; } OnCreateButtonClicked(nameTextBox.Text, versionTextBox.Text, companyTextBox.Text); @@ -551,10 +553,10 @@ namespace FlaxEditor.Windows { if (string.IsNullOrEmpty(pluginName)) { - Debug.Logger.LogHandler.LogWrite(LogType.Error, $"Failed to create plugin project due to no plugin name."); + Editor.LogError($"Failed to create plugin project due to no plugin name."); return; } - + var templateUrl = "https://github.com/FlaxEngine/ExamplePlugin/archive/refs/heads/master.zip"; var localTemplateFolderLocation = Path.Combine(Editor.LocalCachePath, "TemplatePluginCache"); if (!Directory.Exists(localTemplateFolderLocation)) @@ -564,24 +566,24 @@ namespace FlaxEditor.Windows try { // Download example plugin - using (HttpClient client = new HttpClient()) + using (var client = new HttpClient()) { byte[] zipBytes = await client.GetByteArrayAsync(templateUrl); - await File.WriteAllBytesAsync(!File.Exists(localTemplatePath) ? Path.Combine(localTemplatePath) : Path.Combine(Editor.LocalCachePath, "TemplatePluginCache" , "TemplatePlugin1.zip"), zipBytes); - - Debug.Logger.LogHandler.LogWrite(LogType.Info, "Template for plugin project has downloaded"); + await File.WriteAllBytesAsync(!File.Exists(localTemplatePath) ? Path.Combine(localTemplatePath) : Path.Combine(Editor.LocalCachePath, "TemplatePluginCache", "TemplatePlugin1.zip"), zipBytes); + + Editor.Log("Template for plugin project has downloaded"); } } catch (Exception e) { - Debug.Logger.LogHandler.LogWrite(LogType.Error, $"Failed to download template project. Trying to use local file. {e}"); + Editor.LogError($"Failed to download template project. Trying to use local file. {e}"); if (!File.Exists(localTemplatePath)) { - Debug.Logger.LogHandler.LogWrite(LogType.Error, $"Failed to use local file. Does not exist."); + Editor.LogError($"Failed to use local file. Does not exist."); return; } } - + // Check if any changes in new downloaded file if (File.Exists(Path.Combine(Editor.LocalCachePath, "TemplatePluginCache", "TemplatePlugin1.zip"))) { @@ -622,7 +624,7 @@ namespace FlaxEditor.Windows File.Delete(localTemplatePath2); } } - + var extractPath = Path.Combine(Globals.ProjectFolder, "Plugins"); if (!Directory.Exists(extractPath)) Directory.CreateDirectory(extractPath); @@ -630,15 +632,12 @@ namespace FlaxEditor.Windows try { await Task.Run(() => ZipFile.ExtractToDirectory(localTemplatePath, extractPath)); - Debug.Logger.LogHandler.LogWrite(LogType.Info, "Template for plugin project successfully moved to project."); + Editor.Log("Template for plugin project successfully moved to project."); } catch (IOException e) { - Debug.Logger.LogHandler.LogWrite(LogType.Error, $"Failed to add plugin to project. {e}"); + Editor.LogError($"Failed to add plugin to project. {e}"); } - var oldpluginPath = Path.Combine(extractPath, "ExamplePlugin-master"); - var newPluginPath = Path.Combine(extractPath , pluginName); - Directory.Move(oldpluginPath, newPluginPath); // Format plugin name into a valid name for code (C#/C++ typename) var pluginCodeName = Content.ScriptItem.FilterScriptName(pluginName); @@ -646,11 +645,14 @@ namespace FlaxEditor.Windows pluginCodeName = "MyPlugin"; Editor.Log($"Using plugin code type name: {pluginCodeName}"); + var oldPluginPath = Path.Combine(extractPath, "ExamplePlugin-master"); + var newPluginPath = Path.Combine(extractPath, pluginName); + Directory.Move(oldPluginPath, newPluginPath); var oldFlaxProjFile = Path.Combine(newPluginPath, "ExamplePlugin.flaxproj"); var newFlaxProjFile = Path.Combine(newPluginPath, $"{pluginName}.flaxproj"); File.Move(oldFlaxProjFile, newFlaxProjFile); - + var readme = Path.Combine(newPluginPath, "README.md"); if (File.Exists(readme)) File.Delete(readme); @@ -667,7 +669,7 @@ namespace FlaxEditor.Windows flaxPluginProjContents.Company = companyName; flaxPluginProjContents.GameTarget = $"{pluginCodeName}Target"; flaxPluginProjContents.EditorTarget = $"{pluginCodeName}EditorTarget"; - await File.WriteAllTextAsync(newFlaxProjFile, JsonSerializer.Serialize(flaxPluginProjContents, typeof(ProjectInfo))); + await File.WriteAllTextAsync(newFlaxProjFile, JsonSerializer.Serialize(flaxPluginProjContents, typeof(ProjectInfo)), Encoding.UTF8); // Format game settings var gameSettingsPath = Path.Combine(newPluginPath, "Content", "GameSettings.json"); @@ -703,17 +705,17 @@ namespace FlaxEditor.Windows var newName = directory.Replace("ExamplePlugin", pluginCodeName); Directory.Move(directory, newName); } - + // Rename targets var targetFiles = Directory.GetFiles(sourcePath); foreach (var file in targetFiles) { var fileText = await File.ReadAllTextAsync(file); - await File.WriteAllTextAsync(file, fileText.Replace("ExamplePlugin", pluginCodeName)); + await File.WriteAllTextAsync(file, fileText.Replace("ExamplePlugin", pluginCodeName), Encoding.UTF8); var newName = file.Replace("ExamplePlugin", pluginCodeName); File.Move(file, newName); } - Debug.Logger.LogHandler.LogWrite(LogType.Info, $"Plugin project {pluginName} has successfully been created."); + Editor.Log($"Plugin project {pluginName} has successfully been created."); await AddReferenceToProject(pluginName, pluginName); MessageBox.Show($"{pluginName} has been successfully created. Restart editor for changes to take effect.", "Plugin Project Created", MessageBoxButtons.OK); @@ -738,11 +740,10 @@ namespace FlaxEditor.Windows references.Add(newReference); } flaxProjContents.References = references.ToArray(); - await File.WriteAllTextAsync(flaxProjPath, JsonSerializer.Serialize(flaxProjContents, typeof(ProjectInfo))); + await File.WriteAllTextAsync(flaxProjPath, JsonSerializer.Serialize(flaxProjContents, typeof(ProjectInfo)), Encoding.UTF8); } } - private void OnPluginsChanged() { List toRemove = null;