コード例 #1
0
ファイル: BrushBehaviour.cs プロジェクト: Aye1/Herborist
        public void CutRect(STETilemap tilemap, int startGridX, int startGridY, int endGridX, int endGridY)
        {
            if (IsUndoEnabled)
            {
#if UNITY_EDITOR
                Undo.RecordObject(tilemap, STETilemap.k_UndoOpName + tilemap.name);
                Undo.RecordObjects(tilemap.GetComponentsInChildren <TilemapChunk>(), STETilemap.k_UndoOpName + tilemap.name);
#endif
            }
            tilemap.IsUndoEnabled = IsUndoEnabled;

            TileObjSourceTilemap       = tilemap;
            TileObjSourceTilemapOffset = new Vector2Int(startGridX, startGridY);
            for (int gridY = startGridY; gridY <= endGridY; ++gridY)
            {
                for (int gridX = startGridX; gridX <= endGridX; ++gridX)
                {
                    BrushTilemap.SetTileData(gridX - startGridX, gridY - startGridY, tilemap.GetTileData(gridX, gridY));
                    tilemap.SetTileData(gridX, gridY, Tileset.k_TileData_Empty);
                }
            }
            TileObjSourceTilemap = null;

            BrushTilemap.UpdateMeshImmediate();
            tilemap.UpdateMeshImmediate();

            tilemap.IsUndoEnabled = false;
        }
コード例 #2
0
 public void CopyRect(STETilemap tilemap, int startGridX, int startGridY, int endGridX, int endGridY)
 {
     for (int gridY = startGridY; gridY <= endGridY; ++gridY)
     {
         for (int gridX = startGridX; gridX <= endGridX; ++gridX)
         {
             BrushTilemap.SetTileData(gridX - startGridX, gridY - startGridY, tilemap.GetTileData(gridX, gridY));
         }
     }
     BrushTilemap.UpdateMeshImmediate();
 }
コード例 #3
0
ファイル: BrushBehaviour.cs プロジェクト: Aye1/Herborist
 public void CopyRect(STETilemap tilemap, int startGridX, int startGridY, int endGridX, int endGridY)
 {
     TileObjSourceTilemap       = tilemap;
     TileObjSourceTilemapOffset = new Vector2Int(startGridX, startGridY);
     for (int gridY = startGridY; gridY <= endGridY; ++gridY)
     {
         for (int gridX = startGridX; gridX <= endGridX; ++gridX)
         {
             BrushTilemap.SetTileData(gridX - startGridX, gridY - startGridY, tilemap.GetTileData(gridX, gridY));
         }
     }
     TileObjSourceTilemap = null;
     BrushTilemap.UpdateMeshImmediate();
 }
コード例 #4
0
 public void DoPaintCancel()
 {
     if (m_isDragging)
     {
         m_isDragging = false;
         if (m_paintMode != eBrushPaintMode.Pencil)
         {
             BrushTilemap.ClearMap();
             for (int y = 0; y < m_brushPattern.GetLength(1); ++y)
             {
                 for (int x = 0; x < m_brushPattern.GetLength(0); ++x)
                 {
                     BrushTilemap.SetTileData(x, y, m_brushPattern[x, y]);
                 }
             }
             BrushTilemap.UpdateMesh();
         }
     }
 }
コード例 #5
0
 public void DoPaintReleased(STETilemap tilemap, Vector2 localPos, EventModifiers modifiers = default(EventModifiers))
 {
     //Debug.Log("DoPaintReleased (" + TilemapUtils.GetGridX(tilemap, localPos) + "," + TilemapUtils.GetGridY(tilemap, localPos) + ")");
     if (m_paintMode != eBrushPaintMode.Pencil)
     {
         Vector2 pressedPos = BrushUtil.GetSnappedPosition(m_pressedPosition, BrushTilemap.CellSize) + BrushTilemap.CellSize / 2f;
         Paint(tilemap, pressedPos + (Vector2)BrushTilemap.MapBounds.min, true);
         m_pressedPosition = localPos;
         BrushTilemap.ClearMap();
         for (int y = 0; y < m_brushPattern.GetLength(1); ++y)
         {
             for (int x = 0; x < m_brushPattern.GetLength(0); ++x)
             {
                 BrushTilemap.SetTileData(x, y, m_brushPattern[x, y]);
             }
         }
         BrushTilemap.UpdateMesh();
         m_isDragging = false;
     }
 }
コード例 #6
0
        public void DoPaintDragged(STETilemap tilemap, Vector2 localPos, EventModifiers modifiers = default(EventModifiers))
        {
            //Debug.Log("DoPaintDragged (" + TilemapUtils.GetGridX(tilemap, localPos) + "," + TilemapUtils.GetGridY(tilemap, localPos) + ")");
            bool isSingleEmptyTile = BrushTilemap.GridWidth == 1 && BrushTilemap.GridHeight == 1 && BrushTilemap.GetTileData(0, 0) == Tileset.k_TileData_Empty;

            if (m_paintMode == eBrushPaintMode.Pencil || isSingleEmptyTile)
            {
                Paint(tilemap, localPos);
            }
            else
            {
                if (m_isDragging)
                {
                    BrushTilemap.ClearMap();
                    Vector2 brushLocPos = tilemap.transform.InverseTransformPoint(transform.position);
                    Vector2 startPos    = BrushUtil.GetSnappedPosition(m_pressedPosition, BrushTilemap.CellSize) + BrushTilemap.CellSize / 2f - brushLocPos;
                    Vector2 endPos      = BrushUtil.GetSnappedPosition(localPos, BrushTilemap.CellSize) + BrushTilemap.CellSize / 2f - brushLocPos;
                    bool    isCtrl      = (modifiers & EventModifiers.Control) != 0;
                    bool    isShift     = (modifiers & EventModifiers.Shift) != 0;
                    switch (m_paintMode)
                    {
                    case eBrushPaintMode.Line:
                        if (isCtrl)
                        {
                            TilemapDrawingUtils.DrawLineMirrored(BrushTilemap, startPos, endPos, m_brushPattern);
                        }
                        else
                        {
                            TilemapDrawingUtils.DrawLine(BrushTilemap, startPos, endPos, m_brushPattern);
                        }
                        break;

                    case eBrushPaintMode.Rect:
                    case eBrushPaintMode.FilledRect:
                    case eBrushPaintMode.Ellipse:
                    case eBrushPaintMode.FilledEllipse:
                        if (isShift)
                        {
                            Vector2 vTemp = endPos - startPos;
                            float   absX  = Mathf.Abs(vTemp.x);
                            float   absY  = Mathf.Abs(vTemp.y);
                            vTemp.x = (absX > absY) ? vTemp.x : Mathf.Sign(vTemp.x) * absY;
                            vTemp.y = Mathf.Sign(vTemp.y) * Mathf.Abs(vTemp.x);
                            endPos  = startPos + vTemp;
                        }
                        if (isCtrl)
                        {
                            startPos = 2f * startPos - endPos;
                        }
                        if (m_paintMode == eBrushPaintMode.Rect || m_paintMode == eBrushPaintMode.FilledRect)
                        {
                            TilemapDrawingUtils.DrawRect(BrushTilemap, startPos, endPos, m_brushPattern, m_paintMode == eBrushPaintMode.FilledRect, (modifiers & EventModifiers.Alt) != 0);
                        }
                        else if (m_paintMode == eBrushPaintMode.Ellipse || m_paintMode == eBrushPaintMode.FilledEllipse)
                        {
                            TilemapDrawingUtils.DrawEllipse(BrushTilemap, startPos, endPos, m_brushPattern, m_paintMode == eBrushPaintMode.FilledEllipse);
                        }
                        break;
                    }
                    BrushTilemap.UpdateMeshImmediate();
                }
            }
        }
コード例 #7
0
 public void DoPaintPressed(STETilemap tilemap, Vector2 localPos, EventModifiers modifiers = default(EventModifiers))
 {
     //Debug.Log("DoPaintPressed (" + TilemapUtils.GetGridX(tilemap, localPos) + "," + TilemapUtils.GetGridY(tilemap, localPos) + ")");
     if (m_paintMode == eBrushPaintMode.Pencil)
     {
         Paint(tilemap, localPos);
     }
     else
     {
         m_pressedPosition = localPos;
         m_isDragging      = true;
         Offset            = Vector2.zero;
         m_brushPattern    = GetBrushPattern();
         bool isSingleEmptyTile = BrushTilemap.GridWidth == 1 && BrushTilemap.GridHeight == 1 && BrushTilemap.GetTileData(0, 0) == Tileset.k_TileData_Empty;
         if (isSingleEmptyTile)
         {
             Paint(tilemap, localPos);
         }
     }
 }
コード例 #8
0
 public uint[,] GetBrushPattern()
 {
     uint[,] brushPattern = new uint[BrushTilemap.GridWidth, BrushTilemap.GridHeight];
     for (int y = BrushTilemap.MinGridY; y <= BrushTilemap.MaxGridY; ++y)
     {
         for (int x = BrushTilemap.MinGridX; x <= BrushTilemap.MaxGridX; ++x)
         {
             brushPattern[x - BrushTilemap.MinGridX, y - BrushTilemap.MinGridY] = BrushTilemap.GetTileData(x, y);
         }
     }
     return(brushPattern);
 }