Sin descripción
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

GridPaintPaletteWindowPreferences.cs 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Reflection;
  4. using UnityEngine;
  5. namespace UnityEditor.Tilemaps
  6. {
  7. internal class GridPaintPaletteWindowPreferences
  8. {
  9. private static IEnumerable<string> GetSearchWords()
  10. {
  11. foreach (var ss in SettingsProvider
  12. .GetSearchKeywordsFromGUIContentProperties<TilePaletteActiveTargetsProperties>())
  13. yield return ss;
  14. foreach (var ss in SettingsProvider
  15. .GetSearchKeywordsFromGUIContentProperties<GridPaintActiveTargetsPreferences>())
  16. yield return ss;
  17. foreach (var ss in SettingsProvider
  18. .GetSearchKeywordsFromGUIContentProperties<SceneViewOpenTilePaletteHelper.SceneViewOpenTilePaletteProperties>())
  19. yield return ss;
  20. foreach (var ss in SettingsProvider
  21. .GetSearchKeywordsFromGUIContentProperties<TilemapPrefabStageHelper.OpenTilemapInPrefabModeProperties>())
  22. yield return ss;
  23. foreach (var ss in SettingsProvider
  24. .GetSearchKeywordsFromGUIContentProperties<TilemapEditorToolPreferences.TilemapEditorToolProperties>())
  25. yield return ss;
  26. foreach (var ss in SettingsProvider
  27. .GetSearchKeywordsFromGUIContentProperties<GridBrushPickStoreSettingsProvider.SettingsProperties>())
  28. yield return ss;
  29. }
  30. [SettingsProvider]
  31. internal static SettingsProvider CreateSettingsProvider()
  32. {
  33. var settingsProvider = new SettingsProvider("Preferences/2D/Tile Palette", SettingsScope.User, GetSearchWords())
  34. {
  35. guiHandler = searchContext =>
  36. {
  37. GridPaintPaletteWindow.PreferencesGUI();
  38. GridPaintActiveTargetsPreferences.PreferencesGUI();
  39. SceneViewOpenTilePaletteHelper.PreferencesGUI();
  40. TilemapPrefabStageHelper.PreferencesGUI();
  41. TilemapEditorToolPreferences.PreferencesGUI();
  42. GridBrushPickStoreSettingsProvider.PreferencesGUI();
  43. }
  44. };
  45. return settingsProvider;
  46. }
  47. }
  48. internal class GridPaintActiveTargetsPreferences
  49. {
  50. public static readonly string targetSortingModeEditorPref = "TilePalette.ActiveTargetsSortingMode";
  51. public static readonly string targetSortingModeLookup = "Active Targets Sorting Mode";
  52. public static readonly string targetRestoreEditModeSelectionEditorPref = "TilePalette.RestoreEditModeSelection";
  53. public static readonly string targetRestoreEditModeSelectionLookup = "Restore Edit Mode Active Target";
  54. public static readonly string createTileFromPaletteEditorPref = "TilePalette.CreateTileFromPalette";
  55. public static readonly string createTileFromPaletteLookup = "Create Tile Method";
  56. public static readonly string defaultSortingMode = L10n.Tr("None");
  57. public static readonly GUIContent targetSortingModeLabel =
  58. EditorGUIUtility.TrTextContent(targetSortingModeLookup,
  59. "Controls the sorting of the Active Targets in the Tile Palette");
  60. public static readonly GUIContent targetRestoreEditModeSelectionLabel = EditorGUIUtility.TrTextContent(
  61. targetRestoreEditModeSelectionLookup
  62. , "When exiting Play Mode, restores the Active Target in the Tile Palette to the last selected target from Edit Mode");
  63. public static readonly GUIContent createTileFromPaletteLabel = EditorGUIUtility.TrTextContent(
  64. createTileFromPaletteLookup
  65. , "Method used to create Tiles when drag and dropping assets to the Tile Palette");
  66. public static bool restoreEditModeSelection
  67. {
  68. get { return EditorPrefs.GetBool(targetRestoreEditModeSelectionEditorPref, true); }
  69. set { EditorPrefs.SetBool(targetRestoreEditModeSelectionEditorPref, value); }
  70. }
  71. private static string[] s_SortingNames;
  72. private static int s_SortingSelectionIndex;
  73. private static string[] s_CreateTileNames;
  74. private static int s_CreateTileIndex;
  75. private static bool CompareMethodName(string[] methodNames, MethodInfo method)
  76. {
  77. return methodNames.Length == 2 && methodNames[0] == method.ReflectedType.Name &&
  78. methodNames[1] == method.Name;
  79. }
  80. private static bool CompareTypeName(string typeFullName, Type type)
  81. {
  82. return typeFullName == type.FullName;
  83. }
  84. internal static void PreferencesGUI()
  85. {
  86. using (new SettingsWindow.GUIScope())
  87. {
  88. if (s_SortingNames == null)
  89. {
  90. var sortingTypeFullName = EditorPrefs.GetString(targetSortingModeEditorPref, defaultSortingMode);
  91. var sortingMethodNames = sortingTypeFullName.Split('.');
  92. s_SortingNames = new string[1 + GridPaintSortingAttribute.sortingMethods.Count +
  93. GridPaintSortingAttribute.sortingTypes.Count];
  94. int count = 0;
  95. s_SortingNames[count++] = defaultSortingMode;
  96. foreach (var sortingMethod in GridPaintSortingAttribute.sortingMethods)
  97. {
  98. if (CompareMethodName(sortingMethodNames, sortingMethod))
  99. s_SortingSelectionIndex = count;
  100. s_SortingNames[count++] = sortingMethod.Name;
  101. }
  102. foreach (var sortingType in GridPaintSortingAttribute.sortingTypes)
  103. {
  104. if (CompareTypeName(sortingTypeFullName, sortingType))
  105. s_SortingSelectionIndex = count;
  106. s_SortingNames[count++] = sortingType.Name;
  107. }
  108. }
  109. if (s_CreateTileNames == null)
  110. {
  111. var createTileFullName = EditorPrefs.GetString(createTileFromPaletteEditorPref, defaultSortingMode);
  112. var createTileMethodNames = createTileFullName.Split('.');
  113. int count = 0;
  114. s_CreateTileNames = new string[CreateTileFromPaletteAttribute.createTileFromPaletteMethods.Count];
  115. foreach (var createTileMethod in CreateTileFromPaletteAttribute.createTileFromPaletteMethods)
  116. {
  117. if (CompareMethodName(createTileMethodNames, createTileMethod))
  118. s_CreateTileIndex = count;
  119. s_CreateTileNames[count++] = createTileMethod.Name;
  120. }
  121. }
  122. EditorGUI.BeginChangeCheck();
  123. var sortingSelection =
  124. EditorGUILayout.Popup(targetSortingModeLabel, s_SortingSelectionIndex, s_SortingNames);
  125. if (EditorGUI.EndChangeCheck())
  126. {
  127. s_SortingSelectionIndex = sortingSelection;
  128. var sortingTypeFullName = defaultSortingMode;
  129. if (s_SortingSelectionIndex > 0 &&
  130. s_SortingSelectionIndex <= GridPaintSortingAttribute.sortingMethods.Count)
  131. {
  132. var sortingMethod = GridPaintSortingAttribute.sortingMethods[s_SortingSelectionIndex - 1];
  133. sortingTypeFullName =
  134. String.Format("{0}.{1}", sortingMethod.ReflectedType.Name, sortingMethod.Name);
  135. }
  136. else
  137. {
  138. var idx = s_SortingSelectionIndex - GridPaintSortingAttribute.sortingMethods.Count - 1;
  139. if (idx >= 0 && idx < GridPaintSortingAttribute.sortingTypes.Count)
  140. {
  141. var sortingType = GridPaintSortingAttribute.sortingTypes[idx];
  142. sortingTypeFullName = sortingType.FullName;
  143. }
  144. }
  145. EditorPrefs.SetString(targetSortingModeEditorPref, sortingTypeFullName);
  146. GridPaintingState.FlushCache();
  147. }
  148. EditorGUI.BeginChangeCheck();
  149. var editModeSelection = EditorGUILayout.Toggle(targetRestoreEditModeSelectionLabel, restoreEditModeSelection);
  150. if (EditorGUI.EndChangeCheck())
  151. {
  152. restoreEditModeSelection = editModeSelection;
  153. }
  154. EditorGUI.BeginChangeCheck();
  155. var createTileSelection = EditorGUILayout.Popup(createTileFromPaletteLabel, s_CreateTileIndex, s_CreateTileNames);
  156. if (EditorGUI.EndChangeCheck())
  157. {
  158. var createTileFullName = defaultSortingMode;
  159. s_CreateTileIndex = createTileSelection;
  160. if (s_CreateTileIndex < CreateTileFromPaletteAttribute.createTileFromPaletteMethods.Count)
  161. {
  162. var createTileMethod = CreateTileFromPaletteAttribute.createTileFromPaletteMethods[s_CreateTileIndex];
  163. createTileFullName = String.Format("{0}.{1}", createTileMethod.ReflectedType.Name, createTileMethod.Name);
  164. }
  165. EditorPrefs.SetString(createTileFromPaletteEditorPref, createTileFullName);
  166. }
  167. }
  168. }
  169. public static IComparer<GameObject> GetTargetComparer()
  170. {
  171. var sortingTypeFullName = EditorPrefs.GetString(targetSortingModeEditorPref, defaultSortingMode);
  172. if (!sortingTypeFullName.Equals(defaultSortingMode))
  173. {
  174. var sortingMethodNames = sortingTypeFullName.Split('.');
  175. foreach (var sortingMethod in GridPaintSortingAttribute.sortingMethods)
  176. {
  177. if (CompareMethodName(sortingMethodNames, sortingMethod))
  178. return sortingMethod.Invoke(null, null) as IComparer<GameObject>;
  179. }
  180. foreach (var sortingType in GridPaintSortingAttribute.sortingTypes)
  181. {
  182. if (CompareTypeName(sortingTypeFullName, sortingType))
  183. return Activator.CreateInstance(sortingType) as IComparer<GameObject>;
  184. }
  185. }
  186. return null;
  187. }
  188. public static MethodInfo GetCreateTileFromPaletteUsingPreferences()
  189. {
  190. var createTileFullName = EditorPrefs.GetString(createTileFromPaletteEditorPref, defaultSortingMode);
  191. if (!createTileFullName.Equals(defaultSortingMode))
  192. {
  193. var methodNames = createTileFullName.Split('.');
  194. foreach (var createTileMethod in CreateTileFromPaletteAttribute.createTileFromPaletteMethods)
  195. {
  196. if (CompareMethodName(methodNames, createTileMethod))
  197. return createTileMethod;
  198. }
  199. }
  200. return typeof(TileUtility).GetMethod("DefaultTile", BindingFlags.Static | BindingFlags.Public);
  201. }
  202. }
  203. }