private void handleConnection(IAsyncResult res) { //serverStream = new NamedPipeServerStream($@"\.\DSParamStudio\pipe\CommandQueue", PipeDirection.In, System.IO.Pipes.NamedPipeServerStream.MaxAllowedServerInstances); NamedPipeServerStream srv = (NamedPipeServerStream)res.AsyncState; //srv.EndWaitForConnection(res); serverStream.EndWaitForConnection(res); serverStream = NamedPipeServerStreamConstructors.New($@"\.\DSParamStudio\pipe\CommandQueue", PipeDirection.InOut, System.IO.Pipes.NamedPipeServerStream.MaxAllowedServerInstances, PipeTransmissionMode.Message, PipeOptions.Asynchronous, 0, 0, pipeSecurity); serverStream.BeginWaitForConnection(handleConnection, serverStream); ServerClient sv = new ServerClient(srv); activeConnections.Add(sv); while (srv.IsConnected) { string command = sv.reader.ReadLine(); if (command != null && command.Length > 0) { EditorCommandQueue.AddCommand("windowFocus"); EditorCommandQueue.AddCommand(command); } } }
private void Update(float deltaseconds) { ImguiRenderer.Update(deltaseconds, InputTracker.FrameSnapshot); //ImGui. var command = EditorCommandQueue.GetNextCommand(); string[] commandsplit = null; if (command != null) { commandsplit = command.Split($@"/"); } ImGui.BeginFrame(); // Imguizmo begin frame ApplyStyle(); var vp = ImGui.GetMainViewport(); ImGui.SetNextWindowPos(vp.Pos); ImGui.SetNextWindowSize(vp.Size); ImGui.PushStyleVar(ImGuiStyleVar.WindowRounding, 0.0f); ImGui.PushStyleVar(ImGuiStyleVar.WindowBorderSize, 0.0f); ImGui.PushStyleVar(ImGuiStyleVar.WindowPadding, new Vector2(0.0f, 0.0f)); ImGuiWindowFlags flags = ImGuiWindowFlags.NoTitleBar | ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoMove; flags |= ImGuiWindowFlags.NoDocking | ImGuiWindowFlags.MenuBar; flags |= ImGuiWindowFlags.NoBringToFrontOnFocus | ImGuiWindowFlags.NoNavFocus; flags |= ImGuiWindowFlags.NoBackground; if (ImGui.Begin("DockSpace_W", flags)) { //Console.WriteLine("hi"); } var dsid = ImGui.GetID("DockSpace"); ImGui.DockSpace(dsid, new Vector2(0, 0), ImGuiDockNodeFlags.NoSplit); ImGui.PopStyleVar(1); ImGui.End(); bool newProject = false; ImGui.PushStyleVar(ImGuiStyleVar.FrameBorderSize, 0.0f); if (ImGui.BeginMainMenuBar()) { if (ImGui.BeginMenu("File")) { if (_projectSettings == null || _projectSettings.ProjectName == null) { ImGui.MenuItem("No project open", false); } else { ImGui.MenuItem($@"Settings: {_projectSettings.ProjectName}"); } if (ImGui.MenuItem("Enable Texturing (alpha)", "", CFG.Current.EnableTexturing)) { CFG.Current.EnableTexturing = !CFG.Current.EnableTexturing; } if (ImGui.MenuItem("New Project", "CTRL+N") || InputTracker.GetControlShortcut(Key.I)) { newProject = true; } if (ImGui.MenuItem("Open Project", "")) { var browseDlg = new System.Windows.Forms.OpenFileDialog() { Filter = AssetLocator.JsonFilter, ValidateNames = true, CheckFileExists = true, CheckPathExists = true, }; if (browseDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { var settings = MsbEditor.ProjectSettings.Deserialize(browseDlg.FileName); AttemptLoadProject(settings, browseDlg.FileName); } } if (ImGui.BeginMenu("Recent Projects")) { CFG.RecentProject recent = null; foreach (var p in CFG.Current.RecentProjects) { if (ImGui.MenuItem($@"{p.GameType.ToString()}:{p.Name}")) { if (File.Exists(p.ProjectFile)) { var settings = MsbEditor.ProjectSettings.Deserialize(p.ProjectFile); if (AttemptLoadProject(settings, p.ProjectFile, false)) { recent = p; } } } } if (recent != null) { CFG.Current.RecentProjects.Remove(recent); CFG.Current.RecentProjects.Insert(0, recent); CFG.Current.LastProjectFile = recent.ProjectFile; } ImGui.EndMenu(); } if (ImGui.MenuItem("Save", "Ctrl-S")) { if (_msbEditorFocused) { MSBEditor.Save(); } if (_modelEditorFocused) { ModelEditor.Save(); } if (_paramEditorFocused) { ParamEditor.Save(); } if (_textEditorFocused) { TextEditor.Save(); } } if (ImGui.MenuItem("Save All", "")) { MSBEditor.SaveAll(); ModelEditor.SaveAll(); ParamEditor.SaveAll(); TextEditor.SaveAll(); } if (Resource.FlverResource.CaptureMaterialLayouts && ImGui.MenuItem("Dump Flver Layouts (Debug)", "")) { DumpFlverLayouts(); } ImGui.EndMenu(); } if (_msbEditorFocused) { MSBEditor.DrawEditorMenu(); } else if (_modelEditorFocused) { ModelEditor.DrawEditorMenu(); } else if (_paramEditorFocused) { ParamEditor.DrawEditorMenu(); } else if (_textEditorFocused) { TextEditor.DrawEditorMenu(); } ImGui.EndMainMenuBar(); } ImGui.PopStyleVar(); // New project modal if (newProject) { _newProjectSettings = new MsbEditor.ProjectSettings(); _newProjectDirectory = ""; ImGui.OpenPopup("New Project"); } bool open = true; ImGui.PushStyleVar(ImGuiStyleVar.WindowRounding, 7.0f); ImGui.PushStyleVar(ImGuiStyleVar.WindowBorderSize, 1.0f); ImGui.PushStyleVar(ImGuiStyleVar.WindowPadding, new Vector2(14.0f, 8.0f)); if (ImGui.BeginPopupModal("New Project", ref open, ImGuiWindowFlags.AlwaysAutoResize)) { ImGui.AlignTextToFramePadding(); ImGui.Text("Project Name: "); ImGui.SameLine(); var pname = _newProjectSettings.ProjectName; if (ImGui.InputText("##pname", ref pname, 255)) { _newProjectSettings.ProjectName = pname; } ImGui.AlignTextToFramePadding(); ImGui.Text("Project Directory: "); ImGui.SameLine(); ImGui.InputText("##pdir", ref _newProjectDirectory, 255); ImGui.SameLine(); if (ImGui.Button($@"{ForkAwesome.FileO}")) { var browseDlg = new System.Windows.Forms.FolderBrowserDialog(); if (browseDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { _newProjectDirectory = browseDlg.SelectedPath; } } ImGui.AlignTextToFramePadding(); ImGui.Text("Game Executable: "); ImGui.SameLine(); var gname = _newProjectSettings.GameRoot; if (ImGui.InputText("##gdir", ref gname, 255)) { _newProjectSettings.GameRoot = gname; _newProjectSettings.GameType = _assetLocator.GetGameTypeForExePath(_newProjectSettings.GameRoot); } ImGui.SameLine(); ImGui.PushID("fd2"); if (ImGui.Button($@"{ForkAwesome.FileO}")) { var browseDlg = new System.Windows.Forms.OpenFileDialog() { Filter = AssetLocator.GameExecutatbleFilter, ValidateNames = true, CheckFileExists = true, CheckPathExists = true, //ShowReadOnly = true, }; if (browseDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { _newProjectSettings.GameRoot = browseDlg.FileName; _newProjectSettings.GameType = _assetLocator.GetGameTypeForExePath(_newProjectSettings.GameRoot); } } ImGui.PopID(); ImGui.Text($@"Detected Game: {_newProjectSettings.GameType.ToString()}"); ImGui.NewLine(); ImGui.Separator(); ImGui.NewLine(); if (_newProjectSettings.GameType == GameType.DarkSoulsIISOTFS || _newProjectSettings.GameType == GameType.DarkSoulsIII) { ImGui.AlignTextToFramePadding(); ImGui.Text($@"Use Loose Params: "); ImGui.SameLine(); var looseparams = _newProjectSettings.UseLooseParams; if (ImGui.Checkbox("##looseparams", ref looseparams)) { _newProjectSettings.UseLooseParams = looseparams; } ImGui.NewLine(); } if (ImGui.Button("Create", new Vector2(120, 0))) { bool validated = true; if (_newProjectSettings.GameRoot == null || !File.Exists(_newProjectSettings.GameRoot)) { System.Windows.Forms.MessageBox.Show("Your game executable path does not exist. Please select a valid executable.", "Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.None); validated = false; } if (validated && _newProjectSettings.GameType == GameType.Undefined) { System.Windows.Forms.MessageBox.Show("Your game executable is not a valid supported game.", "Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.None); validated = false; } if (validated && (_newProjectDirectory == null || !Directory.Exists(_newProjectDirectory))) { System.Windows.Forms.MessageBox.Show("Your selected project directory is not valid.", "Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.None); validated = false; } if (validated && File.Exists($@"{_newProjectDirectory}\project.json")) { System.Windows.Forms.MessageBox.Show("Your selected project directory is already a project.", "Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.None); validated = false; } if (validated && (_newProjectSettings.ProjectName == null || _newProjectSettings.ProjectName == "")) { System.Windows.Forms.MessageBox.Show("You must specify a project name.", "Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.None); validated = false; } string gameroot = Path.GetDirectoryName(_newProjectSettings.GameRoot); if (_newProjectSettings.GameType == GameType.Bloodborne) { gameroot = gameroot + @"\dvdroot_ps4"; } if (!_assetLocator.CheckFilesExpanded(gameroot, _newProjectSettings.GameType)) { System.Windows.Forms.MessageBox.Show($@"The files for {_newProjectSettings.GameType} do not appear to be unpacked. Please use UDSFM for DS1:PTDE and UXM for the rest of the games to unpack the files.", "Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.None); validated = false; } if (validated) { _projectSettings = _newProjectSettings; _projectSettings.GameRoot = gameroot; _projectSettings.Serialize($@"{_newProjectDirectory}\project.json"); ChangeProjectSettings(_projectSettings, _newProjectDirectory); CFG.Current.LastProjectFile = $@"{_newProjectDirectory}\project.json"; var recent = new CFG.RecentProject(); recent.Name = _projectSettings.ProjectName; recent.GameType = _projectSettings.GameType; recent.ProjectFile = $@"{_newProjectDirectory}\project.json"; CFG.Current.RecentProjects.Insert(0, recent); if (CFG.Current.RecentProjects.Count > CFG.MAX_RECENT_PROJECTS) { CFG.Current.RecentProjects.RemoveAt(CFG.Current.RecentProjects.Count - 1); } ImGui.CloseCurrentPopup(); } } ImGui.SameLine(); if (ImGui.Button("Cancel", new Vector2(120, 0))) { ImGui.CloseCurrentPopup(); } ImGui.EndPopup(); } ImGui.PopStyleVar(3); ImGui.PushStyleVar(ImGuiStyleVar.WindowPadding, new Vector2(0.0f, 0.0f)); if (FirstFrame) { ImGui.SetNextWindowFocus(); } string[] mapcmds = null; if (commandsplit != null && commandsplit[0] == "map") { mapcmds = commandsplit.Skip(1).ToArray(); ImGui.SetNextWindowFocus(); } if (ImGui.Begin("Map Editor")) { ImGui.PopStyleVar(1); MSBEditor.OnGUI(mapcmds); ImGui.End(); _msbEditorFocused = true; MSBEditor.Update(deltaseconds); } else { ImGui.PopStyleVar(1); _msbEditorFocused = false; ImGui.End(); } ImGui.PushStyleVar(ImGuiStyleVar.WindowPadding, new Vector2(0.0f, 0.0f)); if (ImGui.Begin("Model Editor")) { ImGui.PopStyleVar(1); ModelEditor.OnGUI(); _modelEditorFocused = true; ModelEditor.Update(deltaseconds); } else { ImGui.PopStyleVar(1); _modelEditorFocused = false; } ImGui.End(); string[] paramcmds = null; if (commandsplit != null && commandsplit[0] == "param") { paramcmds = commandsplit.Skip(1).ToArray(); ImGui.SetNextWindowFocus(); } if (ImGui.Begin("Param Editor")) { ParamEditor.OnGUI(paramcmds); _paramEditorFocused = true; } else { _paramEditorFocused = false; } ImGui.End(); string[] textcmds = null; if (commandsplit != null && commandsplit[0] == "text") { textcmds = commandsplit.Skip(1).ToArray(); ImGui.SetNextWindowFocus(); } ImGui.PushStyleVar(ImGuiStyleVar.WindowPadding, new Vector2(4, 4)); if (ImGui.Begin("Text Editor")) { TextEditor.OnGUI(textcmds); _textEditorFocused = true; } else { _textEditorFocused = false; } ImGui.End(); ImGui.PopStyleVar(); ImGui.PopStyleVar(2); UnapplyStyle(); Resource.ResourceManager.UpdateTasks(); if (!_firstframe) { FirstFrame = false; } _firstframe = false; }
private void Update(float deltaseconds) { ImguiRenderer.Update(deltaseconds, InputTracker.FrameSnapshot); //ImGui. List <string> tasks = TaskManager.GetLiveThreads(); _window.Title = tasks.Count == 0 ? "Dark Souls Param Studio " + _version : String.Join(", ", tasks); var command = EditorCommandQueue.GetNextCommand(); string[] commandsplit = null; if (command != null) { commandsplit = command.Split($@"/"); } if (commandsplit != null && commandsplit[0] == "windowFocus") { //this is a hack, cannot grab focus except for when un-minimising _user32_ShowWindow(_window.Handle, 6); _user32_ShowWindow(_window.Handle, 9); } ImGui.BeginFrame(); // Imguizmo begin frame ApplyStyle(); var vp = ImGui.GetMainViewport(); ImGui.SetNextWindowPos(vp.Pos); ImGui.SetNextWindowSize(vp.Size); ImGui.PushStyleVar(ImGuiStyleVar.WindowRounding, 0.0f); ImGui.PushStyleVar(ImGuiStyleVar.WindowBorderSize, 0.0f); ImGui.PushStyleVar(ImGuiStyleVar.WindowPadding, new Vector2(0.0f, 0.0f)); ImGuiWindowFlags flags = ImGuiWindowFlags.NoTitleBar | ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoMove; flags |= ImGuiWindowFlags.NoDocking | ImGuiWindowFlags.MenuBar; flags |= ImGuiWindowFlags.NoBringToFrontOnFocus | ImGuiWindowFlags.NoNavFocus; flags |= ImGuiWindowFlags.NoBackground; if (ImGui.Begin("DockSpace_W", flags)) { //Console.WriteLine("hi"); } var dsid = ImGui.GetID("DockSpace"); ImGui.DockSpace(dsid, new Vector2(0, 0), ImGuiDockNodeFlags.NoSplit); ImGui.PopStyleVar(3); ImGui.End(); bool newProject = false; ImGui.PushStyleVar(ImGuiStyleVar.FrameBorderSize, 0.0f); if (ImGui.BeginMainMenuBar()) { if (ImGui.BeginMenu("File")) { if (_projectSettings == null || _projectSettings.ProjectName == null) { ImGui.MenuItem("No project open", false); } else { ImGui.MenuItem($@"Settings: {_projectSettings.ProjectName}"); } if (ImGui.MenuItem("New Project", "CTRL+N", false, TaskManager.GetLiveThreads().Count == 0)) { newProject = true; } if (ImGui.MenuItem("Open Project", "", false, TaskManager.GetLiveThreads().Count == 0)) { var browseDlg = new System.Windows.Forms.OpenFileDialog() { Filter = AssetLocator.JsonFilter, ValidateNames = true, CheckFileExists = true, CheckPathExists = true, }; if (browseDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { var settings = ProjectSettings.Deserialize(browseDlg.FileName); AttemptLoadProject(settings, browseDlg.FileName); } } if (ImGui.BeginMenu("Recent Projects")) { CFG.RecentProject recent = null; foreach (var p in CFG.Current.RecentProjects) { if (ImGui.MenuItem($@"{p.GameType.ToString()}:{p.Name}", null, false, TaskManager.GetLiveThreads().Count == 0)) { if (File.Exists(p.ProjectFile)) { var settings = ProjectSettings.Deserialize(p.ProjectFile); if (AttemptLoadProject(settings, p.ProjectFile, false)) { recent = p; } } } } if (recent != null) { CFG.Current.RecentProjects.Remove(recent); CFG.Current.RecentProjects.Insert(0, recent); CFG.Current.LastProjectFile = recent.ProjectFile; } ImGui.EndMenu(); } if (ImGui.MenuItem("Save", "Ctrl-S")) { _paramEditor.SaveAll(); _textEditor.SaveAll(); SaveParamStudioConfig(); } ImGui.EndMenu(); } if (InputTracker.GetControlShortcut(Key.N)) { newProject = true; } if (InputTracker.GetControlShortcut(Key.S)) { _paramEditor.SaveAll(); _textEditor.SaveAll(); } if (_paramEditorFocused) { _paramEditor.DrawEditorMenu(); } else if (_textEditorFocused) { _textEditor.DrawEditorMenu(); } if (ImGui.BeginMenu("Help")) { if (ImGui.BeginMenu("About")) { ImGui.Text("DSParamStudio is forked from Katalash's DSMapStudio and is currently maintained by Philiquaz.\nFor bug reports and feature requests, ping the right person please."); ImGui.EndMenu(); } if (ImGui.BeginMenu("Edits aren't sticking!")) { ImGui.Text("The mechanism that is used to detect if a field has been changed can stop existing before registering a change.\nThis occurs when switching param, row or using tab between fields.\nI hope to have this fixed soon, however it is a complicated issue.\nTo ensure a change sticks, simply click off the field you are editing."); ImGui.EndMenu(); } ImGui.EndMenu(); } ImGui.EndMainMenuBar(); } ImGui.PopStyleVar(); // New project modal if (newProject) { _newProjectSettings = new ProjectSettings(); _newProjectDirectory = ""; ImGui.OpenPopup("New Project"); } bool open = true; ImGui.PushStyleVar(ImGuiStyleVar.WindowRounding, 7.0f); ImGui.PushStyleVar(ImGuiStyleVar.WindowBorderSize, 1.0f); ImGui.PushStyleVar(ImGuiStyleVar.WindowPadding, new Vector2(14.0f, 8.0f)); if (ImGui.BeginPopupModal("New Project", ref open, ImGuiWindowFlags.AlwaysAutoResize)) { ImGui.AlignTextToFramePadding(); ImGui.Text("Project Name: "); ImGui.SameLine(); var pname = _newProjectSettings.ProjectName; if (ImGui.InputText("##pname", ref pname, 255)) { _newProjectSettings.ProjectName = pname; } ImGui.AlignTextToFramePadding(); ImGui.Text("Project Directory: "); ImGui.SameLine(); ImGui.InputText("##pdir", ref _newProjectDirectory, 255); ImGui.SameLine(); if (ImGui.Button($@"{ForkAwesome.FileO}")) { var browseDlg = new System.Windows.Forms.FolderBrowserDialog(); if (browseDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { _newProjectDirectory = browseDlg.SelectedPath; } } ImGui.AlignTextToFramePadding(); ImGui.Text("Game Executable: "); ImGui.SameLine(); var gname = _newProjectSettings.GameRoot; if (ImGui.InputText("##gdir", ref gname, 255)) { _newProjectSettings.GameRoot = gname; _newProjectSettings.GameType = _assetLocator.GetGameTypeForExePath(_newProjectSettings.GameRoot); } ImGui.SameLine(); ImGui.PushID("fd2"); if (ImGui.Button($@"{ForkAwesome.FileO}")) { var browseDlg = new System.Windows.Forms.OpenFileDialog() { Filter = AssetLocator.GameExecutatbleFilter, ValidateNames = true, CheckFileExists = true, CheckPathExists = true, //ShowReadOnly = true, }; if (browseDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { _newProjectSettings.GameRoot = browseDlg.FileName; _newProjectSettings.GameType = _assetLocator.GetGameTypeForExePath(_newProjectSettings.GameRoot); } } ImGui.PopID(); ImGui.Text($@"Detected Game: {_newProjectSettings.GameType.ToString()}"); ImGui.NewLine(); ImGui.Separator(); ImGui.NewLine(); if (_newProjectSettings.GameType == GameType.DarkSoulsIISOTFS || _newProjectSettings.GameType == GameType.DarkSoulsIII) { ImGui.AlignTextToFramePadding(); ImGui.Text($@"Use Loose Params: "); ImGui.SameLine(); var looseparams = _newProjectSettings.UseLooseParams; if (ImGui.Checkbox("##looseparams", ref looseparams)) { _newProjectSettings.UseLooseParams = looseparams; } ImGui.NewLine(); } if (_newProjectSettings.GameType == GameType.DarkSoulsPTDE || _newProjectSettings.GameType == GameType.DarkSoulsIISOTFS || _newProjectSettings.GameType == GameType.DarkSoulsIII || _newProjectSettings.GameType == GameType.Sekiro) { ImGui.AlignTextToFramePadding(); ImGui.Text($@"Load default row names: "); ImGui.SameLine(); ImGui.Checkbox("##loadDefaultNames", ref _newProjectLoadDefaultNames); ImGui.NewLine(); } if (ImGui.Button("Create", new Vector2(120, 0))) { bool validated = true; if (_newProjectSettings.GameRoot == null || !File.Exists(_newProjectSettings.GameRoot)) { System.Windows.Forms.MessageBox.Show("Your game executable path does not exist. Please select a valid executable.", "Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.None); validated = false; } if (validated && _newProjectSettings.GameType == GameType.Undefined) { System.Windows.Forms.MessageBox.Show("Your game executable is not a valid supported game.", "Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.None); validated = false; } if (validated && (_newProjectDirectory == null || !Directory.Exists(_newProjectDirectory))) { System.Windows.Forms.MessageBox.Show("Your selected project directory is not valid.", "Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.None); validated = false; } if (validated && File.Exists($@"{_newProjectDirectory}\project.json")) { System.Windows.Forms.MessageBox.Show("Your selected project directory is already a project.", "Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.None); validated = false; } if (validated && (_newProjectSettings.ProjectName == null || _newProjectSettings.ProjectName == "")) { System.Windows.Forms.MessageBox.Show("You must specify a project name.", "Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.None); validated = false; } string gameroot = Path.GetDirectoryName(_newProjectSettings.GameRoot); if (_newProjectSettings.GameType == GameType.Bloodborne) { gameroot = gameroot + @"\dvdroot_ps4"; } if (!_assetLocator.CheckFilesExpanded(gameroot, _newProjectSettings.GameType)) { System.Windows.Forms.MessageBox.Show($@"The files for {_newProjectSettings.GameType} do not appear to be unpacked. Please use UDSFM for DS1:PTDE and UXM for the rest of the games to unpack the files.", "Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.None); validated = false; } if (validated) { _projectSettings = _newProjectSettings; _projectSettings.GameRoot = gameroot; _projectSettings.Serialize($@"{_newProjectDirectory}\project.json"); ChangeProjectSettings(_projectSettings, _newProjectDirectory); CFG.Current.LastProjectFile = $@"{_newProjectDirectory}\project.json"; var recent = new CFG.RecentProject(); recent.Name = _projectSettings.ProjectName; recent.GameType = _projectSettings.GameType; recent.ProjectFile = $@"{_newProjectDirectory}\project.json"; CFG.Current.RecentProjects.Insert(0, recent); if (CFG.Current.RecentProjects.Count > CFG.MAX_RECENT_PROJECTS) { CFG.Current.RecentProjects.RemoveAt(CFG.Current.RecentProjects.Count - 1); } if (_newProjectLoadDefaultNames) { ParamEditor.ParamBank.LoadParamDefaultNames(); } ImGui.CloseCurrentPopup(); } } ImGui.SameLine(); if (ImGui.Button("Cancel", new Vector2(120, 0))) { ImGui.CloseCurrentPopup(); } ImGui.EndPopup(); } ImGui.PopStyleVar(3); ImGui.PushStyleVar(ImGuiStyleVar.WindowPadding, new Vector2(8, 8)); if (FirstFrame) { ImGui.SetNextWindowFocus(); } string[] paramcmds = null; if (commandsplit != null && commandsplit[0] == "param") { paramcmds = commandsplit.Skip(1).ToArray(); ImGui.SetNextWindowFocus(); } if (ImGui.Begin("Param Editor")) { _paramEditor.OnGUI(paramcmds); _paramEditorFocused = true; } else { _paramEditorFocused = false; } ImGui.End(); string[] textcmds = null; if (commandsplit != null && commandsplit[0] == "text") { textcmds = commandsplit.Skip(1).ToArray(); ImGui.SetNextWindowFocus(); } if (ImGui.Begin("Text Editor")) { _textEditor.OnGUI(textcmds); _textEditorFocused = true; } else { _textEditorFocused = false; } ImGui.End(); ImGui.PopStyleVar(); UnapplyStyle(); if (!_firstframe) { FirstFrame = false; } _firstframe = false; }