Ingen beskrivning
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.

TilemapFocusModeUtility.cs 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. using UnityEditor.SceneManagement;
  2. using UnityEngine;
  3. using UnityEngine.Tilemaps;
  4. namespace UnityEditor.Tilemaps
  5. {
  6. internal class TilemapFocusModeUtility
  7. {
  8. internal enum TilemapFocusMode
  9. {
  10. None = 0,
  11. Tilemap = 1,
  12. Grid = 2
  13. }
  14. private static readonly string k_TilemapFocusModeEditorPref = "TilemapFocusMode";
  15. internal static TilemapFocusMode focusMode
  16. {
  17. get
  18. {
  19. return (TilemapFocusMode)EditorPrefs.GetInt(k_TilemapFocusModeEditorPref, (int)TilemapFocusMode.None);
  20. }
  21. set
  22. {
  23. EditorPrefs.SetInt(k_TilemapFocusModeEditorPref, (int)value);
  24. }
  25. }
  26. internal static void OnSceneViewGUI(SceneView sceneView)
  27. {
  28. if ((GridPaintingState.defaultBrush == null || GridPaintingState.scenePaintTarget == null) && focusMode != TilemapFocusMode.None)
  29. {
  30. // case 946284: Disable Focus if focus mode is set but there is nothing to focus on
  31. DisableFocus();
  32. focusMode = TilemapFocusMode.None;
  33. }
  34. }
  35. internal static void OnScenePaintTargetChanged(GameObject scenePaintTarget)
  36. {
  37. DisableFocus();
  38. EnableFocus();
  39. SceneView.RepaintAll();
  40. }
  41. internal static void OnBrushChanged(GridBrushBase brush)
  42. {
  43. DisableFocus();
  44. if (brush is GridBrush)
  45. EnableFocus();
  46. SceneView.RepaintAll();
  47. }
  48. internal static void SetFocusMode(TilemapFocusMode tilemapFocusMode)
  49. {
  50. if (tilemapFocusMode != focusMode)
  51. {
  52. DisableFocus();
  53. focusMode = tilemapFocusMode;
  54. EnableFocus();
  55. }
  56. }
  57. private static void EnableFocus()
  58. {
  59. if (GridPaintingState.scenePaintTarget == null)
  60. return;
  61. switch (focusMode)
  62. {
  63. case TilemapFocusMode.Tilemap:
  64. {
  65. FilterSingleSceneObjectInScene(GridPaintingState.scenePaintTarget.GetInstanceID());
  66. break;
  67. }
  68. case TilemapFocusMode.Grid:
  69. {
  70. Tilemap tilemap = GridPaintingState.scenePaintTarget.GetComponent<Tilemap>();
  71. if (tilemap != null && tilemap.layoutGrid != null)
  72. {
  73. FilterSingleSceneObjectInScene(tilemap.layoutGrid.gameObject.GetInstanceID());
  74. }
  75. break;
  76. }
  77. }
  78. }
  79. private static void DisableFocus()
  80. {
  81. if (focusMode == TilemapFocusMode.None)
  82. return;
  83. StageHandle currentStageHandle = StageUtility.GetCurrentStageHandle();
  84. if (currentStageHandle.IsValid() && !currentStageHandle.isMainStage)
  85. {
  86. HierarchyProperty.ClearSceneObjectsFilterInScene(new[] { currentStageHandle.customScene });
  87. }
  88. else
  89. {
  90. HierarchyProperty.ClearSceneObjectsFilter();
  91. }
  92. if (SceneView.lastActiveSceneView != null)
  93. {
  94. SceneView.lastActiveSceneView.SetSceneViewFiltering(false);
  95. SceneView.lastActiveSceneView.Repaint();
  96. }
  97. }
  98. private static void FilterSingleSceneObjectInScene(int instanceID)
  99. {
  100. if (SceneView.lastActiveSceneView != null)
  101. SceneView.lastActiveSceneView.SetSceneViewFiltering(true);
  102. StageHandle currentStageHandle = StageUtility.GetCurrentStageHandle();
  103. if (currentStageHandle.IsValid() && !currentStageHandle.isMainStage)
  104. {
  105. HierarchyProperty.FilterSingleSceneObjectInScene(instanceID
  106. , false
  107. , new[] { currentStageHandle.customScene });
  108. }
  109. else
  110. {
  111. HierarchyProperty.FilterSingleSceneObject(instanceID, false);
  112. }
  113. if (SceneView.lastActiveSceneView != null)
  114. SceneView.lastActiveSceneView.Repaint();
  115. }
  116. }
  117. }