Made not having a project loaded less crashy

This commit is contained in:
Simon Lübeß
2026-08-02 15:58:02 +02:00
parent 9b14cdddb9
commit 164384e55e
3 changed files with 74 additions and 33 deletions
@@ -83,7 +83,7 @@ namespace GlitchyEditor.EditWindows
public Span<String> History => _history;
public StringView CurrentDirectoryPath => _currentIndex >= 0 ? _history[_currentIndex] : "";
public StringView CurrentDirectoryPath => (_history.Count == 0 || _currentIndex < 0) ? "" : _history[_currentIndex];
public bool CanGoBack => _currentIndex > 0;
public bool CanGoForward => (_currentIndex + 1) < _history.Count;
@@ -92,7 +92,11 @@ namespace GlitchyEditor.EditWindows
{
// We always defer the actual navigation to the next frame, so that the UI-rendering and updates are more robust and don't flicker for one frame
_currentIndex = _nextIndex;
if (_pathToInsert != null)
if (String.IsNullOrWhiteSpace(_pathToInsert))
{
delete _pathToInsert;
}
else
{
if (replace)
{
@@ -341,9 +345,19 @@ namespace GlitchyEditor.EditWindows
// Make sure we are in an existing directory.
if (!_manager.AssetHierarchy.FileExists(CurrentDirectory))
{
if (Directory.Exists(_manager.AssetDirectory))
{
_directoryHistory.Replace(_manager.AssetDirectory);
}
else
{
// If the assets directory doesn't exist (probably, because we have no project open)
// we navigate to the resources directory.
// This MUST exist, otherwise we wouldn't have managed to launch the Editor.
_directoryHistory.Replace(_manager.ResourcesDirectory);
}
}
_directoryHistory.Update();
+19 -5
View File
@@ -958,6 +958,9 @@ namespace GlitchyEditor
/// Creates a new scene and openes it.
private void CreateAndOpenNewScene()
{
if (_currentProject == null)
return;
CloseCurrentScene();
SceneFilePath = null;
@@ -1032,6 +1035,9 @@ namespace GlitchyEditor
/// Saves the scene in the file that is was loaded from or saved to last. If there is no such path (i.e. it is a new scene) the save file dialog will open.
private void SaveCurrentScene()
{
if (_currentProject == null)
return;
if (!CanSaveScene)
{
Log.ClientLogger.Error("Scene can't be saved while playing the game!");
@@ -1063,6 +1069,9 @@ namespace GlitchyEditor
/// Opens a save file dialog and saves the scene at the user specified location.
private void SaveCurrentSceneAs()
{
if (_currentProject == null)
return;
if (!CanSaveScene)
{
Log.ClientLogger.Error("Scene can't be saved while playing the game!");
@@ -1083,6 +1092,9 @@ namespace GlitchyEditor
/// Opens a open file dialog and load the scene selected by the user specified.
private void OpenScene()
{
if (_currentProject == null)
return;
OpenFileDialog ofd = scope .();
ofd.InitialDirectory = _currentProject.AssetsFolder;
ofd.SetFilter("scene file (*.scene)|*.scene");
@@ -1400,7 +1412,9 @@ namespace GlitchyEditor
{
ImGui.BeginMainMenuBar();
if(ImGui.BeginMenu("File", true))
if (ImGui.BeginMenu("File", true))
{
using (ImGui.DisabledScope(_currentProject == null))
{
if (ImGui.MenuItem("New Scene", "Ctrl+N"))
CreateAndOpenNewScene();
@@ -1421,8 +1435,8 @@ namespace GlitchyEditor
ImGui.Separator();
ImGui.BeginDisabled(!CanSaveScene);
using (ImGui.DisabledScope(!CanSaveScene))
{
if (ImGui.MenuItem("Save Scene", "Ctrl+S"))
SaveCurrentScene();
@@ -1432,8 +1446,8 @@ namespace GlitchyEditor
SaveCurrentSceneAs();
ImGui.AttachTooltip("Saves the scene under the given file name.");
ImGui.EndDisabled();
}
}
ImGui.Separator();
+13
View File
@@ -743,5 +743,18 @@ namespace ImGui
PushStyleVar(.DockingSeparatorSize, Value);
}
}
public struct DisabledScope : IDisposable
{
public this(bool disabled = true)
{
ImGui.BeginDisabled(disabled);
}
public void Dispose()
{
ImGui.EndDisabled();
}
}
}
}