/// <summary> /// Metoda usuwająca efekt cienia pod puzzlami /// </summary> /// <param name="cluster">Klaster z którego cień usunąć</param> /// <param name="zindex"></param> public void DeleteShadowEffect(IPuzzleCluster cluster, ref int zindex) { if (cluster == null) { return; } foreach (Piece piece in cluster.Pieces) { piece.PieceImage.ClearValue(UIElement.EffectProperty); Panel.SetZIndex(piece.PieceImage, zindex); } zindex++; }
/// <summary> /// Event odpowiadający za wykrycie i przygotowanie "złapanego" puzzla do przesuwania /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void PieceCluster_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Mouse.OverrideCursor = Cursors.Hand; Image pieceImage = sender as Image; int pieceId = int.Parse(pieceImage.Name.Substring(1)); // id z nazwy _currentCluster = GetClusterContainsPiece(pieceId); _previousMousePosition = e.GetPosition(this); _canMovePiece = true; _engine.DropShadowEffect(_currentCluster); }
/// <summary> /// Metoda odpowiadająca za wyrównywanie scalonych puzzli /// </summary> /// <param name="cluster">Referencja do klastra w których puzzle mają być wyrównane</param> public void AlignPiecesPositions(IPuzzleCluster cluster) { var mainPiece = cluster.Pieces[0] as Piece; foreach (Piece piece in cluster.Pieces) { int differenceX = mainPiece.Location.X - piece.Location.X; int differenceY = mainPiece.Location.Y - piece.Location.Y; double canvasLeft = Canvas.GetLeft(mainPiece.PieceImage) - mainPiece.Width * differenceX; double canvasTop = Canvas.GetTop(mainPiece.PieceImage) - mainPiece.Height * differenceY; canvasTop -= PuzzleSettings.SPACE_BETWEEN_PIECES * differenceY; canvasLeft -= PuzzleSettings.SPACE_BETWEEN_PIECES * differenceX; Canvas.SetTop(piece.PieceImage, canvasTop); Canvas.SetLeft(piece.PieceImage, canvasLeft); } }
/// <summary> /// Metoda pokazująca cień pod puzzlami /// </summary> /// <param name="cluster">Klaster puzzli dla których pokazać cień</param> public void DropShadowEffect(IPuzzleCluster cluster) { if (cluster == null) { return; } foreach (Piece piece in cluster.Pieces) { piece.PieceImage.Effect = new DropShadowEffect() { Color = new System.Windows.Media.Color() { A = 2, R = 0, G = 0, B = 0 }, Direction = piece.Rotation - 90, ShadowDepth = 1.5d, Opacity = 2, }; Panel.SetZIndex(piece.PieceImage, int.MaxValue); } }