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(); }
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); } }