public override void SaveAll() { if (_projectSettings != null) { ParamBank.SaveParams(_projectSettings.UseLooseParams); } }
public void OnGUI(string[] initcmd) { if (!_isMEditPopupOpen && !_isShortcutPopupOpen && !_isSearchBarActive)// Are shortcuts active? Presently just checks for massEdit popup. { // Keyboard shortcuts if (EditorActionManager.CanUndo() && InputTracker.GetControlShortcut(Key.Z)) { EditorActionManager.UndoAction(); TaskManager.Run("PB:RefreshDirtyCache", false, true, () => ParamBank.refreshParamDirtyCache()); } if (EditorActionManager.CanRedo() && InputTracker.GetControlShortcut(Key.Y)) { EditorActionManager.RedoAction(); TaskManager.Run("PB:RefreshDirtyCache", false, true, () => ParamBank.refreshParamDirtyCache()); } if (!ImGui.IsAnyItemActive() && _activeView._selection.paramSelectionExists() && InputTracker.GetControlShortcut(Key.A)) { _clipboardParam = _activeView._selection.getActiveParam(); Match m = new Regex(MassParamEditRegex.rowfilterRx).Match(_activeView._selection.getCurrentRowSearchString()); if (!m.Success) { foreach (PARAM.Row row in ParamBank.Params[_activeView._selection.getActiveParam()].Rows) { _activeView._selection.addRowToSelection(row); } } else { foreach (PARAM.Row row in MassParamEditRegex.GetMatchingParamRows(ParamBank.Params[_activeView._selection.getActiveParam()], m, true, true)) { _activeView._selection.addRowToSelection(row); } } } if (!ImGui.IsAnyItemActive() && _activeView._selection.rowSelectionExists() && InputTracker.GetControlShortcut(Key.C)) { CopySelectionToClipboard(); } if (_clipboardRows.Count > 00 && _clipboardParam == _activeView._selection.getActiveParam() && !ImGui.IsAnyItemActive() && InputTracker.GetControlShortcut(Key.V)) { ImGui.OpenPopup("ctrlVPopup"); } if (!ImGui.IsAnyItemActive() && InputTracker.GetKeyDown(Key.Delete)) { if (_activeView._selection.rowSelectionExists()) { var act = new DeleteParamsAction(ParamBank.Params[_activeView._selection.getActiveParam()], _activeView._selection.getSelectedRows()); EditorActionManager.ExecuteAction(act); _activeView._selection.SetActiveRow(null, true); } } } if (InputTracker.GetKey(Key.F5) && _projectSettings != null && _projectSettings.GameType == GameType.DarkSoulsIII && ParamBank.IsLoadingParams == false) { ParamReloader.ReloadMemoryParamsDS3(); } if (ParamBank.Params == null) { if (ParamBank.IsLoadingParams) { ImGui.Text("Loading..."); } return; } // Parse commands bool doFocus = false; // Parse select commands if (initcmd != null) { if (initcmd[0] == "select" || initcmd[0] == "view") { if (initcmd.Length > 2 && ParamBank.Params.ContainsKey(initcmd[2])) { doFocus = initcmd[0] == "select"; if (_activeView._selection.getActiveRow() != null && !ParamBank.IsLoadingVParams) { ParamBank.refreshParamRowDirtyCache(_activeView._selection.getActiveRow(), ParamBank.VanillaParams[_activeView._selection.getActiveParam()], ParamBank.DirtyParamCache[_activeView._selection.getActiveParam()]); } ParamEditorView viewToMofidy = _activeView; if (initcmd[1].Equals("new")) { viewToMofidy = AddView(); } else { int cmdIndex = -1; bool parsable = int.TryParse(initcmd[1], out cmdIndex); if (parsable && cmdIndex >= 0 && cmdIndex < _views.Count) { viewToMofidy = _views[cmdIndex]; } } _activeView = viewToMofidy; viewToMofidy._selection.setActiveParam(initcmd[2]); if (initcmd.Length > 3) { viewToMofidy._selection.SetActiveRow(null, doFocus); var p = ParamBank.Params[viewToMofidy._selection.getActiveParam()]; int id; var parsed = int.TryParse(initcmd[3], out id); if (parsed) { var r = p.Rows.FirstOrDefault(r => r.ID == id); if (r != null) { viewToMofidy._selection.SetActiveRow(r, doFocus); } } } if (_activeView._selection.getActiveRow() != null && !ParamBank.IsLoadingVParams) { ParamBank.refreshParamRowDirtyCache(_activeView._selection.getActiveRow(), ParamBank.VanillaParams[_activeView._selection.getActiveParam()], ParamBank.DirtyParamCache[_activeView._selection.getActiveParam()]); } } } else if (initcmd[0] == "search") { if (initcmd.Length > 1) { _activeView._selection.getCurrentRowSearchString() = initcmd[1]; } } else if (initcmd[0] == "menu" && initcmd.Length > 1) { if (initcmd[1] == "ctrlVPopup") { ImGui.OpenPopup("ctrlVPopup"); } else if (initcmd[1] == "massEditRegex") { _currentMEditRegexInput = initcmd.Length > 2 ? initcmd[2] : _currentMEditRegexInput; OpenMassEditPopup("massEditMenuRegex"); } else if (initcmd[1] == "massEditCSVExport") { _activeView._selection.sortSelection(); if (_activeView._selection.rowSelectionExists()) { _currentMEditCSVOutput = MassParamEditCSV.GenerateCSV(_activeView._selection.getSelectedRows()); } OpenMassEditPopup("massEditMenuCSVExport"); } else if (initcmd[1] == "massEditCSVImport") { OpenMassEditPopup("massEditMenuCSVImport"); } else if (initcmd[1] == "massEditSingleCSVExport" && initcmd.Length > 2) { _activeView._selection.sortSelection(); _currentMEditSingleCSVField = initcmd[2]; if (_activeView._selection.rowSelectionExists()) { _currentMEditCSVOutput = MassParamEditCSV.GenerateSingleCSV(_activeView._selection.getSelectedRows(), _currentMEditSingleCSVField); } OpenMassEditPopup("massEditMenuSingleCSVExport"); } else if (initcmd[1] == "massEditSingleCSVImport" && initcmd.Length > 2) { _currentMEditSingleCSVField = initcmd[2]; OpenMassEditPopup("massEditMenuSingleCSVImport"); } } } ShortcutPopups(); MassEditPopups(); if (CountViews() == 1) { _activeView.ParamView(doFocus); } else { ImGui.DockSpace(ImGui.GetID("DockSpace_ParamEditorViews")); foreach (ParamEditorView view in _views) { if (view == null) { continue; } string name = view._selection.getActiveRow() != null?view._selection.getActiveRow().Name : null; string toDisplay = (view == _activeView ? "**" : "") + (name == null || name.Trim().Equals("") ? "Param Editor View" : Utils.ImGuiEscape(name, "null")) + (view == _activeView ? "**" : ""); ImGui.SetNextWindowSize(new Vector2(1280.0f, 720.0f), ImGuiCond.Once); ImGui.SetNextWindowDockID(ImGui.GetID("DockSpace_ParamEditorViews"), ImGuiCond.Once); ImGui.Begin($@"{toDisplay}###ParamEditorView##{view._viewIndex}"); if (ImGui.IsItemClicked(ImGuiMouseButton.Left)) { _activeView = view; } if (ImGui.BeginPopupContextItem()) { if (ImGui.MenuItem("Close View")) { RemoveView(view); ImGui.EndMenu(); break; //avoid concurrent modification } ImGui.EndMenu(); } view.ParamView(doFocus && view == _activeView); ImGui.End(); } } }
public override void DrawEditorMenu() { // Menu Options if (ImGui.BeginMenu("Edit")) { if (ImGui.MenuItem("Undo", "Ctrl+Z", false, EditorActionManager.CanUndo())) { EditorActionManager.UndoAction(); } if (ImGui.MenuItem("Redo", "Ctrl+Y", false, EditorActionManager.CanRedo())) { EditorActionManager.RedoAction(); } if (ImGui.MenuItem("Copy", "Ctrl+C", false, _activeView._selection.rowSelectionExists())) { CopySelectionToClipboard(); } if (ImGui.MenuItem("Paste", "Ctrl+V", false, _clipboardRows.Any())) { EditorCommandQueue.AddCommand($@"param/menu/ctrlVPopup"); } ImGui.Separator(); if (ImGui.MenuItem("Mass Edit")) { EditorCommandQueue.AddCommand($@"param/menu/massEditRegex"); } if (ImGui.BeginMenu("Export CSV", _activeView._selection.rowSelectionExists())) { if (ImGui.MenuItem("All")) { EditorCommandQueue.AddCommand($@"param/menu/massEditCSVExport"); } if (ImGui.MenuItem("Name")) { EditorCommandQueue.AddCommand($@"param/menu/massEditSingleCSVExport/Name"); } if (ImGui.BeginMenu("Field")) { foreach (PARAMDEF.Field field in ParamBank.Params[_activeView._selection.getActiveParam()].AppliedParamdef.Fields) { if (ImGui.MenuItem(field.InternalName)) { EditorCommandQueue.AddCommand($@"param/menu/massEditSingleCSVExport/{field.InternalName}"); } } ImGui.EndMenu(); } ImGui.EndMenu(); } if (ImGui.BeginMenu("Import CSV", _activeView._selection.paramSelectionExists())) { if (ImGui.MenuItem("All")) { EditorCommandQueue.AddCommand($@"param/menu/massEditCSVImport"); } if (ImGui.MenuItem("Name")) { EditorCommandQueue.AddCommand($@"param/menu/massEditSingleCSVImport/Name"); } if (ImGui.BeginMenu("Field")) { foreach (PARAMDEF.Field field in ParamBank.Params[_activeView._selection.getActiveParam()].AppliedParamdef.Fields) { if (ImGui.MenuItem(field.InternalName)) { EditorCommandQueue.AddCommand($@"param/menu/massEditSingleCSVImport/{field.InternalName}"); } } ImGui.EndMenu(); } ImGui.EndMenu(); } if (ImGui.MenuItem("Sort rows by ID", _activeView._selection.paramSelectionExists())) { MassParamEditOther.SortRows(_activeView._selection.getActiveParam(), EditorActionManager); } ImGui.EndMenu(); } if (ImGui.BeginMenu("View")) { if (ImGui.MenuItem("New View")) { AddView(); } if (ImGui.MenuItem("Close View", null, false, CountViews() > 1)) { RemoveView(_activeView); } ImGui.Separator(); if (ImGui.MenuItem("Check all params for edits (Slow!)", null, false, !ParamBank.IsLoadingVParams)) { ParamBank.refreshParamDirtyCache(); } ImGui.Separator(); if (ImGui.MenuItem("Show alternate field names", null, ShowAltNamesPreference)) { ShowAltNamesPreference = !ShowAltNamesPreference; } if (ImGui.MenuItem("Always show original field names", null, AlwaysShowOriginalNamePreference)) { AlwaysShowOriginalNamePreference = !AlwaysShowOriginalNamePreference; } if (ImGui.MenuItem("Hide field references", null, HideReferenceRowsPreference)) { HideReferenceRowsPreference = !HideReferenceRowsPreference; } if (ImGui.MenuItem("Hide field enums", null, HideEnumsPreference)) { HideEnumsPreference = !HideEnumsPreference; } if (ImGui.MenuItem("Allow field reordering", null, AllowFieldReorderPreference)) { AllowFieldReorderPreference = !AllowFieldReorderPreference; } ImGui.Separator(); if (!EditorMode && ImGui.MenuItem("Editor Mode", null, EditorMode)) { EditorMode = true; } if (EditorMode && ImGui.BeginMenu("Editor Mode")) { if (ImGui.MenuItem("Save Changes")) { ParamMetaData.SaveAll(); EditorMode = false; } if (ImGui.MenuItem("Discard Changes")) { EditorMode = false; } ImGui.EndMenu(); } ImGui.EndMenu(); } if (ImGui.BeginMenu("Game")) { if (ImGui.MenuItem("Hot Reload Params", "F5", false, _projectSettings != null && _projectSettings.GameType == GameType.DarkSoulsIII && ParamBank.IsLoadingParams == false)) { ParamReloader.ReloadMemoryParamsDS3(); } string activeParam = _activeView._selection.getActiveParam(); if (activeParam != null && _projectSettings.GameType == GameType.DarkSoulsIII) { ParamReloader.GiveItemMenu(_activeView._selection.getSelectedRows(), _activeView._selection.getActiveParam()); } ImGui.EndMenu(); } }
public void MassEditPopups() { // Popup size relies on magic numbers. Multiline maxlength is also arbitrary. if (ImGui.BeginPopup("massEditMenuRegex")) { ImGui.Text("param PARAM: id VALUE: FIELD: = VALUE;"); UIHints.AddImGuiHintButton("MassEditHint", ref UIHints.MassEditHint); ImGui.InputTextMultiline("MEditRegexInput", ref _currentMEditRegexInput, 65536, new Vector2(1024, ImGui.GetTextLineHeightWithSpacing() * 4)); if (ImGui.BeginCombo("###", "")) { string target = _currentMEditRegexInput.Split('\n').LastOrDefault(); foreach (string option in MassParamEditRegex.GetRegexAutocomplete(target, _activeView._selection.getActiveParam())) { if (ImGui.Selectable(target + option)) { _currentMEditRegexInput = _currentMEditRegexInput + option; } } ImGui.EndCombo(); } if (ImGui.Selectable("Submit", false, ImGuiSelectableFlags.DontClosePopups)) { _activeView._selection.sortSelection(); MassEditResult r = MassParamEditRegex.PerformMassEdit(_currentMEditRegexInput, EditorActionManager, _activeView._selection.getActiveParam(), _activeView._selection.getSelectedRows()); if (r.Type == MassEditResultType.SUCCESS) { _lastMEditRegexInput = _currentMEditRegexInput; _currentMEditRegexInput = ""; TaskManager.Run("PB:RefreshDirtyCache", false, true, () => ParamBank.refreshParamDirtyCache()); } _mEditRegexResult = r.Information; } ImGui.Text(_mEditRegexResult); ImGui.InputTextMultiline("MEditRegexOutput", ref _lastMEditRegexInput, 65536, new Vector2(1024, ImGui.GetTextLineHeightWithSpacing() * 4), ImGuiInputTextFlags.ReadOnly); ImGui.EndPopup(); } else if (ImGui.BeginPopup("massEditMenuCSVExport")) { ImGui.InputTextMultiline("MEditOutput", ref _currentMEditCSVOutput, 65536, new Vector2(1024, ImGui.GetTextLineHeightWithSpacing() * 4), ImGuiInputTextFlags.ReadOnly); ImGui.EndPopup(); } else if (ImGui.BeginPopup("massEditMenuSingleCSVExport")) { ImGui.Text(_currentMEditSingleCSVField); ImGui.InputTextMultiline("MEditOutput", ref _currentMEditCSVOutput, 65536, new Vector2(1024, ImGui.GetTextLineHeightWithSpacing() * 4), ImGuiInputTextFlags.ReadOnly); ImGui.EndPopup(); } else if (ImGui.BeginPopup("massEditMenuCSVImport")) { ImGui.InputTextMultiline("MEditRegexInput", ref _currentMEditCSVInput, 256 * 65536, new Vector2(1024, ImGui.GetTextLineHeightWithSpacing() * 4)); ImGui.Checkbox("Append new rows instead of ID based insertion (this will create out-of-order IDs)", ref _mEditCSVAppendOnly); if (_mEditCSVAppendOnly) { ImGui.Checkbox("Replace existing rows instead of updating them (they will be moved to the end)", ref _mEditCSVReplaceRows); } if (ImGui.Selectable("Submit", false, ImGuiSelectableFlags.DontClosePopups)) { MassEditResult r = MassParamEditCSV.PerformMassEdit(_currentMEditCSVInput, EditorActionManager, _activeView._selection.getActiveParam(), _mEditCSVAppendOnly, _mEditCSVAppendOnly && _mEditCSVReplaceRows); if (r.Type == MassEditResultType.SUCCESS) { TaskManager.Run("PB:RefreshDirtyCache", false, true, () => ParamBank.refreshParamDirtyCache()); } _mEditCSVResult = r.Information; } ImGui.Text(_mEditCSVResult); ImGui.EndPopup(); } else if (ImGui.BeginPopup("massEditMenuSingleCSVImport")) { ImGui.Text(_currentMEditSingleCSVField); ImGui.Checkbox("Space separator", ref _currentMEditSingleCSVSpaces); ImGui.InputTextMultiline("MEditRegexInput", ref _currentMEditCSVInput, 256 * 65536, new Vector2(1024, ImGui.GetTextLineHeightWithSpacing() * 4)); if (ImGui.Selectable("Submit", false, ImGuiSelectableFlags.DontClosePopups)) { MassEditResult r = MassParamEditCSV.PerformSingleMassEdit(_currentMEditCSVInput, EditorActionManager, _activeView._selection.getActiveParam(), _currentMEditSingleCSVField, _currentMEditSingleCSVSpaces); _mEditCSVResult = r.Information; } ImGui.Text(_mEditCSVResult); ImGui.EndPopup(); } else { _isMEditPopupOpen = false; _currentMEditCSVOutput = ""; } }
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(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")) { 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")) { ParamEditor.SaveAll(); TextEditor.SaveAll(); } 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")) { 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(); } 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 (_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) { 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[] mapcmds = null; if (commandsplit != null && commandsplit[0] == "map") { mapcmds = commandsplit.Skip(1).ToArray(); 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; }