diff --git a/Source/Engine/Scripting/Plugins/Plugin.cs b/Source/Engine/Scripting/Plugins/Plugin.cs index b9677b7f0..e61749b9c 100644 --- a/Source/Engine/Scripting/Plugins/Plugin.cs +++ b/Source/Engine/Scripting/Plugins/Plugin.cs @@ -12,6 +12,8 @@ namespace FlaxEngine /// public abstract class Plugin { + internal bool _initialized; + /// /// Gets the description. /// diff --git a/Source/Engine/Scripting/Plugins/PluginManager.cs b/Source/Engine/Scripting/Plugins/PluginManager.cs index 60c9ade20..32c5a97bf 100644 --- a/Source/Engine/Scripting/Plugins/PluginManager.cs +++ b/Source/Engine/Scripting/Plugins/PluginManager.cs @@ -82,25 +82,28 @@ namespace FlaxEngine /// public static void InitializeGamePlugins() { - foreach (var gamePlugin in _gamePlugins) + for (var i = 0; i < _gamePlugins.Count; i++) { - InvokeInitialize(gamePlugin); + InvokeInitialize(_gamePlugins[i]); } } - + /// /// Deinitialize all /// public static void DeinitializeGamePlugins() { - foreach (var gamePlugin in _gamePlugins) + for (var i = _gamePlugins.Count - 1; i >= 0; i--) { - InvokeDeinitialize(gamePlugin); + InvokeDeinitialize(_gamePlugins[i]); } } - + private static void InvokeInitialize(Plugin plugin) { + if (plugin._initialized) + return; + try { Debug.Write(LogType.Info, "Loading plugin " + plugin); @@ -108,6 +111,7 @@ namespace FlaxEngine PluginLoading?.Invoke(plugin); plugin.Initialize(); + plugin._initialized = true; PluginLoaded?.Invoke(plugin); } @@ -120,6 +124,9 @@ namespace FlaxEngine private static void InvokeDeinitialize(Plugin plugin) { + if (!plugin._initialized) + return; + try { Debug.Write(LogType.Info, "Unloading plugin " + plugin); @@ -127,6 +134,7 @@ namespace FlaxEngine PluginUnloading?.Invoke(plugin); plugin.Deinitialize(); + plugin._initialized = false; PluginUnloaded?.Invoke(plugin); }