Beispiel #1
0
    IEnumerator AddBlockCoroutine(ChooseBlockButton buttonClicked)
    {
        Vector2 targetCoord    = generator.ReturnTargetCoordinates(buttonClicked.Block);
        Block   generatedBlock = new Block(buttonClicked.Block.direction, buttonClicked.Block.kind, (int)targetCoord.x, (int)targetCoord.y);

        generator.InsertBlockOnBoard(generatedBlock);
        yield return(StartCoroutine(view.AnimateBlockMovement(buttonClicked.Block.GetPos(), targetCoord, generatedBlock, true)));
    }
Beispiel #2
0
    public IEnumerator MainLoop(ChooseBlockButton buttonClicked)
    {
        if (CurrentState == LevelState.WAITING_FOR_MOVE)
        {
            if (generator.BlockCanBeAddedToBoard(buttonClicked.Block))
            {
                CurrentState = LevelState.ANIMATING;
                UpdateMoves(-1);
                yield return(StartCoroutine(AddBlockCoroutine(buttonClicked)));

                // generator.DebugBoard();

                if (generator.ThereIsATriplet(ref triplet))
                {
                    ThereIsTriplet = true;

                    while (ThereIsTriplet || generator.ThereAreBlocksWithFreeSpaces())
                    {
                        yield return(StartCoroutine(DestroyTripletCoroutine(triplet)));

                        // generator.DebugBoard();
                        yield return(StartCoroutine(MoveAllBlocksToFreeSpacesCoroutine()));
                        // generator.DebugBoard();
                    }
                    if (ThereAreNoBlocksOnBoard())
                    {
                        yield return(new WaitForSeconds(0.7f));

                        Victory();
                        yield break;
                    }
                }



                if (MovesLeft <= 0)
                {
                    //there was no triplet found and you have no moves left. There are though still blocks on board so you lose.
                    Failure();
                    yield break;
                }
                else
                {   //there was no triplet found but you have more moves left
                    CurrentState = LevelState.WAITING_FOR_MOVE;
                    yield break;
                }
            }

            else
            {   //It is impossible to add Block because of either no place or no block on the way (meaningless move).
                yield break;
            }
        }
    }
Beispiel #3
0
 public void TurnMainLoop(ChooseBlockButton buttonClicked)
 {
     StartCoroutine(MainLoop(buttonClicked));
 }
Beispiel #4
0
 public void ChooseBlock(ChooseBlockButton buttonClicked)
 {
     HideBlockPanel();
     TurnMainLoop(buttonClicked);
 }