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(); } } }
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; } }
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(); } } }