예제 #1
0
        public override void OnPaintSceneGUI(GridLayout grid, GameObject brushTarget, BoundsInt position,
                                             GridBrushBase.Tool tool, bool executing)
        {
            base.OnPaintSceneGUI(grid, brushTarget, position, tool, executing);
            if (coordinateBrush.z != 0)
            {
                var zPosition   = new Vector3Int(position.min.x, position.min.y, coordinateBrush.z);
                var newPosition = new BoundsInt(zPosition, position.size);
                var cellLocals  = new[]
                {
                    grid.CellToLocal(new Vector3Int(newPosition.min.x, newPosition.min.y, newPosition.min.z)),
                    grid.CellToLocal(new Vector3Int(newPosition.max.x, newPosition.min.y, newPosition.min.z)),
                    grid.CellToLocal(new Vector3Int(newPosition.max.x, newPosition.max.y, newPosition.min.z)),
                    grid.CellToLocal(new Vector3Int(newPosition.min.x, newPosition.max.y, newPosition.min.z))
                };

                Handles.color = Color.blue;
                var i = 0;
                for (var j = cellLocals.Length - 1; i < cellLocals.Length; j = i++)
                {
                    Handles.DrawLine(cellLocals[j], cellLocals[i]);
                }
            }

            Handles.Label(grid.CellToWorld(new Vector3Int(position.x, position.y, coordinateBrush.z)),
                          new Vector3Int(position.x, position.y, coordinateBrush.z).ToString());
        }
예제 #2
0
 /// <summary>Callback for registering an Undo action before the GridBrushBase does the current GridBrushBase::ref::Tool action.</summary>
 /// <param name="brushTarget">Target of the GridBrushBase::ref::Tool operation. By default the currently selected GameObject.</param>
 /// <param name="tool">Current GridBrushBase::ref::Tool selected.</param>
 /// <remarks>Implement this for any special Undo behaviours when a brush is used.</remarks>
 public override void RegisterUndo(GameObject brushTarget, GridBrushBase.Tool tool)
 {
     if (brushTarget != null)
     {
         Undo.RegisterCompleteObjectUndo(new Object[] { brushTarget, brushTarget.GetComponent <Tilemap>() }, tool.ToString());
     }
 }
예제 #3
0
 public override void RegisterUndo(GameObject layer, GridBrushBase.Tool tool)
 {
     foreach (Tilemap tilemap in layer.GetComponentsInChildren <Tilemap>())
     {
         Undo.RegisterCompleteObjectUndo(tilemap, "Paint");
     }
 }
예제 #4
0
 /// <summary>Callback for registering an Undo action before the GridBrushBase does the current GridBrushBase::ref::Tool action.</summary>
 /// <param name="brushTarget">Target of the GridBrushBase::ref::Tool operation. By default the currently selected GameObject.</param>
 /// <param name="tool">Current GridBrushBase::ref::Tool selected.</param>
 /// <remarks>Implement this for any special Undo behaviours when a brush is used.</remarks>
 public override void RegisterUndo(GameObject brushTarget, GridBrushBase.Tool tool)
 {
     if (brushTarget != null)
     {
         Undo.RegisterFullObjectHierarchyUndo(brushTarget, tool.ToString());
     }
 }
예제 #5
0
        public static EditMode.SceneViewEditMode BrushToolToEditMode(GridBrushBase.Tool tool)
        {
            switch (tool)
            {
            case GridBrushBase.Tool.Box:
                return(EditMode.SceneViewEditMode.GridBox);

            case GridBrushBase.Tool.Erase:
                return(EditMode.SceneViewEditMode.GridEraser);

            case GridBrushBase.Tool.FloodFill:
                return(EditMode.SceneViewEditMode.GridFloodFill);

            case GridBrushBase.Tool.Paint:
                return(EditMode.SceneViewEditMode.GridPainting);

            case GridBrushBase.Tool.Pick:
                return(EditMode.SceneViewEditMode.GridPicking);

            case GridBrushBase.Tool.Select:
                return(EditMode.SceneViewEditMode.GridSelect);

            case GridBrushBase.Tool.Move:
                return(EditMode.SceneViewEditMode.GridMove);
            }
            return(EditMode.SceneViewEditMode.GridPainting);
        }
예제 #6
0
    public override void RegisterUndo(GameObject layer, GridBrushBase.Tool tool)
    {
        GridInformation info = BrushUtility.GetRootGridInformation(false);

        if (info != null)
        {
            Undo.RegisterFullObjectHierarchyUndo(info, tool.ToString());
        }
    }
예제 #7
0
        public override void OnToolDeactivated(GridBrushBase.Tool tool)
        {
            base.OnToolDeactivated(tool);

            if (previewBrush != null)
            {
                DestroyImmediate(previewBrush);
            }
        }
예제 #8
0
 /// <summary>Callback for registering an Undo action before the GridBrushBase does the current GridBrushBase::ref::Tool action.</summary>
 /// <param name="brushTarget">Target of the GridBrushBase::ref::Tool operation. By default the currently selected GameObject.</param>
 /// <param name="tool">Current GridBrushBase::ref::Tool selected.</param>
 /// <remarks>Implement this for any special Undo behaviours when a brush is used.</remarks>
 public override void RegisterUndo(GameObject brushTarget, GridBrushBase.Tool tool)
 {
     if (brushTarget != null)
     {
         var tilemap = brushTarget.GetComponent <Tilemap>();
         if (tilemap != null)
         {
             RegisterUndoForTilemap(tilemap, tool.ToString());
         }
     }
 }
예제 #9
0
 public virtual void ClearPreview()
 {
     if (!(this.m_LastGrid == null))
     {
         BoundsInt?lastBounds = this.m_LastBounds;
         if (lastBounds.HasValue && !(this.m_LastBrushTarget == null))
         {
             GridBrushBase.Tool?lastTool = this.m_LastTool;
             if (lastTool.HasValue)
             {
                 Tilemap component = this.m_LastBrushTarget.GetComponent <Tilemap>();
                 if (component != null)
                 {
                     GridBrushBase.Tool?lastTool2 = this.m_LastTool;
                     if (lastTool2.HasValue)
                     {
                         GridBrushBase.Tool value = lastTool2.Value;
                         if (value != GridBrushBase.Tool.FloodFill)
                         {
                             if (value != GridBrushBase.Tool.Box)
                             {
                                 if (value == GridBrushBase.Tool.Paint)
                                 {
                                     foreach (Vector3Int current in this.m_LastBounds.Value.allPositionsWithin)
                                     {
                                         GridBrushEditor.ClearTilemapPreview(component, current);
                                     }
                                 }
                             }
                             else
                             {
                                 Vector3Int position  = this.m_LastBounds.Value.position;
                                 Vector3Int a         = position + this.m_LastBounds.Value.size;
                                 BoundsInt  boundsInt = new BoundsInt(position, a - position);
                                 foreach (Vector3Int current2 in boundsInt.allPositionsWithin)
                                 {
                                     GridBrushEditor.ClearTilemapPreview(component, current2);
                                 }
                             }
                         }
                         else
                         {
                             component.ClearAllEditorPreviewTiles();
                         }
                     }
                 }
                 this.m_LastBrushTarget = null;
                 this.m_LastGrid        = null;
                 this.m_LastBounds      = null;
                 this.m_LastTool        = null;
             }
         }
     }
 }
예제 #10
0
        public override void OnPaintSceneGUI(GridLayout gridLayout, GameObject brushTarget, BoundsInt position,
                                             GridBrushBase.Tool tool, bool executing)
        {
            BoundsInt gizmoRect = position;

            if (tool == GridBrushBase.Tool.Paint || tool == GridBrushBase.Tool.Erase)
            {
                gizmoRect = new BoundsInt(position.min - brush.pivot, brush.size);
            }

            base.OnPaintSceneGUI(gridLayout, brushTarget, gizmoRect, tool, executing);
        }
예제 #11
0
 public override void RegisterUndo(GameObject brushTarget, GridBrushBase.Tool tool)
 {
     if (brushTarget != null)
     {
         var tilemap = brushTarget.GetComponent <Tilemap>();
         if (tilemap != null)
         {
             Undo.RecordObject(tilemap, tool.ToString());
         }
         Undo.RegisterFullObjectHierarchyUndo(brushTarget, tool.ToString());
     }
 }
        /// <summary>
        /// Callback for painting the GUI for the GridBrush in the Scene View.
        /// The CoordinateBrush Editor overrides this to draw the current coordinates of the brush.
        /// </summary>
        /// <param name="gridLayout">Grid that the brush is being used on.</param>
        /// <param name="brushTarget">Target of the GridBrushBase::ref::Tool operation. By default the currently selected GameObject.</param>
        /// <param name="position">Current selected location of the brush.</param>
        /// <param name="tool">Current GridBrushBase::ref::Tool selected.</param>
        /// <param name="executing">Whether brush is being used.</param>
        public override void OnPaintSceneGUI(GridLayout grid, GameObject brushTarget, BoundsInt position,
                                             GridBrushBase.Tool tool, bool executing)
        {
            base.OnPaintSceneGUI(grid, brushTarget, position, tool, executing);

            var labelText = "Pos: " + position.position;

            if (position.size.x > 1 || position.size.y > 1)
            {
                labelText += " Size: " + position.size;
            }

            Handles.Label(grid.CellToWorld(position.position), labelText);
        }
예제 #13
0
 public override void OnPaintSceneGUI(GridLayout gridLayout, GameObject brushTarget, BoundsInt position,
                                      GridBrushBase.Tool tool, bool executing)
 {
     CreateEditor();
     if (ValidatePreview(gridLayout))
     {
         for (int i = 0; i < editors.Length; ++i)
         {
             editors[i].OnPaintSceneGUI(gridLayout, layerBrush.brushTargets[i], position, tool, executing);
         }
     }
     else
     {
         base.OnPaintSceneGUI(gridLayout, brushTarget, position, tool, executing);
     }
 }
예제 #14
0
        public override void OnPaintSceneGUI(GridLayout grid, GameObject brushTarget, BoundsInt position,
                                             GridBrushBase.Tool tool, bool executing)
        {
            base.OnPaintSceneGUI(grid, brushTarget, position, tool, executing);
            if (lineBrush.lineStartActive)
            {
                Tilemap tilemap = brushTarget.GetComponent <Tilemap>();
                if (tilemap != null)
                {
                    lastTilemap = tilemap;
                }

                // Draw preview tiles for tilemap
                Vector2Int startPos = new Vector2Int(lineBrush.lineStart.x, lineBrush.lineStart.y);
                Vector2Int endPos   = new Vector2Int(position.x, position.y);
                if (startPos == endPos)
                {
                    PaintPreview(grid, brushTarget, position.min);
                }
                else
                {
                    foreach (var point in ClearRectBrush.GetPointsInRect(startPos, endPos))
                    {
                        Vector3Int paintPos = new Vector3Int(point.x, point.y, position.z);
                        PaintPreview(grid, brushTarget, paintPos);
                    }
                }

                if (Event.current.type == EventType.Repaint)
                {
                    var min = lineBrush.lineStart;
                    var max = lineBrush.lineStart + position.size;

                    // Draws a box on the picked starting position
                    GL.PushMatrix();
                    GL.MultMatrix(GUI.matrix);
                    GL.Begin(GL.LINES);
                    Handles.color = Color.blue;
                    Handles.DrawLine(new Vector3(min.x, min.y, min.z), new Vector3(max.x, min.y, min.z));
                    Handles.DrawLine(new Vector3(max.x, min.y, min.z), new Vector3(max.x, max.y, min.z));
                    Handles.DrawLine(new Vector3(max.x, max.y, min.z), new Vector3(min.x, max.y, min.z));
                    Handles.DrawLine(new Vector3(min.x, max.y, min.z), new Vector3(min.x, min.y, min.z));
                    GL.End();
                    GL.PopMatrix();
                }
            }
        }
예제 #15
0
 private void DrawExitPreview(GridLayout gridLayout, BoundsInt bounds, GridBrushBase.Tool tool, Vector3 prefabOffset)
 {
     if (!previewGO)
     {
         return;
     }
     if (tool == GridBrushBase.Tool.Paint)
     {
         previewGO.SetActive(true);
         previewGO.transform.position = gridLayout.CellToLocalInterpolated(bounds.position + prefabOffset);
         previewGO.transform.rotation = brush.m_PrefabRotation * Quaternion.AngleAxis(180f, Vector3.forward);
     }
     else
     {
         previewGO.SetActive(false);
     }
 }
예제 #16
0
        public override void RegisterUndo(GameObject brushTarget, GridBrushBase.Tool tool)
        {
            if (layerBrush.brushTargets == null ||
                layerBrush.brushTargets.Length == 0)
            {
                return;
            }

            var count       = layerBrush.brushTargets.Length;
            var undoObjects = new UnityEngine.Object[count * 2];

            for (int i = 0; i < layerBrush.brushTargets.Length; i++)
            {
                undoObjects[i]         = layerBrush.brushTargets[i];
                undoObjects[i + count] = layerBrush.brushTargets[i].GetComponent <Tilemap>();
            }
            Undo.RegisterCompleteObjectUndo(undoObjects, tool.ToString());
        }
예제 #17
0
 public void OnEditModeStart(IToolModeOwner owner, EditMode.SceneViewEditMode editMode)
 {
     if (GridPaintingState.gridBrush != null && PaintableGrid.InGridEditMode() && GridPaintingState.activeBrushEditor != null)
     {
         GridBrushBase.Tool tool = PaintableGrid.EditModeToBrushTool(editMode);
         GridPaintingState.activeBrushEditor.OnToolActivated(tool);
         this.m_PreviousToolActivatedEditor = GridPaintingState.activeBrushEditor;
         this.m_PreviousToolActivated       = tool;
         for (int i = 0; i < GridPaintPaletteWindow.Styles.sceneViewEditModes.Length; i++)
         {
             if (GridPaintPaletteWindow.Styles.sceneViewEditModes[i] == editMode)
             {
                 Cursor.SetCursor(GridPaintPaletteWindow.Styles.mouseCursorTextures[i], (!(GridPaintPaletteWindow.Styles.mouseCursorTextures[i] != null)) ? Vector2.zero : GridPaintPaletteWindow.Styles.mouseCursorOSHotspot[(int)SystemInfo.operatingSystemFamily], CursorMode.Auto);
                 break;
             }
         }
     }
     base.Repaint();
 }
        public override void OnPaintSceneGUI(GridLayout grid,
                                             GameObject brushTarget,
                                             BoundsInt position,
                                             GridBrushBase.Tool tool,
                                             bool executing)
        {
            base.OnPaintSceneGUI(grid, brushTarget, position, tool, executing);

            var labelText = "Pos: " + new Vector3Int(position.x, position.y, 0);

            if (position.size.x > 1 || position.size.y > 1)
            {
                labelText += " Size: " + new Vector2Int(position.size.x, position.size.y);
            }

            var style = new GUIStyle()
            {
                normal = { textColor = Color.yellow }
            };

            Handles.Label(grid.CellToWorld(new Vector3Int(position.x, position.y, 0)), labelText, style);
        }
예제 #19
0
        public static EditMode.SceneViewEditMode BrushToolToEditMode(GridBrushBase.Tool tool)
        {
            EditMode.SceneViewEditMode result;
            switch (tool)
            {
            case GridBrushBase.Tool.Select:
                result = EditMode.SceneViewEditMode.GridSelect;
                break;

            case GridBrushBase.Tool.Move:
                result = EditMode.SceneViewEditMode.GridMove;
                break;

            case GridBrushBase.Tool.Paint:
                result = EditMode.SceneViewEditMode.GridPainting;
                break;

            case GridBrushBase.Tool.Box:
                result = EditMode.SceneViewEditMode.GridBox;
                break;

            case GridBrushBase.Tool.Pick:
                result = EditMode.SceneViewEditMode.GridPicking;
                break;

            case GridBrushBase.Tool.Erase:
                result = EditMode.SceneViewEditMode.GridEraser;
                break;

            case GridBrushBase.Tool.FloodFill:
                result = EditMode.SceneViewEditMode.GridFloodFill;
                break;

            default:
                result = EditMode.SceneViewEditMode.GridPainting;
                break;
            }
            return(result);
        }
예제 #20
0
        public void OnEditModeStart(IToolModeOwner owner, EditMode.SceneViewEditMode editMode)
        {
            if (GridPaintingState.gridBrush != null && PaintableGrid.InGridEditMode() && GridPaintingState.activeBrushEditor != null)
            {
                GridBrushBase.Tool tool = PaintableGrid.EditModeToBrushTool(editMode);
                GridPaintingState.activeBrushEditor.OnToolActivated(tool);
                m_PreviousToolActivatedEditor = GridPaintingState.activeBrushEditor;
                m_PreviousToolActivated       = tool;

                for (int i = 0; i < k_SceneViewEditModes.Length; ++i)
                {
                    if (k_SceneViewEditModes[i] == editMode)
                    {
                        Cursor.SetCursor(MouseStyles.mouseCursorTextures[i],
                                         MouseStyles.mouseCursorTextures[i] != null ? MouseStyles.mouseCursorOSHotspot[(int)SystemInfo.operatingSystemFamily] : Vector2.zero,
                                         CursorMode.Auto);
                        break;
                    }
                }
            }

            Repaint();
        }
예제 #21
0
 public override void OnPaintSceneGUI(GridLayout grid, GameObject brushTarget, BoundsInt position, GridBrushBase.Tool tool, bool executing)
 {
     base.OnPaintSceneGUI(grid, brushTarget, position, tool, executing);
 }
    public override void OnPaintSceneGUI(GridLayout grid, GameObject layer, BoundsInt position, GridBrushBase.Tool tool, bool executing)
    {
        LevelBrush.InitializeLevelCacheIfNecessary();
        var invalidFloors = LevelBrush.GetAllInvalidFloors();

        BrushEditorUtility.BeginQuads(new Color(1f, 0f, 0f, 0.5f));
        foreach (var pos in invalidFloors)
        {
            BrushEditorUtility.DrawQuadBatched(grid, pos);
        }
        BrushEditorUtility.EndQuads();

        base.OnPaintSceneGUI(grid, layer, position, tool, executing);
    }
예제 #23
0
        public override void OnPaintSceneGUI(GridLayout grid, GameObject brushTarget, BoundsInt position, GridBrushBase.Tool tool, bool executing)
        {
            base.OnPaintSceneGUI(grid, brushTarget, position, tool, executing);
            if (position.z != 0)
            {
                var       zPosition   = new Vector3Int(position.min.x, position.min.y, position.min.z);
                BoundsInt newPosition = new BoundsInt(zPosition, position.size);
                Vector3[] cellLocals  = new Vector3[]
                {
                    grid.CellToLocal(new Vector3Int(newPosition.min.x, newPosition.min.y, newPosition.min.z)),
                    grid.CellToLocal(new Vector3Int(newPosition.max.x, newPosition.min.y, newPosition.min.z)),
                    grid.CellToLocal(new Vector3Int(newPosition.max.x, newPosition.max.y, newPosition.min.z)),
                    grid.CellToLocal(new Vector3Int(newPosition.min.x, newPosition.max.y, newPosition.min.z))
                };

                Handles.color = Color.blue;
                int i = 0;
                for (int j = cellLocals.Length - 1; i < cellLocals.Length; j = i++)
                {
                    Handles.DrawLine(cellLocals[j], cellLocals[i]);
                }
            }

            var labelText = "Pos: " + new Vector3Int(position.x, position.y, position.z);

            if (position.size.x > 1 || position.size.y > 1)
            {
                labelText += " Size: " + new Vector2Int(position.size.x, position.size.y);
            }

            Handles.Label(grid.CellToWorld(new Vector3Int(position.x, position.y, position.z)), labelText);
        }
예제 #24
0
 internal static void OnPaintSceneGUIInternal(GridLayout gridLayout, GameObject brushTarget, BoundsInt position, GridBrushBase.Tool tool, bool executing)
 {
     if (Event.current.type == EventType.Repaint)
     {
         Color color = Color.white;
         if (tool == GridBrushBase.Tool.Pick && executing)
         {
             color = Color.cyan;
         }
         if (tool == GridBrushBase.Tool.Paint && executing)
         {
             color = Color.yellow;
         }
         if (tool == GridBrushBase.Tool.Select || tool == GridBrushBase.Tool.Move)
         {
             if (executing)
             {
                 color = GridBrushEditorBase.Styles.executingColor;
             }
             else if (GridSelection.active)
             {
                 color = GridBrushEditorBase.Styles.activeColor;
             }
         }
         GridEditorUtility.DrawGridMarquee(gridLayout, position, color);
     }
 }
 public override void OnToolActivated(GridBrushBase.Tool tool)
 {
     LevelBrush.ResetLevelCache();
 }
예제 #26
0
 public virtual void RegisterUndo(GameObject brushTarget, GridBrushBase.Tool tool)
 {
 }
예제 #27
0
 public virtual void OnToolDeactivated(GridBrushBase.Tool tool)
 {
 }
예제 #28
0
 public virtual void OnPaintSceneGUI(GridLayout gridLayout, GameObject brushTarget, BoundsInt position, GridBrushBase.Tool tool, bool executing)
 {
     GridBrushEditorBase.OnPaintSceneGUIInternal(gridLayout, brushTarget, position, tool, executing);
 }
 public override void RegisterUndo(GameObject layer, GridBrushBase.Tool tool)
 {
     Undo.RegisterCompleteObjectUndo(LevelBrush.GetWall(), "Paint");
     Undo.RegisterCompleteObjectUndo(LevelBrush.GetFloor(), "Paint");
 }
    public override void OnPaintSceneGUI(GridLayout gridLayout, GameObject brushTarget, BoundsInt position, GridBrushBase.Tool tool, bool executing)
    {
        base.OnPaintSceneGUI(gridLayout, brushTarget, position, tool, executing);
        if (brushTarget != null)
        {
            var tilemap = brushTarget.GetComponent <Tilemap>();
            tilemap.ClearAllEditorPreviewTiles();
        }

        PaintPreview(gridLayout, brushTarget, new Vector3Int(position.x, position.y, position.z));

        var min = new Vector3Int(position.x - 1, position.y - 1, position.z);
        var max = new Vector3Int(position.x + 2, position.y + 2, position.z);

        var p1 = new Vector3(min.x, min.y, min.z);
        var p2 = new Vector3(max.x, min.y, min.z);
        var p3 = new Vector3(max.x, max.y, min.z);
        var p4 = new Vector3(min.x, max.y, min.z);

        Handles.DrawLine(p1, p2);
        Handles.DrawLine(p2, p3);
        Handles.DrawLine(p3, p4);
        Handles.DrawLine(p4, p1);
    }