Beispiel #1
0
        public void animationFinished(int dx, int dy)
        {
            gameViewController.resetPositions();

            int targetX, targetY;

            if (dx != 0 || dy != 0)
            {
                if (Math.Abs(dx) > selToX - selFromX || Math.Abs(dy) > selToY - selFromY)
                {
                    for (int y = selFromY; y <= selToY; ++y)
                    {
                        targetY = y + dy;
                        for (int x = selFromX; x <= selToX; ++x)
                        {
                            targetX = x + dx;
                            switchPieces(x, y, targetX, targetY);
                        }
                    }
                }
                else
                {
                    for (int y = selFromY; y <= selToY; ++y)
                    {
                        targetY = y + dy;
                        for (int x = selFromX; x <= selToX; ++x)
                        {
                            targetX = x + dx;

                            movePiece(x, y, targetX, targetY);

                            int dsttmpX = -1;
                            int dsttmpY = -1;

                            if (targetY < selFromY || targetY > selToY)
                            {
                                dsttmpX = targetX - dx;
                                dsttmpY = targetY;
                                if (targetY < selFromY)
                                {
                                    dsttmpY += selToY - selFromY + 1;
                                }
                                if (targetY > selToY)
                                {
                                    dsttmpY -= selToY - selFromY + 1;
                                }
                            }
                            else if (targetX > selToX || targetX < selFromX)
                            {
                                dsttmpX = targetX;
                                dsttmpY = targetY;
                                if (targetX > selToX)
                                {
                                    dsttmpX = targetX - selToX + selFromX - 1;
                                }
                                if (targetX < selFromX)
                                {
                                    dsttmpX = targetX + selToX - selFromX + 1;
                                }
                            }

                            if (dsttmpX != -1 && dsttmpY != -1)
                            {
                                movePiece(targetX, targetY, dsttmpX, dsttmpY);
                            }
                        }
                    }
                }

                clearShadowRandomizeBuffer();
                gameViewController.updateRandomization(randomMask);
                gamePage.updateMoves(++moves);

                if (checkPuzzleAssembled())
                {
                    puzzleAssembled();
                }
            }

            inputState     = InputState.RELEASED_NO_SELECTION;
            gameInputLock  = false;
            lastSelOneItem = false;
        }