Beispiel #1
0
    private IEnumerator _tileMovmentAndStabilization(TileActor first, TileActor second, float moveTime, OncompleteBoardStabilization callback)
    {
        float timer = 0;

        if (moveTime <= 0)
        {
            moveTime = Mathf.Epsilon;
        }


        Vector3 firstPos  = first.transform.localPosition;
        Vector3 secondPos = second.transform.localPosition;

        //move sprites
        while (timer <= moveTime)
        {
            float factor = Match3.Utils.smoothStop2(timer / moveTime);

            first.transform.localPosition  = Vector3.Lerp(firstPos, secondPos, factor);
            second.transform.localPosition = Vector3.Lerp(secondPos, firstPos, factor);
            timer += Time.deltaTime;
            yield return(null);
        }

        //snap positions
        first.transform.localPosition  = secondPos;
        second.transform.localPosition = firstPos;
        yield return(null);



        Chains c = boardModel.deleteChains();

        TileModel[] tilesDeleted = c.toArray();



        //update gui variables
        --movesRemaining;

        while (tilesDeleted.Length > 0)
        {
            //delete chained actors
            yield return(StartCoroutine(_deleteTileActors(tilesDeleted, currentData.tileDeathTime)));

            BoardModel.TileShiftData [] tilesShift = boardModel.settleTiles();



            //updating gui
            scoreGui += c.getScore();

            //make cookies fall
            yield return(StartCoroutine(_fallTiles(tilesShift)));

            //add new cookies
//			boardModel.print("before adding");
            List <TileModel> addedTiles = boardModel.addTilesTillfull();
//			Debug.Log("tiles added "+addedTiles.Count);
//			boardModel.print("after adding");
            yield return(StartCoroutine(_addNewTileActors(addedTiles, currentData.tileScaleTime)));


            //next iteration setup here
            c            = boardModel.deleteChains();
            tilesDeleted = c.toArray();
        }



        checkGameOver();

        callback();
    }
Beispiel #2
0
    private IEnumerator _tileMovmentAndStabilization(TileActor first, TileActor second, float moveTime, OncompleteBoardStabilization callback)
    {
        float timer = 0;

        if (moveTime <= 0)
        {
            moveTime = Mathf.Epsilon;
        }


        Vector3 firstPos  = first.transform.localPosition;
        Vector3 secondPos = second.transform.localPosition;

        //move sprites
        while (timer <= moveTime)
        {
            float factor = Match3.Utils.smoothStop2(timer / moveTime);

            first.transform.localPosition  = Vector3.Lerp(firstPos, secondPos, factor);
            second.transform.localPosition = Vector3.Lerp(secondPos, firstPos, factor);
            timer += Time.deltaTime;
            yield return(null);
        }

        //snap positions
        first.transform.localPosition  = secondPos;
        second.transform.localPosition = firstPos;
        yield return(null);



//		yield return StartCoroutine(_testing());



        Chains c = boardModel.deleteChains();

        TileModel[] tilesDeleted = c.toArray();



        //note update gui variables
        --movesRemaining;

        while (tilesDeleted.Length > 0)
        {
            //delete chained actors
            yield return(StartCoroutine(_deleteTileActors(tilesDeleted, currentData.tileDeathTime)));

            List <BoardModel.TileShift> [] shift = boardModel.settleTiles();

            //todo updating gui
            scoreGui += c.getScore();

            yield return(StartCoroutine(_fallTiles(shift)));


            //add new cookies
//			boardModel.print("before adding");
            List <TileModel> addedTiles = boardModel.addTilesTillfull();
//			Debug.Log("tiles added "+addedTiles.Count);
//			boardModel.print("after adding");
            yield return(StartCoroutine(_addNewTileActors(addedTiles, currentData.tileScaleTime)));


            //next iteration setup here
            c            = boardModel.deleteChains();
            tilesDeleted = c.toArray();
        }



        callback();


        //this is the last thing since this might reset game
        if (checkGameOver())
        {
            var gameEnd = new LevelManager.GameEndData(scoreGui >= currentData.targetScore && movesRemaining > 0);
            GetComponent <LevelManager>().onGameEnd(gameEnd);
        }
    }