From 19c24e2a4d98892cbd7f31a220451ef7662f05a0 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Mon, 13 Feb 2023 17:14:53 +0100 Subject: [PATCH] Fix missing game scripts types when starting editor from IDE with `-skipCompile` arg --- .../Modules/SourceCodeEditing/CodeEditingModule.cs | 8 ++++++++ Source/Editor/Scripting/ScriptsBuilder.cpp | 8 ++++++++ Source/Editor/Scripting/ScriptsBuilder.cs | 9 +++++++++ 3 files changed, 25 insertions(+) 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; } }