예제 #1
0
        public void SetActiveBrushCallback_DoesNotCallWhenSetWithSameBrush()
        {
            CreatePaletteWindow();

            GridPaintingState.gridBrush = GetDefaultBrush();
            var           brushChangedCount    = 0;
            GridBrushBase brushToChange        = null;
            var           brushChangedDelegate = new Action <GridBrushBase>(changedBrush =>
            {
                Assert.AreEqual(brushToChange, changedBrush);
                ++brushChangedCount;
            });

            GridPaintingState.brushChanged += brushChangedDelegate;
            try
            {
                var customBrush = GetCustomBrush();
                brushToChange = customBrush;
                GridPaintingState.gridBrush = customBrush;
                Assert.AreEqual(1, brushChangedCount);
                GridPaintingState.gridBrush = customBrush;
                Assert.AreEqual(1, brushChangedCount);
            }
            finally
            {
                GridPaintingState.brushChanged -= brushChangedDelegate;
            }
        }
예제 #2
0
        private string GetBrushDropdownName(GridBrushBase brush)
        {
            string result;

            if (!GridPaletteBrushes.IsLibraryBrush(brush))
            {
                result = brush.name;
            }
            else
            {
                CustomGridBrushAttribute[] array = brush.GetType().GetCustomAttributes(typeof(CustomGridBrushAttribute), false) as CustomGridBrushAttribute[];
                if (array != null && array.Length > 0 && array[0].defaultName.Length > 0)
                {
                    result = array[0].defaultName;
                }
                else if (brush.GetType() == typeof(GridBrush))
                {
                    result = "Default Brush";
                }
                else
                {
                    result = brush.GetType().Name;
                }
            }
            return(result);
        }
 private void CallOnPaintSceneGUI(Vector2Int position)
 {
     if (this.unlocked || EditMode.editMode == EditMode.SceneViewEditMode.GridSelect || EditMode.editMode == EditMode.SceneViewEditMode.GridPicking)
     {
         bool flag = GridSelection.active && GridSelection.target == this.brushTarget;
         if (flag || !(GridPaintingState.activeGrid != this))
         {
             GridBrushBase gridBrush = GridPaintingState.gridBrush;
             if (!(gridBrush == null))
             {
                 RectInt marqueeRect = new RectInt(position, new Vector2Int(1, 1));
                 if (this.m_MarqueeStart.HasValue)
                 {
                     marqueeRect = GridEditorUtility.GetMarqueeRect(position, this.m_MarqueeStart.Value);
                 }
                 else if (flag)
                 {
                     marqueeRect = new RectInt(GridSelection.position.xMin, GridSelection.position.yMin, GridSelection.position.size.x, GridSelection.position.size.y);
                 }
                 GridLayout gridLayout = (!(this.tilemap != null)) ? this.grid : this.tilemap;
                 BoundsInt  position2  = new BoundsInt(new Vector3Int(marqueeRect.x, marqueeRect.y, 0), new Vector3Int(marqueeRect.width, marqueeRect.height, 1));
                 if (GridPaintingState.activeBrushEditor != null)
                 {
                     GridPaintingState.activeBrushEditor.OnPaintSceneGUI(gridLayout, this.brushTarget, position2, PaintableGrid.EditModeToBrushTool(EditMode.editMode), this.m_MarqueeStart.HasValue || base.executing);
                 }
                 else
                 {
                     GridBrushEditorBase.OnPaintSceneGUIInternal(gridLayout, Selection.activeGameObject, position2, PaintableGrid.EditModeToBrushTool(EditMode.editMode), this.m_MarqueeStart.HasValue || base.executing);
                 }
             }
         }
     }
 }
        private void RefreshBrushesCache()
        {
            if (m_Brushes == null)
            {
                m_Brushes = new List <GridBrushBase>();
            }

            GridBrushBase defaultBrush = null;

            if (m_Brushes.Count == 0 || !(m_Brushes[0] is GridBrush))
            {
                System.Type defaultType = GetDefaultBrushType();
                defaultBrush = LoadOrCreateLibraryGridBrushAsset(defaultType);
                m_Brushes.Insert(0, defaultBrush);
                m_Brushes[0].name = GetBrushDropdownName(m_Brushes[0]);
            }

            var editorAssemblies = EditorAssemblies.loadedAssemblies;

            foreach (var editorAssembly in editorAssemblies)
            {
                try
                {
                    IEnumerable <Type> brushTypes = editorAssembly.GetTypes().Where(t => t != typeof(GridBrushBase) && t != typeof(GridBrush) && typeof(GridBrushBase).IsAssignableFrom(t));
                    foreach (var brushType in brushTypes)
                    {
                        if (IsDefaultInstanceVisibleGridBrushType(brushType))
                        {
                            var brush = LoadOrCreateLibraryGridBrushAsset(brushType);
                            if (brush != null)
                            {
                                m_Brushes.Add(brush);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Debug.Log(string.Format("TilePalette failed to get types from {0}. Error: {1}", editorAssembly.FullName, ex.Message));
                }
            }

            string[] guids = AssetDatabase.FindAssets("t:GridBrushBase");
            foreach (string guid in guids)
            {
                string path  = AssetDatabase.GUIDToAssetPath(guid);
                var    brush = AssetDatabase.LoadAssetAtPath(path, typeof(GridBrushBase)) as GridBrushBase;
                if (brush != null && IsAssetVisibleGridBrushType(brush.GetType()))
                {
                    m_Brushes.Add(brush);
                }
            }

            m_BrushNames = new string[m_Brushes.Count];
            for (int i = 0; i < m_Brushes.Count; i++)
            {
                m_BrushNames[i] = m_Brushes[i].name;
            }
        }
예제 #5
0
 private void RefreshBrushesCache()
 {
     if (this.m_Brushes == null)
     {
         this.m_Brushes = new List <GridBrushBase>();
     }
     if (this.m_Brushes.Count == 0 || !(this.m_Brushes[0] is GridBrush))
     {
         Type          defaultBrushType = GridPaletteBrushes.GetDefaultBrushType();
         GridBrushBase item             = this.LoadOrCreateLibraryGridBrushAsset(defaultBrushType);
         this.m_Brushes.Insert(0, item);
         this.m_Brushes[0].name = this.GetBrushDropdownName(this.m_Brushes[0]);
     }
     Assembly[] loadedAssemblies = EditorAssemblies.loadedAssemblies;
     Assembly[] array            = loadedAssemblies;
     for (int i = 0; i < array.Length; i++)
     {
         Assembly assembly = array[i];
         try
         {
             IEnumerable <Type> enumerable = from t in assembly.GetTypes()
                                             where t != typeof(GridBrushBase) && t != typeof(GridBrush) && typeof(GridBrushBase).IsAssignableFrom(t)
                                             select t;
             foreach (Type current in enumerable)
             {
                 if (this.IsDefaultInstanceVisibleGridBrushType(current))
                 {
                     GridBrushBase gridBrushBase = this.LoadOrCreateLibraryGridBrushAsset(current);
                     if (gridBrushBase != null)
                     {
                         this.m_Brushes.Add(gridBrushBase);
                     }
                 }
             }
         }
         catch (Exception ex)
         {
             Debug.Log(string.Format("TilePalette failed to get types from {0}. Error: {1}", assembly.FullName, ex.Message));
         }
     }
     string[] array2 = AssetDatabase.FindAssets("t:GridBrushBase");
     string[] array3 = array2;
     for (int j = 0; j < array3.Length; j++)
     {
         string        guid           = array3[j];
         string        assetPath      = AssetDatabase.GUIDToAssetPath(guid);
         GridBrushBase gridBrushBase2 = AssetDatabase.LoadAssetAtPath(assetPath, typeof(GridBrushBase)) as GridBrushBase;
         if (gridBrushBase2 != null && this.IsAssetVisibleGridBrushType(gridBrushBase2.GetType()))
         {
             this.m_Brushes.Add(gridBrushBase2);
         }
     }
     this.m_BrushNames = new string[this.m_Brushes.Count];
     for (int k = 0; k < this.m_Brushes.Count; k++)
     {
         this.m_BrushNames[k] = this.m_Brushes[k].name;
     }
 }
예제 #6
0
 private void OnBrushChanged(GridBrushBase brush)
 {
     DisableFocus();
     if (brush is GridBrush)
     {
         EnableFocus();
     }
     SceneView.RepaintAll();
 }
        private GridBrushBase CreateLibraryGridBrushAsset(Type brushType)
        {
            GridBrushBase brush = ScriptableObject.CreateInstance(brushType) as GridBrushBase;

            brush.hideFlags = HideFlags.DontSave;
            brush.name      = GetBrushDropdownName(brush);
            SaveLibraryGridBrushAsset(brush);
            return(brush);
        }
예제 #8
0
        private GridBrushBase CreateLibraryGridBrushAsset(Type brushType)
        {
            GridBrushBase gridBrushBase = ScriptableObject.CreateInstance(brushType) as GridBrushBase;

            gridBrushBase.hideFlags = HideFlags.DontSave;
            gridBrushBase.name      = this.GetBrushDropdownName(gridBrushBase);
            this.SaveLibraryGridBrushAsset(gridBrushBase);
            return(gridBrushBase);
        }
        private void SaveLibraryGridBrushAsset(GridBrushBase brush)
        {
            var    gridBrushPath = GenerateGridBrushInstanceLibraryPath(brush.GetType());
            string folderPath    = Path.GetDirectoryName(gridBrushPath);

            if (!Directory.Exists(folderPath))
            {
                Directory.CreateDirectory(folderPath);
            }
            InternalEditorUtility.SaveToSerializedFileAndForget(new[] { brush }, gridBrushPath, true);
        }
예제 #10
0
    public bool Build(GridBrushBase Brush, int x, int y)
    {
        var pos = new Vector3Int(x, y, 0);

        if (!AstarPath.active.graphs[0].GetNearest(pos).node.Walkable)
        {
            return(false);
        }

        Brush.Paint(GridObject.GetComponent <Grid>(), Obstacles.gameObject, pos);
        //AstarPath.active.graphs[0].GetNearest(new Vector3(x, y)).node.Walkable = false;
        return(true);
    }
예제 #11
0
        private void SaveLibraryGridBrushAsset(GridBrushBase brush)
        {
            string path          = this.GenerateGridBrushInstanceLibraryPath(brush.GetType());
            string directoryName = Path.GetDirectoryName(path);

            if (!Directory.Exists(directoryName))
            {
                Directory.CreateDirectory(directoryName);
            }
            InternalEditorUtility.SaveToSerializedFileAndForget(new GridBrushBase[]
            {
                brush
            }, path, true);
        }
        private GridBrushBase LoadOrCreateLibraryGridBrushAsset(Type brushType)
        {
            var serializedObjects = InternalEditorUtility.LoadSerializedFileAndForget(GenerateGridBrushInstanceLibraryPath(brushType));

            if (serializedObjects != null && serializedObjects.Length > 0)
            {
                GridBrushBase brush = serializedObjects[0] as GridBrushBase;
                if (brush != null && brush.GetType() == brushType)
                {
                    return(brush);
                }
            }
            return(CreateLibraryGridBrushAsset(brushType));
        }
        private void CallOnPaintSceneGUI(Vector2Int position)
        {
            if (!unlocked && !TilemapEditorTool.IsActive(typeof(SelectTool)) && !TilemapEditorTool.IsActive(typeof(PickingTool)))
            {
                return;
            }

            bool hasSelection = GridSelection.active && GridSelection.target == brushTarget;

            if (!hasSelection && GridPaintingState.activeGrid != this)
            {
                return;
            }

            GridBrushBase brush = GridPaintingState.gridBrush;

            if (brush == null)
            {
                return;
            }

            var rect = new RectInt(position, new Vector2Int(1, 1));

            if (m_MarqueeStart.HasValue)
            {
                rect = GridEditorUtility.GetMarqueeRect(position, m_MarqueeStart.Value);
            }
            else if (hasSelection)
            {
                rect = new RectInt(GridSelection.position.xMin, GridSelection.position.yMin, GridSelection.position.size.x, GridSelection.position.size.y);
            }

            var       gridLayout  = tilemap != null ? tilemap.layoutGrid : grid as GridLayout;
            BoundsInt brushBounds = new BoundsInt(new Vector3Int(rect.x, rect.y, zPosition), new Vector3Int(rect.width, rect.height, 1));

            if (GridPaintingState.activeBrushEditor != null)
            {
                GridPaintingState.activeBrushEditor.OnPaintSceneGUI(gridLayout, brushTarget, brushBounds,
                                                                    EditTypeToBrushTool(UnityEditor.EditorTools.ToolManager.activeToolType),
                                                                    m_MarqueeStart.HasValue || executing);
            }
            else // Fallback when user hasn't defined custom editor
            {
                GridBrushEditorBase.OnPaintSceneGUIInternal(gridLayout, Selection.activeGameObject, brushBounds,
                                                            EditTypeToBrushTool(UnityEditor.EditorTools.ToolManager.activeToolType),
                                                            m_MarqueeStart.HasValue || executing);
            }
        }
예제 #14
0
        private GridBrushBase LoadOrCreateLibraryGridBrushAsset(Type brushType)
        {
            UnityEngine.Object[] array = InternalEditorUtility.LoadSerializedFileAndForget(this.GenerateGridBrushInstanceLibraryPath(brushType));
            GridBrushBase        result;

            if (array != null && array.Length > 0)
            {
                GridBrushBase gridBrushBase = array[0] as GridBrushBase;
                if (gridBrushBase != null && gridBrushBase.GetType() == brushType)
                {
                    result = gridBrushBase;
                    return(result);
                }
            }
            result = this.CreateLibraryGridBrushAsset(brushType);
            return(result);
        }
예제 #15
0
        private void RefreshBrushesCache()
        {
            if (m_Brushes == null)
            {
                m_Brushes = new List <GridBrushBase>();
            }

            if (m_Brushes.Count == 0 || !(m_Brushes[0] is GridBrush))
            {
                Type          defaultType  = GetDefaultBrushType();
                GridBrushBase defaultBrush = LoadOrCreateLibraryGridBrushAsset(defaultType);
                m_Brushes.Insert(0, defaultBrush);
                m_Brushes[0].name = GetBrushDropdownName(m_Brushes[0]);
            }

            var brushTypes = TypeCache.GetTypesDerivedFrom <GridBrushBase>().Where(t => t != typeof(GridBrush));

            foreach (var brushType in brushTypes)
            {
                if (IsDefaultInstanceVisibleGridBrushType(brushType))
                {
                    var brush = LoadOrCreateLibraryGridBrushAsset(brushType);
                    if (brush != null)
                    {
                        m_Brushes.Add(brush);
                    }
                }
            }

            string[] guids = AssetDatabase.FindAssets("t:GridBrushBase");
            foreach (string guid in guids)
            {
                string path  = AssetDatabase.GUIDToAssetPath(guid);
                var    brush = AssetDatabase.LoadAssetAtPath(path, typeof(GridBrushBase)) as GridBrushBase;
                if (brush != null && IsAssetVisibleGridBrushType(brush.GetType()))
                {
                    m_Brushes.Add(brush);
                }
            }

            m_BrushNames = new string[m_Brushes.Count];
            for (int i = 0; i < m_Brushes.Count; i++)
            {
                m_BrushNames[i] = m_Brushes[i].name;
            }
        }
        private void CallOnPaintSceneGUI(Vector2Int position)
        {
            if (!unlocked && EditMode.editMode != EditMode.SceneViewEditMode.GridSelect && EditMode.editMode != EditMode.SceneViewEditMode.GridPicking)
            {
                return;
            }

            bool hasSelection = GridSelection.active && GridSelection.target == brushTarget;

            if (!hasSelection && GridPaintingState.activeGrid != this)
            {
                return;
            }

            GridBrushBase brush = GridPaintingState.gridBrush;

            if (brush == null)
            {
                return;
            }

            RectInt rect = new RectInt(position, new Vector2Int(1, 1));

            if (m_MarqueeStart.HasValue)
            {
                rect = GridEditorUtility.GetMarqueeRect(position, m_MarqueeStart.Value);
            }
            else if (hasSelection)
            {
                rect = new RectInt(GridSelection.position.xMin, GridSelection.position.yMin, GridSelection.position.size.x, GridSelection.position.size.y);
            }

            var       gridLayout  = tilemap != null ? tilemap as GridLayout : grid as GridLayout;
            BoundsInt brushBounds = new BoundsInt(new Vector3Int(rect.x, rect.y, 0), new Vector3Int(rect.width, rect.height, 1));

            if (GridPaintingState.activeBrushEditor != null)
            {
                GridPaintingState.activeBrushEditor.OnPaintSceneGUI(gridLayout, brushTarget, brushBounds, EditModeToBrushTool(EditMode.editMode), m_MarqueeStart.HasValue || executing);
            }
            else // Fallback when user hasn't defined custom editor
            {
                GridBrushEditorBase.OnPaintSceneGUIInternal(gridLayout, Selection.activeGameObject, brushBounds, EditModeToBrushTool(EditMode.editMode), m_MarqueeStart.HasValue || executing);
            }
        }
예제 #17
0
        private void OnBrushInspectorGUI()
        {
            GridBrushBase gridBrush = GridPaintingState.gridBrush;

            if (!(gridBrush == null))
            {
                EditorGUI.BeginChangeCheck();
                if (GridPaintingState.activeBrushEditor != null)
                {
                    GridPaintingState.activeBrushEditor.OnPaintInspectorGUI();
                }
                else if (GridPaintingState.fallbackEditor != null)
                {
                    GridPaintingState.fallbackEditor.OnInspectorGUI();
                }
                if (EditorGUI.EndChangeCheck())
                {
                    GridPaletteBrushes.ActiveGridBrushAssetChanged();
                }
            }
        }
        private string GetBrushDropdownName(GridBrushBase brush)
        {
            // Asset Brushes use the asset name
            if (!IsLibraryBrush(brush))
            {
                return(brush.name);
            }

            // Library Brushes
            CustomGridBrushAttribute[] customBrushes = brush.GetType().GetCustomAttributes(typeof(CustomGridBrushAttribute), false) as CustomGridBrushAttribute[];
            if (customBrushes != null && customBrushes.Length > 0 && customBrushes[0].defaultName.Length > 0)
            {
                return(customBrushes[0].defaultName);
            }

            if (brush.GetType() == typeof(GridBrush))
            {
                return("Default Brush");
            }

            return(brush.GetType().Name);
        }
예제 #19
0
    public void SelectElement(int idx_)
    {
        switch (idx_)
        {
        case 0:
            selectedElement = BuildBrush[idx_];
            break;

        case 1:
            selectedElement = BuildBrush[idx_];
            break;

        case 2:
            selectedElement = BuildBrush[idx_];
            break;

        case 3:
            selectedElement = BuildBrush[idx_];
            break;

        default:
            break;
        }
    }
 private void OnBrushChanged(GridBrushBase brush)
 {
     UpdateCache();
 }
        public void StoreLastUsedBrush(GridBrushBase brush)
        {
            int index = brushes.IndexOf(brush);

            SessionState.SetInt(s_SessionStateLastUsedBrush, index);
        }
 private static bool IsLibraryBrush(GridBrushBase brush)
 {
     return(!AssetDatabase.Contains(brush));
 }
예제 #23
0
 void Start()
 {
     playerResourcesScript = GetComponent <PlayerResources>();
     selectedElement       = null;
     cam = Camera.main;
 }