123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- using System;
- using UnityEditorInternal;
- using UnityEngine;
- using Object = UnityEngine.Object;
-
- namespace UnityEditor.Tilemaps
- {
- internal class GridBrushPickStoreSettings : ScriptableObject
- {
- [SerializeField]
- public GridBrushPickStore m_UserPickStore;
- }
-
- [Serializable]
- internal class GridBrushPickStoreSettingsProvider : ScriptableSingleton<GridBrushPickStoreSettingsProvider>
- {
- private const string kSettingsAssetPath = "ProjectSettings/TilePaletteBrushPicks.asset";
-
- internal class SettingsProperties
- {
- public static GUIStyle header = null;
-
- public static readonly GUIContent brushPicksLabel = EditorGUIUtility.TrTextContent("Brush Picks");
-
- public static readonly GUIContent brushPicksAssetLabel = EditorGUIUtility.TrTextContent("Brush Picks Asset", "Asset for storing Brush Picks for the Project.");
- public static readonly GUIContent createNewLabel = EditorGUIUtility.TrTextContent("New", "Creates a new Brush Picks Asset in the Project.");
- public static readonly GUIContent createCloneLabel = EditorGUIUtility.TrTextContent("Clone", "Creates a new Brush Picks Asset in the Project from the current Brush Picks Asset (From default if there is none set).");
- }
-
- [SerializeField]
- private GridBrushPickStore m_PickStorePreference;
- [SerializeField]
- private GridBrushPickStoreSettings m_PickStoreSettings;
-
- private void OnEnable()
- {
- LoadGridBrushPickStoreSettings();
- }
-
- private void LoadGridBrushPickStoreSettings()
- {
- var objs = InternalEditorUtility.LoadSerializedFileAndForget(kSettingsAssetPath);
- if (objs != null && objs.Length > 0)
- {
- m_PickStoreSettings = objs[0] as GridBrushPickStoreSettings;
- m_PickStorePreference = m_PickStoreSettings != null ? m_PickStoreSettings.m_UserPickStore : null;
- }
- }
-
- internal static GridBrushPickStore GetUserBrushPickStore()
- {
- var settings = GetGridBrushPickStoreSettings();
- if (settings != null)
- return settings.m_UserPickStore;
- return null;
- }
-
- internal static GridBrushPickStoreSettings GetGridBrushPickStoreSettings()
- {
- if (instance.m_PickStoreSettings == null && instance.m_PickStoreSettings is not null)
- {
- instance.LoadGridBrushPickStoreSettings();
- }
- return instance.m_PickStoreSettings;
- }
-
- private static GridBrushPickStoreSettings LoadOrCreateGridBrushPickStoreSettings()
- {
- var settings = GetGridBrushPickStoreSettings();
- if (settings == null)
- {
- instance.m_PickStoreSettings = ScriptableObject.CreateInstance<GridBrushPickStoreSettings>();
- InternalEditorUtility.SaveToSerializedFileAndForget(new [] { instance.m_PickStoreSettings }, kSettingsAssetPath, EditorSettings.serializationMode != SerializationMode.ForceBinary);
- settings = instance.m_PickStoreSettings;
- }
- return settings;
- }
-
- internal static void PreferencesGUI()
- {
- using (new SettingsWindow.GUIScope())
- {
- if (SettingsProperties.header == null)
- SettingsProperties.header = "SettingsHeader";
-
- GUILayout.Label(SettingsProperties.brushPicksLabel, SettingsProperties.header, GUILayout.MinWidth(160));
- EditorGUILayout.BeginHorizontal();
- var pickStorePreference = (GridBrushPickStore) EditorGUILayout.ObjectField(SettingsProperties.brushPicksAssetLabel, instance.m_PickStorePreference, typeof(GridBrushPickStore), false);
- if (pickStorePreference != instance.m_PickStorePreference)
- {
- instance.m_PickStorePreference = pickStorePreference;
- var settings = LoadOrCreateGridBrushPickStoreSettings();
- settings.m_UserPickStore = instance.m_PickStorePreference;
- Apply();
- }
- if (GUILayout.Button(SettingsProperties.createNewLabel, GUILayout.Width(55)))
- {
- CreateNew();
- }
- if (GUILayout.Button(SettingsProperties.createCloneLabel, GUILayout.Width(55)))
- {
- CreateClone();
- }
- EditorGUILayout.EndHorizontal();
-
- EditorGUILayout.Space();
- }
- }
-
- private static void Apply()
- {
- if (instance.m_PickStoreSettings == null)
- return;
-
- InternalEditorUtility.SaveToSerializedFileAndForget(new [] { instance.m_PickStoreSettings }, kSettingsAssetPath, EditorSettings.serializationMode != SerializationMode.ForceBinary);
- GridPaletteBrushes.FlushCache();
- GridPaintingState.brushPickStore = GetUserBrushPickStore();
- }
-
- private static void CreateNew()
- {
- var brushStore = ScriptableObject.CreateInstance<GridBrushPickStore>();
- var defaultPath = ProjectBrowser.s_LastInteractedProjectBrowser ? ProjectBrowser.s_LastInteractedProjectBrowser.GetActiveFolderPath() : "Assets";
- var filePath = EditorUtility.SaveFilePanel("Create Brush Picks Asset into folder ", defaultPath, "BrushPick", "asset");
- if (string.IsNullOrEmpty(filePath))
- return;
-
- filePath = FileUtil.GetProjectRelativePath(filePath);
- var fileName = FileUtil.UnityGetFileNameWithoutExtension(filePath);
- brushStore.name = fileName;
- AssetDatabase.CreateAsset(brushStore, filePath);
-
- var settings = LoadOrCreateGridBrushPickStoreSettings();
- settings.m_UserPickStore = brushStore;
- Apply();
- instance.m_PickStorePreference = brushStore;
- Selection.activeObject = brushStore;
- }
-
- private static void CreateClone()
- {
- var defaultPath = ProjectBrowser.s_LastInteractedProjectBrowser
- ? ProjectBrowser.s_LastInteractedProjectBrowser.GetActiveFolderPath()
- : "Assets";
- var filePath = EditorUtility.SaveFilePanel("Create Brush Picks Asset into folder ", defaultPath,
- "BrushPick", "asset");
- if (string.IsNullOrEmpty(filePath))
- return;
-
- GridBrushPickStore newBrushStore;
- var currentBrushStore = GetUserBrushPickStore();
- if (currentBrushStore == null)
- {
- newBrushStore = ScriptableObject.CreateInstance<GridBrushPickStore>();
- }
- else
- {
- newBrushStore = Object.Instantiate(currentBrushStore);
- }
-
- filePath = FileUtil.GetProjectRelativePath(filePath);
- var fileName = FileUtil.UnityGetFileNameWithoutExtension(filePath);
- newBrushStore.name = fileName;
- AssetDatabase.CreateAsset(newBrushStore, filePath);
-
- // Clone Library Brushes if cloning from default instance
- if (currentBrushStore == null)
- {
- currentBrushStore = GridBrushPickStore.LoadOrCreateLibraryGridBrushPickAsset();
- foreach (var userBrush in currentBrushStore.userSavedBrushes)
- {
- newBrushStore.AddNewUserSavedBrush(userBrush);
- }
- }
-
- var settings = LoadOrCreateGridBrushPickStoreSettings();
- settings.m_UserPickStore = newBrushStore;
- Apply();
- instance.m_PickStorePreference = newBrushStore;
- Selection.activeObject = newBrushStore;
- }
- }
- }
|