Nessuna descrizione
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.

GridPaintPaletteWindow.cs 23KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564
  1. using System.Collections.Generic;
  2. using UnityEditor.EditorTools;
  3. using UnityEditor.Overlays;
  4. using UnityEditor.ShortcutManagement;
  5. using UnityEngine;
  6. using UnityEngine.UIElements;
  7. using Event = UnityEngine.Event;
  8. namespace UnityEditor.Tilemaps
  9. {
  10. /// <summary>
  11. /// EditorWindow containing the Tile Palette
  12. /// </summary>
  13. public class GridPaintPaletteWindow : EditorWindow, ISupportsOverlays
  14. {
  15. private static class Styles
  16. {
  17. public static readonly GUIContent selectPaintTarget = EditorGUIUtility.TrTextContent("Select Paint Target");
  18. public static readonly GUIContent selectPalettePrefab = EditorGUIUtility.TrTextContent("Select Palette Prefab");
  19. public static readonly GUIContent selectTileAsset = EditorGUIUtility.TrTextContent("Select Tile Asset");
  20. public static readonly GUIContent unlockPaletteEditing = EditorGUIUtility.TrTextContent("Unlock Palette Editing");
  21. public static readonly GUIContent lockPaletteEditing = EditorGUIUtility.TrTextContent("Lock Palette Editing");
  22. public static readonly GUIContent verticalBrushSplit = EditorGUIUtility.TrTextContent("Vertical Split for Brush Inspector");
  23. public static readonly GUIContent horizontalBrushSplit = EditorGUIUtility.TrTextContent("Horizontal Split for Brush Inspector");
  24. public static readonly GUIContent openTilePalettePreferences = EditorGUIUtility.TrTextContent("Open Tile Palette Preferences");
  25. public static readonly GUIContent openAsFloatingWindow = EditorGUIUtility.TrTextContent("Open Window as/Floating");
  26. public static readonly GUIContent openAsDockableWindow = EditorGUIUtility.TrTextContent("Open Window as/Dockable");
  27. public static readonly GUIContent tilePalette = EditorGUIUtility.TrTextContent("Tile Palette");
  28. public static readonly GUIContent mouseGridPositionAtZ = EditorGUIUtility.TrTextContent("Mouse Grid Position At Z", "Shows the Mouse Grid Position marquee at the Brush's Z Position.");
  29. }
  30. private static class UIStyles
  31. {
  32. public static readonly string styleSheetPath = "Packages/com.unity.2d.tilemap/Editor/UI/GridPaintPaletteWindow.uss";
  33. public static readonly string darkStyleSheetPath = "Packages/com.unity.2d.tilemap/Editor/UI/GridPaintPaletteWindowDark.uss";
  34. public static readonly string lightStyleSheetPath = "Packages/com.unity.2d.tilemap/Editor/UI/GridPaintPaletteWindowLight.uss";
  35. public static readonly string ussClassName = "unity-grid-paint-palette-window";
  36. }
  37. private static readonly string k_TilePaletteVerticalBrushSplitPref = "TilePaletteVerticalBrushSplit";
  38. internal static bool tilePaletteVerticalBrushSplit
  39. {
  40. get
  41. {
  42. return EditorPrefs.GetBool(k_TilePaletteVerticalBrushSplitPref, true);
  43. }
  44. set
  45. {
  46. EditorPrefs.SetBool(k_TilePaletteVerticalBrushSplitPref, value);
  47. }
  48. }
  49. private const float k_ActiveTargetLabelWidth = 90f;
  50. private const float k_ActiveTargetDropdownWidth = 130f;
  51. private const float k_ActiveTargetWarningSize = 20f;
  52. private const float k_MinClipboardHeight = 200f;
  53. private static readonly Vector2 k_MinWindowSize = new Vector2(k_ActiveTargetLabelWidth + k_ActiveTargetDropdownWidth + k_ActiveTargetWarningSize, k_MinClipboardHeight);
  54. internal static class ShortcutIds
  55. {
  56. public const string k_Select = "Grid Painting/Select";
  57. public const string k_Move = "Grid Painting/Move";
  58. public const string k_Brush = "Grid Painting/Brush";
  59. public const string k_Rectangle = "Grid Painting/Rectangle";
  60. public const string k_Picker = "Grid Painting/Picker";
  61. public const string k_Erase = "Grid Painting/Erase";
  62. public const string k_Fill = "Grid Painting/Fill";
  63. public const string k_RotateClockwise = "Grid Painting/Rotate Clockwise";
  64. public const string k_RotateAntiClockwise = "Grid Painting/Rotate Anti-Clockwise";
  65. public const string k_FlipX = "Grid Painting/Flip X";
  66. public const string k_FlipY = "Grid Painting/Flip Y";
  67. public const string k_IncreaseZ = "Grid Painting/Increase Z";
  68. public const string k_DecreaseZ = "Grid Painting/Decrease Z";
  69. public const string k_SwitchToNextBrush = "Grid Painting/Switch To Next Brush";
  70. public const string k_SwitchToPreviousBrush = "Grid Painting/Switch To Previous Brush";
  71. public const string k_ToggleSceneViewPalette = "Grid Painting/Toggle SceneView Palette";
  72. public const string k_ToggleSceneViewBrushPick = "Grid Painting/Toggle SceneView BrushPick";
  73. }
  74. [FormerlyPrefKeyAs(ShortcutIds.k_Select, "s")]
  75. [Shortcut(ShortcutIds.k_Select, typeof(TilemapEditorTool.ShortcutContext), KeyCode.S)]
  76. static void GridSelectKey()
  77. {
  78. TilemapEditorTool.ToggleActiveEditorTool(typeof(SelectTool));
  79. }
  80. [FormerlyPrefKeyAs(ShortcutIds.k_Move, "m")]
  81. [Shortcut(ShortcutIds.k_Move, typeof(TilemapEditorTool.ShortcutContext), KeyCode.M)]
  82. static void GridMoveKey()
  83. {
  84. TilemapEditorTool.ToggleActiveEditorTool(typeof(MoveTool));
  85. }
  86. [FormerlyPrefKeyAs(ShortcutIds.k_Brush, "b")]
  87. [Shortcut(ShortcutIds.k_Brush, typeof(TilemapEditorTool.ShortcutContext), KeyCode.B)]
  88. static void GridBrushKey()
  89. {
  90. TilemapEditorTool.ToggleActiveEditorTool(typeof(PaintTool));
  91. }
  92. [FormerlyPrefKeyAs(ShortcutIds.k_Rectangle, "u")]
  93. [Shortcut(ShortcutIds.k_Rectangle, typeof(TilemapEditorTool.ShortcutContext), KeyCode.U)]
  94. static void GridRectangleKey()
  95. {
  96. TilemapEditorTool.ToggleActiveEditorTool(typeof(BoxTool));
  97. }
  98. [FormerlyPrefKeyAs(ShortcutIds.k_Picker, "i")]
  99. [Shortcut(ShortcutIds.k_Picker, typeof(TilemapEditorTool.ShortcutContext), KeyCode.I)]
  100. static void GridPickerKey()
  101. {
  102. TilemapEditorTool.ToggleActiveEditorTool(typeof(PickingTool));
  103. }
  104. [FormerlyPrefKeyAs(ShortcutIds.k_Erase, "d")]
  105. [Shortcut(ShortcutIds.k_Erase, typeof(TilemapEditorTool.ShortcutContext), KeyCode.D)]
  106. static void GridEraseKey()
  107. {
  108. TilemapEditorTool.ToggleActiveEditorTool(typeof(EraseTool));
  109. }
  110. [FormerlyPrefKeyAs(ShortcutIds.k_Fill, "g")]
  111. [Shortcut(ShortcutIds.k_Fill, typeof(TilemapEditorTool.ShortcutContext), KeyCode.G)]
  112. static void GridFillKey()
  113. {
  114. TilemapEditorTool.ToggleActiveEditorTool(typeof(FillTool));
  115. }
  116. static void RotateBrush(GridBrushBase.RotationDirection direction)
  117. {
  118. GridPaintingState.gridBrush.Rotate(direction, GridPaintingState.activeGrid.cellLayout);
  119. GridPaintingState.activeGrid.Repaint();
  120. }
  121. [FormerlyPrefKeyAs(ShortcutIds.k_RotateClockwise, "]")]
  122. [Shortcut(ShortcutIds.k_RotateClockwise, typeof(TilemapEditorTool.ShortcutContext), KeyCode.RightBracket)]
  123. static void RotateBrushClockwise()
  124. {
  125. if (GridPaintingState.gridBrush != null && GridPaintingState.activeGrid != null)
  126. RotateBrush(GridBrushBase.RotationDirection.Clockwise);
  127. }
  128. [FormerlyPrefKeyAs(ShortcutIds.k_RotateAntiClockwise, "[")]
  129. [Shortcut(ShortcutIds.k_RotateAntiClockwise, typeof(TilemapEditorTool.ShortcutContext), KeyCode.LeftBracket)]
  130. static void RotateBrushAntiClockwise()
  131. {
  132. if (GridPaintingState.gridBrush != null && GridPaintingState.activeGrid != null)
  133. RotateBrush(GridBrushBase.RotationDirection.CounterClockwise);
  134. }
  135. static void FlipBrush(GridBrushBase.FlipAxis axis)
  136. {
  137. GridPaintingState.gridBrush.Flip(axis, GridPaintingState.activeGrid.cellLayout);
  138. GridPaintingState.activeGrid.Repaint();
  139. }
  140. [FormerlyPrefKeyAs(ShortcutIds.k_FlipX, "#[")]
  141. [Shortcut(ShortcutIds.k_FlipX, typeof(TilemapEditorTool.ShortcutContext), KeyCode.LeftBracket, ShortcutModifiers.Shift)]
  142. static void FlipBrushX()
  143. {
  144. if (GridPaintingState.gridBrush != null && GridPaintingState.activeGrid != null)
  145. FlipBrush(GridBrushBase.FlipAxis.X);
  146. }
  147. [FormerlyPrefKeyAs(ShortcutIds.k_FlipY, "#]")]
  148. [Shortcut(ShortcutIds.k_FlipY, typeof(TilemapEditorTool.ShortcutContext), KeyCode.RightBracket, ShortcutModifiers.Shift)]
  149. static void FlipBrushY()
  150. {
  151. if (GridPaintingState.gridBrush != null && GridPaintingState.activeGrid != null)
  152. FlipBrush(GridBrushBase.FlipAxis.Y);
  153. }
  154. static void ChangeBrushZ(int change)
  155. {
  156. GridPaintingState.gridBrush.ChangeZPosition(change);
  157. GridPaintingState.activeGrid.ChangeZPosition(change);
  158. GridPaintingState.activeGrid.Repaint();
  159. foreach (var window in instances)
  160. {
  161. window.Repaint();
  162. }
  163. }
  164. [Shortcut(ShortcutIds.k_IncreaseZ, typeof(TilemapEditorTool.ShortcutContext), KeyCode.Minus)]
  165. static void IncreaseBrushZ()
  166. {
  167. if (GridPaintingState.gridBrush != null
  168. && GridPaintingState.activeGrid != null
  169. && GridPaintingState.activeBrushEditor != null
  170. && GridPaintingState.activeBrushEditor.canChangeZPosition)
  171. ChangeBrushZ(1);
  172. }
  173. [Shortcut(ShortcutIds.k_DecreaseZ, typeof(TilemapEditorTool.ShortcutContext), KeyCode.Equals)]
  174. static void DecreaseBrushZ()
  175. {
  176. if (GridPaintingState.gridBrush != null
  177. && GridPaintingState.activeGrid != null
  178. && GridPaintingState.activeBrushEditor != null
  179. && GridPaintingState.activeBrushEditor.canChangeZPosition)
  180. ChangeBrushZ(-1);
  181. }
  182. [Shortcut(ShortcutIds.k_SwitchToNextBrush, typeof(TilemapEditorTool.ShortcutContext), KeyCode.B, ShortcutModifiers.Shift)]
  183. static void SwitchToNextBrush()
  184. {
  185. SwitchBrush(1);
  186. }
  187. [Shortcut(ShortcutIds.k_SwitchToPreviousBrush, typeof(TilemapEditorTool.ShortcutContext), KeyCode.B, ShortcutModifiers.Shift | ShortcutModifiers.Alt)]
  188. static void SwitchToPreviousBrush()
  189. {
  190. SwitchBrush(-1);
  191. }
  192. static void SwitchBrush(int change)
  193. {
  194. var count = GridPaintingState.brushes.Count;
  195. var index = GridPaintingState.brushes.IndexOf(GridPaintingState.gridBrush);
  196. var newIndex = (index + change + count) % count;
  197. if (index != newIndex)
  198. GridPaintingState.gridBrush = GridPaintingState.brushes[newIndex];
  199. }
  200. [Shortcut(ShortcutIds.k_ToggleSceneViewPalette, typeof(TilemapEditorTool.ShortcutContext), KeyCode.Semicolon)]
  201. static void ToggleSceneViewPalette()
  202. {
  203. var sceneView = SceneView.lastActiveSceneView;
  204. if (sceneView == null)
  205. return;
  206. if (!sceneView.TryGetOverlay(TilePaletteClipboardOverlay.k_OverlayId, out Overlay overlay))
  207. return;
  208. var tilePaletteClipboardOverlay = overlay as TilePaletteClipboardOverlay;
  209. if (tilePaletteClipboardOverlay == null)
  210. return;
  211. tilePaletteClipboardOverlay.TogglePopup(GridPaintingState.lastSceneViewMousePosition);
  212. }
  213. [Shortcut(ShortcutIds.k_ToggleSceneViewBrushPick, typeof(TilemapEditorTool.ShortcutContext), KeyCode.Quote)]
  214. static void ToggleSceneViewBrushPick()
  215. {
  216. var sceneView = SceneView.lastActiveSceneView;
  217. if (sceneView == null)
  218. return;
  219. if (!sceneView.TryGetOverlay(TilePaletteBrushPickOverlay.k_OverlayId, out Overlay overlay))
  220. return;
  221. var tilePaletteBrushPickOverlay = overlay as TilePaletteBrushPickOverlay;
  222. if (tilePaletteBrushPickOverlay == null)
  223. return;
  224. tilePaletteBrushPickOverlay.TogglePopup(GridPaintingState.lastSceneViewMousePosition);
  225. }
  226. internal static void PreferencesGUI()
  227. {
  228. using (new SettingsWindow.GUIScope())
  229. {
  230. EditorGUI.BeginChangeCheck();
  231. var val = (TilePaletteActiveTargetsProperties.PrefabEditModeSettings)EditorGUILayout.EnumPopup(TilePaletteActiveTargetsProperties.targetEditModeDialogLabel
  232. , (TilePaletteActiveTargetsProperties.PrefabEditModeSettings)EditorPrefs.GetInt(TilePaletteActiveTargetsProperties.targetEditModeEditorPref
  233. , 0));
  234. if (EditorGUI.EndChangeCheck())
  235. {
  236. EditorPrefs.SetInt(TilePaletteActiveTargetsProperties.targetEditModeEditorPref, (int)val);
  237. }
  238. EditorGUI.BeginChangeCheck();
  239. var val2 = EditorGUILayout.Toggle(Styles.mouseGridPositionAtZ, GridPaintingState.gridBrushMousePositionAtZ);
  240. if (EditorGUI.EndChangeCheck())
  241. {
  242. GridPaintingState.gridBrushMousePositionAtZ = val2;
  243. }
  244. }
  245. }
  246. private static List<GridPaintPaletteWindow> s_Instances;
  247. private static List<GridPaintPaletteWindow> instances
  248. {
  249. get
  250. {
  251. if (s_Instances == null)
  252. s_Instances = new List<GridPaintPaletteWindow>();
  253. return s_Instances;
  254. }
  255. }
  256. /// <summary>
  257. /// Whether the GridPaintPaletteWindow is active in the Editor
  258. /// </summary>
  259. public static bool isActive
  260. {
  261. get
  262. {
  263. return s_Instances != null && s_Instances.Count > 0;
  264. }
  265. }
  266. internal GameObject palette
  267. {
  268. get => GridPaintingState.palette;
  269. set => GridPaintingState.palette = value;
  270. }
  271. internal GameObject paletteInstance => clipboardView.paletteInstance;
  272. internal GridPaintPaletteClipboard clipboardView
  273. {
  274. get => m_ClipboardSplitView.paletteElement.clipboardView;
  275. }
  276. private Vector2 m_BrushScroll;
  277. private bool m_IsUtilityWindow;
  278. private VisualElement m_ToolbarVisualElement;
  279. private VisualElement m_ActiveTargetsVisualElement;
  280. private GridPaintPaletteWindowSplitView m_ClipboardSplitView;
  281. private void CreateGUI()
  282. {
  283. var styleSheet = AssetDatabase.LoadAssetAtPath<StyleSheet>(UIStyles.styleSheetPath);
  284. var skinStyleSheet = EditorGUIUtility.isProSkin
  285. ? AssetDatabase.LoadAssetAtPath<StyleSheet>(UIStyles.darkStyleSheetPath)
  286. : AssetDatabase.LoadAssetAtPath<StyleSheet>(UIStyles.lightStyleSheetPath);
  287. if (styleSheet == null || skinStyleSheet == null)
  288. return;
  289. m_ToolbarVisualElement = new GridPaintingToolbar(this);
  290. m_ActiveTargetsVisualElement = new GridPaintPaletteWindowActiveTargets()
  291. {
  292. name = "activeTargetsDropdown",
  293. };
  294. m_ClipboardSplitView = new GridPaintPaletteWindowSplitView(tilePaletteVerticalBrushSplit);
  295. var root = rootVisualElement;
  296. root.Add(m_ToolbarVisualElement);
  297. root.Add(m_ActiveTargetsVisualElement);
  298. root.Add(m_ClipboardSplitView);
  299. root.styleSheetList.Add(styleSheet);
  300. root.styleSheetList.Add(skinStyleSheet);
  301. root.AddToClassList(UIStyles.ussClassName);
  302. root.style.minHeight = k_MinClipboardHeight;
  303. root.AddManipulator(new TilePaletteContextMenuHandler(DoContextMenu));
  304. m_ToolbarVisualElement.AddManipulator(new TilePaletteContextMenuHandler(DoContextMenu));
  305. m_ActiveTargetsVisualElement.AddManipulator(new TilePaletteContextMenuHandler(DoContextMenu));
  306. m_ClipboardSplitView.AddManipulator(new TilePaletteDragHandler(DragUpdatedForConvertGridPrefabToPalette, DragPerformedForConvertGridPrefabToPalette));
  307. }
  308. private void OnGUI()
  309. {
  310. // Keep repainting until all previews are loaded
  311. if (AssetPreview.IsLoadingAssetPreviews())
  312. Repaint();
  313. // Release keyboard focus on click to empty space
  314. if (Event.current.type == EventType.MouseDown)
  315. GUIUtility.keyboardControl = 0;
  316. }
  317. private void DoContextMenu()
  318. {
  319. GenericMenu pm = new GenericMenu();
  320. if (GridPaintingState.scenePaintTarget != null)
  321. pm.AddItem(Styles.selectPaintTarget, false, SelectPaintTarget);
  322. else
  323. pm.AddDisabledItem(Styles.selectPaintTarget);
  324. if (palette != null)
  325. pm.AddItem(Styles.selectPalettePrefab, false, SelectPaletteAsset);
  326. else
  327. pm.AddDisabledItem(Styles.selectPalettePrefab);
  328. if (clipboardView.activeTile != null)
  329. pm.AddItem(Styles.selectTileAsset, false, SelectTileAsset);
  330. else
  331. pm.AddDisabledItem(Styles.selectTileAsset);
  332. pm.AddSeparator("");
  333. if (clipboardView.unlocked)
  334. pm.AddItem(Styles.lockPaletteEditing, false, FlipLocked);
  335. else
  336. pm.AddItem(Styles.unlockPaletteEditing, false, FlipLocked);
  337. if (tilePaletteVerticalBrushSplit)
  338. pm.AddItem(Styles.horizontalBrushSplit, false, FlipShowToolbarInSceneView);
  339. else
  340. pm.AddItem(Styles.verticalBrushSplit, false, FlipShowToolbarInSceneView);
  341. pm.AddItem(Styles.openTilePalettePreferences, false, OpenTilePalettePreferences);
  342. pm.AddItem(Styles.openAsDockableWindow, !m_IsUtilityWindow, () => OpenWindow(false));
  343. pm.AddItem(Styles.openAsFloatingWindow, m_IsUtilityWindow, () => OpenWindow(true));
  344. pm.ShowAsContext();
  345. }
  346. private void OpenWindow(bool utility)
  347. {
  348. Close();
  349. GridPaintPaletteWindow w = GetWindow<GridPaintPaletteWindow>(utility, Styles.tilePalette.text, true);
  350. w.m_IsUtilityWindow = utility;
  351. }
  352. private void OpenTilePalettePreferences()
  353. {
  354. var settingsWindow = SettingsWindow.Show(SettingsScope.User);
  355. settingsWindow.FilterProviders(TilePaletteActiveTargetsProperties.tilePalettePreferencesLookup);
  356. }
  357. private void FlipLocked()
  358. {
  359. m_ClipboardSplitView.paletteElement.clipboardUnlocked = !m_ClipboardSplitView.paletteElement.clipboardUnlocked;
  360. }
  361. private void FlipShowToolbarInSceneView()
  362. {
  363. var state = !m_ClipboardSplitView.isVerticalOrientation;
  364. tilePaletteVerticalBrushSplit = state;
  365. m_ClipboardSplitView.isVerticalOrientation = state;
  366. SceneView.RepaintAll();
  367. }
  368. private void SelectPaintTarget()
  369. {
  370. Selection.activeObject = GridPaintingState.scenePaintTarget;
  371. }
  372. private void SelectPaletteAsset()
  373. {
  374. Selection.activeObject = palette;
  375. }
  376. private void SelectTileAsset()
  377. {
  378. Selection.activeObject = clipboardView.activeTile;
  379. }
  380. internal void OnEnable()
  381. {
  382. instances.Add(this);
  383. GridSelection.gridSelectionChanged += OnGridSelectionChanged;
  384. EditorApplication.projectWasLoaded += OnProjectLoaded;
  385. ToolManager.activeToolChanged += ActiveToolChanged;
  386. wantsMouseMove = true;
  387. wantsMouseEnterLeaveWindow = true;
  388. minSize = k_MinWindowSize;
  389. GridPaintingState.RegisterPainterInterest(this);
  390. }
  391. private void OnProjectLoaded()
  392. {
  393. GridPaintingState.RegisterShortcutContext();
  394. }
  395. private void OnGridSelectionChanged()
  396. {
  397. Repaint();
  398. }
  399. internal void OnDisable()
  400. {
  401. GridPaintingState.UnregisterPainterInterest(this);
  402. ToolManager.activeToolChanged -= ActiveToolChanged;
  403. GridSelection.gridSelectionChanged -= OnGridSelectionChanged;
  404. EditorApplication.projectWasLoaded -= OnProjectLoaded;
  405. instances.Remove(this);
  406. }
  407. private void ActiveToolChanged()
  408. {
  409. Repaint();
  410. }
  411. private bool ValidateDragAndDrop()
  412. {
  413. if (DragAndDrop.objectReferences.Length != 1)
  414. return false;
  415. var draggedObject = DragAndDrop.objectReferences[0];
  416. if (!PrefabUtility.IsPartOfRegularPrefab(draggedObject))
  417. return false;
  418. return true;
  419. }
  420. private void DragUpdatedForConvertGridPrefabToPalette()
  421. {
  422. if (!ValidateDragAndDrop())
  423. return;
  424. DragAndDrop.visualMode = DragAndDropVisualMode.Generic;
  425. }
  426. private void DragPerformedForConvertGridPrefabToPalette()
  427. {
  428. if (!ValidateDragAndDrop())
  429. return;
  430. var draggedObject = DragAndDrop.objectReferences[0];
  431. var path = AssetDatabase.GetAssetPath(draggedObject);
  432. var assets = AssetDatabase.LoadAllAssetsAtPath(path);
  433. bool hasNewPaletteAsset = false;
  434. Grid gridPrefab = null;
  435. foreach (var asset in assets)
  436. {
  437. var gridPalette = asset as GridPalette;
  438. hasNewPaletteAsset |= gridPalette != null;
  439. GameObject go = asset as GameObject;
  440. if (go != null)
  441. {
  442. var grid = go.GetComponent<Grid>();
  443. if (grid != null)
  444. gridPrefab = grid;
  445. }
  446. }
  447. if (!hasNewPaletteAsset && gridPrefab != null)
  448. {
  449. var cellLayout = gridPrefab.cellLayout;
  450. var cellSizing = (cellLayout == GridLayout.CellLayout.Rectangle
  451. || cellLayout == GridLayout.CellLayout.Hexagon)
  452. ? GridPalette.CellSizing.Automatic
  453. : GridPalette.CellSizing.Manual;
  454. var newPalette = GridPaletteUtility.CreateGridPalette(cellSizing);
  455. AssetDatabase.AddObjectToAsset(newPalette, path);
  456. AssetDatabase.ForceReserializeAssets(new[] {path});
  457. AssetDatabase.SaveAssets();
  458. Event.current.Use();
  459. GUIUtility.ExitGUI();
  460. }
  461. }
  462. internal void ResetZPosition()
  463. {
  464. GridPaintingState.gridBrush.ResetZPosition();
  465. GridPaintingState.lastActiveGrid.ResetZPosition();
  466. }
  467. [MenuItem("Window/2D/Tile Palette", false, 2)]
  468. internal static void OpenTilemapPalette()
  469. {
  470. GridPaintPaletteWindow w = GetWindow<GridPaintPaletteWindow>();
  471. w.titleContent = Styles.tilePalette;
  472. w.m_IsUtilityWindow = false;
  473. }
  474. }
  475. }