Ejemplo n.º 1
0
 /// <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;
     });
 }
Ejemplo n.º 2
0
    /// <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
    }