private void OnEnable()
        {
            PluginsFoldoutAnimator = new AnimBool(true);
            PluginsFoldoutAnimator.valueChanged.AddListener(Repaint);

            NewPluginFoldoutAnimator = new AnimBool(false);
            NewPluginFoldoutAnimator.valueChanged.AddListener(Repaint);

            NativePluginSettings.Load();
            for (int i = 0; i < NativePluginSettings.plugins.Count; i++)
            {
                NativePluginSettings.plugins[i].sectionAnimator.valueChanged.RemoveAllListeners();
                NativePluginSettings.plugins[i].sectionAnimator.valueChanged.AddListener(Repaint);
                foreach (var options in NativePluginSettings.plugins[i].buildOptions)
                {
                    options.foldoutAnimator.valueChanged.RemoveAllListeners();
                    options.foldoutAnimator.valueChanged.AddListener(Repaint);
                }
            }
            if (newPlugin == null)
            {
                newPlugin = NativePlugin.GetDefault(this);
            }

            CMakeHelper.GetCMakeVersion((version) =>
            {
                cmakeVersion = version;
            });

            backgroundProcessManager = new BackgroundProcessManager(this);

            List <string> platformStrings = new List <string>();
            List <int>    platforms       = new List <int>();

            foreach (BuildPlatform platform in Enum.GetValues(typeof(BuildPlatform)))
            {
                if (GetBuilder(platform).IsAvailable)
                {
                    platforms.Add((int)platform);
                    platformStrings.Add(ObjectNames.NicifyVariableName(Enum.GetName(typeof(BuildPlatform), platform)));
                }
            }
            AvailablePlatformStrings = platformStrings.ToArray();
            AvailablePlatformInts    = platforms.ToArray();
        }
        void OnGuiSettings()
        {
            EditorGUILayout.Space();

            EditorGUILayout.LabelField("CMake", EditorStyles.boldLabel);
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("CMake version", cmakeVersion);
            if (GUILayout.Button("Refresh", EditorStyles.miniButton, GUILayout.Width(80)))
            {
                CMakeHelper.GetCMakeVersion((version) =>
                {
                    cmakeVersion = version;
                }, true);
            }
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            GUI.changed = false;
            CMakeHelper.CMakeLocation = EditorGUILayout.TextField(new GUIContent("CMake location", "leave empty for default"), CMakeHelper.CMakeLocation);
            if (GUILayout.Button("Browse", EditorStyles.miniButton, GUILayout.Width(80)))
            {
                string file = EditorUtility.OpenFilePanel("Select CMake location", Path.GetDirectoryName(CMakeHelper.CMakeLocation),
                                                          PluginBuilderBase.EditorPlatform == RuntimePlatform.WindowsEditor ? "exe" : "");
                CMakeHelper.CMakeLocation = file;
            }
            if (GUILayout.Button("Download", EditorStyles.miniButton, GUILayout.Width(80)))
            {
                Application.OpenURL("https://cmake.org/download/");
            }

            EditorGUILayout.EndHorizontal();

            EditorGUILayout.Space();

            if (GetBuilder(BuildPlatform.Android).IsAvailable)
            {
                EditorGUILayout.LabelField("Android", EditorStyles.boldLabel);
                EditorGUILayout.BeginHorizontal();
                GUI.changed = false;
                string ndk = EditorGUILayout.TextField(new GUIContent("NDK", "NDK location. leave empty to use default location."), AndroidBuilder.NDKLocation);
                if (GUI.changed)
                {
                    AndroidBuilder.NDKLocation = ndk;
                }
                if (GUILayout.Button("Browse", EditorStyles.miniButton, GUILayout.Width(80)))
                {
                    AndroidBuilder.NDKLocation = EditorUtility.OpenFolderPanel("Select NDK location", Path.GetDirectoryName(AndroidBuilder.NDKLocation), "");
                }
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.Space();
            }

            if (PluginBuilderBase.EditorPlatform == RuntimePlatform.WindowsEditor)
            {
                if (GetBuilder(BuildPlatform.WebGL).IsAvailable)
                {
                    EditorGUILayout.LabelField("WebGL", EditorStyles.boldLabel);
                    EditorGUILayout.BeginHorizontal();
                    GUI.changed = false;
                    string mingw32make = EditorGUILayout.TextField(new GUIContent("MinGW 32 Make", "mingw32-make.exe"), WebGLBuilder.MinGW32MakeLocation);
                    if (GUI.changed)
                    {
                        WebGLBuilder.MinGW32MakeLocation = mingw32make;
                    }
                    if (GUILayout.Button("Browse", EditorStyles.miniButton, GUILayout.Width(80)))
                    {
                        string file = EditorUtility.OpenFilePanel("Select MinGW 32 Make (mingw32-make.exe) location", WebGLBuilder.MinGW32MakeLocation,
                                                                  PluginBuilderBase.EditorPlatform == RuntimePlatform.WindowsEditor ? "exe" : "");
                        WebGLBuilder.MinGW32MakeLocation = file;
                    }
                    EditorGUILayout.EndHorizontal();

                    EditorGUILayout.Space();
                }

                if (GetBuilder(BuildPlatform.Windows).IsAvailable)
                {
                    EditorGUILayout.LabelField("Windows", EditorStyles.boldLabel);
                    EditorGUILayout.BeginHorizontal();
                    WindowsBuilder.VisualStudioVersion = EditorGUILayout.IntPopup("Visual Studio", WindowsBuilder.VisualStudioVersion,
                                                                                  WindowsBuilder.InstalledVisualStudioNames, WindowsBuilder.InstalledVisualStudios);

                    EditorGUILayout.EndHorizontal();

                    EditorGUILayout.Space();
                }
            }

            EditorGUILayout.Space();
        }