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