Exemple #1
0
 BlockToMove FindFreeBlockInAxis(int searchedDimLength, int constAxis, MovingBlocksOption option)
 {
     if (option == MovingBlocksOption.Horizontal)
     {
         for (int i = 1; i < searchedDimLength - 1; i++)
         {
             if (board[i, constAxis] is Block && ((board[i, constAxis].direction == Direction.West) || (board[i, constAxis].direction == Direction.East)))
             {
                 Block   b            = (Block)board[i, constAxis];
                 Vector2 targetCoords = ReturnTargetCoordinates2(b);
                 if (ThereIsPlaceForBlockToMove(b, targetCoords))
                 {
                     return(new BlockToMove(b, targetCoords, CoordsAreOutOfBoard(targetCoords)));
                 }
             }
         }
     }
     else if (option == MovingBlocksOption.Vertical)
     {
         for (int i = 1; i < searchedDimLength - 1; i++)
         {
             if (board[constAxis, i] is Block && ((board[constAxis, i].direction == Direction.North) || (board[constAxis, i].direction == Direction.South)))
             {
                 Block   b            = (Block)board[constAxis, i];
                 Vector2 targetCoords = ReturnTargetCoordinates2(b);
                 if (ThereIsPlaceForBlockToMove(b, targetCoords))
                 {
                     return(new BlockToMove(b, targetCoords, CoordsAreOutOfBoard(targetCoords)));
                 }
             }
         }
     }
     return(null);
 }
Exemple #2
0
    public List <BlockToMove> ReturnAllMovingBlocks(MovingBlocksOption option)
    {
        switch (option)
        {
        case MovingBlocksOption.Horizontal:
            return(ReturnAllMovingBlocksInDimension(width, height, option));

        case MovingBlocksOption.Vertical:
            return(ReturnAllMovingBlocksInDimension(height, width, option));
        }
        return(null);
    }
Exemple #3
0
    public IEnumerator MoveBlocksToFreeSpaces(MovingBlocksOption movingOption)
    {
        currentlyMovingBlocks = generator.ReturnAllMovingBlocks(movingOption);
        foreach (BlockToMove b in currentlyMovingBlocks)
        {
            Vector2 blockCoords = b.Block.GetPos();
            generator.CleanBlockOnBoard(blockCoords);
            view.FillContainerWithEntity(blockCoords, new Entity((int)blockCoords.x, (int)blockCoords.y));

            if (!b.OutOfBoard)
            {
                b.Block.x = (int)b.EndCoords.x;
                b.Block.y = (int)b.EndCoords.y;
                generator.InsertBlockOnBoard(b.Block);
            }
        }
        yield return(StartCoroutine(view.AnimateBlocksMovement(currentlyMovingBlocks)));
    }
Exemple #4
0
    void FindAllBlocksInDimWithTheSameDirectionBehindBlock(BlockToMove b, ref List <BlockToMove> BlocksInRow, MovingBlocksOption option)
    {
        bool keepLooking = true;
        int  dir         = -1 * ((int)dict[b.Block.direction].x + (int)dict[b.Block.direction].y);

        int j = 1;

        if (option == MovingBlocksOption.Horizontal)
        {
            int constAxis = b.Block.y;

            while (keepLooking)
            {
                if (board[b.Block.x + dir * j, constAxis] is Block && board[b.Block.x + dir * j, constAxis].direction == b.Block.direction)
                {
                    BlockToMove nextBlockToMove = new BlockToMove((Block)board[b.Block.x + dir * j, constAxis]);

                    if (CoordsAreOutOfBoard(b.EndCoords))
                    {
                        nextBlockToMove.EndCoords = b.EndCoords;
                    }
                    else
                    {
                        nextBlockToMove.EndCoords += b.EndCoords + new Vector2(dir * j, 0);
                    }
                    nextBlockToMove.OutOfBoard = CoordsAreOutOfBoard(nextBlockToMove.EndCoords);
                    BlocksInRow.Add(nextBlockToMove);
                    j++;
                }
                else
                {
                    return;
                }
            }
            return;
        }

        else if (option == MovingBlocksOption.Vertical)
        {
            int constAxis = b.Block.x;
            while (keepLooking)
            {
                if (board[constAxis, b.Block.y + dir * j] is Block && board[constAxis, b.Block.y + dir * j].direction == b.Block.direction)
                {
                    BlockToMove nextBlockToMove = new BlockToMove((Block)board[constAxis, b.Block.y + dir * j]);
                    if (CoordsAreOutOfBoard(b.EndCoords))
                    {
                        nextBlockToMove.EndCoords = b.EndCoords;
                    }
                    else
                    {
                        nextBlockToMove.EndCoords += b.EndCoords + new Vector2(0, dir * j);
                    }

                    nextBlockToMove.OutOfBoard = CoordsAreOutOfBoard(nextBlockToMove.EndCoords);
                    BlocksInRow.Add(nextBlockToMove);
                    j++;
                }
                else
                {
                    return;
                }
            }
            return;
        }
    }
Exemple #5
0
    void FindBlocksInAxis(ref List <BlockToMove> BlocksToMoveInDimension, int searchedDimLength, int constAxis, MovingBlocksOption option)
    {
        List <BlockToMove> blocksToMoveInDim = new List <BlockToMove>();
        BlockToMove        b = FindFreeBlockInAxis(searchedDimLength, constAxis, option);

        if (b != null)
        {
            blocksToMoveInDim.Add(b);
            FindAllBlocksInDimWithTheSameDirectionBehindBlock(b, ref blocksToMoveInDim, option);
            BlocksToMoveInDimension.AddRange(blocksToMoveInDim);
        }

        else
        {
            return;
        }
    }
Exemple #6
0
    public List <BlockToMove> ReturnAllMovingBlocksInDimension(int searchedDimLength, int anotherDimLength, MovingBlocksOption option)
    {
        List <BlockToMove> BlocksToMoveInDimension = new List <BlockToMove>();

        for (int i = 1; i < anotherDimLength - 1; i++)
        {
            FindBlocksInAxis(ref BlocksToMoveInDimension, searchedDimLength, i, option);
        }
        return(BlocksToMoveInDimension);
    }