예제 #1
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();
         }
     }
 }
예제 #2
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;
     }
 }
예제 #3
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();
                }
            }
        }