diff --git a/Source/Editor/States/PlayingState.cs b/Source/Editor/States/PlayingState.cs index 01b746154..bcc982235 100644 --- a/Source/Editor/States/PlayingState.cs +++ b/Source/Editor/States/PlayingState.cs @@ -135,6 +135,8 @@ namespace FlaxEditor.States SceneDuplicated?.Invoke(); RestoreSelection(); + PluginManager.InitializeGamePlugins(); + Editor.OnPlayBegin(); } @@ -175,6 +177,8 @@ namespace FlaxEditor.States IsPaused = true; RestoreSelection(); + PluginManager.DeinitializeGamePlugins(); + Editor.OnPlayEnd(); } } diff --git a/Source/Engine/Scripting/Plugins/PluginManager.cs b/Source/Engine/Scripting/Plugins/PluginManager.cs index 867dd9a91..60c9ade20 100644 --- a/Source/Engine/Scripting/Plugins/PluginManager.cs +++ b/Source/Engine/Scripting/Plugins/PluginManager.cs @@ -77,6 +77,28 @@ namespace FlaxEngine //return !pluginDesc.DisabledByDefault; } + /// + /// Initialize all + /// + public static void InitializeGamePlugins() + { + foreach (var gamePlugin in _gamePlugins) + { + InvokeInitialize(gamePlugin); + } + } + + /// + /// Deinitialize all + /// + public static void DeinitializeGamePlugins() + { + foreach (var gamePlugin in _gamePlugins) + { + InvokeDeinitialize(gamePlugin); + } + } + private static void InvokeInitialize(Plugin plugin) { try @@ -173,14 +195,20 @@ namespace FlaxEngine return; } - // Init - InvokeInitialize(plugin); - - // Register - if (isEditor) - _editorPlugins.Add(plugin); - else + if (!isEditor) + { _gamePlugins.Add((GamePlugin)plugin); +#if !FLAX_EDITOR + InvokeInitialize(plugin); +#endif + } +#if FLAX_EDITOR + else + { + _editorPlugins.Add(plugin); + InvokeInitialize(plugin); + } +#endif } internal static void Internal_Dispose(Assembly assembly)