diff --git a/Source/Editor/Modules/SourceCodeEditing/CodeEditingModule.cs b/Source/Editor/Modules/SourceCodeEditing/CodeEditingModule.cs index c40658fc8..96cf44e09 100644 --- a/Source/Editor/Modules/SourceCodeEditing/CodeEditingModule.cs +++ b/Source/Editor/Modules/SourceCodeEditing/CodeEditingModule.cs @@ -412,7 +412,9 @@ namespace FlaxEditor.Modules.SourceCodeEditing // Automatic project files generation after workspace modifications if (_autoGenerateScriptsProjectFiles && ScriptsBuilder.IsSourceWorkspaceDirty && !ScriptsBuilder.IsCompiling) { - Editor.ProgressReporting.GenerateScriptsProjectFiles.RunAsync(); + // Try to delay generation when a lot of files are added at once + if (ScriptsBuilder.IsSourceDirtyFor(TimeSpan.FromMilliseconds(150))) + Editor.ProgressReporting.GenerateScriptsProjectFiles.RunAsync(); } } diff --git a/Source/Editor/Scripting/ScriptsBuilder.cpp b/Source/Editor/Scripting/ScriptsBuilder.cpp index ef3f3738b..0b3cf6452 100644 --- a/Source/Editor/Scripting/ScriptsBuilder.cpp +++ b/Source/Editor/Scripting/ScriptsBuilder.cpp @@ -170,7 +170,7 @@ bool ScriptsBuilder::IsSourceWorkspaceDirty() bool ScriptsBuilder::IsSourceDirtyFor(const TimeSpan& timeout) { ScopeLock scopeLock(_locker); - return _lastSourceCodeEdited > (_lastCompileAction + timeout); + return _lastSourceCodeEdited > _lastCompileAction && DateTime::Now() > _lastSourceCodeEdited + timeout; } bool ScriptsBuilder::IsCompiling() @@ -669,7 +669,7 @@ void ScriptsBuilderService::Update() } // Check if compile code (if has been edited) - const TimeSpan timeToCallCompileIfDirty = TimeSpan::FromMilliseconds(50); + const TimeSpan timeToCallCompileIfDirty = TimeSpan::FromMilliseconds(150); auto mainWindow = Engine::MainWindow; if (ScriptsBuilder::IsSourceDirtyFor(timeToCallCompileIfDirty) && mainWindow && mainWindow->IsFocused()) { diff --git a/Source/Editor/Scripting/ScriptsBuilder.h b/Source/Editor/Scripting/ScriptsBuilder.h index f954b0fd0..0a11bd9b7 100644 --- a/Source/Editor/Scripting/ScriptsBuilder.h +++ b/Source/Editor/Scripting/ScriptsBuilder.h @@ -68,7 +68,7 @@ public: /// /// Time to use for checking. /// True if source code is dirty, otherwise false. - static bool IsSourceDirtyFor(const TimeSpan& timeout); + API_FUNCTION() static bool IsSourceDirtyFor(const TimeSpan& timeout); /// /// Returns true if scripts are being now compiled/reloaded.