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);
}