diff --git a/Source/Editor/Modules/SourceCodeEditing/CodeEditingModule.cs b/Source/Editor/Modules/SourceCodeEditing/CodeEditingModule.cs
index 52302b785..a06e0f658 100644
--- a/Source/Editor/Modules/SourceCodeEditing/CodeEditingModule.cs
+++ b/Source/Editor/Modules/SourceCodeEditing/CodeEditingModule.cs
@@ -270,6 +270,7 @@ namespace FlaxEditor.Modules.SourceCodeEditing
{
ScriptsBuilder.ScriptsReload += OnScriptsReload;
ScriptsBuilder.ScriptsReloadEnd += OnScriptsReloadEnd;
+ ScriptsBuilder.ScriptsLoaded += OnScriptsLoaded;
Editor.Options.OptionsChanged += OnOptionsChanged;
// Add default code editors (in-build)
@@ -340,6 +341,7 @@ namespace FlaxEditor.Modules.SourceCodeEditing
ScriptsBuilder.ScriptsReload -= OnScriptsReload;
ScriptsBuilder.ScriptsReloadEnd -= OnScriptsReloadEnd;
+ ScriptsBuilder.ScriptsLoaded -= OnScriptsLoaded;
}
///
@@ -375,6 +377,12 @@ namespace FlaxEditor.Modules.SourceCodeEditing
OnTypesChanged();
}
+ private void OnScriptsLoaded()
+ {
+ // Clear any state with engine-only types
+ ClearTypes();
+ }
+
private static bool IsTypeValidScriptingType(ScriptType t)
{
return !t.IsGenericType && !t.IsAbstract && !t.HasAttribute(typeof(HideInEditorAttribute), false);
diff --git a/Source/Editor/Scripting/ScriptsBuilder.cpp b/Source/Editor/Scripting/ScriptsBuilder.cpp
index e268d44c5..1284d2df9 100644
--- a/Source/Editor/Scripting/ScriptsBuilder.cpp
+++ b/Source/Editor/Scripting/ScriptsBuilder.cpp
@@ -37,6 +37,7 @@ enum class EventType
ReloadBegin = 5,
Reload = 6,
ReloadEnd = 7,
+ ScriptsLoaded = 8,
};
struct EventData
@@ -74,6 +75,7 @@ namespace ScriptsBuilderImpl
void onScriptsReloadStart();
void onScriptsReload();
void onScriptsReloadEnd();
+ void onScriptsLoaded();
void GetClassName(const MString& fullname, MString& className);
@@ -203,6 +205,11 @@ void ScriptsBuilderImpl::onScriptsReloadEnd()
CallEvent(EventType::ReloadEnd);
}
+void ScriptsBuilderImpl::onScriptsLoaded()
+{
+ CallEvent(EventType::ScriptsLoaded);
+}
+
void ScriptsBuilder::Compile()
{
ScopeLock scopeLock(_locker);
@@ -550,6 +557,7 @@ bool ScriptsBuilderService::Init()
Level::ScriptsReloadStart.Bind(onScriptsReloadStart);
Level::ScriptsReload.Bind(onScriptsReload);
Level::ScriptsReloadEnd.Bind(onScriptsReloadEnd);
+ Scripting::ScriptsLoaded.Bind(onScriptsLoaded);
// Listen to code editors manager events
CodeEditingManager::AsyncOpenBegin.Bind(onCodeEditorAsyncOpenBegin);
diff --git a/Source/Editor/Scripting/ScriptsBuilder.cs b/Source/Editor/Scripting/ScriptsBuilder.cs
index 67a43388a..3dacc9a95 100644
--- a/Source/Editor/Scripting/ScriptsBuilder.cs
+++ b/Source/Editor/Scripting/ScriptsBuilder.cs
@@ -66,6 +66,11 @@ namespace FlaxEditor
///
public static event Action ScriptsReloadEnd;
+ ///
+ /// Occurs when engine loads game scripts.
+ ///
+ public static event Action ScriptsLoaded;
+
///
/// Occurs when code editor starts asynchronous open a file or a solution.
///
@@ -86,6 +91,7 @@ namespace FlaxEditor
ReloadBegin = 5,
Reload = 6,
ReloadEnd = 7,
+ ScriptsLoaded = 8,
}
internal static void Internal_OnEvent(EventType type)
@@ -118,6 +124,9 @@ namespace FlaxEditor
case EventType.ReloadEnd:
ScriptsReloadEnd?.Invoke();
break;
+ case EventType.ScriptsLoaded:
+ ScriptsLoaded?.Invoke();
+ break;
}
}