Пример #1
0
        /// <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++;
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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);
            }
        }
Пример #4
0
        /// <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);
            }
        }