暫無描述
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.

TilePaletteActiveTargetsDropdownMenu.cs 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. using System;
  2. using UnityEngine;
  3. using UnityEngine.UIElements;
  4. namespace UnityEditor.Tilemaps
  5. {
  6. internal class TilePaletteActiveTargetsDropdownMenu : IGenericMenu
  7. {
  8. private const float k_ActiveTargetDropdownWidth = 200f;
  9. private GridPaintTargetsDropdown m_Dropdown;
  10. private TilePaletteCreateTargetsDropdownMenu m_Menu;
  11. public TilePaletteActiveTargetsDropdownMenu()
  12. {
  13. var index =
  14. GridPaintingState.validTargets != null && GridPaintingState.scenePaintTarget != null
  15. ? Array.IndexOf(GridPaintingState.validTargets, GridPaintingState.scenePaintTarget)
  16. : -1;
  17. var menuData = new GridPaintTargetsDropdown.MenuItemProvider();
  18. m_Dropdown = new GridPaintTargetsDropdown(menuData, index, null, SelectTarget, HoverTarget, k_ActiveTargetDropdownWidth);
  19. }
  20. private void OnClose()
  21. {
  22. PopupWindow.Show(default, m_Dropdown);
  23. }
  24. public void AddItem(string itemName, bool isChecked, System.Action action)
  25. {
  26. }
  27. public void AddItem(string itemName, bool isChecked, System.Action<object> action, object data)
  28. {
  29. }
  30. public void AddDisabledItem(string itemName, bool isChecked)
  31. {
  32. }
  33. public void AddSeparator(string path)
  34. {
  35. }
  36. public void DropDown(Rect position, VisualElement targetElement = null, bool anchored = false)
  37. {
  38. PopupWindow.Show(position, m_Dropdown);
  39. }
  40. private static void SelectTarget(int i, object o)
  41. {
  42. if ((GridPaintingState.validTargets == null && i > 0)
  43. || (GridPaintingState.validTargets != null && i >= GridPaintingState.validTargets.Length))
  44. {
  45. return;
  46. }
  47. var obj = o as GameObject;
  48. var isPrefabInstance = TilePalettePrefabUtility.IsObjectPrefabInstance(obj);
  49. if (isPrefabInstance)
  50. {
  51. var editMode = (TilePaletteActiveTargetsProperties.PrefabEditModeSettings)EditorPrefs.GetInt(TilePaletteActiveTargetsProperties.targetEditModeEditorPref, 0);
  52. switch (editMode)
  53. {
  54. case TilePaletteActiveTargetsProperties.PrefabEditModeSettings.EnableDialog:
  55. {
  56. var option = EditorUtility.DisplayDialogComplex(TilePaletteActiveTargetsProperties.targetEditModeDialogTitle
  57. , TilePaletteActiveTargetsProperties.targetEditModeDialogMessage
  58. , TilePaletteActiveTargetsProperties.targetEditModeDialogYes
  59. , TilePaletteActiveTargetsProperties.targetEditModeDialogNo
  60. , TilePaletteActiveTargetsProperties.targetEditModeDialogChange);
  61. switch (option)
  62. {
  63. case 0:
  64. TilePalettePrefabUtility.GoToPrefabMode(obj);
  65. return;
  66. case 1:
  67. // Do nothing here for "No"
  68. break;
  69. case 2:
  70. var settingsWindow = SettingsWindow.Show(SettingsScope.User);
  71. settingsWindow.FilterProviders(TilePaletteActiveTargetsProperties.targetEditModeLookup);
  72. break;
  73. }
  74. }
  75. break;
  76. case TilePaletteActiveTargetsProperties.PrefabEditModeSettings.EditInPrefabMode:
  77. TilePalettePrefabUtility.GoToPrefabMode(obj);
  78. return;
  79. }
  80. }
  81. GridPaintingState.scenePaintTarget = obj;
  82. }
  83. private void HoverTarget(int index, Rect itemRect)
  84. {
  85. var targets = GridPaintingState.validTargets;
  86. var count = 0;
  87. if (targets != null)
  88. count = targets.Length;
  89. if (index < count)
  90. {
  91. if (m_Menu != null)
  92. {
  93. m_Menu.Close();
  94. m_Menu = null;
  95. }
  96. return;
  97. }
  98. if (!GridPaintCreateTargetsDropdown.IsOpen)
  99. {
  100. m_Menu = new TilePaletteCreateTargetsDropdownMenu(OnClose);
  101. var popupRect = itemRect;
  102. popupRect.x += itemRect.width;
  103. popupRect.y -= itemRect.height;
  104. m_Menu.DropDown(popupRect);
  105. }
  106. }
  107. }
  108. }