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))); }
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; } } }
public void TurnMainLoop(ChooseBlockButton buttonClicked) { StartCoroutine(MainLoop(buttonClicked)); }
public void ChooseBlock(ChooseBlockButton buttonClicked) { HideBlockPanel(); TurnMainLoop(buttonClicked); }