123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- using UnityEditor.SceneManagement;
- using UnityEngine;
- using UnityEngine.Tilemaps;
-
- namespace UnityEditor.Tilemaps
- {
- internal class TilemapFocusModeUtility
- {
- internal enum TilemapFocusMode
- {
- None = 0,
- Tilemap = 1,
- Grid = 2
- }
- private static readonly string k_TilemapFocusModeEditorPref = "TilemapFocusMode";
-
- internal static TilemapFocusMode focusMode
- {
- get
- {
- return (TilemapFocusMode)EditorPrefs.GetInt(k_TilemapFocusModeEditorPref, (int)TilemapFocusMode.None);
- }
- set
- {
- EditorPrefs.SetInt(k_TilemapFocusModeEditorPref, (int)value);
- }
- }
-
- internal static void OnSceneViewGUI(SceneView sceneView)
- {
- if ((GridPaintingState.defaultBrush == null || GridPaintingState.scenePaintTarget == null) && focusMode != TilemapFocusMode.None)
- {
- // case 946284: Disable Focus if focus mode is set but there is nothing to focus on
- DisableFocus();
- focusMode = TilemapFocusMode.None;
- }
- }
-
- internal static void OnScenePaintTargetChanged(GameObject scenePaintTarget)
- {
- DisableFocus();
- EnableFocus();
- SceneView.RepaintAll();
- }
-
- internal static void OnBrushChanged(GridBrushBase brush)
- {
- DisableFocus();
- if (brush is GridBrush)
- EnableFocus();
- SceneView.RepaintAll();
- }
-
- internal static void SetFocusMode(TilemapFocusMode tilemapFocusMode)
- {
- if (tilemapFocusMode != focusMode)
- {
- DisableFocus();
- focusMode = tilemapFocusMode;
- EnableFocus();
- }
- }
-
- private static void EnableFocus()
- {
- if (GridPaintingState.scenePaintTarget == null)
- return;
-
- switch (focusMode)
- {
- case TilemapFocusMode.Tilemap:
- {
- FilterSingleSceneObjectInScene(GridPaintingState.scenePaintTarget.GetInstanceID());
- break;
- }
- case TilemapFocusMode.Grid:
- {
- Tilemap tilemap = GridPaintingState.scenePaintTarget.GetComponent<Tilemap>();
- if (tilemap != null && tilemap.layoutGrid != null)
- {
- FilterSingleSceneObjectInScene(tilemap.layoutGrid.gameObject.GetInstanceID());
- }
- break;
- }
- }
- }
-
- private static void DisableFocus()
- {
- if (focusMode == TilemapFocusMode.None)
- return;
-
- StageHandle currentStageHandle = StageUtility.GetCurrentStageHandle();
- if (currentStageHandle.IsValid() && !currentStageHandle.isMainStage)
- {
- HierarchyProperty.ClearSceneObjectsFilterInScene(new[] { currentStageHandle.customScene });
- }
- else
- {
- HierarchyProperty.ClearSceneObjectsFilter();
- }
-
- if (SceneView.lastActiveSceneView != null)
- {
- SceneView.lastActiveSceneView.SetSceneViewFiltering(false);
- SceneView.lastActiveSceneView.Repaint();
- }
- }
-
- private static void FilterSingleSceneObjectInScene(int instanceID)
- {
- if (SceneView.lastActiveSceneView != null)
- SceneView.lastActiveSceneView.SetSceneViewFiltering(true);
-
- StageHandle currentStageHandle = StageUtility.GetCurrentStageHandle();
- if (currentStageHandle.IsValid() && !currentStageHandle.isMainStage)
- {
- HierarchyProperty.FilterSingleSceneObjectInScene(instanceID
- , false
- , new[] { currentStageHandle.customScene });
- }
- else
- {
- HierarchyProperty.FilterSingleSceneObject(instanceID, false);
- }
-
- if (SceneView.lastActiveSceneView != null)
- SceneView.lastActiveSceneView.Repaint();
- }
- }
- }
|