public void InspectorGUI(SerializedObject serializedObject)
        {
            serializedObject.Update();
            m_DebugSettings.Update();

            var core = (ModuleLoaderCore)serializedObject.targetObject;

            using (new GUILayout.HorizontalScope())
            {
                if (GUILayout.Button("Reload Modules"))
                {
                    core.ReloadModules();
                }

                GUILayout.FlexibleSpace();
            }

            EditorGUILayout.LabelField("Debug Settings", EditorStyles.boldLabel);
            EditorGUILayout.PropertyField(m_FunctionalityInjectionModuleLoggingProperty, new GUIContent("FI Module Logging"));
            EditorGUILayout.PropertyField(m_ModuleHideFlagsProperty);

            EditorGUILayout.PropertyField(m_OverridePlatformInPlaymodeProperty);
            using (new EditorGUI.DisabledScope(!m_OverridePlatformInPlaymodeProperty.boolValue))
            {
                EditorGUILayout.PropertyField(m_PlaymodePlatformOverrideProperty);
            }

            m_DebugSettings.ApplyModifiedProperties();

            EditorGUILayout.Separator();

            EditorGUILayout.LabelField("Module Settings", EditorStyles.boldLabel);
            EditorGUILayout.PropertyField(m_SettingsOverrideProperty);
            EditorGUILayout.PropertyField(m_PlatformOverridesProperty, true);

            var currentOverride = core.currentOverride;

            using (new EditorGUI.DisabledScope(true))
            {
                EditorGUILayout.ObjectField("Current override", currentOverride, typeof(ModuleLoaderSettingsOverride), false);
            }

            SerializedProperty excludedTypesProperty;

            if (currentOverride)
            {
                var so = new SerializedObject(currentOverride);
                excludedTypesProperty = so.FindProperty("m_ExcludedTypes");
            }
            else
            {
                excludedTypesProperty = serializedObject.FindProperty("m_ExcludedTypes");
            }

            var modified = m_SettingsEditor.DrawEnabledModules(core.excludedTypes, excludedTypesProperty);

            DrawModules(ref m_ShowModuleLoadOrder, core.modules, "Load Order");
            DrawModules(ref m_ShowModuleUnloadOrder, core.moduleUnloads, "Unload Order");
            DrawModules(ref m_ShowModuleBehaviorCallbackOrder, core.behaviorCallbackModules, "Behavior Callback Order");
            DrawModules(ref m_ShowModuleSceneCallbackOrder, core.sceneCallbackModules, "Scene Callback Order");
            DrawModules(ref m_ShowModuleBuildCallbackOrder, core.buildCallbackModules, "Build Callback Order");
            DrawModules(ref m_ShowModuleAssetCallbackOrder, core.assetCallbackModules, "Asset Callback Order");

            modified |= serializedObject.ApplyModifiedProperties();

            if (modified)
            {
                core.ReloadModules();
            }
        }
 public override void OnInspectorGUI()
 {
     m_SettingsEditor.DrawEnabledModules(m_ExcludedTypes, m_ExcludedTypesProperty);
 }