/// <summary> /// Item will be reshaped when called /// </summary> public void Restore(GridItemTemp gridItemTemp) { transform.DOScale(transform.localScale / 10, Random.Range(0.1f, 0.3f)).OnComplete(() => { transform.DOScale(transform.localScale * 10, Random.Range(0.1f, 0.3f)); ShowHideStar(gridItemTemp.havestar); SetBombStyle(gridItemTemp.bombcounter > -1, gridItemTemp.bombcounter); this.ItemColor = gridItemTemp.color; }); }
/// <summary> /// The first installation of the game is done in this function. /// </summary> private void SetupGame() { #region Control Settings Asset if (!gameSettings) { gameSettings = Resources.Load <GameSettings>("Settings"); } if (!gameSettings) { throw new System.Exception("You have drop a settings file to gameSettings"); } if (gameSettings.colorScale.Length <= 4) { throw new System.Exception("You have put min 4 color to gameSettings"); } if (gameSettings.row < 5) { throw new System.Exception("You have put min 5 row to gameSettings"); } if (gameSettings.column < 5) { throw new System.Exception("You have put min 5 column to gameSettings"); } #endregion #region First Step runtimeVars.grid = new GameGrid(gameSettings.row, gameSettings.column); runtimeVars.highScore = PlayerPrefs.GetInt("HighScore", 0); runtimeVars.isGameStarted = true; runtimeVars.isPaused = false; runtimeVars.canUndo = false; runtimeVars.bombScore = 1000; runtimeVars.tempscore = 0; runtimeVars.deltaScore = 0; SetScore(0); SetMoves(0); SetUndoRight(5); UIManager.instance.ShowHideUndoButton(false); #endregion #region Creation if (!runtimeVars.selectionCenter) { runtimeVars.selectionCenter = Instantiate(generalGameVars.selectionCenterObject, Vector3.zero, Quaternion.identity).transform; } GameObject temp = Instantiate(generalGameVars.gameItemPrefab, Vector3.zero, Quaternion.identity); runtimeVars.movementMultipery = temp.transform.localScale.y * 0.71f; runtimeVars.movementMultiperx = temp.transform.localScale.x * 0.59f; Destroy(temp); Vector3 objectCenter = Camera.main.ScreenToWorldPoint(new Vector2(Screen.width / 2, Screen.height / 2)); objectCenter.y -= (runtimeVars.movementMultipery * gameSettings.row) * .5f; objectCenter.x -= (runtimeVars.movementMultiperx * gameSettings.column) * .44f; Vector3 objectpos = Vector3.zero + objectCenter; objectpos.z = 0; bool y_ofset = true; #region Create New IEnumerator creationStart() { GridItemTemp[,] colormap = new GridItemTemp[gameSettings.column, gameSettings.row]; for (int i = 0; i < gameSettings.column; i++) { y_ofset = !y_ofset; GameItem created = null; for (int j = 0; j < gameSettings.row; j++) { #region Get Object from pool and place created = ObjectCamp.instance.GetObject <GameItem>(); created.transform.position = objectpos; if (j == 0 && y_ofset) { objectpos.y -= (runtimeVars.movementMultipery) / 2; created.transform.position = objectpos; } created.FallDown(); objectpos.y += runtimeVars.movementMultipery; created.gridIndex = new Vector2(i, j); runtimeVars.grid.AddItem(created); #endregion #region Color settings List <int> ignorelist = new List <int>(); if (i > 0) { ignorelist.Add(colormap[i - 1, j].color); } created.ItemColor = Utilities.RandomintegerWithIgnore(0, gameSettings.colorScale.Length, ignorelist); #endregion colormap[i, j] = new GridItemTemp(created.ItemColor, -1, created.HaveStar); yield return(new WaitForSeconds(0.035f)); } objectpos.y = objectCenter.y; objectpos.x += runtimeVars.movementMultiperx; } runtimeVars.grid.isBusy = false; runtimeVars.lastMoves = colormap; } #endregion #region Create From Save void creationSave(SaveData saveData) { #region Getting Datas runtimeVars.bombScore = saveData.bombScore; runtimeVars.canUndo = saveData.canUndo; runtimeVars.deltaScore = saveData.deltaScore; runtimeVars.movesCount = saveData.movesCount; runtimeVars.score = saveData.score; runtimeVars.tempscore = saveData.tempscore; SetScore(saveData.score); SetMoves(saveData.movesCount); SetUndoRight(saveData.undoRight); UIManager.instance.ShowHideUndoButton(saveData.canUndo && saveData.undoRight > 0); #endregion #region Converting information GridItemTemp[,] gameitemsdata = new GridItemTemp[gameSettings.column, gameSettings.row]; runtimeVars.lastMoves = new GridItemTemp[gameSettings.column, gameSettings.row]; for (int i = 0; i < gameSettings.column; i++) { for (int j = 0; j < gameSettings.row; j++) { int index = (i * gameSettings.row) + j; gameitemsdata[i, j] = saveData.gridItemTemps[index]; if (saveData.canUndo) { runtimeVars.lastMoves[i, j] = saveData.lastMoves[index]; } } } #endregion for (int i = 0; i < gameSettings.column; i++) { GameItem created = null; y_ofset = !y_ofset; for (int j = 0; j < gameSettings.row; j++) { #region Get Object from pool and place created = ObjectCamp.instance.GetObject <GameItem>(); created.transform.position = objectpos; if (j == 0 && y_ofset) { objectpos.y -= (runtimeVars.movementMultipery) / 2; created.transform.position = objectpos; } objectpos.y += runtimeVars.movementMultipery; created.gridIndex = new Vector2(i, j); runtimeVars.grid.AddItem(created); #endregion created.ItemColor = gameitemsdata[i, j].color; created.ShowHideStar(gameitemsdata[i, j].havestar); #region Color settings created.SetBombStyle(gameitemsdata[i, j].bombcounter > -1, gameitemsdata[i, j].bombcounter); #endregion } objectpos.y = objectCenter.y; objectpos.x += runtimeVars.movementMultiperx; } runtimeVars.grid.isBusy = false; } #endregion SaveData record = SaveManager.Instance.GetLastRecord(); if (record != null) { //Deformation Control if (record.row != gameSettings.row || record.column != gameSettings.column || record.colorscale != gameSettings.colorScale.Length) { creationStart().InvokeIE(); } else { creationSave(record); } } else { creationStart().InvokeIE(); } #region Setup filling action runtimeVars.grid.ColumnFillAction = (int column) => { List <GameItem> columnItems = runtimeVars.grid.ColumnItems(column); columnItems.Sort((x, y) => x.gridIndex.y.CompareTo(y.gridIndex.y)); int reqcount = runtimeVars.grid.row - columnItems.Count; GameItem created = null; GameItem lastincolumn = null; if (columnItems.Count > 0) { lastincolumn = columnItems[columnItems.Count - 1]; } float starty = -1; Vector3 pos = objectCenter + (new Vector3(runtimeVars.movementMultiperx, 0, 0) * column); if (lastincolumn != null) { pos = lastincolumn.transform.position; starty = lastincolumn.gridIndex.y; } for (int i = 0; i < reqcount; i++) { pos.y += runtimeVars.movementMultipery; created = ObjectCamp.instance.GetObject <GameItem>(); created.transform.position = pos; created.FallDown(); created.ItemColor = Random.Range(0, gameSettings.colorScale.Length); created.gridIndex = new Vector2(column, starty + (i + 1)); if (runtimeVars.score > runtimeVars.bombScore) { runtimeVars.bombScore += 1000; created.SetBombStyle(true, Random.Range(6, 9)); } runtimeVars.grid.AddItem(created); } }; #endregion #endregion }