123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- using System.Collections.Generic;
- using AssetBank.Editor.DockableWindow;
- using UnityEditor;
- using UnityEngine;
- namespace AssetBank.Settings
- {
- internal class ProjectExporterSettingsProvider : SettingsProvider
- {
- private SerializedObject m_Settings;
- private SerializedProperty m_FoldersToIgnore;
- private SerializedProperty m_FileExtensionsToIgnore;
- private SerializedProperty m_UnityTypesToIgnore;
- private SerializedProperty m_OptimiseExport;
- private SerializedProperty m_CategoriesToOptimise;
- private SerializedProperty m_SafeComponents;
- private SerializedProperty m_HardcodedComponents;
- private SerializedProperty m_OverrideHardcodedDefaults;
- const string k_SettingsPath = "Project/Project AssetDatabase";
- public ProjectExporterSettingsProvider(string path, SettingsScope scope = SettingsScope.Project)
- : base(path, scope) {}
- public override void OnActivate(string searchContext, UnityEngine.UIElements.VisualElement rootElement)
- {
- m_Settings = ProjectExporterSettings.GetSerializedSettings();
- m_FoldersToIgnore = m_Settings.FindProperty("m_FoldersToIgnore");
- m_FileExtensionsToIgnore = m_Settings.FindProperty("m_FileExtensionsToIgnore");
- m_UnityTypesToIgnore = m_Settings.FindProperty("m_UnityTypesToIgnore");
- m_OptimiseExport = m_Settings.FindProperty("m_OptimiseExport");
- m_CategoriesToOptimise = m_Settings.FindProperty("m_CategoriesToOptimise");
- m_SafeComponents = m_Settings.FindProperty("m_SafeComponents");
- m_HardcodedComponents = m_Settings.FindProperty("m_HardcodedComponents");
- m_OverrideHardcodedDefaults = m_Settings.FindProperty("m_OverrideHardcodedDefaults");
- }
- public override void OnGUI(string searchContext)
- {
- if (m_Settings == null || m_Settings.targetObject == null)
- {
- EditorGUILayout.HelpBox("Settings asset not found. It will be created automatically.", MessageType.Info);
- m_Settings = ProjectExporterSettings.GetSerializedSettings();
- return;
- }
-
- m_Settings.Update();
- EditorGUILayout.PropertyField(m_FoldersToIgnore, new GUIContent("Folders to Ignore"), true);
- EditorGUILayout.PropertyField(m_FileExtensionsToIgnore, new GUIContent("File Extensions to Ignore"), true);
- EditorGUILayout.PropertyField(m_UnityTypesToIgnore, new GUIContent("Unity Types to Ignore"), true);
-
- EditorGUILayout.Space();
-
- EditorGUILayout.PropertyField(m_OptimiseExport, new GUIContent("Optimise Export"));
- if(m_OptimiseExport.boolValue)
- {
- DrawCategoriesToOptimise();
- EditorGUILayout.Space();
- EditorGUILayout.LabelField("Hardcoded Rules", EditorStyles.boldLabel);
- EditorGUILayout.PropertyField(m_OverrideHardcodedDefaults, new GUIContent("Override Defaults", "Check this to ignore the hardcoded safety rules and use only the 'Safe Components' list below. Warning: This can break scene hierarchy if not configured correctly."));
-
- EditorGUI.BeginDisabledGroup(true);
- EditorGUILayout.PropertyField(m_HardcodedComponents, new GUIContent("Hardcoded Safe Components (Read-Only)"), true);
- EditorGUI.EndDisabledGroup();
-
- EditorGUILayout.Space();
- EditorGUILayout.LabelField("User-Defined Rules", EditorStyles.boldLabel);
- EditorGUILayout.PropertyField(m_SafeComponents, new GUIContent("Safe Components"), true);
- }
- if (m_Settings.hasModifiedProperties)
- {
- m_Settings.ApplyModifiedProperties();
- }
- }
- private void DrawCategoriesToOptimise()
- {
- EditorGUILayout.LabelField("Categories to Optimise", EditorStyles.boldLabel);
-
- EditorGUI.indentLevel++;
-
- var categories = new List<string>();
- for (int i = 0; i < m_CategoriesToOptimise.arraySize; i++)
- {
- categories.Add(m_CategoriesToOptimise.GetArrayElementAtIndex(i).stringValue);
- }
- foreach (var availableCategory in ProjectExporterCategories.All)
- {
- var isEnabled = categories.Contains(availableCategory);
- var newIsEnabled = EditorGUILayout.Toggle(availableCategory, isEnabled);
- if (newIsEnabled && !isEnabled)
- {
- // Add to list
- var index = m_CategoriesToOptimise.arraySize;
- m_CategoriesToOptimise.InsertArrayElementAtIndex(index);
- m_CategoriesToOptimise.GetArrayElementAtIndex(index).stringValue = availableCategory;
- }
- else if (!newIsEnabled && isEnabled)
- {
- // Remove from list
- for (int i = 0; i < m_CategoriesToOptimise.arraySize; i++)
- {
- if (m_CategoriesToOptimise.GetArrayElementAtIndex(i).stringValue == availableCategory)
- {
- m_CategoriesToOptimise.DeleteArrayElementAtIndex(i);
- break;
- }
- }
- }
- }
- EditorGUI.indentLevel--;
- }
- [SettingsProvider]
- public static SettingsProvider CreateSettingsProvider()
- {
- var provider = new ProjectExporterSettingsProvider(k_SettingsPath, SettingsScope.Project)
- {
- keywords = GetSearchKeywordsFromGUIContentProperties<Styles>()
- };
- return provider;
- }
- private class Styles
- {
- public static GUIContent foldersToIgnore = new GUIContent("Folders to Ignore");
- public static GUIContent fileExtensionsToIgnore = new GUIContent("File Extensions to Ignore");
- public static GUIContent unityTypesToIgnore = new GUIContent("Unity Types to Ignore");
- public static GUIContent optimiseExport = new GUIContent("Optimise Export");
- public static GUIContent safeComponents = new GUIContent("Safe Components");
- }
- }
- }
|